Java国际化(i18n)库/框架

21

我的组织即将开始国际化(i16g?)其公司网站的漫长过程。该网站是Java EE(JSP / Servlets,无EJB)和从(Documentum)WCM推送的静态内容的混合物。

虽然我有使用“内置”机制的经验,即使用ResourceBundle和每种语言/区域设置的相关属性文件(包含“KEY = Translated value”方法),在其中我们只需引用要出现已翻译文本的KEY值。

我的主管提到他曾在以前的组织中使用了一种不同的方法,即使用第三方库(他不记得实际名称)将实际[英语]文本包含在网页中(以帮助开发人员),这些文本会在运行时用配置xml文件中的翻译内容替换。(有人知道这是哪个库吗?)

我对其他可能存在的方法/库/框架很感兴趣,以便促进这一过程。

谢谢


我会再给这个问题一天左右的时间,然后再做决定。 - Crollster
只是为了澄清,XML 文件不是 TMX 文件对吧?TMX 文件是一种更复杂的资源绑定等效文件(http://en.wikipedia.org/wiki/Translation_Memory_eXchange)。 - Adam Gent
5个回答

14

你的老板可能是说 gettext,就像 @Pawel Dyda 提到的一样,但 cosmopolitan 也可能对你有用。


是的,似乎之前的组织使用了“gettext” - 我仍在研究它,看看我们是否想要走这条路。 - Crollster
我选择这个答案作为正确的答案,主要是因为它恰好给出了我所请求的内容,并且没有在一个未被请求的问题上发表长篇大论。 - Crollster

5

我的公司还为Java开发了一个GNU gettext相关的库(很快也会有针对Scala的扩展)。它不仅支持GNU gettext的所有功能,而且还简化了日期/时间戳和货币的输出和输入,包括在翻译中使用“wiki”格式(这样你就可以在单词上输出HTML加粗,例如),Java消息格式化,通用“转义”支持(所以输出可以自动转义,例如用于HTML中),以及货币舍入。

它是开源的,目前在github上:https://github.com/awkay/easy-i18n/


4
当我听到您在使用ResourceBundle时,我会想到以下内容:
ResourceBundle rb = ResourceBundle.getBundle("messages", locale);
String someString = rb.getString("some.key");

如果您使用这种脚本片段的方式来处理Java Server Pages,那么这是错误的。相反,您应该使用JSTL或Spring消息标记。
至于您的查询,我认为他们使用了Gettext(很抱歉没有链接,因为我时间不够了)。这不一定是最好的方法。JSTL方法是JSP中最常见的方法,除非您有非常好的理由不这样做,否则应坚持使用它。

抱歉,我应该更明确 - 是的,我是指将ResourceBundle与JSTL标签结合使用(我们不使用脚本):) - 感谢您的建议,我会调查gettext并看看是否有任何线索。 - Crollster

1
我希望现在提出一个解决方案不算太晚:https://github.com/resource4j/resource4j
这个库集成了Thymeleaf网页渲染器,可以解决您提到的问题:您可以在页面模板中包含英文文本,然后在运行时用本地化版本替换它。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接