Spring:设置区域设置

8
我已按照以下指南设置了Spring:http://www.springbyexample.org/examples/basic-webapp-internationalization-spring-config.html 例如,如果我在URL末尾附加?locale=fr,语言环境将更改为法语。
然而,在我的情况下,我想在用户登录时设置语言环境,因为此信息与其个人资料相关联。我尝试使用localeResolver.setLocale(request,response,new Locale(“fr”))(其中localeResolver是SessionLocaleResolver的实例)来指定语言环境,但这没有任何效果。
你知道我做错了什么吗?我是否以正确的方式解决了这个问题?
6个回答

16

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

我的页面.jsp

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

\src\main\resources\messages\messages.properties

my.message=消息(默认语言)

\src\main\resources\messages\messages_en.properties

my.message=英语消息

\src\main\resources\messages\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")更改为new Locale("fr")将产生相同的结果。

6
我建议将默认语言环境设置为以下内容:

try to set up default locale as:

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

一些有用的信息在博客文章“使用Spring MVC 3配置语言环境切换”中。


1

例子:

@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;
    }
}

1
 @Bean
 public LocaleResolver localeResolver() {
     SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
     Locale locale = new Locale("tr", "TR");
     sessionLocaleResolver.setDefaultLocale(locale);
     return sessionLocaleResolver;
 }

0
你可以看一下Spring Roo项目。Spring Roo中有一个国际化插件,它能够在自动生成的Spring Web应用程序中实现快速切换语言环境。

0
你如何确定区域设置未被设置?如果你期望在HttpServletRequest中存在正确的区域设置,那么这是不正确的——它的值由servlet容器处理,因此是不可变的。相反,你应该依赖于Spring将适当的值注入到控制器中具有类Locale的方法参数中。另一种获取区域设置的方法是直接使用RequestContextUtils.getLocale(HttpServletRequest request)

我正在尝试以编程方式设置区域设置。消息仍然是英文的。我改用“?locale=fr”方法,现在消息被加载为法语。 - NRaf
请提供您检索当前用户环境语言环境的代码 - Jiří Vypědřík

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接