【问题标题】:django translation not working for medjango 翻译对我不起作用
【发布时间】:2014-02-01 00:38:34
【问题描述】:

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

这里可能有问题:当我运行 shell 时,返回的 language_codesettings.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)

【问题讨论】:

  • Django 使用会话变量来检测用户语言,所以这可能是您在 shell 中没有获得正确语言的原因。
  • 您是否激活了 i18n 中间件并配置了语言环境路径?前段时间我在stackoverflow.com/questions/20467626/…

标签: python django translation django-i18n


【解决方案1】:

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

./manage.py compilemessages 

【讨论】:

  • 请说明为什么它应该解决这个问题。
  • 稍微扩展您的答案。给我们一些证明,这确实是这个问题的答案。
【解决方案2】:

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

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

【讨论】:

  • 语言到语言环境的映射是用这个函数to_locale完成的,例如zh-hans就是zh_Hans。
猜你喜欢
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
相关资源
最近更新 更多