2015-03-24 2 views
1

Я хочу, чтобы переключить язык с английского и китайского языков, поэтому я создаю два языковых файлов:Как я могу переключать язык динамически весной mvc?

messages_en.properties messages_zh.properties

и в файл JSP, мой код, как показано ниже:

<c:choose> 
<c:when test="${language=='en'}"> 
    <a href='<c:url value="/language?language=zh" />'> 
    <i class='glyphicon glyphicon-asterisk'></i>&nbsp; 
     <s:message code="label.language" /> 
    </a> 
</c:when> 
<c:otherwise> 
    <a href='<c:url value="/language?language=en" />'> 
    <i class='glyphicon glyphicon-asterisk'></i>&nbsp; 
     <s:message code="label.language" /> 
    </a> 
</c:otherwise> 

и в файле контроллера, мой код, как показано ниже:

@RequestMapping(value = { "/language" }, method = RequestMethod.GET) 
public String switchLanguage(@RequestParam("language") String language, 
     ModelMap model) { 
    Locale currentLocale = null; 

    if ("zh".equals(language)) { 
     currentLocale = new Locale("zh", "CN"); 
    } else if ("en".equals(language)) { 
     currentLocale = new Locale("en", "US"); 
    } 
    model.put("language", currentLocale.getLanguage()); 

    return "/book/index"; 
} 

и в XML-файле, я конфиг MessageSource, как показано ниже:

<bean id="messageSource" 
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="classpath:language/messages"/> 
    <property name="defaultEncoding" value="UTF-8"/> 
</bean> 

Как я могу изменить свой код действия контроллера для переключения языка динамически?

Спасибо.

ответ

0

Вы можете использовать

Locale locale = Locale.forLanguageTag(language); 

, чтобы получить право локали. language может быть чем-то вроде «en» или «en_US». Проблема в том, что вы получаете только язык с вашего запросаParameter и знаете по определению, какую страну использовать.

Я бы создал карту для этого, содержащую языки как Ключи и страны в качестве значений. Таким образом, вы можете сделать:

String languageCountry = language + "_" + myCountryMap.get(language); // returns "US" 
Locale locale = Locale.forLanguageTag(languageCountry); 
1

Посмотрите на фасоль org.springframework.web.servlet.i18n.LocaleChangeInterceptor.

Похоже, это то, чего вам не хватает, или пытаетесь написать себя. Он выбирает параметр URL-адреса ?language=en и изменяет локализацию этого пользователя для вас.

A good tutorial here

+0

Учебник использует ControllerClassNameHandlerMapping который устаревшее весной 4.3.4 –

Смежные вопросы