SpringMVC国际化

java分享会

分享人:上海分院 唐坤

1.背景介绍

2.知识剖析

3.编码实战

4.常见问题

5.解决方案

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

需求

很多网站的用户分布在世界各地,因此网站需要针对不同国家的用户展示不同语言的内容,因此就有了国际化实现的需求,大多数网站都会在网站的头部或尾部设置语言切换链接,这样就可以直接切换成相应的内容。

国际化(Internationalization)指的是同一个网站可以支持多种不同的语言,以方便不同国家,不同语种的用户访问。 关于国际化我们想到的最简单的方案就是为不同的国家创建不同的网站,比如苹果公司,他的英文官网是:http://www.apple.com而中国官网是http://www.apple.com/cn

苹果公司这种方案并不适合全部公司,而我们希望相同的一个网站,而不同人访问的时候可以根据用户所在的区域显示不同的语言文字,而网站的布局样式等不发生改变。

具体需求

1.在页面上能够根据浏览器的情况对文本(不是内容),时间,数字进行本地化处理 2.可以在bean中获取国际化资源文件locale对应的消息 3.可以通过超链接获取locale,而不再依赖于浏览器的语言设置情况

于是就有了我们说的国际化,国际化总的来说就是同一个网站不同国家的人来访问可以显示出不同的语言。

国际化的英文Internationalization,但是由于拼写过长,有人想了一个简单的写法叫做I18N,代表的是Internationalization这个单词,以I开头,以N结尾,而中间是18个字母,所以简写为I18N。以后我们说I18N和国际化是一个意思。

2.知识剖析

首先我们需要知道,用户使用的是哪种语言,这个问题最好解决,因为浏览器在发送请求时会发送如下请求头:Accept-Language: zh-CN,en-US

下一步需要我们根据不同的语言显示不同的内容.

那我们想一下,如果说我们在页面中把这些诸如:用户名、密码等信息都写死了,那么,将不能再修改

所以在页面中这些需要国际化的内容都是需要动态获取的,也就是他们实际上都是变量。

我们一般采取的方式是将这些需要国际化的内容写到一个资源配置文件中,然后程序根据不同的语言加载不同的文件,就达到了一个国际化的目的。在国际化Spring MVC应用的时候,是将语言区域(Locale)相关的文本元素单独存在一个独立的属性文件中,然后不同的Locale对应的属性文件就构成了一个ResourceBundle,在Spring MVC显示本地化的消息时就会根据所在的区域显示对应的文本。

3.编码实战

国际化

具体操作

1.配置国际化资源文件,

4.常见问题

为什么在properties文件里输入中文是乱码呢?

java读properties文件的时候,只认识ascii码,如\u4e00这种,不认识汉字。 所以你properties文件的编码字符集只要包括ascii码就行,gbk,utf-8神马的都一样

5.解决方案

转换成Unicode码

6.拓展思考

7.参考文献

https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-servlet http://www.jianshu.com/p/fe88527c7bb5?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=qq

鸣谢

BY : 上海分院 唐坤