java 为什么我的国际化不起作用(Sping Boot 应用程序)

n3schb8v  于 2023-01-15  发布在  Java
关注(0)|答案(1)|浏览(273)

这就是我向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)时,页面上的标签应该已经更改,但实际上没有。
我做错了什么?

mqkwyuun

mqkwyuun1#

您只需要稍微修改代码,不要使用some_url?lang=en,而使用some_url?lang=en_GB
例如,您可以有一个链接,将触发语言更改为英语

<a  id="link_en_GB" href="/some_url?lang=en_GB" >English</a>

编辑:我刚刚尝试了用some_url?lang=en来修改语言,这也能用,所以我猜问题不在于url本身,而在于其他东西。确保你有一个控制器方法匹配/some_url,并且用户有权限访问它。

相关问题