【发布时间】:2009-06-25 12:49:08
【问题描述】:
我有一个用 wxPython 编写的应用程序,我想制作多语言。 我们的选择是
- 使用gettext http://docs.python.org/library/gettext.html
- 将所有 UI 文本分离到 一个 messages.py 文件,并使用它来 翻译文字
我非常倾向于第二,我认为采用 gettext 方式没有任何好处, 使用第二种方式,我可以将所有消息放在一个位置而不是代码中,因此如果我需要更改消息,则无需更改代码,以防 gettext 我可能会混淆 msg-constants,因为我将只是包装原始msg 而不是将其转换为 messages.py 中的常量
基本上不是
wx.MessageBox(_("Hi stackoverflow!"))
我认为
wx.MessageBox(messages.GREET_SO)
更好,那么 gettext 方式和劣势 2nd 方式有什么优势吗?还有第三种方法吗?
编辑: 也 gettext 语言文件似乎与代码过于相关,如果我想要两条英语相同但法语不同的消息会发生什么,例如假设法语对英语的不同场景有更微妙的翻译就可以了
经验: 我已经走了第二条路,我必须说每个应用程序都应该尝试从代码中提取 UI 文本,它提供了重构的机会,查看 UI 在哪里潜入模型以及在哪里可以改进 UI 文本,相比之下 gettext 是机械的,没有为编码器提供任何输入,我认为会更难维护。
在为文本创建名称时,例如PRINT_PROGRESS_MSG,让我们有机会看到在许多地方,相同的 msg 的使用方式略有不同,并且可以合并为一个名称,这在我以后只需要更改一次 msg 时会有所帮助。
结论:我仍然不确定使用 gettext 有什么好处,并且正在使用我自己的消息文件。但我选择的答案至少解释了为什么 gettext 是有益的。 最终的解决方案 IMO 是从这两种方式中获得最好的,即我自己的由 gettext 包装的消息标识符,例如
wx.MessageBox(_("GREET_SO"))
【问题讨论】:
-
您是否看过 i18n 的 wxPyWiki 配方页面以及使用 gettext 的示例? wiki.wxpython.org/RecipesI18n
-
是的,我已经看到了,这也是我不想使用 gettext 方式的原因之一
-
您提到的使用自己的消息文件的所有“优点”也存在gettext方式。然而,反之则不成立。
标签: python internationalization multilingual gettext