我正在尝试覆盖Django管理网站的默认翻译。
我正在使用Django 1.6。我的settings.py包含:
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# ...
LANGUAGE_CODE = 'nl'
USE_I18N = True
USE_L10N = True
LOCALE_PATHS = (os.path.join(BASE_DIR, "locale"),)
我已将文件django/contrib/admin/locale/nl/LC_MESSAGES/django.po
复制到my_project/locale/nl/LC_MESSAGES/django.po
,我对其进行了一些更改。
接下来,我运行了python manage.py compilemessages
和python manage.py runserver
。
但是,当我访问localhost:8000/admin
时,我仍然看到Django的默认管理员翻译。我做错了什么?
编辑 - 我发现了问题:
以上说明是覆盖应用翻译的正确方法。我遵循自己的指示,他们工作。我的问题的原因是我第一次意外省略了nl
子目录。我是一个愚蠢的人。
答案 0 :(得分:6)
即使@hedgie大多回答了他们自己的问题,我也提供了答案。我将添加一些上下文和对正在发生的事情的描述。从Django 3.0开始,此答案仍然适用。
就像您可以通过在我们自己的项目中复制模板的名称和目录结构来覆盖Django提供的管理模板一样,您也可以通过在我们的项目中复制.po
文件的名称和目录结构来覆盖Django提供的管理翻译项目。
Django的管理员翻译位于django/contrib/admin/locale/
中,并按语言组织在名为[language code]/LC_MESSAGES/
的目录中。这些单独的语言目录包含两个.po
和django.po
文件,以及它们各自的已编译djangojs.po
文件。您将覆盖.mo
文件,并编译我们自己的.po
文件。
您要做的第一件事是在设置中启用翻译,并告诉Django您在哪里存储我们的翻译文件。
settings.py
.mo
请注意,尽管Django使用的目录为import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# ...
LANGUAGE_CODE = 'nl-NL'
USE_I18N = True
USE_L10N = True
LOCALE_PATHS = (os.path.join(BASE_DIR, "locale"),) # our custom translations will go here
,但荷兰语中荷兰语的完整语言标识符为nl
。您可以找到按国家here组织的标识符的完整列表。
接下来,您将模仿Django的目录结构,并在新目录中创建两个文件:
nl-NL
my_project/locale/nl/LC_MESSAGES/django.po
请注意,此路径还必须与您在my_project/locale/nl/LC_MESSAGES/djangojs.po
中提供的路径匹配。
复制并粘贴Django's translation files的内容。现在,您可以编辑所需字符串的翻译。例如:
django.po
settings.py
现在,您需要使用以下命令编译消息:
msgid "Are you sure?"
--- msgstr "Weet u het zeker?"
+++ msgstr "Weet u het zeker?!"
此命令将您的python manage.py compilemessages
文件编译为.po
文件,Django将使用这些文件转换任何匹配的gettext调用。现在,您应该在管理界面中看到您的自定义翻译。