Spring MVC 国际化的三种实现方式

本文介绍了Spring MVC的国际化实现,包括基于浏览器请求、HttpSession和Cookie的三种方式。详细阐述了每种实现的原理和配置步骤,帮助开发者理解如何在Spring MVC应用中实现多语言支持。
摘要由CSDN通过智能技术生成

Spring MVC国际化和拦截器的实现

1. Spring MVC国际化

  • 全球化的Internet需要全球化的软件。全球化软件,意味着一个软件能够很容易地适应不同地区的市场。当一个软件需要在全球范围内使用的时候,就必须考虑在不同的地域和语言环境下的使用情况,最简单的要求就是在用户界面上的信息可以使用本地化语言来表示。就开发者所关心的,软件的全球化意味着国际化和本地化。我们从以下几个方面进行讲解。
    在这里插入图片描述

1.1 Spring MVC国际化概述

  • 国际化(internationalization:i18n):国际化是指程序在不做任何修改的情况下,就可以在不同的国家或地区和不同的语言环境下,按照当地的语言和格式习惯的显示字符。例如:对于中国大陆的用户,会自动显示中文简体的提示信息,错误信息等;而对于美国的用户,会自动显示英文的提示信息,错误信息。

  • 本地化(Localization):国际化的程序运行在本地机器上时,能够根据本地机器的语言和地区设置相应的字符,这个过程叫做本地化。

  • 中国建设银行网站默认为中文,可选”繁体/ENGLISH”

  • Spring MVC国际化是建立在Java国际化的基础之上的

  • Spring MVC的国际化的结构:DispatcherServlet会解析一个LocaleResolver接口对象,通过它来决定用户区域,读出对应用户系统设定的语言或者用户选择的语言,确定其国际化。对于DispatcherServlet而言,只能够注册一个LocaleResolver接口对象,LocaleResolver接口的实现类都在org.springframework.web.servlet.i18n包下

  • Spring MVC也支持国际化的操作,可使用Spring MVC提供的语言区域解析器接口LocaleResolver,该接口常用实现类:

  1. AcceptLanguageLocaleResolver:控制器无需写额外的内容,可以不用显示配置

  2. SessionLocaleResolver:使用Session传输语言环境,根据用户session的变量读取区域设置,它是可变的,如果session没有设置,那么它也会使用开发者设置的默认值

  3. CookieLocaleResolver:使用Cookie传送语言环境,根据Cookie数据获取国际化信息,如果用户禁止Cookie或者没有设置,它会根据accept-language HTTP头部确定默认区域

在Spring MVC中,不直接使用java.util.ResourceBundle的抽象类,而是使用ResourceBundleMessageSource类作为messageResource的bean,告知Spring MVC国际化的属性

 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <!-- 国际化资源文件名 -->
    <property name="basename">
     <list>
       <value>message</value>
       <value>yzpc</value>
     </list>
    </property>
  </bean>

如果项目中只有一组属性文件,则可以使用basename来指定国际化属性文件的名称。

<!-- 加载国际化的资源文件 -->
  <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <!-- 国际化资源文件名 -->
    <property name="basename" value="message"></property>
  </bean>

1.2 基于浏览器请求的国际化实现

基于浏览器请求的国际化使用的是AcceptLanguageLocaleResolver类,该类是默认的实现类,也是最容易使用的语言区域解析器,
可以不用显式配置,也可以显式配置。
下面通过一个注册示例来讲解基于浏览器请求的国际化实现,步骤如下:

(1) 新建项目springmvc-6。

在这里插入图片描述(2) 在com.springmvc.entity包中,新建User的实体类。

package com.springmvc.entity;

public class User {
   

	private String loginName;
	private String password;
	private int age;
	private String email;
	private String phone;
	public String getLoginName() {
   
		return loginName;
	}
	public void setLoginName(String loginName) {
   
		this.loginName = loginName;
	}
	public String getPassword() {
   
		return password;
	}
	public void setPassword(String password) {
   
		this.password = password;
	}
	public int getAge() {
   
		return age;
	}
	public void setAge(int age) {
   
		this.age = age;
	}
	public String getEmail() {
   
		return email;
	}
	public void setEmail(String email) {
   
		this.email = email;
	}
	public String getPhone() {
   
		return phone;
	}
	public void setPhone(String phone) {
   
		this.phone = phone;
	}
	public User(String loginName, String password, int age, String email, String phone) {
   
		this.loginName = loginName;
		this.password = password;
		this.age = age;
		this.email = email;
		this.phone = phone;
	}
	public User() {
   
	}
}

(3) 在src根路径下,新建两个properties资源文件。

message_en_US.properties

loginName=LoginName
password=Password
age=Age
email=Email
phone=Phone
submit=Submit
welcome=Welcome {0},Congratulations on your registration
title=Register Page
userName=Administrator
info=Your registration information is as follows

message_zh_CN.properties

loginName=\u540D\u79F0
password=\u5BC6\u7801
age=\u5E74\u9F84
email=\u90AE\u7BB1
phone=\u7535\u8BDD
submit=\u
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值