gpt4 book ai didi

python - 用于 Python/Django 的更简单的 i18n

转载 作者:太空宇宙 更新时间:2023-11-03 12:25:41 24 4
gpt4 key购买 nike

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

  • 为每种语言创建一个消息文件(只有一个?!)。
  • 在此文件中,每条消息的格式为
    • 这里是英文消息
    • Message en Francais ici(是的,蹩脚的法语..)
  • 然后将这个文件编译成另一种更快的二进制格式
  • 重复所有其他需要的语言
  • 在应用程序代码 (Django) 中使用英语(或默认)语言的翻译方法,该语言将根据语言环境正确翻译... tr('English message Here')

可能我在步骤上有点偏离,但这似乎是一般意义上的对吧?

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

Django/Python 世界中有这样的东西吗?走这条路是不是疯了?我可以使用模块代替 java .properties 文件来伪造它吗?抱歉这个冗长的问题,感谢您的任何意见。

最佳答案

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

原样:

  1. Django 的 i18n 基于 gettext,它从未给我带来任何性能问题。
  2. 您不必创建消息文件,Django 会do it for you .
  3. Django 创建的消息文件可以作为文本文件发送给任何人进行翻译。
    • 我花了大约 5 分钟向别人解释如何使用它们,一天后我得到了我整个网站的精彩翻译。
  4. 在代码中标记字符串非常简单。
    • _("My String") 对于 .py 文件是正常的,通过使用 from django.utils.translation import ugettext as _
    • {% trans "My String"%} 在您的模板中。同样,非常简单。
    • 写出 bundle.getString("My String") 似乎会很快变旧。
  5. 您可以轻松合并 Django 的 i18n into your JavaScript ,如果需要的话。
  6. web-based editors用于消息文件。
  7. 您不必多次定义一个字符串,它会将整个应用中的所有实例合并为一个标记。
    • 您必须在 Java 属性文件中定义多少次“保存”?
  8. 仍在一个不错的、版本跟踪友好的文本文件中。
  9. 如果您使用类似于 .properties 的方式来定义字符串,您仍然希望编译它们,这样您就不必在执行时解析文本文件。

.po 文件示例:

#: templates/inquiries/settings/new_field.html:12
#: templates/inquiries/settings/new_form.html:4
msgid "Save"
msgstr ""

就我个人而言,我看不出有什么理由费心去拼凑一个已经存在并且运行良好的解决方案的替代品。

关于python - 用于 Python/Django 的更简单的 i18n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3424939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com