hed*_*gie 18 python django localization internationalization django-admin
我试图覆盖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"),)
Run Code Online (Sandbox Code Playgroud)
我已将文件复制settings.py到,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然而,当我访问时,我仍然看到Django的默认管理员翻译.我究竟做错了什么?
编辑 - 我发现了问题:
以上描述是覆盖应用翻译的正确方法.我遵循自己的指示,他们工作.我的问题的原因是我localhost:8000/admin第一次意外地省略了子目录.我是一个愚蠢的人.
我正在提供答案,尽管 @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
Run Code Online (Sandbox Code Playgroud)
请注意,尽管 Django 使用的目录是nl,但荷兰语在荷兰的完整语言标识符是nl-NL。您可以在此处找到按国家/地区组织的标识符的完整列表。
接下来,您将模仿 Django 的目录结构并在新目录中创建两个文件:
my_project/locale/nl/LC_MESSAGES/django.po
my_project/locale/nl/LC_MESSAGES/djangojs.po
请注意,此路径还必须与您在settings.py.
复制并粘贴Django 翻译文件的内容。您现在可以编辑您喜欢的任何字符串的翻译。例如:
django.po
msgid "Are you sure?"
--- msgstr "Weet u het zeker?"
+++ msgstr "Weet u het zeker?!"
Run Code Online (Sandbox Code Playgroud)
现在您需要使用以下命令编译消息:
python manage.py compilemessages
此命令将您的.po文件编译成.mo文件,Django 将使用这些文件来翻译任何匹配的 gettext 调用。您现在应该在管理界面中看到您的自定义翻译。