ValidationMessages.properties не уважают мой язык - PullRequest
0 голосов
/ 07 января 2020

Я пытался установить пользовательские сообщения проверки в сущность JPA. Сообщения находятся в файле ValidationMessages.properties, но не соответствуют моему классу InternationalizationConfig. java (Мое приложение корректно интернационализировано, за исключением сообщений из ValidationMessages.properties, которые на французском языке вместо engli sh)

Моя сущность:

package com.test.weblab2.entities;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;

@Entity
@Table(name = "todo")
public class Todo {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @Column(name = "category", nullable = false)
    @NotEmpty
    @Pattern(regexp="(WORK|PERSONAL|SPECIAL)",
        message="{typeMismatch.todo.category}")
    private String category;

    public Todo() {
    }

    public Todo(String category) {
        this.category = category;
    }

    @Override
    public String toString() {
        return String.format(
            "Todo[id=%d, category='%s']",
            id, category);
    }

    public Long getId() {
        return id;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }
}

My ValidationMessages.properties:

typeMismatch.todo.category=Category must be WORK or SPECIAL or PERSONAL

My ValidationMessages_fr_FR.properties:

typeMismatch.todo.category=La catégorie doit être WORK ou SPECIAL ou PERSONAL

Моя конфигурация интернационализации:

package com.test.weblab2;

import java.util.Locale;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

@Configuration
public class InternationalizationConfig implements WebMvcConfigurer {
    @Bean
    public CookieLocaleResolver localeResolver() {
        CookieLocaleResolver localeResolver = new CookieLocaleResolver();
        localeResolver.setCookieName("lang");
        localeResolver.setDefaultLocale(Locale.UK);
        return localeResolver;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("lang");
        localeChangeInterceptor.setIgnoreInvalidLocale(false);
        return localeChangeInterceptor;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

Как решить эту проблему?

Редактировать: Хорошо работает, когда я переименую ValidationMessages.properties в ValidationMessages_en_GB.properties

Если кто-то У вас есть представление о том, как определить ValidationMessages.properties для языка по умолчанию?

Я тестировал множество примеров кода конфигурации, как это, но безуспешно ...

@Bean
public LocalValidatorFactoryBean validator() {
    ReloadableResourceBundleMessageSource bundle = new ReloadableResourceBundleMessageSource();
    bundle.setBasename("classpath:/i18n/ValidationMessages");
    bundle.setDefaultEncoding("UTF-8");
    bundle.setDefaultLocale(Locale.UK);
    bundle.setFallbackToSystemLocale(false);

    LocalValidatorFactoryBean validatorFactoryBean = new LocalValidatorFactoryBean();
    validatorFactoryBean.setValidationMessageSource(bundle);
    return validatorFactoryBean;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...