Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中XSD验证错误消息的I18n_Java_Xml_Localization_Xsd_Jaxp - Fatal编程技术网

Java中XSD验证错误消息的I18n

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

我使用以下类执行XSD XML验证:

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实现。