首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换gettext

替换gettext
EN

Stack Overflow用户
提问于 2009-10-08 12:36:47
回答 4查看 2.2K关注 0票数 5

我们在产品中使用gettext进行翻译,但是它有很多问题:

  • 除非系统支持语言,否则无法使用语言。

在Solaris 9 Sparc上,如果我们将环境重置为各种英语区域设置,如果机器没有相应的区域设置,则消息仍然不会被翻译。翻译文件已经存在,但我们无法访问它。

  • 使用环境编写语言

这会在希望将消息翻译成不同语言的服务器中造成问题。从理论上讲,这可能是一个完全线程安全、可并行的操作,但是gettext意味着我们必须对转换进行全局锁定。

  • 无法设置默认语言

我这样说并不是指代码中的文本。我们在代码中使用MsgID,因此,如果当前环境定义语言不可用,我想要的是能够指定要返回的转换。但是gettext不允许这样做--我必须尝试,然后重新设置环境,然后它才会决定看不同的翻译。(使用MsgID不是我的选择-我想遵循gettext标准,使用英语作为it,但我被否决了,现在要修改它需要做很多工作)

  • 返回的编码在UTF-8和当前本地编码之间有所不同。

我不是指.po文件-它们都在UTF-8中(恼人的是msgfmt不处理BOM,而是其他什么)。我指的是gettext ngettext等的输出,它是在AIX和HPUX上的UTF-8 (不管本地/终端编码)中的,但是在Solaris/Linux/FreeBSD上的本地编码,尽管这可能是由于might问题造成的?

无论如何,不用为不同的平台编写特殊的代码是件好事--如果我能让bind_textdomain_codeset(domain,codepage);帮助解决这个问题,我将不得不进行调查。

有没有人知道开源翻译库提供了更有用的界面?

EN

回答 4

Stack Overflow用户

发布于 2009-10-08 12:51:04

我们正在使用ICU资源束,并且对它非常满意。ICU接口不是“现代”的,但它功能强大,基本原则是健全的,资源打包(使用genrb工具)相当灵活。它的消息格式功能也很好。

关于你的具体评论:

除非系统支持语言,否则无法使用语言。

我不明白这个。这可能是因为我对gettext的唯一“体验”就是阅读了它的文档。

使用环境编写语言

ICU接口以现场作为输入,因此您有完整的控制。如果对您更方便的话,它也有一个“默认区域设置”的概念。

无法设置默认语言

ICU有一个精心设计的回退机制,包含一个“默认”包。

返回的编码在UTF-8和当前本地编码之间有所不同。

字符串ResourceBundle(其他数据类型也是可能的)总是表示为UnicodeString,这是内部编码的UTF-16。使用UnicodeString的UTF-32非常容易,因为它的接口公开了几种允许在代码点级别操作它的方法。对于其他编码,码转换是可能的。

票数 5
EN

Stack Overflow用户

发布于 2009-10-14 07:56:10

  1. 除非系统支持语言,否则无法使用语言。

不对。您可以手动指定语言。使用语言环境变量

代码语言:javascript
复制
int main()
{
      setlocale(LC_ALL,"");
      setenv("LANGUAGE","foo");
}

这是可行的,即使不存在语言环境(您见过语言foo吗?)

  1. 使用环境编写语言

这有什么问题吗?这给了用户更多的控制。

  1. 无法设置默认语言

错了,见上面。

  1. 返回的编码在UTF-8和当前本地编码之间有所不同。

错,见bind_textdomain_codeset(domain,codepage);

我的强烈建议它是最受支持和最好的工具之一。翻译人员将感谢使用正常和有用的工具。

还有一点很重要:在非基于gettext的工具中,对支持非常糟糕的复数形式有很大的支持。

gettext只有一个限制--每个进程只能使用一种以上的语言。切换语言不是线程安全的。幸运的是,大多数与人类接触的程序都使用一种语言。

这可能仅限于多线程服务。

编辑:但即使这也不是一个真正的问题。我曾经为我的项目实现过一次线程安全的gettext版本。请参阅http://art-blog.no-ip.info/cppcms/blog/post/16,基于mo文件阅读器。

票数 4
EN

Stack Overflow用户

发布于 2009-10-08 19:15:24

您还可以将ICU资源包转换为基于XML的XLIFF格式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1537538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档