如何在解析 XML 文件时国际化 SAXParseException?
How to internationalization SAXParseException while parsing XML file?
我遇到了类似这个问题的问题:SAXParseException localized
我正在尝试解析 XML 文件并获取多种语言的解析器错误列表 (SAXParseException),例如:
XmlImporter.importFile(params, "en")
应该 return 英语错误列表,XmlImporter.importFile(params, "fr")
应该 return 法语错误列表,XmlImporter.importFile(params, "pl")
应该 return 波兰语错误列表。
XmlImporter.importFile(params, "...")
的每次调用都可能使用不同的语言环境。
这是我的验证方法:
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();
}
}
我假设,我需要传递 somehow/somewhere java.util.Locale/String 以获取 exception.getLocalizedMessage() 自定义消息(en、fr 或 pl)?
默认 Xerces(Java 用于将 XML 文件转换为 Java 对象的解析器)可以为给定语言提供国际化:
- 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
提供其他语言的国际化:
从 Apache Xerces 获取 XMLSchemaMessages.properties
文件并将文件重命名为新文件 XMLSchemaMessages_LANG.properties
,其中 LANG 需要更改为新语言。
将文件的消息更新为新语言并将此文件放在类路径中(您可以将此文件添加到 src\main\resources\com\sun\org\apache\xerces\internal\impl\msg
)
例外情况将以新语言显示(消息将从 XMLSchemaMessages_LANG.properties
文件中获取)
我遇到了类似这个问题的问题:SAXParseException localized
我正在尝试解析 XML 文件并获取多种语言的解析器错误列表 (SAXParseException),例如:
XmlImporter.importFile(params, "en")
应该 return 英语错误列表,XmlImporter.importFile(params, "fr")
应该 return 法语错误列表,XmlImporter.importFile(params, "pl")
应该 return 波兰语错误列表。
XmlImporter.importFile(params, "...")
的每次调用都可能使用不同的语言环境。
这是我的验证方法:
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();
}
}
我假设,我需要传递 somehow/somewhere java.util.Locale/String 以获取 exception.getLocalizedMessage() 自定义消息(en、fr 或 pl)?
默认 Xerces(Java 用于将 XML 文件转换为 Java 对象的解析器)可以为给定语言提供国际化:
- 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
提供其他语言的国际化:
从 Apache Xerces 获取
XMLSchemaMessages.properties
文件并将文件重命名为新文件XMLSchemaMessages_LANG.properties
,其中 LANG 需要更改为新语言。将文件的消息更新为新语言并将此文件放在类路径中(您可以将此文件添加到
src\main\resources\com\sun\org\apache\xerces\internal\impl\msg
)例外情况将以新语言显示(消息将从
XMLSchemaMessages_LANG.properties
文件中获取)