有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用thymeleaf和spring国际化动态更改语言选择链接

我正在开发一个必须具有国际化的网站,我正在尝试更改语言选择文本,使其根据用户当前使用的语言动态呈现

假设网站现在是葡萄牙语的,则语言选择文本应为“英语”,值应相应更改,反之亦然

当前的代码:

<select class="form-control dropdown2 col-lg-2 col-10 text-white" id="locales">
      <option>Idioma/Language</option>
      <option value="en" th:text="#{langEN}"></option>
      <option value="pt_BR" th:text="#{langPT}"></option>
</select>

$(document).ready(function() {
    $("#locales").change(function() {
        var selectedOption = $('#locales').val();
        if (selectedOption != '') {
            window.location.replace('?lang=' + selectedOption);
        }
        if(document.getElementById("clientPage")){
            window.location.replace(window.location.href + '&lang=' + selectedOption);
        }
    });
});

下面是我试图实现的一个例子:

<a th:href="#{langURL}" th:text="#{lang}"></a>

其中langURLlang将在消息中设置。每种语言的属性

编辑:

使用以下代码解决了我的问题:

<a th:href="@{/?lang=}+#{lang.url}" th:text=#{lang.text}></a>

共 (1) 个答案

  1. # 1 楼答案

    我不确定您是否已经创建了实现这一目标所需的所有bean,因此我将提供尽可能多的帮助,以便有人可以从头开始配置Spring+Thymeleaf

    首先设置localResolver bean并设置默认区域设置:

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(Locale.ENGLISH);
        return slr;
    }
    

    然后,在@Configuration类(应该实现WebMVCConfiguer接口)中设置localeChangeInterceptor,以便它根据每个请求的lang参数更改语言:

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

    并在应用程序的拦截器注册表中设置拦截器:

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

    这就是Spring配置的全部内容。现在你需要添加消息。属性文件保存到src/main/resources文件夹中。语言在消息中设置。属性文件名使用以下格式:messages_??。房产,在哪里??是语言代码,例如:messages_en。属性或消息\u fr.properties

    还请注意,如果语言代码(lang参数)不作为现有语言环境存在,那么应用程序将返回默认语言环境。价值观

    最后,确保URL包含参数lang=<language>,即http://example.com/page?lang=fr