2011-08-14 18 views
7

Estoy tratando de ejecutar la localización del lenguaje Django en un proyecto, pero makemessages siempre ignora las plantillas html en mi carpeta de plantillas.¿Por qué los makemessages funcionan para la localización del lenguaje Django ignoran los archivos html?

Estoy ejecutando python manage.py makemessages -a desde la raíz del proyecto, y todas las cadenas que están marcadas para la traducción dentro de archivos .py en cualquier parte del proyecto se agregan correctamente al archivo .po.

Cualquiera de las cadenas en las plantillas html, es decir, {{ trans "String_to_translate" }} se ignoran y no se agregan al archivo .po aunque el módulo necesario se cargue en la parte superior de la plantilla, {% load i18n %}.

Para probar la posibilidad de que toda la carpeta de plantillas fuera excluida de la función makemessages, hice un archivo .py e incluí una cadena para traducir allí, y se agregó con éxito al archivo .po.

Con todo esto dicho, ¿alguien sabe lo que podría estar causando este problema? ¡Gracias de antemano por su ayuda!

EDIT: Solución compuesto únicamente de cambiar la sintaxis de {{ trans "string" }} a {% trans "string" %}

Respuesta

3

La carpeta templates o bien tiene que estar en una aplicación que ha sido incluido en INSTALLED_APPS o en un directorio que ha sido incluido en TEMPLATE_DIRS - en su settings.py file

+0

Ambas cosas ya están configuradas, y la aplicación funciona correctamente con plantillas, excepto la funcionalidad de crear mensajes en las plantillas. – dlmccoy

+1

Digamos que su aplicación django se llama 'app', ¿hay un directorio llamado' templates'? Este archivo '.py' que creó, ¿dónde estaba? ¿Camino? ¿Cómo te refieres en el código? ¿Puedes pegar las configuraciones 'INSTALLED_APPS' y' TEMPLATE_DIRS' aquí? –

+0

Dentro de myproject/app, existe un directorio de plantillas, y las plantillas se encuentran con éxito desde el interior de las vistas que necesitan plantillas. Makemessages encuentra cadenas para traducir dentro de la normal views.py, como ugettext ("String_to_translate"). También creé example.py dentro de la carpeta de plantillas para comprobar si makemessages alguna vez miraba dentro de esa carpeta por algo, y encontró ugettext ("Otra cadena") dentro de eso. TEMPLATE_DIRS = ('/ home/dlmccoy/webapps/projectname/myproject/app/templates',), INSTALLED_APPS = ( 'myproject.app', ) – dlmccoy

4

Intente crear un enlace simbólico para su carpeta templates en su carpeta app. A continuación, llame makemessages de su carpeta de aplicación con el interruptor de enlace simbólico django-admin.py makemessages --all --symlinks

cd /myproject 
ln -s /myproject/templates /myproject/myapp/templates  
cd /myproject/myapp 
django-admin.py makemessages --all --symlinks 

makemessages ignora TEMPLATE_DIRS y INSTALLED_APPS. El directorio de plantillas debe estar dentro de la carpeta de la aplicación y se debe llamar al makemessages desde la carpeta de la aplicación.

Cuestiones relacionadas