cette
Fans de Django, Django (salutations).
Nous connaissons le support de Django pour I18N et L10N. Et vous savez à quel point il est facile d'exploiter ces pouvoirs.
Spécifiez simplement * LANGUAGE_CODE * comme * USE_I18N = True * si vous avez besoin d'une traduction multilingue, * USE_L10N = True * si vous avez besoin d'une localisation de format et * TIMEZONE * comme * USE_TZ = True * si vous voulez faire correspondre le fuseau horaire. ..
Ensuite, vous pouvez créer une application globale en demandant simplement à Google Translation ou DeepL Translation de créer un fichier de traduction. Si vous créez une application à l'aide de Django, vous pouvez rapidement créer une application avec une expansion internationale à l'esprit.
Mais il y a un problème.
Si vous avez créé une application avec une expansion internationale à l'esprit et qu'elle a été utilisée par des pays japonais, américains, français et asiatiques, où devriez-vous changer les paramètres de langue?
Oui, ** settings.py **. Cependant, si vous manipulez le paramètre * LANGUAGE_CODE *, Django affichera la langue spécifiée à la fin. Si * LANGUAGE_CODE * est défini sur * ja *, Django s'affichera en japonais pour chaque personne dans chaque pays. Dans ce cas, il devient difficile de comprendre à quoi servait l'internationalisation.
Personnellement, ce n'est pas étonnant, mais la norme Django ne permet pas aux utilisateurs de modifier même les paramètres du fuseau horaire, sans parler de la langue. Cette fois, il s'agit de permettre aux utilisateurs de le modifier eux-mêmes.
Le code de base est extrait du manuel de django. Transmettez la langue que vous souhaitez utiliser à * translation.activate * et définissez la valeur dans le cookie. Désormais, vous ne pouvez changer que la langue que Django utilisera pendant cette session.
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)
Cette fois pour le modèle utilisateur
Le code de base est extrait du manuel de django. Passez le fuseau horaire que vous souhaitez utiliser à * 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)
Sur la base de ces codes, le reste consiste à personnaliser le modèle utilisateur pour fournir des champs pour les paramètres de langue et de fuseau horaire que vous pouvez modifier vous-même.
C'est pourquoi j'ai préparé django-user-g11n.
django-user-g11n
django-user-g11n prépare un modèle utilisateur personnalisé de Django, et en héritant de "TimeZoneAndUserLanguageSupportMixin", il a deux champs, * language * et * timezone *, dans le modèle utilisateur, et il est défini à l'aide du middleware. Changez dynamiquement la langue et le fuseau horaire.
À propos, g11n est une abréviation de (Globalisation) et fait référence à I18n + L10N.
Avant, si vous souhaitez essayer l'échantillon immédiatement, veuillez vous reporter à «Utilisation de l'échantillon».
Tout d'abord, installez Django et django-user-g11n.
$ pip install django django-user-g11n
Ensuite, démarrez le projet en utilisant django-admin.py.
$ django-admin.py startproject example
Ensuite, créez un modèle utilisateur personnalisé. Pour plus de commodité, le nom de l'application est * comptes *.
$ manage.py startapp accounts
Une fois que vous avez créé votre application, modifiez * accounts / models.py * pour ajouter un modèle utilisateur personnalisé. À ce moment-là, il hérite de * UserLanguageSupportMixin * et * 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
Vient ensuite la modification de * settings.py *.
Ajoutez l'application pour le modèle utilisateur personnalisé créé cette fois et user-g11n à * INSTALLED_APPS *.
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
)
Puis modifiez MIDDLEWARE pour ajouter * UserLanguageMiddleware * et * UserTimeZoneMiddleware *.
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
]
Spécifiez ensuite AUTH_USER_MODEL pour activer le modèle utilisateur personnalisé.
AUTH_USER_MODEL = 'accounts.User'
Ensuite, définissez respectivement I18N, L10N, TZ et TIME_ZONE.
USE_I18N = True
USE_L10N = True
USE_TZ = True
TIME_ZONE = "Asia/Tokyo" # Change to your local timezone
Une fois la modification terminée, effectuez la migration et créez une base de données.
$ ./manage.py makemigrations && ./manage.py migrate
C'est tout. Ensuite, créez un super-utilisateur et changez la langue et le fuseau horaire sur l'écran de gestion des utilisateurs pour changer l'affichage en temps réel.
Cette application Django est en cours de développement sur GitHub.
Faire cloner le projet
$ docker-compose up
Après cela, vous pouvez essayer l'exemple d'application en accédant à [http: // localhost: 8000](http: // localhost: 8000).
c'est tout
Recommended Posts