2017-05-24 5 views
0

私はこの質問への同様の問題持っている:私は、XMLファイルを解析し、例えば、いくつかの言語でパーサーエラー(SAXParseExceptionの)のリストを取得しようとしているSAXParseException localizedXMLファイルの解析中にSAXParseExceptionを国際化する方法はありますか?

を:

XmlImporter.importFile(params, "en")必要があります英語でエラーのリストを返します。XmlImporter.importFile(params, "fr")はフランス語でエラーのリストを返すべきです、XmlImporter.importFile(params, "pl")はポーランド語でエラーのリストを返すべきです。

XmlImporter.importFile(params, "...")のすべての通話が異なるロケールである可能性があります。

これは私の検証メソッドです:私はexception.getLocalizedMessageに取得するために何とか/どこかjava.util.Localeの/文字列を渡す必要があることを、前提とし

public class XmlErrorHandler implements ErrorHandler { 

    private List<String> errorsList = new ArrayList<>(); 

    public List<String> getErrorsList() { 
     return errorsList; 
    } 

    @Override 
    public void warning(SAXParseException exception) throws SAXException { 
     errorsList.add(prepareExceptionDescription(exception)); 
    } 

    @Override 
    public void error(SAXParseException exception) throws SAXException { 
     errorsList.add(prepareExceptionDescription(exception)); 
    } 

    @Override 
    public void fatalError(SAXParseException exception) throws SAXException { 
     errorsList.add(prepareExceptionDescription(exception)); 
    } 

    private String prepareExceptionDescription(SAXParseException exception) { 
     return "Error: " + 
       "colNumber: " + exception.getColumnNumber() + 
       " line number: " + exception.getLineNumber() + 
       " message: " + exception.getLocalizedMessage(); 
    } 
} 

private void validate(String xmlFilePath, String schemaFilePath) throws Exception { 
    SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
    Schema schema = schemaFactory.newSchema(new File(schemaFilePath)); 
    Validator validator = schema.newValidator(); 

    XmlErrorHandler errorHandler = new XmlErrorHandler(); 
    validator.setErrorHandler(errorHandler); 

    try (InputStream stream = new FileInputStream(new File(xmlFilePath))) { 
     validator.validate(new StreamSource(stream)); 
    } 

がXmlErrorHandler ()enのカスタムメッセージ(en、frまたはpl)? (JavaオブジェクトにXMLファイルを変換するために使用されるJavaのパーサ)デフォルトのXercesによって

答えて

0

与えられた言語のための国際化を提供することができますが:

  • XMLSchemaMessages_de.properties XMLSchemaMessages_es.properties
  • XMLSchemaMessages_fr.properties XMLSchemaMessages_it.properties
  • XMLSchemaMessages_ja.properties XMLSchemaMessages_ko.properties
  • XMLSchemaMessages_pt_BR.propertiesのXMLSchemaMessages_sv.properties
  • XMLSchemaMessages_zh_CN.properties XMLSchemaMessages_zh_TW.properties

他の言語に国際化を提供する:

  1. は、Apache XercesのからXMLSchemaMessages.propertiesファイルを取得し、LANGに変更する必要のある新しいファイルXMLSchemaMessages_LANG.propertiesにファイルの名前を変更新しい言語。新しい言語へ

  2. アップデートファイルのメッセージやクラスパスにこのファイルを配置し(あなたがsrc\main\resources\com\sun\org\apache\xerces\internal\impl\msgにこのファイルを追加することができます)

  3. 例外が新しい言語で表示されます(メッセージはXMLSchemaMessages_LANG.propertiesファイルから取得されます)

関連する問題