I18n сообщений об ошибках проверки XSD в Java

Я выполняю проверку XSD XML, используя следующие классы:

import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

Проблема в том, что сообщения об ошибках XSD, возвращаемые валидатором, всегда на английском языке. Можно ли вызвать проверку с учетом локали с помощью JAXP API?


person Henryk Konsek    schedule 08.10.2010    source источник
comment
Это Локализация, на самом деле. Вам нужны локализованные сообщения, а не внешние. КСТАТИ. Если нет такого свойства, как localizedMessage (обычное для исключений), вы можете просто вывести сообщения на английском языке (это будет i18n).   -  person Paweł Dyda    schedule 08.10.2010


Ответы (3)


JAXP — это API; фактическая реализация (например, Apache Xerces) должна предоставлять сообщения с учетом локализации.

Однако обычно библиотеки и реализации системного уровня (такие как JAXP и Xerces) будут предоставлять сообщения, локализованные на основе локали системы по умолчанию (независимо от того, что возвращается из выражения java.util.Locale.getDefault()); это, опять же, зависит от ОС.

В Microsoft Windows, например, вы можете изменить языковой стандарт вашей системы, используя окно Regional Settings.

Если вы хотите, вы можете переопределить «локаль по умолчанию», используемую JVM, указав системные свойства user.language и user.region (например, -Duser.language=fr и -Duser.region=CA заставят JVM выдать «канадский французский» в качестве локали по умолчанию. В конце концов, этот параметр будет добраться до кода JAXP.Если Xerces предоставляет пакеты ресурсов на канадском французском языке, то сообщения на канадском французском языке будут отправлены.

person Isaac    schedule 23.10.2010
comment
Проблема в том, что я хочу передать локаль во время выполнения. - person Henryk Konsek; 24.10.2010
comment
Стандарт JAXP не предоставляет средств для указания локали во время выполнения. Я считаю, что причина этого в том, что очень необычно нужно, чтобы эти сообщения были доступны в нескольких локалях во время выполнения. Это не тот тип сообщений, который обычно отображается для конечных пользователей, а для администраторов; вот почему, я считаю, спецификации JAXP было достаточно одной локали - локали системы. Конечно, возможно, что определенные реализации JAXP предоставляют способ указать локали во время выполнения... но тогда вы будете привязываться к конкретной реализации JAXP. - person Isaac; 25.10.2010

Видимо нет способа добиться того, что я хочу.

person Henryk Konsek    schedule 19.01.2011

Он должен печатать сообщения об ошибках на японском языке, только если существует файл ресурсов внутри 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"));

Надеюсь, поможет.

person Juan Gil    schedule 05.05.2020