无法找到存储__init__.py文件翻译的区域路径。

140

我正在尝试翻译一个Django应用程序。我在模板中使用了一些带有{% trans %}的字符串。但是,当我在应用程序文件夹中执行以下命令时,我收到了一个错误消息:

$ django-admin.py makemessages -l fr 
CommandError: Unable to find a locale path to store translations for file __init__.py`

我做错了什么?

7个回答

189

原来你需要先使用 mkdir locale 命令创建一个 locale 文件夹。如果你在应用程序文件夹中运行该命令,则需要在该应用程序文件夹内创建一个 locale 文件夹。


谢谢,帮了我大忙。如果已经有了,只需从该“locale”目录执行“makemessages”命令即可。 - SaeX
6
在Django 1.9中,即使LOCALE_PATHSlocale,也需要定义它,否则编译后的文本将无法被发现。 - Wtower
1
请注意,此文件夹没有任何“s”,并且必须位于应用程序文件夹中(这样您就不必配置任何LOCALE_PATHS)。 - tobiasBora
1
这里是有关Django如何发现该目录的更多信息 - https://docs.djangoproject.com/en/3.2/topics/i18n/translation/#how-django-discovers-translations - joshlsullivan
1
你不需要cd进入应用程序目录来拥有每个应用程序的locale目录。只需确保所有包含翻译字符串的应用程序都有一个locale目录。然后,makemessages 将会找到它们。如果您想要一个项目范围的locale目录,只需在项目目录中创建即可。这些是最简单的解决方案。 - x-yuri
这毫无意义。命令说它会扫描你的所有代码。我的应用程序中有“locale”文件夹,它也会被扫描,但是却仍然给我报错... - Cerin

36

实际上,您可以配置语言环境文件夹的位置。在您的 settings.py 文件中添加如下内容:

LOCALE_PATHS = (
    PROJECT_ROOT + '/website/locale', )

然后为您想要翻译的每种语言创建一个文件夹:

mkdir -p website/locale/de

4
实际上,您不需要为每种语言创建一个文件夹。django-admin makemessages会替您完成这个工作。 - MagicLAMP
1
这很令人困惑,我们是应该为每个应用程序创建一个条目吗?还是将所有应用程序的所有语言环境存储在同一个语言环境文件夹中? - Vadorequest
自从Django 4版本以后,这个设置变量是LOCALE_PATHS = [ BASE_DIR / 'my_app' / 'locale' ] - undefined

20
问题在于该命令不是从应用程序目录而是从项目目录运行的。此文档片段对此进行了解释:
原来需要首先使用mkdir locale命令创建一个locale文件夹。
引用如下所示:

./manage.py makemessages[...] 遍历整个源代码树以当前目录为基础,提取所有标记为翻译的字符串。它会在conf/locale(Django树)或locale(项目和应用程序)目录中创建(或更新)消息文件。

因此,您可以从应用程序目录运行该命令:
$ cd app
$ django-admin makemessages -l <locale>

...或者你可以使用LOCALE_PATHS定义一个项目范围的区域设置目录,然后可以从那里运行makemessages

无论哪种方式,你都应该检查./locale/目录是否存在,并使用以下命令创建它:

$ mkdir locale

如果不是的话。


你不需要进入应用程序目录来拥有每个应用程序的“locale”目录。只需确保所有包含翻译字符串的应用程序都有一个“locale”目录。然后,makemessages 将会找到它们。 - x-yuri
默认的项目本地化目录是 locale(在项目目录中)。无论如何,您都不需要 cd,只需确保您的本地化目录存在即可。 - x-yuri
我已经指定了 LOCALE_PATHS,但是当我从项目根目录运行时仍然出现这个错误。 - Cerin
@Cerin 你的文件夹怎么样了?你也创建了吗? - jnns
是的。解决方法是我必须设置PYTHONPATH以包含我的本地项目目录,并且还要设置DJANGO_SETTINGS_MODULE指向我的设置模块。否则,即使它在我的当前工作目录中,django-admin也无法导入我的设置模块。 - Cerin

0
大家好,有一件事我注意到了。我不得不通过在应用程序文件夹中的终端发出命令mkdir locale来创建locale目录。而在PyCharm中创建时,我一直收到错误信息:

CommandError: 无法找到存储文件allauth_introducao/init.py的翻译的locale路径。请确保在应用程序或LOCALE_PATHS设置中存在'locale'目录。


0

如果您想要每个应用程序的locale目录,只需在运行makemessages之前,在每个应用程序目录中使用翻译字符串(具有翻译字符串文件)创建它们。然后django会自动查找它们,无需cd

如果您想要一个项目范围内的locale目录,请在运行makemessages之前在项目目录中创建它。


0
对我来说,我已经正确设置了LOCALE_PATHS,但是我没有设置环境变量。当我设置了环境变量后,运行python manage.py makemessages -l de,它就正常运行了。

-1
您必须在您的django-project文件夹下创建一个名为locale的文件夹,如下所示。根据我的实验,*文件夹名称必须为locale
django-project
 |-core
 |  └-settings.py
 |-app1
 |  |-models.py
 |  └-admin.py
 |-app2
 |  |-models.py
 |  └-admin.py
 └-locale # Here

然后,您可以在每个locale /<...>/LC_MESSAGES/中使用下面的命令创建django.po。 *下面的命令可以创建或更新一个或多个django.po:
django-admin makemessages --locale=en --locale=fr --locale=ja

或者:

django-admin.py makemessages -l en -l fr -l ja

然后,django.po 就会在每个 locale/<...>/LC_MESSAGES/ 中被创建,如下所示:

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

同时,您可以使用下面的命令更新locale文件夹中的所有django.po。*使用下面的命令,您只能更新django.po,不能创建django.po

django-admin makemessages --all

或者:

django-admin makemessages -a

而且,您可以使用下面的命令在每个locale/<...>/LC_MESSAGES/中编译django.podjango.mo

django-admin compilemessages

然后,django.po 在每个 locale/<...>/LC_MESSAGES/ 中被编译为 django.mo,如下所示:

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

此外,即使您按照下面的方式在coreapp1app2文件夹下创建了locale文件夹:
django-project
 |-core
 |  |-settings.py
 |  └-locale # Here
 |-app1
 |  |-models.py
 |  |-admin.py
 |  └-locale # Here
 └-app2
    |-models.py
    |-admin.py
    └-locale # Here

然后,运行以下命令:

django-admin.py makemessages -l en -l fr -l ja

然后,根据我的实验和Django如何发现翻译的相反结果,您仍将收到以下错误,因此您必须在django-project文件夹下创建locale文件夹:

CommandError:无法找到用于存储manage.py文件翻译的语言环境路径。请确保在应用程序或LOCALE_PATHS设置中存在“locale”目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接