you tag register forget did django internationalization translation

tag - django-¿cómo hacer que la traducción funcione?



did you forget to register or load this tag (9)

Esta es una solución completa que he estado usando de Django 1.4 y aún en 1.7.1:

En settings.py ...

Agregar a MIDDLEWEAR_CLASSES, configuración regional, habilita la selección de idioma según la solicitud:

''django.middleware.locale.LocaleMiddleware'',

Agregue LOCALE_PATHS, aquí es donde se almacenarán sus archivos de traducción:

LOCALE_PATHS = ( os.path.join(PROJECT_PATH, ''locale/''), )

Habilita I18N:

USE_I18N = True

Establezca IDIOMAS en los que traducirá el sitio a:

ugettext = lambda s: s LANGUAGES = ( (''en'', ugettext(''English'')), (''fr'', ugettext(''French'')), (''pl'', ugettext(''Polish'')), )

Agregue el procesador de contexto de plantilla i18n a TEMPLATE_CONTEXT_PROCESSORS, las solicitudes ahora incluirán LANGUAGES y LANGUAGE_CODE:

''django.core.context_processors.i18n'',

En urls.py:

En url_patterns, agregue lo siguiente, habilitará la vista de redirección de idioma establecida:

url(r''^i18n/'', include(''django.conf.urls.i18n'')),

Vea Misceláneo en Translations para más sobre esto.

Agregue las siguientes importaciones y encapsule las URL que quiere traducir con i18n_patterns. Así es como se ve el mío:

