Sie können acheive von Bohne zu schaffen für MessageSource
hinzufügen, LocaleResolver
und LocaleChangeInterceptor
Bohne und dann LocaleChangeInterceptor
-InterceptorRegistry
wie folgt aus:
@Configuration
public class CountryConfig extends WebMvcConfigurerAdapter{
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasenames("classpath:country-conf/country");
messageSource.setUseCodeAsDefaultMessage(true);
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(3600);
return messageSource;
}
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.US);
return slr;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("country");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
Und dann erstellen Sie einen Ordner country-conf
in resources
Ordner. In diesem Ordner erstellen Sie eine Eigenschaftendatei, die Ihre Konfiguration hat. Ex:
country.properties (Standard)
country.name=United states
country_fr.properties
country.name=France
country.properties
ist die Standardeigenschaften, wenn kein Land in Parameter gesendet wird, und wenn Sie country=fr
schicken in Parameter wird dann nach country_fr.properties
Datei suchen.
nun einen Dienst erstellen, die den Wert von diesen Eigenschaften erhalten wird auf Länderparameter
@Service
public class CountryService {
@Autowired
private MessageSource messageSource;
public String getMessage(String code) {
Locale locale = LocaleContextHolder.getLocale();
return this.messageSource.getMessage(code, null, locale);
}
}
Um zu testen, um dieses autowire Land Service
@Autowired
CountryService countryService;
Und dann rufen getMessage Methode dateibasierte
countryService.getMessage("country.name");
Soweit ich es verstehe, müssen Sie Springboot mitteilen, welches Profil beim Start geladen werden soll (zB dev, s walking, prod etc.). In meinem Fall basiert die Anfrage z./getData? countryCode = za,/getData? countryCode = in etc und ich muss entsprechende Konfigurationsdateien (za/config.yaml und in/config.yaml) verwenden, um jede Anfrage zu bedienen. Verwenden Sie Profile dafür? – Vikk
Sie können es programmatisch hinzufügen: 'AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.getEnvironment(). SetActiveProfiles ("za"); ' – user7294900