2012-10-10 40 views
9

Ok He estado buscando como loco por este problema, creo que es simple.Plantilla de traducción de django {% trans "something"%}

que utilizan Django 1.4

El problema es que Django no se traducirán un simple {% trans "trabajo" %} en mi plantilla.

Esto es lo que he hecho:

Settings.py:

LANGUAGE_CODE = 'en-us' 
USE_I18N = True 
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', 
    # Uncomment the next line for simple clickjacking protection: 
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 
TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth", 
    "django.core.context_processors.debug", 
    "django.core.context_processors.i18n", 
    "django.core.context_processors.media", 
    "django.core.context_processors.static", 
    "django.core.context_processors.request", 
) 

LOCALE_PATHS = (
    '/home/m00p/PycharmProjects/astrid/locale' 
) 

esta es mi estructura del mapa:

/ 
myproject/ 
apps/ 
locale/ 
template/ 

Así que Runned

django- admin.py makemessages -l nl -i settings.py

y lo hizo con éxito crea en la carpeta local nl/LC_MESSAGES/django.po, que luego editar la traducción se encuentra en el django.po

#: templates/base.html:22 
msgid "work" 
msgstr "ddddddddddddd" 

I A continuación, ejecute el comando de compilación

compilemessages django-admin.py

y también crea un archivo con éxito django.mo en el pliegue correcto er

he añadido esto también en el miproyecto/urls.py

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

urlpatterns += i18n_patterns('', 
    url(r'^$', 'front.views.home', name='home'), 
) 

he añadido esto en el archivo base.html para poder cambiar el idioma

<form action="/i18n/setlang/" method="post"> 
    {% csrf_token %} 
    <input name="next" type="hidden" value="/" /> 
    <select name="language"> 
     {% get_language_info_list for LANGUAGES as languages %} 
     {% for language in languages %} 
      <option value="{{ language.code }}">{{ language.name_local }} ({{ language.code }})</option> 
     {% endfor %} 
    </select> 
    <input type="submit" value="Go" /> 
</form> 

Así que cuando voy en el sitio web obtengo 127.0.0.1:8000/en/ en la url, esto es correcto porque englisch es el idioma predeterminado, cuando luego lo cambio con el formulario a NL, redirige a 127.0.0.1:8000/nl/ pero el texto que traduje no cambió. También estoy seguro de que el idioma es NL porque cuando muestro {{LANGUAGE_CODE}} dice NL.

¿Alguien sabe por qué no cambia?

Gracias m00p

problema resuelto

Durante el proceso cuando estaba añadiendo cosas que me olvidé de que funcione, he reiniciado mi servidor de implementación, pero no borran la memoria caché de mi El navegador todavía usaba las páginas anteriores, por lo que cuando borré los datos de mi navegador en Chrome revisé la página y cambié el idioma que tradujo correctamente. Gracias por las sugerencias de todos modos!

+0

también estoy usando este concepto de lenguaje múltiple e hice exactamente lo que has hecho, pero en mi archivo django.po no contiene mis líneas de archivo de plantillas que puedo editar, p. como su archivo .po contiene '#: templates/base.html: 22 msgid" work "' .... PERO en lugar de eso contiene todos los archivos ** dentro de site-packages/django ** (i.ie, parte de administrador) No quiero editar estos archivos de administrador pero edito para ver si la traducción del clima funciona o no, pero tampoco funciona para esta parte de administrador ............... ....así que mi problema principal es cómo mostrar los datos de mi plantilla que puedo editar – Inforian

+1

Ya he especificado '{% load i18n%} {% trans" Hello "%}' dentro de mi plantilla para que el archivo .po lo seleccione y puedo agregar datos traducidos en el archivo .po ............ pero aun así no selecciona estas plantillas dentro del archivo .po ..... ??? – Inforian

Respuesta

5

En Django 1.4 ya no se admite el directorio de la configuración regional en la raíz del proyecto. Debe agregarlo a la configuración LOCALE_PATHS, que está vacía de forma predeterminada. Django Settings.

Sin embargo, los comandos de administración involucrados en la generación de la configuración regional parecen funcionar, por lo que no sé si ya lo hizo.

+0

Lo hice pero nada cambió :( – m00p

12

yo pasamos unas horas tratando de solucionar este problema en Django 1.5 mientras trabajaba en mi nuevo proyecto Sportolio y resultó que me faltaba una coma al final de LOCALE_PATH

LOCALE_PATHS = (
    '/path/to/my/project/locale/', 
) 

Esto es muy crucial, ya que Django espera que LOCALE_PATHS sea un TUPLE no una Cadena.

espero que salvar la vida de alguien :)

+2

+1 para la explicación relacionada con la coma! –

0

que tenía la misma situación. Parte de las frases eran traducción, pero la mayoría solo mostraba la clave. Tenemos dos idiomas principales en y fa. Ambos tenían el mismo problema. Revisé todos los mismos problemas y cada documento en línea sobre las traducciones de django. Puedo decir que intenté casi todo. La única diferencia era que estábamos probando en el servidor de producción. ¡Y no recargué el servidor! Así que este comando de una línea me sacaron de mi miseria:

sudo /etc/init.d/uwsgi reload 

lo que estaba haciendo mal era Recomencé wsgi en lugar de uwsgi!

Si te gusta hacer lo que hice, aquí está: hago los pasos en el orden en el servidor:

django-admin makemessages -l en 
django-admin makemessages -l fa 

agregar frases persa y un poco de texto Inglés para probar.

django-admin compilemessages 
python manage.py clear_cache 
python manage.py runserver 

El servidor se ejecuta sin errores. Pero no ocurren los cambios en en o fa. Parece que django se está cargando desde el viejo caché. Entonces, eliminé todo el caché, e incluso borré todos los archivos del servidor e instalé todo el proyecto nuevamente. Sin embargo, el mismo problema.

Hice mensajes de mi django en mi computadora portátil y los envié al servidor. Además, probé diferentes editores de texto y herramientas de traducción como poedit para generar archivos po y mo. Sin embargo, el problema sigue mostrándose.

he usado y sustituido etiquetas trans para ver si funciona en ninguna de ellas:

{% trans ' ' %} 
{% trans " " %} 
{% blocktrans %} {% endblocktrans %} 
{% trans "xyz" az XYZ %} {{ XYZ }} 
{{ _() }} 

ninguno de ellos funcionó!

Pero volver a cargar el servidor pone todo en orden. Espero que pueda ser útil para alguien.

Cuestiones relacionadas