Интернационализация Spring Boot для нескольких страниц - PullRequest
0 голосов
/ 26 июня 2018

Я впервые работаю с весенними сапогами и тимелистом. Я получил 2 страницы в моем заявлении. Страница со всеми автомобилями и страница конфигурации для конкретного автомобиля.

В моем заголовке я получил поле выбора, в котором можно изменить язык. Это появляется на обеих страницах. Когда я меняю язык, я получаю localeResolver, который меняет язык. Я получил 2 файла message.properties для 2 языков.

Если я, например, выберу английский, страница перезагружается с английским языком. Затем, когда я нажимаю на автомобиль, чтобы перейти на страницу конфигурации этого конкретного автомобиля, он все еще помнит, какой язык использовать. Но на странице конфигурации вы также можете изменить язык в шапке. Если я нажимаю, например, на голландский, он тоже работает.

Но если я перейду на предыдущую страницу, у нее все еще будет старый URL с localhost: 9000 / locale? Lang = en_GB вместо localhost: 9000 / locale? Lang = nl_NL.

Когда я возвращаю представление из контроллера, я хочу, чтобы оно возвращало его с языком.

Это мой webMvcConfig

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(localeChangeInterceptor());
    registry.addInterceptor(new ThymeLeafLayoutInterceptor());
}

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

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

Это мой контроллер, который возвращает представление search.html

 @RequestMapping(method = RequestMethod.GET)
public String search() {
    return "search";
}

Как мне вернуть представление с языковым параметром. Так, например: localhost:9000/locale?lang=en_GB

1 Ответ

0 голосов
/ 27 июня 2018

Я думаю, что вы нажимаете кнопку возврата (←) браузера. Если это так, то это совсем не проблема.
Только не забудьте предоставить слишком много функций для вашей программы.
Вы просто загромождаете свое приложение ненужным кодом.

Как часто пользователь выбирает язык на странице 1 , затем переходит на страницу 2 , выбирает другой язык и затем нажимает go назад кнопка браузера?!

Однако, если вам действительно нужно добавить параметры запроса самостоятельно, вам следует перенаправить на новую страницу, как указано в этом ответе (что заставляет браузер клиента отправлять вам новый запрос):

return "redirect:YOUR_PAGE_URL?lang=en_GB";

Вы также можете получить текущую локаль в методе вашего контроллера, если это поможет:

Locale locale = LocaleContextHolder.getLocale();
return "redirect:YOUR_PAGE_URL?lang=" + locale;
...