为什么我的国际化不工作(Spring Boot Application)



这就是我在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.propertieslabels_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的控制器方法,并且用户有正确的权限来访问它。

最新更新