代码之家  ›  专栏  ›  技术社区  ›  Java Drinker

用于Python/Django的更简单的i18n

  •  3
  • Java Drinker  · 技术社区  · 16 年前

    • 为每种语言创建一个消息文件(仅一种?!)。
    • 在这个文件中,每条消息的格式都是
      • English message here
      • Message en Francais ici (是的,蹩脚的法语……)
    • 然后把这个文件编译成另一种更快的二进制格式
    • 对所有其他需要的语言重复上述步骤
    • Django tr('English message Here')

    也许我在台阶上有点不舒服,但这似乎是一般意义上的,对吧?

    我想知道的是,有没有更简单的方法?我的意思是在javawebapp世界中,您在 bundleName_locale.properties 格式。在每一个你通常有一个关键的信息关系,如 greeting = Hello World.

    在Django/Python世界里有这样的东西吗?走这条路是不是疯了?我可以用一个模块作为java.properties文件的替身来伪造这个吗?很抱歉这个冗长的问题,谢谢你的意见。

    1 回复  |  直到 16 年前
        1
  •  13
  •   Jack M.    16 年前

    虽然你可以很简单地做到这一点,但我想问为什么。

    1. Django的i18n基于 gettext
    2. 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属性文件中定义多少次“Save”?
    8. 仍然在一个很好的,版本跟踪友好,文本文件。
    9. .properties -就像定义字符串的方法一样,您仍然希望编译它们,这样就不必在执行时解析文本文件。

    .po

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

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