我正在提供答案,尽管 @hedgie 大部分回答了他们自己的问题。我将添加一些有关正在发生的事情的背景和描述。这个答案从 Django 3.0 开始仍然适用。
正如您可以通过在我们自己的项目中复制模板的名称和目录结构来覆盖 Django 提供的管理模板一样,您也可以通过复制.po
我们项目中的文件名和目录结构。
Django 的管理翻译位于django/contrib/admin/locale/
并按语言组织在名为的目录中[language code]/LC_MESSAGES/
。这些单独的语言目录包含两个.po
files, django.po
and djangojs.po
,以及各自编译的.mo
文件。你将覆盖.po
文件,并编译我们自己的.mo
files.
您要做的第一件事是在设置中启用翻译,并告诉 Django 您存储翻译文件的位置。
设置.py
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
请注意,虽然 Django 使用的目录是nl
,荷兰语的完整语言标识符是nl-NL
。您可以找到按国家/地区组织的标识符的完整列表here http://www.i18nguy.com/unicode/language-identifiers.html.
接下来,您将模仿 Django 的目录结构并在新目录中创建两个文件:
my_project/locale/nl/LC_MESSAGES/django.po
my_project/locale/nl/LC_MESSAGES/djangojs.po
请注意,此路径还必须与您在中提供的路径匹配settings.py
.
复制并粘贴内容Django 的翻译文件 https://github.com/django/django/tree/master/django/contrib/admin/locale/nl/LC_MESSAGES。您现在可以编辑您喜欢的任何字符串的翻译。例如:
django.po
msgid "Are you sure?"
--- msgstr "Weet u het zeker?"
+++ msgstr "Weet u het zeker?!"
现在您需要使用以下命令编译消息:
python manage.py compilemessages
这个命令编译你的.po
文件到.mo
文件,Django 将使用这些文件来翻译任何匹配的 gettext 调用。您现在应该在管理界面中看到您的自定义翻译。