Hibernate Validation и локализованные сообщения об ошибках?

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() указывает на то, что язык изменен, и это арабский язык, так что чего-то не хватает в конфигурации или каких-либо идей, что может вызвать это?


person Mahmoud Saleh    schedule 05.04.2011    source источник


Ответы (1)


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

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

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

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

person David    schedule 07.05.2011
comment
Я предполагаю, что этот ответ более уместен – /. - person Gedrox; 07.02.2013