Как изменить язык выбрать ссылку динамически, используя тимилиф и весеннюю интернационализацию - PullRequest
1 голос
/ 08 ноября 2019

Я занимаюсь разработкой веб-сайта, который должен иметь интернационализацию, и я пытаюсь изменить язык Выберите текст, чтобы он отображался динамически в соответствии с языком, который пользователь использует сейчас.

Скажем, веб-сайтпрямо сейчас на португальском, тогда текст выбора языка должен читаться как «английский», а значение должно меняться соответственно и наоборот.

Код, как сейчас:

<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>

, где langURL и lang будут установлены в message.properties на каждом языке.

РЕДАКТИРОВАТЬ:

Моя проблема была решена с помощью следующего кода:

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

1 Ответ

0 голосов
/ 08 ноября 2019

Я не уверен, что вы создали все Бины, которые должны быть созданы для достижения этой цели, поэтому я предоставлю максимально возможную помощь, чтобы кто-то мог настроить Spring + Thymeleaf с нуля.

Первый наборbean-компонент localResolver и установить языковой стандарт по умолчанию:

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

Затем в своем классе @Configuration (который должен реализовывать интерфейс WebMvcConfigurer) установите 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. Теперь вам нужно добавить файлы messages.properties в вашу папку src / main / resources. Язык задается в имени файла messages.properties в следующем формате: messages _ ??. Properties, где ?? код языка, например: messages_en.properties или messages_fr.properties.

Также обратите внимание, что если код языка (параметр lang) не существует в качестве существующего языкового стандарта, то приложение будет использовать языковой стандарт по умолчанию,value.

Наконец, убедитесь, что ваши URL содержат параметр lang=<language> т.е. http://example.com/page?lang=fr

...