antonio m
Estoy tratando de traducir una aplicación de Django. Creé algunas cadenas con {% trans %}
en mis plantillas. Sin embargo, cuando ejecuto el siguiente comando en la carpeta de mi aplicación, recibo un mensaje de error:
$ django-admin.py makemessages -l fr
CommandError: Unable to find a locale path to store translations for file __init__.py`
¿Qué hice mal?
antonio m
Resulta que necesitas crear un locale
carpeta primero usando mkdir locale
. Si está ejecutando el comando desde dentro de una carpeta de aplicaciones, necesita un locale
carpeta dentro de esa carpeta de la aplicación.
-
Gracias, me ayudó. Solo ejecuta el
makemessages
comando de esolocale
directorio si ya está disponible.– SaeX
11/11/2015 a las 15:33
-
En Django 1.9 necesitas definir
LOCALE_PATHS
incluso si eslocale
de lo contrario, el texto compilado no será detectable.– Torre
14 de diciembre de 2015 a las 14:07
-
Tenga en cuenta que esta carpeta no no tiene ninguna ‘s’, y que debe estar en la carpeta de la aplicación (de esa manera no tiene ninguna
LOCALE_PATHS
para configurar)– tobias bora
14 mayo 2019 a las 15:18
-
Aquí hay más información sobre cómo Django descubre ese directorio: docs.djangoproject.com/en/3.2/topics/i18n/translation/…
– joshlsullivan
3 sep 2021 a las 21:44
-
no necesitas
cd
en un directorio de aplicación para tener por aplicaciónlocale
directorios Solo asegúrese de que todas sus aplicaciones con cadenas de traducción tengan unlocale
dirección Entoncesmakemessages
encontrará a ellos. Si desea un proyecto completolocale
dir, simplemente créelo en el directorio del proyecto. Estas son las soluciones más simples.– x-yuri
6 de diciembre de 2022 a las 6:41
En realidad, puede configurar dónde está la carpeta local. En su configuración.py agregue:
LOCALE_PATHS = (
PROJECT_ROOT + '/website/locale', )
Luego crea una carpeta para cada uno de los idiomas que quieras traducir:
mkdir -p website/locale/de
-
en realidad no necesita crear una carpeta para cada uno de los idiomas. django-admin makemessages hará esto por ti
– Lampara magica
13 de noviembre de 2015 a las 5:38
-
Esto es confuso, ¿se supone que debemos crear una entrada para cada aplicación? ¿O almacenar todas las configuraciones regionales para todas las aplicaciones en la misma carpeta de configuraciones regionales?
– Solicitud de vado
21 de mayo de 2018 a las 11:44
El problema es que el comando no se ejecuta desde el directorio de la aplicación sino desde el directorio del proyecto. Este fragmento de los documentos lo explica:
Resulta que necesitas crear un locale
carpeta primero usando mkdir locale
.
./manage.py makemessages
[…] Se ejecuta en todo el árbol de fuentes del directorio actual y extrae todas las cadenas marcadas para traducción. Crea (o actualiza) un archivo de mensajes en el directorio conf/locale (en el árbol Django) o locale (para proyecto y aplicación).
Entonces, ejecuta el comando desde el directorio de la aplicación:
$ cd app
$ django-admin makemessages -l <locale>
… o define un directorio local de todo el proyecto usando LOCALE_PATHS
y puedes correr makemessages
desde el directorio principal a partir de ahí.
De cualquier manera, debe verificar que el ./locale/
directorio está presente y créelo usando
$ mkdir locale
en caso de que no lo sea.
-
no necesitas
cd
en un directorio de aplicación para tener por aplicaciónlocale
directorios Solo asegúrese de que todas sus aplicaciones con cadenas de traducción tengan unlocale
dirección Entoncesmakemessages
encontrará a ellos.– x-yuri
6 de diciembre de 2022 a las 6:31
-
Y el directorio de configuración regional predeterminado para todo el proyecto es
locale
(en el directorio del proyecto). En cualquier caso, no es necesariocd
solo asegúrese de que existan los directorios de configuración regional.– x-yuri
6 de diciembre de 2022 a las 6:43
Si quieres por aplicación locale
directorios, simplemente créelos en cada directorio de aplicación con cadenas de traducción (que tiene archivos con cadenas de traducción) antes de ejecutar makemessages
. Y django
encontrará a ellos. No hay necesidad de cd
.
Si desea uno para todo el proyecto locale
dir, créelo en el directorio del proyecto antes de ejecutarlo makemessages
.
para mi, tenia LOCALE_PATHS
configurado correctamente, pero no tenía configuradas las variables de entorno. Cuando configuré las variables de entorno, ejecuté python manage.py makemessages -l de
y funcionó correctamente.
Usted debe crear locale
carpeta justo debajo de su django-project
carpeta como se muestra a continuación. *El nombre de la carpeta debe ser locale
según mis experimentos:
django-project
|-core
| └-settings.py
|-app1
| |-models.py
| └-admin.py
|-app2
| |-models.py
| └-admin.py
└-locale # Here
Entonces, puedes crear django.po
en cada locale/<...>/LC_MESSAGES/
con El comando abajo. *El siguiente comando puede crear o actualizar uno o más django.po
:
django-admin makemessages --locale=en --locale=fr --locale=ja
O:
django-admin.py makemessages -l en -l fr -l ja
Entonces, django.po
se crea en cada locale/<...>/LC_MESSAGES/
Como se muestra abajo:
django-project
|-core
| └-settings.py
|-app1
| |-models.py
| └-admin.py
|-app2
| |-models.py
| └-admin.py
└-locale
|-en
| └-LC_MESSAGES
| └-django.po # Here
|-fr
| └-LC_MESSAGES
| └-django.po # Here
└-ja
└-LC_MESSAGES
└-django.po # Here
Y puede actualizar todos django.po
en locale
carpeta con El comando abajo. *Con el siguiente comando, solo puede actualizar django.po
pero no puedo crear django.po
:
django-admin makemessages --all
O:
django-admin makemessages -a
Y puedes compilar django.po
a django.mo
en cada locale/<...>/LC_MESSAGES/
con El comando abajo:
django-admin compilemessages
Entonces, django.po
se compila para django.mo
en cada locale/<...>/LC_MESSAGES/
Como se muestra abajo:
django-project
|-core
| └-settings.py
|-app1
| |-models.py
| └-admin.py
|-app2
| |-models.py
| └-admin.py
└-locale
|-en
| └-LC_MESSAGES
| |-django.po
| └-django.mo # Here
|-fr
| └-LC_MESSAGES
| |-django.po
| └-django.mo # Here
└-ja
└-LC_MESSAGES
|-django.po
└-django.mo # Here
Además, incluso si crea locale
carpeta justo debajo core
, app1
y app2
carpetas como se muestra a continuación:
django-project
|-core
| |-settings.py
| └-locale # Here
|-app1
| |-models.py
| |-admin.py
| └-locale # Here
└-app2
|-models.py
|-admin.py
└-locale # Here
Luego, ejecute el siguiente comando:
django-admin.py makemessages -l en -l fr -l ja
Entonces, seguirá recibiendo el siguiente error de acuerdo con mis experimentos y opuesto a Cómo descubre Django las traducciones entonces debes crear locale
carpeta justo debajo de su django-project
carpeta:
CommandError: no se puede encontrar una ruta de configuración regional para almacenar las traducciones para el archivo manage.py. Asegúrese de que exista el directorio ‘locale’ en una aplicación o que esté establecida la configuración LOCALE_PATHS.