Dou*_*der 5 c++ unix linux internationalization
我们在产品中使用gettext进行翻译,但是它遇到了很多问题:
在Solaris 9 Sparc上,如果我们将环境重置为各种英语语言环境,则如果计算机没有相应的语言环境,则仍不会翻译该消息.转换文件存在,但我们无法访问它.
这会导致想要将消息转换为不同语言的服务器出现问题.从理论上讲,这可能是一个完全线程安全,可并行化的操作 - 但gettext意味着我们必须全面锁定翻译.
通过这个我不是指代码中的文本.我们在代码中使用MsgID,所以我想要的是能够指定一个后备转换,如果当前环境定义语言不可用.但gettext不允许这样做 - 我必须尝试,然后重新设置环境才能查看不同的翻译.(使用MsgIDs不是我的选择 - 我想遵循gettext标准并使用英语作为ID,但我被推翻了,现在改变它将是很多工作)
我不是指.po文件 - 它们都是UTF-8(烦人的是,msgfmt不处理BOM,但无论如何).我的意思是gettext ngettext等的输出,它们在AIX和HPUX上是UTF-8(无论本地/终端编码),但在Solaris/Linux/FreeBSD上是本地编码,尽管这可能是由于iconv问题引起的?
在任何情况下,不必为不同的平台拥有特殊代码是很好的 - 我将不得不调查我是否可以bind_textdomain_codeset(domain,codepage);帮助解决这个问题.
有谁知道开源翻译库提供更有用的界面?
我们正在使用ICU资源包,并对它非常满意.ICU界面不是"现代",但功能强大,基本原则合理,资源打包(使用genrb工具)非常灵活.它的消息格式化功能也很好.
关于您的具体意见:
除非系统支持,否则无法使用语言.
我不明白这个.这可能是因为我使用gettext的唯一"经验"是阅读其文档.
使用环境来制定语言
ICU接口将Locale作为输入,因此您可以完全控制.如果它对您更方便,它还有"默认语言环境"的概念.
无法设置默认语言
ICU有一个精心设计的回退机制,涉及一个"默认"捆绑
返回的编码在UTF-8和当前本地编码之间变化.
String ResourceBundle(其他数据类型也可以)总是表示为UnicodeString,它在内部以UTF-16编码.带有UnicodeString的UTF-32非常简单,因为它的接口公开了几种允许在代码点级别操作它的方法.对于其他编码,可以进行代码转换.
| 归档时间: |
|
| 查看次数: |
1827 次 |
| 最近记录: |