Dies
Django-Fans, Django (Grüße).
Wir sind mit Djangos Unterstützung für I18N und L10N vertraut. Und Sie wissen, dass es sehr einfach ist, diese Kräfte zu nutzen.
Geben Sie einfach * LANGUAGE_CODE * als * USE_I18N = True * an, wenn Sie eine mehrsprachige Übersetzung benötigen, * USE_L10N = True *, wenn Sie eine Formatlokalisierung benötigen, und * TIMEZONE * als * USE_TZ = True *, wenn Sie der Zeitzone entsprechen möchten. ..
Anschließend können Sie eine globale Anwendung erstellen, indem Sie Google Translation oder DeepL Translation auffordern, eine Übersetzungsdatei zu erstellen. Wenn Sie eine Anwendung mit Django erstellen, können Sie schnell eine Anwendung mit Blick auf die internationale Expansion erstellen.
Aber es gibt ein Problem.
Wenn Sie eine App mit Blick auf die internationale Expansion erstellt haben und diese von Japanern, Amerikanern, Franzosen und asiatischen Ländern verwendet wurde, wo sollten Sie die Spracheinstellungen ändern?
Ja, ** settings.py **. Wenn Sie jedoch mit der Einstellung * LANGUAGE_CODE * herumspielen, wird Django am Ende in der angegebenen Sprache ausgegeben. Wenn * LANGUAGE_CODE * auf * ja * gesetzt ist, wird Django für jede Person in jedem Land auf Japanisch angezeigt. In diesem Fall wird es schwierig zu verstehen, wofür die Internationalisierung war.
Persönlich ist dies kein Wunder, aber der Django-Standard erlaubt es Benutzern nicht, selbst Zeitzoneneinstellungen zu ändern, geschweige denn Sprache. Dieses Mal geht es darum, Benutzern zu erlauben, es selbst zu ändern.
Der Basiscode lautet Auszug aus dem Handbuch von django. Übergeben Sie die Sprache, die Sie verwenden möchten, an * translation.activate * und legen Sie den Wert im Cookie fest. Sie können jetzt nur die Sprache wechseln, die Django während dieser Sitzung verwendet.
from django.conf import settings
from django.http import HttpResponse
from django.utils import translation
user_language = 'fr'
translation.activate(user_language)
response = HttpResponse(...)
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, user_language)
Diesmal für das Benutzermodell
Der Basiscode lautet Auszug aus dem Handbuch von django. Übergeben Sie die Zeitzone, die Sie verwenden möchten, an * timezone.activate *.
import pytz
from django.utils import timezone
class TimezoneMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
tzname = request.session.get('django_timezone')
if tzname:
timezone.activate(pytz.timezone(tzname))
else:
timezone.deactivate()
return self.get_response(request)
Basierend auf diesen Codes besteht der Rest darin, das Benutzermodell so anzupassen, dass Felder für Sprach- und Zeitzoneneinstellungen bereitgestellt werden, die Sie selbst ändern können.
Deshalb habe ich [django-user-g11n] vorbereitet (https://pypi.org/project/django-user-g11n/).
django-user-g11n
django-user-g11n erstellt ein benutzerdefiniertes Benutzermodell von Django. Durch das Erben von "TimeZoneAndUserLanguageSupportMixin" enthält das Benutzermodell zwei Felder, * language * und * timezone *, und wird mithilfe von Middleware festgelegt. Ändern Sie dynamisch die Sprache und die Zeitzone.
G11n ist übrigens eine Abkürzung für (Globalization) und bezieht sich auf I18n + L10N.
Wenn Sie das Beispiel sofort ausprobieren möchten, lesen Sie bitte "Verwenden des Beispiels".
Installieren Sie zuerst Django und django-user-g11n.
$ pip install django django-user-g11n
Starten Sie dann das Projekt mit django-admin.py.
$ django-admin.py startproject example
Erstellen Sie als Nächstes ein benutzerdefiniertes Benutzermodell. Der Einfachheit halber lautet der Anwendungsname * Konten *.
$ manage.py startapp accounts
Nachdem Sie Ihre App erstellt haben, ändern Sie * accounts / models.py *, um ein benutzerdefiniertes Benutzermodell hinzuzufügen. Zu diesem Zeitpunkt erbt es * UserLanguageSupportMixin * und * UserTimeZoneSupportMixin *.
from django.contrib.auth import models as auth_models
from user_g11n.models import UserLanguageSupportMixin, UserTimeZoneSupportMixin
class User(UserTimeZoneSupportMixin,
UserLanguageSupportMixin,
auth_models.AbstractUser):
pass
Als nächstes folgt die Änderung von * settings.py *.
Fügen Sie die App für das diesmal erstellte benutzerdefinierte Benutzermodell und user-g11n zu * INSTALLED_APPS * hinzu.
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
.
.
.
'accounts', # Your Custom user model application
'user_g11n', # Add
)
Ändern Sie dann MIDDLEWARE, um * UserLanguageMiddleware * und * UserTimeZoneMiddleware * hinzuzufügen.
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
.
.
.
'user_g11n.middleware.UserLanguageMiddleware', # Add
'user_g11n.middleware.UserTimeZoneMiddleware', # Add
]
Geben Sie dann AUTH_USER_MODEL an, um das benutzerdefinierte Benutzermodell zu aktivieren.
AUTH_USER_MODEL = 'accounts.User'
Als nächstes setzen Sie I18N, L10N, TZ bzw. TIME_ZONE.
USE_I18N = True
USE_L10N = True
USE_TZ = True
TIME_ZONE = "Asia/Tokyo" # Change to your local timezone
Wenn die Änderung abgeschlossen ist, führen Sie die Migration durch und erstellen Sie eine Datenbank.
$ ./manage.py makemigrations && ./manage.py migrate
Das ist es. Erstellen Sie anschließend einen Superuser und ändern Sie die Sprache und Zeitzone auf dem Benutzerverwaltungsbildschirm, um die Anzeige in Echtzeit zu wechseln.
Diese Django-App wird [auf GitHub] entwickelt (https://github.com/salexkidd/django-user-g11n/).
Lassen Sie das Projekt klonen
$ docker-compose up
Danach können Sie die Beispiel-App ausprobieren, indem Sie auf [http: // localhost: 8000](http: // localhost: 8000) zugreifen.
das ist alles
Recommended Posts