Xerces 2.11.0 (Java) 中的特定于语言环境的消息

Phi*_*ger 4 java localization xerces xerces2-j

我想在我的 JAXP 和 Xerces2 中使用特定于语言环境的错误消息。默认情况下,只有英文消息可用。

第一步是检索消息文件并将它们放入包“org/apache/xerces/impl/msg/” - 完成。通过使用Locale.setDefault (Locale.GERMANY)德语消息显示,所以这是有效的。

但我希望在每个实例的基础上对消息进行不同的本地化。所以一个解析器应该返回英语消息,另一个解析器应该返回德语消息。

我用来创建 SAX2 解析器的代码是:

org.xml.sax.XMLReader ret = XMLReaderFactory.createXMLReader ();
Run Code Online (Sandbox Code Playgroud)

对于 DOM,我正在使用 DocumentBuilder 喜欢这个(非常简化):

    final DocumentBuilderFactory aDocumentBuilderFactory = DocumentBuilderFactory.newInstance ();
    final DocumentBuilder aDocBuilder = aDocBuilderFactory.newDocumentBuilder ();
    final Document doc = aDocumentBuilder.parse (aInputSource);
Run Code Online (Sandbox Code Playgroud)

我找到了类似org.apache.xerces.impl.XMLErrorReporter具有setLocale(Locale)方法的类的东西,但我没有找到获取/设置它的方法。

顺便说一下,切换到 SAX1 不是一个选项。

任何帮助表示赞赏!

Hol*_*ger 6

不是最大的可移植性,但它的工作原理是解析器在 99% 的情况下都是 apache 解析器。

final DocumentBuilderFactory aDocBuilderFactory = DocumentBuilderFactory.newInstance();
aDocBuilderFactory.setAttribute("http://apache.org/xml/properties/locale", Locale.FRANCE);
final DocumentBuilder aDocBuilder = aDocBuilderFactory.newDocumentBuilder();
final Document doc = aDocBuilder.parse (aInputSource);
Run Code Online (Sandbox Code Playgroud)

一个SAXParser saxParser简单的电话saxParser.setProperty("http://apache.org/xml/properties/locale", Locale.FRANCE);

哦,忘了官方来源:http : //xerces.apache.org/xerces2-j/properties.html

  • 小提示,因为我在使用 XSD 验证时偶然发现了类似的问题:如果您有一个 `Validator` 实例,您可以使用 `validator.setProperty("http://apache.org/xml/properties/locale", Locale.FRANCE) ;` - 但请注意,如果您的区域设置为“en”语言,但默认区域设置不是英语 - 使用 `Locale.ROOT` 强制执行英语消息! (3认同)