这就是我在Spring应用程序中添加国际化的方法。
首先,我在类中添加:
@Configuration
public class SpringSecurityConfig {
// ...
}
方法(这里我设置了默认语言-波兰语):
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(new Locale("pl"));
return slr;
}
接下来,在实现WebMvcConfigurer
接口的类中,我添加了以下两个方法:
@Component
public class WebMvcConfigurerImpl implements WebMvcConfigurer {
// ...
// Configuring a component that supports changing language settings
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
// Registering a component that supports changing the language
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
添加上述代码后,我在resources
文件夹中创建了两个文件labels.properties
和labels_en.properties
。在这些文件中,我将把key=value
格式写入将显示在页面上的文本(我使用Thymeleaf)。
application.properties
文件中,我将名称标签添加到spring.messages.basename
,这是它的样子:
spring.messages.basename=errors-messages,labels
现在,当请求中的页面收到…?lang=en (lang
参数,值为en
),页面上的标签应该改变了,但它没有。
我做错了什么?
您只需要稍微修改一下代码。用some_url?lang=en_GB
代替some_url?lang=en
例如,你可以有一个链接,将触发语言转换为英语
<a id="link_en_GB" href="/some_url?lang=en_GB" >English</a>
编辑:我刚刚尝试了使用some_url?lang=en
的语言变化,这也有效,所以我想问题不是url本身,而是别的东西。确保你有一个匹配/some_url的控制器方法,并且用户有正确的权限来访问它。