4

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 への切り替えはオプションではありません。

どんな助けでも大歓迎です!

4

3 に答える 3

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);

SAXParser saxParser単純な呼び出しの場合saxParser.setProperty("http://apache.org/xml/properties/locale", Locale.FRANCE);

ああ、公式ソースを忘れました: http://xerces.apache.org/xerces2-j/properties.html

于 2013-09-11T15:57:18.023 に答える
4

可能性 set/get 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 {...}
    //...

}
于 2015-04-09T20:15:31.783 に答える