variable template examples python django django-i18n

python - examples - django template variable



¿Cómo configurar la traducción de Django de la manera correcta? (5)

Tengo un problema con las traducciones que no funcionan en Django 1.6 !. He añadido a mi configuración.py

LANGUAGE_CODE = ''en-us'' ugettext = lambda s: s LANGUAGES = ( (''en'', ugettext(''English'')), (''de'', ugettext(''German'')), )

También se ha añadido middlewares:

MIDDLEWARE_CLASSES = ( ''django.middleware.common.CommonMiddleware'', ''django.contrib.sessions.middleware.SessionMiddleware'', ''django.middleware.csrf.CsrfViewMiddleware'', ''django.contrib.auth.middleware.AuthenticationMiddleware'', ''django.contrib.messages.middleware.MessageMiddleware'', ''django.middleware.locale.LocaleMiddleware'', ''django.middleware.clickjacking.XFrameOptionsMiddleware'', )

así como a mis archivos * .py siempre que esté usando una cadena que será l10nd:

from django.utils.translation import ugettext_lazy as _

Mis plantillas comenzando con

{% extends "base.html" %} {% load i18n %}

y dentro de la plantilla que usé el marcador de posición trans. P.ej

<h1>{% trans "Register a tank" %}</h1>

De hecho, la cadena aparece dentro de locale / de / LC_MESSAGES / django.po cuando se ejecuta también los he traducido. P.ej

msgid "Register a tank" msgstr "Einen neuen Tank anmelden"

Mi navegador está configurado para solicitar contenido alemán primero: configuración del navegador

¿Qué me perdí?

PS El proyecto en el que estoy fuzzying actualmente se encuentra en github: https://github.com/frlan/blankspot


Agregue LOCALE_PATHS a settings.py y LOCALE_PATHS como a continuación:

Tenga en cuenta que LOCALE_PATHS debe ser una tupla (mire la coma al final de la ruta)

import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) LOCALE_PATHS = ( os.path.join(BASE_DIR, ''locale''), )

Ahora basado en LOCALE_PATHS , la carpeta de locale debe estar en la raíz de su proyecto.

Y asegúrese de ejecutar django-admin.py makemessages -l de y django-admin.py compilemessages cmds desde la raíz de su proyecto.

djPrj | +---> djPrj | +---> djApp | +---> locale | +---> templates

También reorganice su MIDDLEWARE_CLASSES para que sea LocaleMiddleware después de SessionMiddleware y antes de CommonMiddleware que se menciona here :

MIDDLEWARE_CLASSES = ( ''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'', )

Reinicie su servicio ( python manage.py runserver ) y verifique nuevamente.

Solo para asegurarse de que su localización se aplique a su página de administración de django con el archivo django.mo predeterminado de django, haga la siguiente prueba:

Primero en urls.py principal del proyecto reemplazar patterns con i18n_patterns :

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

Ahora vaya a la página de Admin con el prefijo, como: http://127.0.0.1:8000/de/admin/ Y la página de Admin debe mostrar en idioma German .

Ok, ¿puedes ver la página de Admin de django en el idioma?

También revise su vista con prefijo también.

De acuerdo con su código de https://github.com/frlan/blankspot , algunas oraciones no están en bloque trans. ponerlos como

{% trans "your sentence" %}

También debe usar ugettext_lazy lugar de ugettext en su código para vistas y modelos, ( read here )

reemplace esto:

from django.utils.translation import ugettext as _

con:

from django.utils.translation import ugettext_lazy as _

Y ahora todo funcionará.


En mi caso, usé en-gb como el parámetro para ejecutar

django-admin.py makemessages -l en-gb

En su lugar, debería ser en_GB.

django-admin.py makemessages -l en_GB


Verifique las cookies y la sesión. De acuerdo con here , el proceso es el siguiente:

  1. prefijo de idioma en la URL, cuando se utiliza i18n_patterns en URLconf
  2. Clave _language en la sesión del usuario actual
  3. cookie django_language (o según lo especificado por settings.LANGUAGE_COOKIE_NAME)
  4. Aceptar el encabezado HTTP (esto es lo que envía la configuración de su navegador)
  5. settings.LANGUAGE_CODE

Dado que la configuración de su navegador está configurada para preferir ''de'', sospecho que LocaleMiddleware debe decidir lo contrario en uno de los pasos anteriores 1. - 3.


LocaleMiddleware habilitar LocaleMiddleware en su configuración, para decirle a Django que realice la detección de idioma según la configuración del navegador. Cambiar sus preferencias de idioma establece efectivamente el encabezado Accept-Language . Es posible que deba registrar una ventana de incógnito, ya que otros medios de detección de idioma tienen una prioridad más alta, como la sesión del usuario y la cookie django_language .


django.po translated string en django.po y luego use los python manage.py compilemessages

for e.g #: path/to/python/module.py:23 msgid "Welcome to my site." msgstr "put appropriate translated string here"

Sugerencia: puede usar el paquete django-rosetta para agregar una translated string desde la interfaz de la interfaz de usuario. Es fácil agregar T-string desde django-admin. https://github.com/mbi/django-rosetta