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

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

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

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

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

 org.xml.sax.XMLReader ret = XMLReaderFactory.createXMLReader (); 

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

  final DocumentBuilderFactory aDocumentBuilderFactory = DocumentBuilderFactory.newInstance (); final DocumentBuilder aDocBuilder = aDocBuilderFactory.newDocumentBuilder (); final Document doc = aDocumentBuilder.parse (aInputSource); 

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

切换到SAX1不是一个选项btw。

任何帮助表示赞赏!

不是最大的可移植性,但它的工作原理是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); 

对于SAXParser saxParser只需调用saxParser.setProperty("http://apache.org/xml/properties/locale", Locale.FRANCE);

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

可能性设置/获取MessageFormatter:

 Validator validator = schema.newValidator(); XMLErrorReporter property = (XMLErrorReporter) validator.getProperty("http://apache.org/xml/properties/internal/error-reporter"); MessageFormatter messageFormatter = property.getMessageFormatter("http://www.w3.org/TR/xml-schema-1"); property.putMessageFormatter(MyMessageFormatter.SCHEMA_DOMAIN, new MyMessageFormatter()); public class MyMessageFormatter implements MessageFormatter { public static final String SCHEMA_DOMAIN = "http://www.w3.org/TR/xml-schema-1"; //... public String formatMessage(Locale locale, String key, Object[] arguments) throws MissingResourceException {...} //... } 

我想你应该尝试使用

 com.sun.org.apache.xerces.internal.impl.msg.XMLMessageFormatter 

如果您正在编写自定义validation,请尝试调用其formatMessage(…)方法,您可以在其中提供区域设置名称作为参数。

apache库本身提供了相同的示例。 请参阅http://cr.openjdk.java.net/~coffeys/openJDK.7u21.sync/webrev/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_zh_CN.java-。 HTML

要么

http://www.docjar.com/html/api/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter.java.html

另一种方法可能是您可以覆盖formatMessage()方法以您自己的方式实现它。 请参阅以下实现的此方法的代码:

  public String More ...formatMessage(Locale locale, String key, Object[] arguments) throws MissingResourceException { if (fResourceBundle == null || locale != fLocale) { if (locale != null) { fResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages", locale); // memorize the most-recent locale fLocale = locale; } if (fResourceBundle == null) fResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages"); } 

这表明,如果根据区域设置声明资源包文件,则控件应该能够选择具有不同语言的错误消息的不同资源文件。