【问题标题】:Getting your head around trans template tag and makemessages了解 trans 模板标签和 makemessages
【发布时间】:2013-11-13 12:56:00
【问题描述】:

我一直在努力让 i18n 正常工作并拥有我的网站的多语言版本。

我有几个人好心地为我做翻译,但由于我遇到了一些问题,在网上搜索似乎有些人很难开始使用 django 的国际化和本地化模块。

到目前为止,我遇到的主要问题是:

  1. django.po 文件在运行 django-admin.py makemessages -a 时不更新
  2. 当语言文件存在时,当语言发生变化时,除了使用 django 包预先构建的内容外,网站上没有任何变化。†
  3. i18n/setlang 视图不起作用。††

现在,只有第 1 点我没有解决。首先是什么导致makemessages不更新?我正在使用 -a 来更新我之前制作的所有文件(de、da、fi),而 fi 是唯一实际添加了翻译的语言文件(其余的目前只是空的翻译字符串)

†我现在已经解决了第 2 个问题。似乎当 makemessages 创建 .po 文件时,它使用了一个模糊标记。

#, fuzzy

根据我所做的一些研究,这会将文件视为需要更新,就像 trans 标记附带的 no-op 选项一样。

{% trans "translation string" noop %}

删除#,模糊线后,它已经解决了这个问题。

††我已经添加了数字 3,仅供参考,因为我自己解决了这个问题。 您需要确保 MIDDLEWARE_CLASSES 中存在 LocaleMiddleware

MIDDLEWARE_CLASSES = (
    'django.middleware.locale.LocaleMiddleware',
) 

【问题讨论】:

  • 好的,我已经解决了上述两个问题。但我仍然无法解释为什么 django-admin.py makemessages -a 不再有效,此外,如果我删除语言环境文件夹并尝试重新创建消息文件,那么我只剩下一个空的 LC_MESSAGES 文件夹。

标签: python django internationalization django-i18n


【解决方案1】:

看来我能够回答我自己的问题。

  1. 我之前在翻译/语言环境中的项目树之外更新翻译的位置,由于某种原因,我收到一条消息说它已被弃用,并且由于某种原因现在无法这样做这已经改变,它已经解决了 makemessages 没有正确更新的问题。

  2. 从翻译中删除#、模糊标签。

  3. 将 LocaleMiddleware 添加到 MIDDLEWARE_CLASSES

问题解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-18
    • 2014-01-18
    • 2012-07-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    相关资源
    最近更新 更多