Java中XSD验证错误消息的I18n
我使用以下类执行XSD XML验证:Java中XSD验证错误消息的I18n,java,xml,localization,xsd,jaxp,Java,Xml,Localization,Xsd,Jaxp,我使用以下类执行XSD XML验证: import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; 问题是验证器返回的XSD错误消息总是用英语。是否可以使用JAXP API调用区域设置感知验证?JAXP是一种API;由实际实现(例如,apachexerces)提供本地化感知消息 但是,通常情况下,系统级库和实现(如JAXP
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
问题是验证器返回的XSD错误消息总是用英语。是否可以使用JAXP API调用区域设置感知验证?JAXP是一种API;由实际实现(例如,
apachexerces
)提供本地化感知消息
但是,通常情况下,系统级库和实现(如JAXP和Xerces)将提供基于系统默认区域设置的本地化消息(从表达式java.util.locale.getDefault()
返回的内容);这也是操作系统特有的
例如,在Microsoft Windows上,您可以使用区域设置
窗口更改系统的默认区域设置
如果需要,可以通过指定
user.language
和user.region
系统属性(例如,-Duser.language=fr
和-Duser.region=CA
将使JVM产生“加拿大法语”,从而覆盖JVM使用的“默认语言环境”作为默认区域设置。最终,此设置将进入JAXP的代码。如果Xerces提供加拿大法语资源包,则会发出加拿大法语消息。显然无法实现我的目标。只有在资源文件中存在错误消息时,它才应以日语打印错误消息
java.xml\com\sun\org\apache\xerces\internal\impl\msg\XMLSchemaMessages_ja.properties
但是我没有发现如何添加更多的语言
Validator validator = schema.newValidator();
validator.setErrorHandler(errorHandler);
validator.setProperty("http://apache.org/xml/properties/locale", Locale.forLanguageTag("ja"));
希望能有所帮助。这实际上就是本地化。您需要本地化消息,而不是将其外部化。顺便说一句,如果没有像localizedMessage这样的属性(这在例外情况中很常见),您可以将英语消息外部化(即i18n)。问题是我想在运行时传递区域设置。JAXP标准没有提供在运行时指定区域设置的方法。我认为其背后的原因是,在运行时真正需要在多个区域设置中提供这些消息是非常不寻常的。这不是最终用户通常看到的消息类型,但不是o管理员;这就是为什么,我相信JAXP规范只需要一个语言环境(系统的语言环境)就足够了。当然,某些JAXP实现可能提供了一种在运行时指定语言环境的方法……但是您将自己绑定到一个特定的JAXP实现。