我正在尝试覆盖 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
第一次进入子目录。我是个笨蛋。
最佳答案
我正在提供答案,尽管 @hedgie 主要回答了他们自己的问题。我将添加一些上下文和正在发生的事情的描述。这个答案从 Django 3.0 开始仍然适用。
正如您可以通过在我们自己的项目中复制模板的名称和目录结构来覆盖 Django 提供的管理模板一样,您可以通过复制 .po
来覆盖 Django 提供的管理翻译。我们项目中的文件名和目录结构。
Django 的管理翻译位于 django/contrib/admin/locale/
并按语言组织在名为 [language code]/LC_MESSAGES/
的目录中.这些单独的语言目录包含两个 .po
文件,django.po
和 djangojs.po
, 以及各自编译 .mo
文件。您将覆盖 .po
文件,并编译我们自己的 .mo
文件。
您要做的第一件事是在设置中启用翻译,并告诉 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 .接下来,您将模仿 Django 的目录结构并在新目录中创建两个文件:
my_project/locale/nl/LC_MESSAGES/django.po
my_project/locale/nl/LC_MESSAGES/djangojs.po
请注意,此路径还必须与您在
settings.py
中提供的内容相匹配.复制并粘贴 Django's translation files 的内容.您现在可以编辑您喜欢的任何字符串的翻译。例如:
django.po
msgid "Are you sure?"
--- msgstr "Weet u het zeker?"
+++ msgstr "Weet u het zeker?!"
现在您需要使用以下命令编译消息:
python manage.py compilemessages
此命令编译您的
.po
文件到 .mo
文件,Django 将使用这些文件来翻译任何匹配的 gettext 调用。您现在应该在管理界面中看到您的自定义翻译。
关于python - 如何覆盖 django 管理翻译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20873972/