Проверка гибернации и локализованные сообщения об ошибках? - PullRequest
2 голосов
/ 05 апреля 2011

hibernate и я хочу предоставить локализованные сообщения об ошибках для аннотаций hibernate, поэтому я создал файлы свойств ValidatorMessages.properties, ValidatorMessages_ar.properties

и поместил их в папку ресурсов, и я использую messageSource для чтения из свойствафайлы:

<bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>classpath:messages</value>
                <value>classpath:errors</value>
                <value>classpath:app</value>
                <value>classpath:ValidatorMessages</value>
            </list>
        </property>
        <property name="defaultEncoding" value="UTF-8" />
    </bean>

и в классе я использую что-то вроде:

@NotNull(message = "{validation.notEmpty.password}")
private string password;

и при вызове валидатора я использую:

Validator validator = Validation.buildDefaultValidatorFactory()
                .getValidator();
        Set<ConstraintViolation<MyClass> cvs = validator
                .validate(myObject);
        for (ConstraintViolation<MyClass> cv : cvs) {
            String field = cv.getPropertyPath().toString();
            result.addError(new FieldError("version", field, cv.getMessage()));
        }

        if (result.hasErrors()) {
            initModel();
            result.reject("add.version.errors");
            return "manageVersions";
        }

, он отлично работает спо-английски, он отображает английские сообщения правильно, но при переключении на арабский он по-прежнему отображает английские сообщения вместо арабского, хотя это

LocaleContextHolder.getLocale() означает, что язык изменился, и он арабский, так что чего-то не хватаетс конфигурацией или какие-либо идеи, что может вызвать это?

1 Ответ

2 голосов
/ 07 мая 2011

В вашей конфигурации Spring, когда вы настраиваете свой bean-компонент валидатора, я думаю, вам нужно установить интерполятор сообщений:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="messageInterpolator" ref="interpolator" />
</bean>

, где bean-компонент интерполятора будет иметь тип LocaleContextMessageInterpolator (см. здесь для получения дополнительной информации).Hibernate Validator не знает автоматически, чтобы посмотреть на LocaleContextHolder.

Возможно, вам также понадобится установить свойство validationMessageSource, но я думаю, что оно по умолчанию установлено правильно, поскольку вы по крайней мере получаете сообщения об ошибках на английском языке.

...