Java国际化(i18n)库/框架

Java国际化(i18n)库/框架,java,jakarta-ee,internationalization,Java,Jakarta Ee,Internationalization,我的组织即将开始其企业网站国际化(i16g?)的漫长过程。该网站混合了JavaEE(JSP/Servlets,无EJB)和从(Documentum)WCM推送的静态内容 虽然我有使用ResourceBundle的“内置”机制以及每种语言/区域设置的相关属性文件(包含“KEY=Translated value”方法)的经验,但我们只需在希望翻译文本出现的地方引用键值 我的主管提到,他在以前的组织中使用了不同的方法,他们使用了第三方库(他不记得实际名称),其中包含网页中的实际[英文]文本(以帮助开发

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

虽然我有使用
ResourceBundle
的“内置”机制以及每种语言/区域设置的相关属性文件(包含“KEY=Translated value”方法)的经验,但我们只需在希望翻译文本出现的地方引用键值

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

我感兴趣的是,有哪些其他方法/库/框架可以促进这一点


谢谢

当我听说您正在使用
ResourceBundle
s时,我看到如下内容:

ResourceBundle rb = ResourceBundle.getBundle("messages", locale);
String someString = rb.getString("some.key");
如果这是Java服务器页面的方法(在scriplets中使用这样的片段),那么这是错误的。相反,您应该使用JSTL或Spring消息标记

至于您的查询,我相信他们使用了Gettext(对不起,没有链接,因为我的时间不多了)。
这不是最好的方法。JSTL方法是JSP最常见的方法,除非你有很好的理由不这么做,否则你应该坚持使用它。

你的老板可能是指,就像@Pawel Dyda提到的,但是您可能也感兴趣。

值得一看,它很好地解释了gettext背后的思想和gettext设计的局限性更好的gettext方法是ICU消息格式这是JDK MessageFormat类的基础,还有一个基于ICU消息格式的javascript库

我的公司还为Java维护了一个与GNU gettext相关的库(很快就有了针对Scala的扩展)

它不仅支持GNU gettext的所有优点,还简化了日期/时间戳和货币的输出和输入,包括在翻译中使用“wiki”格式的工具(例如,您可以在一个单词上输出HTML粗体)、java消息格式、通用的“转义”支持(因此输出可以自动转义以包含(比如HTML)和货币舍入


它是开源的,目前在github上的

我希望,现在再提出一个解决方案还不算太晚:


该库与Thymeleaf网页呈现器集成,解决了您提到的问题:在页面模板中包含英文文本,然后在运行时用本地化版本替换它。

对不起,我应该更明确一些-是的,我的意思是我将与JSTL标记一起使用
ResourceBumndle
(我们不做Scriptlet):-谢谢你的输入,我会调查gettext,看看这是否有什么意义。是的,看起来“gettext”这是以前的组织使用的东西-我仍在调查,看看我们是否想走这条路。我选择了这个答案作为正确答案,主要是因为它给出了我所要求的,而不是对没有被要求的事情进行诽谤。在我做出决定之前,我会再过一天左右给出这个问题。只是为了澄清XML文件不是TMX文件,对吗?TMX文件是更复杂的资源包等价物()。