2017-05-24 2 views
0

J'ai un problème similaire à cette question: SAXParseException localizedComment internationaliser SAXParseException lors de l'analyse du fichier XML?

Je suis en train d'analyser un fichier XML et obtenir une liste des erreurs d'analyse (de SAXParseException) dans un plusieurs langues par exemple:

XmlImporter.importFile(params, "en") devrait retourner une liste d'erreurs en anglais, XmlImporter.importFile(params, "fr") devrait renvoyer une liste d'erreurs en français, XmlImporter.importFile(params, "pl") devrait renvoyer une liste d'erreurs en langue polonaise.

Chaque appel de XmlImporter.importFile(params, "...") peut être avec un environnement local différent.

C'est ma méthode de validation:

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:

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

Je suppose que je dois passer en quelque sorte/quelque part java.util.Locale/String pour obtenir en exception.getLocalizedMessage() message personnalisé (en en, fr ou pl)?

Répondre

0

par les Xerces par défaut (Java Parser qui est utilisé pour convertir le fichier XML pour objet Java) pourrait fournir l'internationalisation pour les langues données:

  • 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

Fournir l'internationalisation dans d'autres langues:

  1. Get XMLSchemaMessages.properties fichier d'Apache Xerces et renommer le fichier dans un nouveau fichier XMLSchemaMessages_LANG.properties, où LANG doit être changé une nouvelle langue.

  2. messages du fichier de mise à jour à une nouvelle langue et placer ce fichier dans un classpath (Vous pouvez ajouter ce fichier à src\main\resources\com\sun\org\apache\xerces\internal\impl\msg)

  3. Des exceptions seront visibles dans une nouvelle langue (les messages seront prises à partir du fichier XMLSchemaMessages_LANG.properties)