No se puede encontrar una ruta de configuración regional para almacenar las traducciones del archivo __init__.py

5 minutos de lectura

Avatar de usuario de Antoine M.
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?

Avatar de usuario de Antoine M.
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 eso locale directorio si ya está disponible.

    – SaeX

    11/11/2015 a las 15:33

  • En Django 1.9 necesitas definir LOCALE_PATHS incluso si es locale 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ón locale directorios Solo asegúrese de que todas sus aplicaciones con cadenas de traducción tengan un locale dirección Entonces makemessages encontrará a ellos. Si desea un proyecto completo locale 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ón locale directorios Solo asegúrese de que todas sus aplicaciones con cadenas de traducción tengan un locale dirección Entonces makemessages 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 necesario cdsolo 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.

¿Ha sido útil esta solución?