我正在制作一个多语言的 Django 网站。我创建了一个消息文件,填充并编译了它。我用我想要的语言(希伯来语)检查了网站(在这种情况下是管理员),大多数短语都以希伯来语出现,但有些不是。我检查了源代码,这些仍然看起来_('Whatever')
像它们应该的那样,它们也在消息文件中被翻译,是的,我记得做compilemessages
.
有哪些常见的原因导致翻译看起来不像这样?
我正在制作一个多语言的 Django 网站。我创建了一个消息文件,填充并编译了它。我用我想要的语言(希伯来语)检查了网站(在这种情况下是管理员),大多数短语都以希伯来语出现,但有些不是。我检查了源代码,这些仍然看起来_('Whatever')
像它们应该的那样,它们也在消息文件中被翻译,是的,我记得做compilemessages
.
有哪些常见的原因导致翻译看起来不像这样?
也许翻译的字符串被标记为fuzzy
?
刚刚被一个人撞了。我locale/
在项目的根目录中有目录,但默认情况下,Django在INSTALLED_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'),
)
我现在的项目遇到了这个问题。我将 settings.py 上的变量 LANGUAGES 设置为:
LANGUAGES = (
('en', _('English')),
('pt-br', _('Brazilian Portuguese')),
)
还有一个文件夹结构,里面有一个语言环境文件夹和一个子文件夹 pt-br。原来我的翻译没有加载。LANGUAGES 变量遵循 pt-br 模式,并且文件夹必须采用 pt_BR 模式。至少这是它在这里工作的唯一方式!
一个可能的原因是延迟翻译。
例如,在 views.py 你应该使用ugettext:
from django.utils.translation import ugettext as _
但是在 models.py 中,你应该使用ugettext_lazy:
from django.utils.translation import ugettext_lazy as _
嗨,请附上我过去必须做的一些修复:
在设置文件中 -USE_I18N = True
需要
中间件模块中的 django.middleware.locale.LocaleMiddleware (但这肯定不是你的情况,只要 Django 根本不关心你的本地)
TEMPLATE_CONTEXT_PROCESSORS 中的 django.core.context_processors.i18n
当然,我还有其他与翻译相关的问题,但我不记得全部了……希望这能有所帮助!
另一个原因可能是错误的目录结构。
在运行应用程序翻译makemassages
命令之前,请仔细阅读管理命令关于要创建哪个目录的错误消息。(它必须是应用程序,而不是。)请注意,即使目录结构错误,管理命令也能正常工作。locale
conf/locale
我注意到,当我%
在我的文本中,翻译的文本没有被使用。可能还有其他字符会导致此问题。我通过转义%
as解决了这个问题%%
。
My answer here, all my translations were working except for 2 DateField
s 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