Весна: Настройка языка - PullRequest
6 голосов
/ 22 июня 2011

Я настроил Spring, как указано в следующем руководстве: http://www.springbyexample.org/examples/basic-webapp-internationalization-spring-config.html

Если я добавлю, например,? Locale = fr, в конец URL, язык будет изменен на французский.

Однако в моем случае я хочу установить языковой стандарт, когда пользователь входит в систему, поскольку эта информация связана с его профилем.Я пытался использовать localeResolver.setLocale (запрос, ответ, новый Locale ("fr")) (где localeResolver является экземпляром SessionLocaleResolver) для указания локали, однако это не имеет никакого эффекта.

Есть идеи, что я делаю не так?Правильно ли я подхожу к этому вопросу?

Ответы [ 5 ]

13 голосов
/ 18 октября 2013

localeResolver.setLocale у меня отлично работает, попробуйте что-то вроде этого:

ApplicationContext

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"
    p:basename="messages/messages" p:fallbackToSystemLocale="false" />

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />

my_page.jsp

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<html>
    <body>
        <p><spring:message code="my.message"/></p>  
    </body>
</html>

\ SRC \ главная \ Resources \ сообщения \ messages.properties

my.message = Сообщение (язык по умолчанию)

\ SRC \ главная \ Resources \ сообщения \ messages_en.properties

my.message = Сообщение на английском

\ SRC \ главная \ Resources \ сообщения \ messages_fr.properties

my.message = Сообщение на французском

Контроллер

@Controller
@RequestMapping("/")
public class SampleController {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String welcome(HttpServletRequest request, HttpServletResponse response) {
        LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
        localeResolver.setLocale(request, response, StringUtils.parseLocaleString("fr"));
        return "my_page";
    }
}

С этим кодом я получаю «Сообщение на французском», если я изменяю «fr» на «en», я получаю «Сообщение на английском», и без вызова setLocale я получаю «Сообщение (язык по умолчанию)». Изменение StringUtils.parseLocaleString ("fr") на новую локаль ("fr") дает те же результаты.

5 голосов
/ 12 ноября 2012

Я бы порекомендовал установить язык по умолчанию следующим образом:

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
     <property name="defaultLocale" value="fr_FR" />
 </bean>

Некоторая полезная информация содержится в сообщении в блоге Настройка переключения локали с помощью Spring MVC 3 .

1 голос
/ 10 октября 2018

Пример:

@Configuration
public class i18nConfiguration extends WebMvcConfigurerAdapter {

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
        Locale locale = new Locale("fr", "FR");
        sessionLocaleResolver.setDefaultLocale(locale);
        return sessionLocaleResolver;
    }
}
0 голосов
/ 22 июня 2011

Как вы определяете, что локаль не была установлена?Если вы ожидаете, что в HttpServletRequest указан правильный языковой стандарт, это не так - его значение обрабатывается контейнером сервлета и поэтому является неизменным.Вместо этого вы должны полагаться на то, что Spring введет правильное значение в параметр метода с классом Locale в вашем контроллере.Другой способ получить локаль - использовать RequestContextUtils.getLocale(HttpServletRequest request) напрямую.

0 голосов
/ 22 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...