加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

一个更简单的i18n for Python / Django

发布时间:2020-12-20 12:26:07 所属栏目:Python 来源:网络整理
导读:我的问题是关于 Python中的i18n.据我了解,它涉及: 按语言创建消息文件(仅限一个?!). 在此文件中,每条消息都是格式化的 英文信息在这里 Message en Francais ici(是的,蹩脚的法国人……) 然后将此文件编译成另一种更快的二进制格式 重复所需的所有其他语言
我的问题是关于 Python中的i18n.据我了解,它涉及:

>按语言创建消息文件(仅限一个?!).
>在此文件中,每条消息都是格式化的

>英文信息在这里
> Message en Francais ici(是的,蹩脚的法国人……)

>然后将此文件编译成另一种更快的二进制格式
>重复所需的所有其他语言
>在应用程序代码(Django)中使用带有英语(或默认)语言的translate方法,该语言将根据语言环境正确翻译… tr(‘English message Here’)

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

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

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

解决方法

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

原样:

> Django的i18n基于gettext,它从来没有给我任何性能问题.
>您不必创建消息文件,Django将do it for you.
> Django创建的消息文件可以作为文本文件发送给任何人进行翻译.

>我花了大约5分钟向某人解释如何使用它们,一天后又找回了我整个网站的精彩翻译.

>在代码中标记字符串非常简单.

> _(“My String”)对于.py文件是正常的,使用django.utils.translation import ugettext as _.
>模板中的{%trans“My String”%}.再说一遍,非常简单.
>写出bundle.getString(“我的字符串”)似乎会变得陈旧,快速.

>如果需要,您可以轻松地合并Django的i18n into your JavaScript.
>消息文件有web-based editors.
>您不必多次定义字符串,它会将整个应用程序中的所有实例聚合成一个标记.

>您需要在Java属性文件中定义“保存”多少次?

>仍然是一个很好的,版本跟踪友好的文本文件.
>如果您一起修改类似.properties的方式来定义字符串,您仍然希望编译它们,这样您就不必在执行时解析文本文件.

空.po文件的示例:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读