我按照以下指南中的说明设置了Spring:http://www.springbyexample.org/examples/basic-webapp-internationalization-spring-config.html
如果我要附加?locale = fr,例如,在URL的末尾,语言环境将更改为法语。
但是,在我的情况下,我想在用户登录时设置区域设置,因为此信息与其配置文件相关联。我曾尝试使用localeResolver.setLocale(请求,响应,新的Locale(“fr”))(其中localeResolver是SessionLocaleResolver的一个实例)来指定语言环境但是这没有任何效果。
知道我做错了什么吗?我是否以正确的方式处理这个问题?
答案 0 :(得分:13)
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 \主\资源\消息\ messages.properties
my.message =消息(默认语言)
\ SRC \主\资源\消息\ messages_en.properties
my.message =英文消息
\ SRC \主\资源\消息\ 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”)更改为新的Locale(“fr”)会得到相同的结果。
答案 1 :(得分:5)
我建议尝试将默认语言环境设置为:
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="fr_FR" />
</bean>
一些有用的信息在博文Configuring locale switching with Spring MVC 3中。
答案 2 :(得分:1)
示例:
/usr/lib/python2.7/dist-packages/matplotlib/__init__.py:1352: UserWarning: This call to matplotlib.use() has no effect because the backend has already been chosen;
matplotlib.use() must be called *before* pylab, matplotlib.pyplot, or matplotlib.backends is imported for the first time.
答案 3 :(得分:0)
你可以看看Spring Roo项目。 Spring提供了一个国际化版本,它正在Spring Roo中使用,可以在Roo自动生成的Spring Web应用程序中快速切换Locale。
答案 4 :(得分:0)
如何确定尚未设置区域设置?如果您希望HttpServletRequest
中存在正确的语言环境,则不是这样 - 它的值由servlet容器处理,因此是不可变的。相反,您应该依赖Spring将一个适当的值注入控制器中具有类Locale
的方法参数。获取区域设置的另一种方法是直接使用RequestContextUtils.getLocale(HttpServletRequest request)
。
答案 5 :(得分:0)
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
Locale locale = new Locale("tr", "TR");
sessionLocaleResolver.setDefaultLocale(locale);
return sessionLocaleResolver;
}