您现在的位置是:亿华云 > 应用开发
这篇文章让你搞懂 SpringMVC 国际化!
亿华云2025-10-04 03:06:10【应用开发】9人已围观
简介松哥之前写过 Spring Boot 国际化的问题,不过那一次没讲源码,这次咱们整点源码来深入理解下这个问题。国际化,也叫 i18n,为啥叫这个名字呢?因为国际化英文是 internationaliz
松哥之前写过 Spring Boot 国际化的篇文问题,不过那一次没讲源码,章让这次咱们整点源码来深入理解下这个问题。搞懂C国
国际化,际化也叫 i18n,篇文为啥叫这个名字呢?章让因为国际化英文是 internationalization ,在 i 和 n 之间有 18 个字母,搞懂C国所以叫 i18n。际化我们的篇文应用如果做了国际化就可以在不同的语言环境下,方便的章让进行切换,最常见的搞懂C国就是中文和英文之间的切换,国际化这个功能也是际化相当的常见。
1.SpringMVC 国际化配置
还是篇文先来说说用法,再来说源码,章让这样大家不容易犯迷糊。搞懂C国我们先说在 SSM 中如何处理国际化问题。
首先国际化我们可能有两种需求:
在页面渲染时实现国际化(这个借助于 Spring 标签实现) 在接口中获取国际化匹配后的亿华云计算消息大致上就是上面这两种场景。接下来松哥通过一个简单的用法来和大家演示下具体玩法。
首先我们在项目的 resources 目录下新建语言文件,language_en_US.properties 和 language_zh-CN.properties,如下图:
内容分别如下:
language_en_US.properties:
login.username=Username login.password=Passwordlanguage_zh-CN.properties:
login.username=用户名 login.password=用户密码这两个分别对应英中文环境。配置文件写好之后,还需要在 SpringMVC 容器中提供一个 ResourceBundleMessageSource 实例去加载这两个实例,如下:
<bean class="org.springframework.context.support.ResourceBundleMessageSource" id="messageSource"> <property name="basename" value="language"/> <property name="defaultEncoding" value="UTF-8"/> </bean>这里配置了文件名 language 和默认的编码格式。
接下来我们新建一个 login.jsp 文件,如下:
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <spring:message code="login.username"/> <input type="text"> <br> <spring:message code="login.password"/> <input type="text"> <br> </body> </html>在这个文件中,我们通过 spring:message 标签来引用变量,该标签会根据当前的实际情况,选择合适的语言文件。
接下来我们为 login.jsp 提供一个控制器:
@Controller public class LoginController { @Autowired MessageSource messageSource; @GetMapping("/login") public String login() { String username = messageSource.getMessage("login.username", null, LocaleContextHolder.getLocale()); String password = messageSource.getMessage("login.password", null, LocaleContextHolder.getLocale()); System.out.println("username = " + username); System.out.println("password = " + password); return "login"; } }控制器中直接返回 login 视图即可。
另外我这还注入了 MessageSource 对象,主要是为了向大家展示如何在处理器中获取国际化后的语言文字。
配置完成后,启动项目进行测试。
默认情况下,服务器租用系统是根据请求头的中 Accept-Language 字段来判断当前的语言环境的,该这个字段由浏览器自动发送,我们这里为了测试方便,可以使用 POSTMAN 进行测试,然后手动设置 Accept_Language 字段。
首先测试中文环境:
然后测试英文环境:
都没问题,完美!同时观察 IDEA 控制台,也能正确打印出语言文字。
上面这个是基于 AcceptHeaderLocaleResolver 来解析出当前的区域和语言的。
有的时候,我们希望语言环境直接通过请求参数来传递,而不是通过请求头来传递,这个需求我们通过 SessionLocaleResolver 或者 CookieLocaleResolver 都可以实现。
先来看 SessionLocaleResolver。
首先在 SpringMVC 配置文件中提供 SessionLocaleResolver 的实例,同时配置一个拦截器,如下:
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="locale"/> </bean> </mvc:interceptor> </mvc:interceptors> <bean class="org.springframework.web.servlet.i18n.SessionLocaleResolver" id="localeResolver"> </bean> 亿华云很赞哦!(8)
上一篇: .net 适用于从事Internet相关的网络服务的机构或公司
下一篇: ④注册门槛低
相关文章
- 最后提醒我们,域名到期后要及时更新域名,否则可能会丢掉域名,每次抢先注册都不会成功。
- 一文快速搞懂MySQL InnoDB事务ACID实现原理
- Golang 中更好的错误处理:理论和实践技巧
- 你真的了解数据库工程师吗?写给想从事数据库方面工作的朋友
- 新手可以注册cc域名吗?cc域名有什么特点?
- 服务容错:项目整合Sentinel实现限流与容错
- Java 框架之Redis 分布式缓存
- 10个简单步骤,完全理解SQL
- 公司名字不但要与其经营理念、活动识别相统一,还要能反映公司理念,服务宗旨、商品形象,从而才能使人看到或听到公司的名称就能产生愉快的联想,对商店产生好感。这样有助于公司树立良好的形象。
- 服务容错:服务雪崩与容错方案