gpt4 book ai didi

简单字符串中的 Java,Spring 国际化 : how to use values from . 属性?

转载 作者:行者123 更新时间:2023-11-30 06:50:33 24 4
gpt4 key购买 nike

我用下一段代码

@Value("${app.user.root}")
private String userRoot;

从我的 application.properties 文件中获取常量值。

在我的GetMapping 方法 中,我需要重定向到错误 页面并传递一个字符串作为参数。

@GetMapping("/user/activate")
public String activate(String activation) {
Users u = usersService.activate(activation);
if (u != null) {
usersService.autoLogin(u);
return "redirect:/";
}

return "redirect:/error?message=Could not activate with this activation code, please contact support";

但我需要不同语言的不同字符串值。所以,我正在使用 Spring i18n,但是我如何才能在运行时获取我需要的值呢?我需要这样的东西:

return "redirect:/error?message=${errorMessage}";

谢谢你,希望你能帮助我。

最佳答案

首先你必须为多种语言创建多个属性文件

messages_en.propertiesmessages_fr.properties

i18n的配置应该如下

@Configuration
public class LanguageConfig extends WebMvcConfigurerAdapter {

@Bean
public ReloadableResourceBundleMessageSource messageSource(){
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocaleResolver localeResolver() {
SmartLocaleResolver slr = new SmartLocaleResolver();
Locale locale = new Locale("en", "us");
slr.setDefaultLocale(locale); // Set default Locale as en_cos
return slr;
}

@Bean
public LocaleChangeInterceptor localeInterceptor() {
LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("lang");
return interceptor;
}

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

class SmartLocaleResolver extends CookieLocaleResolver {

@Override
public Locale resolveLocale(HttpServletRequest request) {
String acceptLanguage = request.getHeader("Accept-Language");
if (acceptLanguage == null || acceptLanguage.trim().isEmpty()) {
return super.determineDefaultLocale(request);
}
return request.getLocale();
}

}
}

现在更新您的 Controller 代码并 Autowiring org.springframework.context.MessageSource,然后使用它来获取本地化消息。

@Autowired
private MessageSource messageSource;

然后您可以使用以下代码获取本地化消息。

String errorMessage = messageSource.getMessage("project.errorMessage", new Object[]{"John Doe"},  LocaleContextHolder.getLocale());

您也可以使用来自 Controller 方法参数的 Locale 对象而不是 LocaleContextHolder.getLocale(),但它工作得很好。

关于简单字符串中的 Java,Spring 国际化 : how to use values from . 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41273766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com