django翻译不适合我

时间:2014-02-01 00:38:35

标签: python django translation django-i18n

我不能强制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)

2 个答案:

答案 0 :(得分:3)

翻译可能在.po文件中,但在.mo文件中缺失。尝试运行

重新编译消息
./manage.py compilemessages 

答案 1 :(得分:0)

我整夜跟踪代码,发现了一些线索。主要在trans_real.py和gettext.py中。你可以在"翻译"中加入一个断点。功能

  1. 翻译代码仅在应用启动时执行一次。因此,您需要重新加载uwsgi以加载新版本。
  2. 从不使用Po文件。 gettext.py使用" mo"仅限文件。(在我的笔记本电脑中)。因此,您必须在更改后编译消息。
  3. " - "在语言代码中将转换为" _"在语言环境中。例如" zh-CN"将被转换为" zh_CN"。这就是无法找到翻译文件的原因。我认为如果只使用两个字符作为语言代码会更好。在Linux系统中应该考虑区分大小写。