Я пытался установить пользовательские сообщения проверки в сущность 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;
}