archivo de idioma no se carga automáticamente en Django

Estoy usando python3 y Django 1.10 para mi aplicación, y soy algo nuevo en Django. Estoy planeando tener muchos idiomas para el panel de administración de Django. Mientras sigo las reglas en la documentación de Django, descubro que tengo que usar un middleware para la localización … Aquí están mis configuraciones:

MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale'), ) LANGUAGE_CODE = 'en' ugettext = lambda s: s LANGUAGES = ( ('fa', ugettext('Farsi')), ('en', ugettext('English')), ) 

Cuando voy a admin mylocal/en/admin o mylocal/fa/admin el idioma de la aplicación cambió perfectamente. Pero mi archivo de idioma ( .po ) siempre busca en LANGUAGE_CODE . cuando establezco LANGUAGE_CODE='fa' cambiará a farsi. no automáticamente
Ahora solo quiero que mis archivos de idioma se carguen utilizando las URL /en/ o /fa/ .

Aquí está mi archivo urls.py si necesita revisar.

 urlpatterns = i18n_patterns( url(r'^admin/', admin.site.urls), ) 

Tengo una configuración de trabajo similar, la principal diferencia parece ser que estoy usando ugettext_lazy . Esto se debe a que necesito traducir estas cadenas en mis modelos o configuraciones cuando se accedió a ellas, en lugar de cuando se llamaron (lo que ocurriría solo una vez: solo se evaluarían en el inicio del servidor y no reconocerían ningún cambio adicional; por ejemplo, cambiar la configuración). Lenguaje de administrador Django).

Referencia: https://docs.djangoproject.com/en/1.10/topics/i18n/translation/#lazy-translation

Eso es lo que uso (en este caso especial, alemán es el idioma predeterminado y estoy traduciendo al inglés):

proyecto / urls.py

 from django.conf.urls.i18n import i18n_patterns urlpatterns = i18n_patterns( url(r'^admin/', admin.site.urls), ) 

proyecto / settings.py

 from django.utils.translation import ugettext_lazy as _ MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] LANGUAGE_CODE = 'de-de' USE_I18N = True USE_L10N = True LANGUAGES = [ ('de', _('German')), ('en', _('English')), ] LOCALE_PATHS = [ os.path.join(BASE_DIR, 'locale'), ] 

app / models.py

 from django.utils.translation import ugettext_lazy as _ class Kindergarten(models.Model): stadt = models.CharField(verbose_name=_(Stadt)) class Meta: verbose_name = _('Kindergarten') verbose_name_plural = _('Kindergärten') 

Flujo de trabajo

 $ python manage.py makemessages --locale en ... edit project/locale/en/LC_MESSAGES/django.po ... $ python manage.py compilemessages 

Ahora puedo acceder a mi traductor Django admin (interfaz + modelos) a través de:

Notas

  • Pyhton 3.5.2
  • Django 1.10.2