我正在尝试翻译一个Django应用程序。我在模板中使用了一些带有{% trans %}
的字符串。但是,当我在应用程序文件夹中执行以下命令时,我收到了一个错误消息:
$ django-admin.py makemessages -l fr
CommandError: Unable to find a locale path to store translations for file __init__.py`
我做错了什么?
我正在尝试翻译一个Django应用程序。我在模板中使用了一些带有{% trans %}
的字符串。但是,当我在应用程序文件夹中执行以下命令时,我收到了一个错误消息:
$ django-admin.py makemessages -l fr
CommandError: Unable to find a locale path to store translations for file __init__.py`
我做错了什么?
原来你需要先使用 mkdir locale
命令创建一个 locale
文件夹。如果你在应用程序文件夹中运行该命令,则需要在该应用程序文件夹内创建一个 locale
文件夹。
实际上,您可以配置语言环境文件夹的位置。在您的 settings.py 文件中添加如下内容:
LOCALE_PATHS = (
PROJECT_ROOT + '/website/locale', )
然后为您想要翻译的每种语言创建一个文件夹:
mkdir -p website/locale/de
LOCALE_PATHS = [ BASE_DIR / 'my_app' / 'locale' ]
。 - undefinedmkdir locale
命令创建一个locale
文件夹。./manage.py makemessages
[...] 遍历整个源代码树以当前目录为基础,提取所有标记为翻译的字符串。它会在conf/locale(Django树)或locale(项目和应用程序)目录中创建(或更新)消息文件。
$ cd app
$ django-admin makemessages -l <locale>
...或者你可以使用LOCALE_PATHS
定义一个项目范围的区域设置目录,然后可以从那里运行makemessages
。
无论哪种方式,你都应该检查./locale/
目录是否存在,并使用以下命令创建它:
$ mkdir locale
如果不是的话。
locale
(在项目目录中)。无论如何,您都不需要 cd
,只需确保您的本地化目录存在即可。 - x-yuriCommandError: 无法找到存储文件allauth_introducao/init.py的翻译的locale路径。请确保在应用程序或LOCALE_PATHS设置中存在'locale'目录。
LOCALE_PATHS
,但是我没有设置环境变量。当我设置了环境变量后,运行python manage.py makemessages -l de
,它就正常运行了。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.po
为django.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
此外,即使您按照下面的方式在core
、app1
和app2
文件夹下创建了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”目录。
LOCALE_PATHS
是locale
,也需要定义它,否则编译后的文本将无法被发现。 - WtowerLOCALE_PATHS
)。 - tobiasBoracd
进入应用程序目录来拥有每个应用程序的locale
目录。只需确保所有包含翻译字符串的应用程序都有一个locale
目录。然后,makemessages
将会找到它们。如果您想要一个项目范围的locale
目录,只需在项目目录中创建即可。这些是最简单的解决方案。 - x-yuri