Java JRE:如何将本地化资源添加到stantard JRE资源

我需要JRE来使用仅以英语提供的JRE资源的翻译版本。

根据ResourceBundle.java文档,它很容易:添加具有正确语言环境后缀的本地化资源。 例如,标准

  • XMLSchemaMessages.properties

将成为翻译版本:

  • XMLSchemaMessages_FR.properties

等等。

编辑:此特定文件位于:com \ sun \ org \ apache \ xerces \ internal \ impl \ msg \ XMLSchemaMessages.properties

我的问题是:如何让这些额外资源对JRE可见?

在此先感谢您的帮助。 – 欢呼

假设Xerces使用ResourceBundle来获取消息,您应该放入一个新文件

 com\sun\org\apache\xerces\internal\impl\msg\XMLSchemaMessages.properties 

locale是您需要的语言环境的正确标识符。

然后确定加载XMLSchemaMessages资源包的确切位置,并设置一个断点,以便单步执行JRE中的ResourceBundle加载过程(这里建议使用JDK,因此您有运行时的源代码),您可以看到是什么正在寻找。

注意:您正在处理特定于供应商的XML Parser,这意味着这将是Oracle特定的,甚至可能仅适用于某些Java版本。 考虑引入自己的validationXML Parser并将其本地化?

上面的答案花了我一点时间来解决问题。

为了让其他人更容易,如果您尝试使用带有Java内部Xerces解析器的XML模式解析XML文档,这里是我如何获取Locale特定错误消息的摘要:

以格式查找适当的属性文件

 XMLSchemaMessages_.properties 

对于意大利语,我在以下站点上找到了XMLSchemaMessages_it.properties(可能是旧版本,但它对我有用)

 http://grepcode.com/file/repo1.maven.org/maven2/com.sun.xml.parsers/jaxp-ri/1.4.5/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_it.properties 

然后,我在临时目录中创建了一个目录结构来保存新文件

 com\sun\org\apache\xerces\internal\impl\msg 

由于jar文件和zip文件共享相同的格式(我很懒,今天我使用的是Windows),然后我压缩了上面的com目录,创建了一个名为com.zip的文件。 然后我更改了文件的名称

 rename com.zip to XMLSchemaMessages_Locale.jar 

然后将新的jar文件移动到

 C:\Program Files\Java\jdk1.7.0_04\jre\lib\ext 

当然上面的路径取决于您的平台和特定版本的Java(我使用的是Windows 7)。

如果你有JDK,你可以使用命令行jar命令从Unix,Linux或Windows轻松构建jar文件,而不是压缩。