python - 如何覆盖 django 管理翻译?

标签 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"),)

我已复制文件 django/contrib/admin/locale/nl/LC_MESSAGES/django.pomy_project/locale/nl/LC_MESSAGES/django.po我已经对其进行了一些更改。

接下来,我运行了 python manage.py compilemessagespython 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.podjangojs.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.pomy_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/

相关文章:

python - scipy 优化 fmin ValueError : setting an array element with a sequence

python - 计算外键关系中出现的次数

python - 如何更新 Tix.ComboBox 的文本?

Python 比较两个键/值对

python - 如何将多列(即时间、年、月和日期)转换为 pyspark 数据框中的日期时间格式

python - django tastypie 中的嵌套资源

python - 如何为模板标签解析 Django 模板

ios - UIWebview 没有加载正确的本地化版本的网站

iphone - 多语言 iOS 应用程序

xcode - 如何在 xcode4 中本地化 Settings.bundle?