Servlet中国际化技术
来源:互联网 发布:spss导入数据 编辑:程序博客网 时间:2024/06/07 06:10
Servlet中国际化技术
- Servlet中国际化技术
- 概述
- Locale本地化
- 国际化
- 国际化分类
- 静态数据国际化
- 动态文本国际化
- 国际化分类
- Jsp页面国际化案例
- 格式化与国际化标签库
- Servlet中国际化技术
概述
国际化又称为i18n(internationalization,该单词以i开始,中间经过18个字母之后,到底最后一个字母n,所以称为i18n技术),具体的定义是:在软件开发时,要使得它能同时应对不同地区和国家的访问,并针对不同地区和国家的访问,提供对应的、符合来访者阅读习惯的页面或者数据。展开来说一个软件在中国显示的是中文以及符合中国习惯的文本字符串,在美国显示的是英文以及符合美国习惯的文本字符串,我们把上述描述的软件称为国家化的软件。
Locale本地化
首先在学习本地化之前,我们应该学习本地化,也就是我们需要知道两个问题,第一,当前浏览器使用的是哪种语言,其次需要在软件中存储特定的字符串。Java提供了一个本地化的对象,该对象封装当前语言、国家、环境等特征,在Java.util.Locale中,当我们查看Servlet的API时发现其中有一个方法是getLocales(),也就是说通过Servlet可以将所有要访问的本地资源封装到一个Locale对象中,在JDK中的Java.util.locale和在Servlet的API中的getLocales()方法为我们在软件中实现国际化成为了可能。
package com.jpzhutech.locale;import java.util.Locale;import org.junit.Test;public class App { @Test public void testLocale() throws Exception{ //模拟中国语言环境 Locale locale = Locale.US; //模拟美国 System.out.println(locale.getCountry()); //获取到国家的简称 System.out.println(locale.getDisplayCountry()); //国家名称 System.out.println(locale.getLanguage()); //语言环境 }}
国际化
国际化分类
静态数据国际化
在网站中显示的固定文本内容的国家化,这就是所谓的静态数据国际化,比如在登录时需要在输入文本框之前显示”用户名”、”密码”这些都称为静态数据的国际化。
- 存储所有国家显示的文本的字符串
- 文件为properties文件,我们称这种文件为国家化的资源文件
- 命名为:myproperties_zh.properties(基础名_语言简称_国家简称.properties,其中基础名尽量取有意义的英文,并且国家简称可以省略)。
- 程序中获取
- ResourceBundle类可以读取国际化的资源文件
package com.jpzhutech.i18n;import java.text.DateFormat;import java.util.Date;import java.util.Locale;import java.util.ResourceBundle;import org.junit.Test;public class App { //国际化 @Test public void testI18n() throws Exception{ //Locale locale = Locale.CHINA; //决定了下面在使用getString函数时读取的是msg_zh_CN.properties文件 Locale locale = Locale.US; //决定了下面在使用getString函数时读取的是msg_en_US.properties文件 //创建工具类对象ResourceBundle ResourceBundle resourceBundle = ResourceBundle.getBundle("com.jpzhutech.i18n.msg", locale); //第一个参数是基础名(如果放在一个具体的包下要在基础名前加上包名) //根据配置获取文件中的值 System.out.println(resourceBundle.getString("hello")); System.out.println(resourceBundle.getString("username")); System.out.println(resourceBundle.getString("pwd")); }}
动态文本国际化
比如显示当前的时间:在中文状态下显示1987-09-19 ¥1000,而在英文状态下:Sep/09 1987 $100,这种称为动态文本的国际化。其中可能包括数值、货币、时间、日期等数据由于可能在程序运行时产生,所以无法像文字一样简单地将它们从应用程序中分离出来,需要进行特殊的处理。Java提供了解决这些问题的API,分别在java.util和java.text包中。
package com.jpzhutech.i18n;import java.text.DateFormat;import java.util.Date;import java.util.Locale;import java.util.ResourceBundle;import org.junit.Test;public class App { //国际化的方法中每一哥国际化的类型都有format和parse两个方法, 前者是将其转换为不同国家的风格表示,后者是将不同国家的风格表示转换为数值或者字符串等 @Test public void testi18n2() throws Exception{ //模拟语言环境 Locale locale = Locale.US; double d = 100; //将100显示为货币$100 //国际化货币 //NumberFormat nf = NumberFormat.getCurrencyInstance(locale); //System.out.println(nf.format(d)); //显示的结果是$100 //国际化数字,每个国家的数字都是一样的,只需要了解该方法即可 //NumberFormat nf = NumberFormat.getNumberInstance(); //String format = nf.format(10000000); //System.out.println(format); //显示为10,000,000 //国际化百分比,每个国家的表示方法都是一样的 //NumberFormat.getPercentInstance(); //国际化日期 int dateStyle = DateFormat.FULL; //可取的常量值为:FULL、MEDIUM、LONG、SHORT int timeStyle = DateFormat.FULL; DateFormat dateTimeInstance = DateFormat.getDateTimeInstance(dateStyle, timeStyle, locale.CANADA); String datetime = dateTimeInstance.format(new Date()); System.out.println(datetime); }}
Jsp页面国际化案例
实现Jsp页面的国际化有两种方法:
- 在Jsp页面内嵌Java代码,也就是常说的Jsp脚本,不推荐使用该方法
- 使用JSTL标签
两种方法的代码都在github上,原理已经在上面的部分实现,在该部分将实现几个页面的国际化,代码请参见我的github: https://github.com/zhujunpengguizhou/LoginSystem
格式化与国际化标签库
http://blog.csdn.net/drifterj/article/details/8231979
https://www.ibm.com/developerworks/cn/java/j-lo-jstl/
- Servlet中国际化技术
- Servlet中Num和Date的国际化
- Servlet:国际化
- Servlet 国际化
- servlet国际化
- Servlet中过滤器技术
- Servlet中监听器技术
- 博为峰Java技术题 ——JavaEE Servlet 国际化Ⅲ
- 博为峰Java技术题 ——JavaEE Servlet 国际化Ⅱ
- 博为峰Java技术题 ——JavaEE Servlet 国际化Ⅰ
- day_7在servlet中实现cookie技术
- Servlet中不可不知的Cookie技术
- Servlet中不可不知的Session技术
- JavaWeb中Servlet技术之监听器
- 国际化技术(MessageBundle)
- 国际化开发技术FAQ
- Servlet监听和软件国际化
- Servlet国际化i18n登录Demo
- HDU 3549 Flow Problem 最大流模板题
- 传输层实现
- Android性能提升之强引用、软引用、弱引用、虚引用使用
- Go语言自学笔记
- NS2学习笔记2:octl与c++对象的关联
- Servlet中国际化技术
- 再次认识mysql(八)操作权限
- tcp_prot
- 三角形问题
- 链表相关算法小结(判断环、复制、逆序等)
- udp_prot
- ping_prot
- Python字符串的编码与解码(encode与decode)
- UNIX基础知识