0

我可以通过更改应用程序的 Settings.py 文件中的 LANGUAGE_CODE 在我的 Django 应用程序中切换语言。

但我不确定实际文本来自哪里。

在 path-to-django/contrib/auth/locale/ 中,有许多语言的目录,其中包含我正在显示的文本的翻译。但是,如果我将特定语言的 .mo 文件移动到新名称,我仍然会看到该语言的文本——即使在我重新启动 Django 之后。那么文本实际上是从哪里来的呢?

此外,对于“en”语言环境,翻译后的文本始终为“”(空字符串)。在这种情况下, ugettext_lazy 是否只返回其输入字符串?如果不是,英文文本来自哪里?

4

2 回答 2

0

如果您在 django 管理员或您的应用程序中谈到翻译,这是不同的。您提到的路径 .../contrib/auth/locale 是指 django 管理员中的翻译。

对于您的应用程序中的特殊翻译,您的项目中应该有一个 locale/ 文件夹。这个文件夹是在你运行名为“django-admin.py makemessages”的 django 特殊脚本时创建的。

该脚本在您的项目源代码树或应用程序源代码树上运行,并提取所有标记为要翻译的字符串。它在 locale/LANG/LC_MESSAGES 目录中创建(或更新)一个消息文件。在 de 示例中,文件将是 locale/de/LC_MESSAGES/django.po。

详细解释请看django i18n文档

创建消息文件 (*.po) 并在消息文件中编写自己的翻译后,不要忘记编译它们:

编译消息文件

创建消息文件之后——并且每次对它进行更改——你需要将它编译成更有效的形式,以供 gettext 使用。使用 django-admin.py compilemessages 实用程序执行此操作。

此工具运行所有可用的 .po 文件并创建 .mo 文件,这些文件是为 gettext 使用而优化的二进制文件。在您运行 django-admin.py makemessages 的同一目录中,像这样运行 django-admin.py compilemessages:

django-admin.py 编译消息

就是这样。您的翻译已经可以使用了。

于 2012-09-09T09:54:32.967 回答
0

事实证明,正在使用系统范围的 Django 安装,而不是我的本地安装。

通过在我的应用程序中创建一个语言环境目录,我可以覆盖系统范围安装中使用的字符串。我只是在那里修改 .po 文件,然后编译它。

于 2012-09-15T05:29:31.193 回答