1

我不能强制 django 翻译字符串,从请求中选择的语言是正确的,但我没有翻译字符串。

也许这可能是问题:当我运行 shell 时,返回language_code的不等于我在settings.py

gettext = lambda s: s
USE_I18N = True
USE_L10N = True
LANGUAGE_CODE = 'en'

LANGUAGES = (
   ('cs', gettext('Czech')),
   ('en', gettext('English')),
)

>>> from django.utils import translation
>>> 
>>> translation.get_language()
'en-us'
>>> from django.conf import settings
>>> settings.LANGUAGE_CODE
'en'

我的消息文件在locale/cs/LC_MESSAGES/django.{mo,po} 我那里有这个内容(周短名称的翻译缩写):

msgid "Mo Tu We Th Fr Sa Su"
msgstr "Po Út St Čt Pá So Ne"

鉴于,当我得到正确的价值'cs'

print get_language() 
'cs'

下一行是ugettext

ugettext('Mo Tu We Th Fr Sa Su')
'Mo Tu We Th Fr Sa Su'

但我期待

'Po Út St Čt Pá So Ne'

有人能告诉我哪里有问题吗?:o)

4

2 回答 2

4

文件中可能存在翻译,.po但文件中缺少翻译.mo。尝试通过运行重新编译消息

./manage.py compilemessages 
于 2015-04-29T09:37:38.347 回答
0

我整晚跟踪代码,发现了一些线索。主要在 trans_real.py 和 gettext.py 中。您可以在“翻译”函数中放置一个断点。

  1. 翻译代码仅在应用启动时执行一次。所以你需要重新加载uwsgi来加载新版本。
  2. po文件从不使用。gettext.py 仅使用“mo”文件。(在我的笔记本电脑中)。所以你必须在更改后编译消息。
  3. 语言代码中的“-”将转换为语言环境路径中的“_”。例如“zh-CN”将转换为“zh_CN”。这就是找不到翻译文件的原因。我认为如果只使用两个字符作为语言代码会更好。并且在Linux系统中要考虑区分大小写。
于 2016-10-11T12:40:13.607 回答