from django.conf.urls.i18n import i18n_patterns from django.utils.translation import ugettext_lazy as _ urlpatterns = patterns('''', url(r''^admin/'', include(admin.site.urls)), url(r''^i18n/'', include(''django.conf.urls.i18n'')), ) urlpatterns += i18n_patterns('''', (_(r''^dual-lang/''), include(''duallang.urls'')), (r''^'', include(''home.urls'')), )

Ahora, en cualquier lugar que use texto y desee convertirlo, importe lazytext y envuelva cada cadena con él así (_ '''' texto ''), incluso puede ir a sus otros archivos urls.py y hacer la traducción de url así:

url(_(r''^dual_language/$''), landing, name=''duallang_landing''),

Puede ajustar el texto que desee traducir en sus otros archivos, como models.py, views.py, etc. Aquí hay un ejemplo de campo de modelo con traducciones para label y help_text:

name = models.CharField(_(''name''), max_length=255, unique=True, help_text=_("Name of the FAQ Topic"))

En tus plantillas html ...

Haga lo mismo con sus plantillas y cargue el i18n templatetag y use trans y transblock en las cosas estáticas que desea traducir. Aquí hay un ejemplo:

{% load i18n %} {% trans "This is a translation" %}<br><br> {% blocktrans with book_t=''book title''|title author_t=''an author''|title %} This is {{ book_t }} by {{ author_t }}. Block trans is powerful! {% endblocktrans %}

Ahora ejecute makemessages para cada una de sus configuraciones regionales:

./manage.py makemessages -l pl

Y ahora todo lo que queda es ir a su carpeta / locales y editar cada uno de los archivos .po. Complete los datos para cada msgstr. Aquí hay un ejemplo de eso:

msgid "English" msgstr "Angielski"

Y finalmente compila los mensajes:

./manage.py compilemessages

Para la conversión de datos de instancia de modelo, puede utilizar algunos de los paquetes reutilizables disponibles como

Hay mucho más que aprender con la traducción y la internationalization está estrechamente relacionada con este tema, así que consulte la documentación también. También recomiendo revisar algunos de los paquetes de internacionalización disponibles para Django como django-rosetta y django-linguo . Ayudan a traducir el contenido del modelo, django-rosetta no crea nuevas entradas para esto en su base de datos, mientras que django-linguo sí lo hace.

Si sigues esto deberías tener un buen comienzo. Creo que esta es la forma más estandarizada de hacer que su sitio se ejecute en varios idiomas. ¡Aclamaciones!

Estoy tratando de renderizar una plantilla en un idioma diferente usando i18n. Hice todo lo que pude leer, desde configurar el código de idioma, crear y compilar archivos de traducción, incluidas las etiquetas de traducción en la plantilla y todo eso, y mi plantilla aún se representa en inglés, incluso a través de la {{LANGUAGE_CODE}} variable apunta a el código correcto (y diferente) que pretendía representar. ¿Qué me estoy perdiendo?

modelo:

{% extends "base.html" %} {% load i18n %} {% get_current_language as LANGUAGE_CODE %} {% get_available_languages as LANGUAGES %} {% get_current_language_bidi as LANGUAGE_BIDI %} {% block title %}{% trans "translation test" %}{% endblock %} {% block content %} <div id="some-text"> {% trans "some translated text goes here" %} {% blocktrans %} <ol> <li>here are some</li> <li>items that should be</li> <li>translated as well</li> </ol> {% endblocktrans %} <ul> <li>The current language is <b>{{ LANGUAGE_CODE }}</b></li> {% if LANGUAGE_BIDI %} <li>The current language is bidirectional</li> {% else %} <li>The current language is <b>not</b> bidirectional</li> {% endif %} <li>Available languages are: <ul> {% for lang in LANGUAGES %} <li>{{ lang.1}}</li> {% endfor %} </ul> </li> </ul> </div> {% endblock %}

ver:

from django.shortcuts import render_to_response from django.template import RequestContext from pdb import set_trace as debugger def check(request): return render_to_response(''index.html'', context_instance=RequestContext(request)

línea de comando (completé las traducciones correctas en archivos .po):

$ django-admin.py makemessages -l he-il -e html $ django-admin.py compilemessages

settings.py:

# Language code for this installation. All choices can be found here: # http://www.i18nguy.com/unicode/language-identifiers.html LANGUAGE_CODE = ''he-il'' gettext = lambda s: s LANGUAGES = ( (''he-il'', gettext(''Hebrew'')), (''en-us'', gettext(''English'')), ) # If you set this to False, Django will make some optimizations so as not # to load the internationalization machinery. USE_I18N = True TEMPLATE_CONTEXT_PROCESSORS = ( "django.core.context_processors.auth", "django.core.context_processors.i18n", ) MIDDLEWARE_CLASSES = ( ''django.middleware.common.CommonMiddleware'', ''django.contrib.sessions.middleware.SessionMiddleware'', ''django.middleware.locale.LocaleMiddleware'', ''django.contrib.auth.middleware.AuthenticationMiddleware'', )


La forma en que lo hice es mediante el uso del código de idioma exacto que django usa en sus propios archivos de traducción (y no mediante el enlace provisto en settings.py), asumiendo que este lenguaje sea compatible (si no las cosas se complican, ya que tiene que proporcione sus propios archivos de traducción a django también).

Encontré este código yendo a $ DJANGO_DIR / conf / locale y mirando el nombre de la carpeta (para mí fue en /usr/local/lib/python2.6/dist-packages/django/conf/locale, pero puede ser diferente dependiendo del sistema operativo y tal).


Puedo estar equivocado, ya que la única vez que utilicé material de traducción fue en un proyecto de prueba hace muchas lunas, pero creo que no quieres esto:

$ django-admin.py makemessages -l he-il -e html

Pero más bien esto:

$ django-admin.py makemessages -l he_il -e html

Note el subrayado en he_il .

También estaba teniendo problemas con pt-BR, hasta que hice el archivo de mensajes con pt_br en su lugar. Entonces las cosas comenzaron a funcionar ...

Sí, no es obvio y no pude encontrar documentación sobre eso en ninguna parte.

Espero que ayude.


Sí, necesitas crear archivos de mensajes como sugiere Celopes y compilarlos

python manage.py compilemessages

Pero aún tendrás un problema.

Deshabilite LocaleMiddleware por un momento, es decir, elimine esto

django.middleware.locale.LocaleMiddleware

de tu lista de middleware. No lo use si no necesita cambiar el idioma en el tiempo de ejecución, pero si lo necesita, entonces hay una solution . Tuve el mismo problema antes y alguien me explicó esto.

También tuve este extraño problema antes. El comando Makemessages se ahogaría en cadenas envueltas con barra invertida en archivos .py.


Solo agregue las rutas de los archivos de configuración regional generados al archivo settings.py como se muestra a continuación

LOCALE_PATHS = ( "/xxx/xxx/Projects/xxx/sites/avb/locale/",)


Tengo el mismo problema. Pero lo resuelvo poniendo "Idioma:" en el archivo .po. En mi caso, el archivo .po no contiene el atributo "Idioma:", parece que ...

"Language-Team: LANGUAGE /n" "Language: /n" "MIME-Version: 1.0/n"

pero cuando coloco el código de idioma (en mi caso ''ru'' o ''en'')

"Language-Team: LANGUAGE /n" "Language: ru/n" "MIME-Version: 1.0/n"

esto funciona para mi


Tuve el mismo problema, intenté cambiar mi idioma y Django dijo que no. Sin error, sin advertencia, pero django cambió el idioma a pl-pl (en mi caso). Sin embargo, eliminando todas las carpetas de la configuración regional y ejecutando el comando: django-admin.py makemessages -l pl_PL (subrayar en lugar de guión y mayúscula para el segundo PL, resolvió este problema).

Espero que ayude a algunos chicos por ahí.


Tuve el mismo problema. Lo expliqué con detalles en este enlace bajo otra pregunta similar .

Brevemente, mi problema se resolvió recargando el servidor con este código:

sudo /etc/init.d/uwsgi reload

Ahora, cada vez que cambio las frases y después de compilar los archivos de idioma, recargo el servidor también para ver los cambios.


Tuve los mismos problemas, parece que la ruta de tu locale tiene que terminar con una barra :

LOCALE_PATHS = ( ''/dir/to/my/locale/'', )