一个更简单的i18n for Python/Django

Jav*_*ker 3 python django internationalization

我的问题是关于Python中的i18n.据我了解,它涉及:

  • 每种语言创建一个消息文件(仅一个?!).
  • 在此文件中,每条消息都是格式化的
    • English message here
    • Message en Francais ici (是的,蹩脚的法国..)
  • 然后将此文件编译成另一种更快的二进制格式
  • 重复所需的所有其他语言
  • 在app code(Django)中使用带有英语(或默认)语言的translate方法,该方法将根据语言环境正确翻译...tr('English message Here')

可能我对步骤有点偏僻,但这似乎是一般意义上的正确吗?

我想知道的是,有一种更简单的方法吗?我的意思是在java webapp世界中,您以bundleName_locale.properties格式设置消息包文件.在每一个中,您通常都有一个消息关系密钥,例如,greeting = Hello World.您可以为站点/应用程序的不同子部分提供许多不同的属性文件.所有语言环境文件都是分层的,子语言环境中缺少的键落到父语句等.这些都是由Java自动完成的,无需设置.

在Django/Python世界中有这样的东西吗?按照这条路线,这只是疯了吗?我可以使用模块作为java .properties文件的替代品来伪造这个吗?很抱歉这个冗长的问题,感谢任何意见.

Jac*_* M. 13

虽然你可以相当简单地做到这一点,但我会质疑为什么.

原样:

  1. Django的i18n基于gettext,它从未给我任何性能问题.
  2. 您不必创建消息文件,Django会为您完成.
  3. Django创建的消息文件可以作为文本文件发送给任何人进行翻译.
    • 我花了大约5分钟向某人解释如何使用它们,一天后又找回了我整个网站的精彩翻译.
  4. 在代码中标记字符串非常简单.
    • _("My String").py通过使用文件是正常的from django.utils.translation import ugettext as _.
    • {% trans "My String" %}在你的模板中.再说一遍,非常简单.
    • 写出来bundle.getString("My String")似乎会变得陈旧,快速.
  5. 如果需要,您可以轻松地将Django的i18n合并到JavaScript中.
  6. 消息文件有基于Web的编辑器.
  7. 您不必多次定义字符串,它会将整个应用程序中的所有实例聚合为一个标记.
    • 您需要在Java属性文件中定义"保存"多少次?
  8. 仍然是一个很好的,版本跟踪友好的文本文件.
  9. 如果你喜欢用类似.properties的方式来定义你的字符串,你仍然想要编译它们,这样你就不必在执行时解析文本文件.

.po文件示例:

#: templates/inquiries/settings/new_field.html:12
#: templates/inquiries/settings/new_form.html:4
msgid "Save"
msgstr ""
Run Code Online (Sandbox Code Playgroud)

就个人而言,我认为没有理由打扰黑客攻击已经存在并且运行良好的解决方案.