Spring MVC国际化(Java学习笔记)

国际化(Internationalization 简称 I18n,其中“I”和“n”分别为首末字符,18 则为中间的字符数)是指软件开发时应该具备支持多种语言和地区的功能。

换句话说,软件应该能够同时应对多个不同国家和地区用户的访问,并根据用户地区和语言习惯,提供相应的、符合用具阅读习惯的页面和数据。例如,为中国用户提供汉语界面显示,为美国用户提供提供英语界面显示。

本节我们以 Thymemeaf 为例,演示下如何在 Spring MVC 项目中实现国际化。

在 Spring 项目中实现国际化,通常需要以下 4 步:

  1. Spring MVC 配置文件进行配置;
  2. 编写国际化资源(配置)文件;
  3. 在页面中获取国际化内容;
  4. 编写控制器方法手动切换语言。
  5. 配置 Spring MVC 的配置文件
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames" value="messages"></property>
    <property name="defaultEncoding" value="UTF-8"></property>
    <property name="cacheSeconds" value="0"></property>
</bean>

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

<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="lang"></property>
    </bean>
</mvc:interceptors>

以上个配置说明如下:
ResourceBundleMessageSource:对资源文件中设置的内容进行绑定;
LocaleChangeInterceptor:用于获取请求中的国际化信息并将其转换为 Locale 对象,以获取 LocaleResolver 对象对国际化资源文件进行解析。
SessionLocaleResolver:将将包含了国际化信息的 Locale 对象存储在 Session 中,供后续页面继续使用。
2. 编写国际化资源文件
在 Spring MVC 工程的类路径下创建国际化资源文件,文件名格式为:基本名_语言代码_国家或地区代码,例如 messages_en_US.properties、messages_zh_CN.properties。

在国际化资源文件中,我们需要对不同语言环境下需要进行国际化的各个字段进行配置,示例代码如下。

messages_en_US.properties 代码如下:

userName=userName
password=password

messages_zh_CN.properties 代码如下:

userName=用户名
password=密码

需要注意的是,这国际化资源文件名称必须严格按照其命名格式进行命名,否则解析时会出错。其次,国际化资源文件在创建完成后,这些文件通常会自动归档(Resouce Bundle),而该目录并非我们手动创建,如下所示。

- resources
    - Resouce Bundle 'messages'
        - messages_en_US.properties
        - messages_zh_CN.properties

  1. 在页面中获取国际化内容
    在完成以上配置后,我们只要在 Thymeleaf 代码中获取指定的字段即可,示例代码如下。
<h2 th:text="#{userName}"></h2>
<h2 th:text="#{password}"></h2>
  1. 手动切换语言环境
    我们可以在控制器类中编写一个控制器方法,手动切国际化的语言环境。
  1. 在前端页面中添加切换语言环境的超链接,示例代码如下。
<a th:href="@{/localeChange(lang=en_US)}">英文</a>
<a th:href="@{/localeChange(lang=zh_CN)}">中文</a>
  1. 在控制器类中添加一个切换或计划语言环境的控制器方法,示例代码如下。
@Controller
public class TestController {
    @Resource
    private ResourceBundleMessageSource messageSource;
    //切换语言环境
    @RequestMapping("/localeChange")
    public String localeChange(Locale locale) {
        String userName = messageSource.getMessage("userName", null, locale);
        String password = messageSource.getMessage("password", null, locale);
        System.out.println(userName + "----" + password);
        return "user";
    }
}

当我们想要手动切换语言环境时,只需要点击相应的超链接即可,此时浏览会发送一个 “/localeChange?lang=***”的请求。该请求会被我们在 Spring MVC 配置文件中配置的 LocaleChangeInterceptor 拦截,并将指定的请求参数(lang)的值转换为 Locale 对象,以获取 LocaleResolver 对象对指定的国际化资源文件进行解析,最终实现切换国际化语言环境的目的。

学习原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值