26

我正在制作一个多语言的 Django 网站。我创建了一个消息文件,填充并编译了它。我用我想要的语言(希伯来语)检查了网站(在这种情况下是管理员),大多数短语都以希伯来语出现,但有些不是。我检查了源代码,这些仍然看起来_('Whatever')像它们应该的那样,它们也在消息文件中被翻译,是的,我记得做compilemessages.

有哪些常见的原因导致翻译看起来不像这样?

4

9 回答 9

36

也许翻译的字符串被标记为fuzzy

于 2010-03-04T18:23:50.830 回答
21

刚刚被一个人撞了。我locale/在项目的根目录中有目录,但默认情况下,DjangoINSTALLED_APPS目录和默认翻译中查找翻译。所以它没有找到我添加的翻译。但是我的一些字符串在 Django 附带的默认翻译中(例如“搜索”),所以翻译了一些字符串,这让我感到困惑。

要将我的翻译所在的目录添加到 Django 将查找翻译的位置列表中,我必须设置LOCALE_PATHS 设置。因此,在我的情况下,locale/目录和settings.py都位于 django 项目的根目录中,我可以将以下内容放入settings.py

from os import path
LOCALE_PATHS = (
    path.join(path.abspath(path.dirname(__file__)), 'locale'),
)
于 2013-11-08T17:56:18.237 回答
17
于 2017-05-13T16:03:07.387 回答
9

我现在的项目遇到了这个问题。我将 settings.py 上的变量 LANGUAGES 设置为:

LANGUAGES = (
('en', _('English')),
('pt-br', _('Brazilian Portuguese')),
)

还有一个文件夹结构,里面有一个语言环境文件夹和一个子文件夹 pt-br。原来我的翻译没有加载。LANGUAGES 变量遵循 pt-br 模式,并且文件夹必须采用 pt_BR 模式。至少这是它在这里工作的唯一方式!

于 2015-08-08T02:35:35.803 回答
8

一个可能的原因是延迟翻译

例如,在 views.py 你应该使用ugettext

from django.utils.translation import ugettext as _

但是在 models.py 中,你应该使用ugettext_lazy

from django.utils.translation import ugettext_lazy as _
于 2010-03-03T17:11:10.127 回答
8

嗨,请附上我过去必须做的一些修复:

  • 重启网络服务器!

在设置文件中 -USE_I18N = True需要

  • 中间件模块中的 django.middleware.locale.LocaleMiddleware (但这肯定不是你的情况,只要 Django 根本不关心你的本地)

  • TEMPLATE_CONTEXT_PROCESSORS 中的 django.core.context_processors.i18n

当然,我还有其他与翻译相关的问题,但我不记得全部了……希望这能有所帮助!

于 2010-11-03T13:59:41.767 回答
0

另一个原因可能是错误的目录结构。

在运行应用程序翻译makemassages命令之前,请仔细阅读管理命令关于要创建哪个目录的错误消息。(它必须是应用程序,而不是。)请注意,即使目录结构错误,管理命令也能正常工作。locale conf/locale

于 2013-07-19T09:29:40.050 回答
0

我注意到,当我%在我的文本中,翻译的文本没有被使用。可能还有其他字符会导致此问题。我通过转义%as解决了这个问题%%

于 2013-09-03T13:40:53.677 回答
0

My answer here, all my translations were working except for 2 DateFields that I was using in a ModelForm. Turns out that I had a widget in my forms.py that was not working well with the translations.

I just removed it for now so I can enjoy Xmas =D

于 2020-12-25T09:14:23.273 回答