SpringMVC学习系列(8) 之 国际化
一.基于浏览器请求的国际化实现:
1)在 spring的配置文件中添加
1 2 3 4 5 6 | <bean id= "messageSource" class = "org.springframework.context.support.ResourceBundleMessageSource" > <!-- 国际化信息所在的文件名 --> <property name= "basename" value= "locale/message" /> <!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称 --> <property name= "useCodeAsDefaultMessage" value= "true" /> </bean> |
2)在resources 下 建立文件夹 locale ,在locale下添加messages.properties、messages_zh_CN.properties、messages_en_US.properties三个文件
比如 resources/locale/messages_zh_CN.properties 下的内容
1 2 | message.login.fail=登录失败 message.login.success=登录成功 |
比如 resources/locale/messages_en_US.properties 下的内容
1 2 | message.login.fail=Login Fail message.login.success=Login Success |
3)在后台中读取资源化文件中的内容,并返回给前台
在Controller 文件添加一个方法
1 2 3 4 5 6 7 8 9 10 | @RequestMapping (value = "/testMessage.do" ) public String testMessage(HttpServletRequest request,Model model) { logger.debug( "enter MainController.testMessage()" ); //从后台代码获取国际化信息 RequestContext requestContext = new RequestContext(request); model.addAttribute( "message" , requestContext.getMessage( "message.login.success" )); return "testmessage" ; } |
4)前台显示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <%@ page language= "java" contentType= "text/html; charset=UTF-8" pageEncoding= "UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > <% @taglib prefix= "spring" uri= "http://www.springframework.org/tags" %> <html> <head> <meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8" > <title>Insert title here</title> </head> <body> 下面展示的是后台获取的国际化信息:<br/> ${message}<br><br>在前台上直接显示国际化文件中的内容<br><spring:message code= "message.login.fail" ></spring:message> </body> </html> |
二.基于Session的国际化实现:
1)在 spring的配置文件中添加
1 2 3 4 5 6 | <mvc:interceptors> <!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 --> <bean class = "org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> </mvc:interceptors> <bean id= "localeResolver" class = "org.springframework.web.servlet.i18n.SessionLocaleResolver" /> |
2)在后台中
@RequestMapping(value = "/sessiontest", method = {RequestMethod.GET})
public String seesionTest(HttpServletRequest request, Model model,
@RequestParam(value = "langType", defaultValue = "zh") String langType)
{
if (langType.equals("zh"))
{
Locale locale = new Locale("zh", "CN");
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);
}
else if (langType.equals("en"))
{
Locale locale = new Locale("en", "US");
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);
}
else
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,
LocaleContextHolder.getLocale());
// 从后台代码获取国际化信息
RequestContext requestContext = new RequestContext(request);
model.addAttribute("message", requestContext.getMessage("message.login.success"));
return "testmessage";
}
3) 同上
4) 在jsp 页面上加入
1 2 | 使用session 切换 <a href= "${ctx }/sessiontest?langType=zh" >中文</a> | <a href= "${ctx }/sessiontest?langType=en" >英文</a><br/><br>${message}<br> |
三.基于Cookie的国际化实现:
同session 类似,不与session方式同时存在
1)在 spring的配置文件中添加
1 | <bean id= "localeResolver" class = "org.springframework.web.servlet.i18n.CookieLocaleResolver" /> |
2)后台
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | @RequestMapping (value = "/cookietest" , method = {RequestMethod.GET}) public String cookietest(HttpServletRequest request, HttpServletResponse response, Model model, @RequestParam (value = "langType" , defaultValue = "zh" ) String langType) { if (langType.equals( "zh" )) { Locale locale = new Locale( "zh" , "CN" ); ( new CookieLocaleResolver()).setLocale(request, response, locale); } else if (langType.equals( "en" )) { Locale locale = new Locale( "en" , "US" ); ( new CookieLocaleResolver()).setLocale(request, response, locale); } else ( new CookieLocaleResolver()).setLocale(request, response, LocaleContextHolder.getLocale()); // 从后台代码获取国际化信息 RequestContext requestContext = new RequestContext(request); model.addAttribute( "message" , requestContext.getMessage( "message.login.success" )); return "testmessage" ; } |
3) 同上
4) 在jsp 页面上加入
1 2 | 使用cookie 切换 <a href= "${ctx }/cookietest?langType=zh" >中文</a> | <a href= "${ctx }/cookietest?langType=en" >英文</a><br/>${message}<br> |
四.基于URL请求的国际化的实现:
1)自定义一个类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.DispatcherServlet; import org.springframework.web.servlet.LocaleResolver; public class MyAcceptHeaderLocaleResolver extends AcceptHeaderLocaleResolver { private Locale myLocal; public Locale resolveLocale(HttpServletRequest request) { return myLocal; } public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { myLocal = locale; } } |
2)在 spring的配置文件中添加
1 | <bean id= "localeResolver" class = "xx.xxx.xxx.MyAcceptHeaderLocaleResolver" /> |
“xx.xxx.xxx”是刚才添加的MyAcceptHeaderLocaleResolver 类所在的包名。
保存之后就可以在请求的URL后附上 locale=zh_CN 或 locale=en_US
参考:http://www.cnblogs.com/liukemng/p/3750117.html
作者:panie
出处:http://www.cnblogs.com/panie2015/
如果您希望与我交流互动,欢迎加我微信
本文内容为作者辛苦整理书写,欢迎转载,但请保留文章出处
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?