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
要么
另一种方法可能是您可以覆盖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"); }
这表明,如果根据区域设置声明资源包文件,则控件应该能够选择具有不同语言的错误消息的不同资源文件。