第七章 国际化
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目标: 本章旨在向学员介绍: 1)什么是国际化以及本地化 2)JAVA国际化的原理 3)Struts2对国际化的支持 4)Action访问国际化资源的三种方 式 5)国际化信息的输出 6)带占位符的国际化信息的输出
时间:3学时
教学方法:授课+练习
3
第七章:国际化
• 本章内容
7.1 Struts2国际化概述 7.2 国际化的实例应用
4
7.1.1 国际化和本地化
•
程序国际化已成为Web应用的基本要求。随着网络的发展,大 部分的Web站点面对的已经不再是本地或者本国的浏览者,而 是来自全世界各国各地区的浏览者,因此国际化成为了Web应 用不可或缺的一部分。
国际化Internationalization是使程序在不做任何修改的情况下,就可 以在不同的国家或地区和不同的语言环境下,按照当地的语言和格式 习惯显示字符。例如,一个数字123456.78,在法国它的书写格式是 123 456,78,在德国是123.456,78,而在美国则是123,456.78。 国际化又被称为I18N,因为国际化的英文是Internationalization,它以 I开头,以N结尾,中间有18个字母。 一个国际化的程序,当它运行在本地机器时,需要根据本地机器的语 言和地区设置显示相应的字符,这个过程就叫做本地化 (Localization),通常简称为:L10N。
•
消息文本中的数字占位符将按照MessageFormat.format()方法 参数的顺序(从第二个参数开始)而被替换,在上例中,占位符 {0}被“张三”替换,{1}被new java.util.Date()所替换。此外 format()方法参数的顺序是与占位符的数字顺序对应的,而不 是与占位符出现在消息文本中的顺序对应
2、当准备好资源文件之后,我们可以在struts.xml中通过 struts.custom.i18n.resources常量把资源文件定义为全局资源 文件,如下: <constant name=“struts.custom.i18n.resources” value=“app” /> ,其中app为资源文件的基本名。
•
login.username=UserName: login.password=Password: login.login=Login welcome.msg=Welcome {0},Your password is {1} welcome.a=${welcome.msg}
4、src建立app_zh_CN.properties文件加入内容:
•
根目录。 2、当查找指定key的消息时,系统会先从package资源文
件查找,当找不到对应的key时,才会从常量 struts.custom.i18n.resources指定的资源文件中寻找。
•
15
7.1.5 资源文件—Action范围资源文件
•
Struts2还允许单独为Action指定一份国际化资源文件。Action 范围的资源文件只能被该Action访问。 步骤: 1、首先编写中英文资源文件,命名方式如下: ActionClassName_language_country.properties资源文件, ActionClassName为action类的简单名称,保存目录为Action 同目录下。 2、当查找指定key的消息时,系统会先从 ActionClassName_language_country.properties资源文件查找 ,如果没有找到对应的key,然后沿着当前包往上查找基本名 为package 的资源文件,一直找到最顶层包。如果还没有找到 对应的key,最后会从常量struts.custom.i18n.resources指定 的资源文件中寻找
9
7.1.2 JAVA国际化
•
在资源文件中的消息文本可以带有参数,例如: – greeting={0},欢迎学习struts2. – 花括号中的数字是一个占位符,可以被动态的数据替换。在消 息文本中的占位符可以使用0到9的数字,也就是说,消息文本 的参数最多可以有10个。例如: – greeting={0},欢迎学习struts2,今天是星期{1}.
14
7.1.5 资源文件—包范围资源文件
•
在一个大型应用中,整个应用有大量的内容需要实现国际化, 如果我们把国际化的内容都放置在全局资源属性文件中,显然 会导致资源文件变的过于庞大、臃肿,不便于维护,这个时候 我们可以针对不同模块,使用包范围来组织国际化文件。 步骤: 1、首先编写中英文资源文件,命名方式如下: package_language_country.properties ,保存目录为该包的
16
• •
7.1.6 国际化信息输出
在JSP页面中:
使用<s:text name=“”/>标签输出国际化信息: <s:text name=“user”/>,name为资源文件中的key
在Action类中:
可以继承ActionSupport,使用getText()方法,该方法的第一个参数用 于指定资源文件中的key。
中国大陆: baseName_zh_CN.properties 美国: baseName_en_US.properties
• •
Java中的资源文件只支持ISO-8859-1编码格式字符,直接编写中文 会出现乱码。 方法: – 使用native2ascii.exe命令; – 安装专门的属性编辑插件: – PropertiesEditor插件 – JInto插件 – jp.gr.java_conf.ussiy.app.propedit插件
在表单标签中:
通过key属性指定资源文件中的key,如: <s:textfield name="realname" key="user"/> 或者<s:textfield name=“realname” label=“%{getText(„user‟)}” />
17
7.1.7 带占位符的国际化信息输出
国际化
1
课程结构
内容
第一章:Struts2入门 第二章:Struts2中的Action 第三章:Struts2拦截器 第四章:表达式语言OGNL 第五章:Struts2标签库 第六章:类型转换 第七章:国际化 第八章:文件上传和下载
课时(30H)
3 6 3 3 3 3 3 3
第九章:校验框架
3
2
第七章:国际化
资源文件中的内容如下: welcome={0},你好,欢迎来到{1} 在jsp页面中输出带占位符的国际化信息
<s:text name="welcome"> <s:param>张三</s:param> <s:param>东软</s:param> </s:text>
在Action类中获取带占位符的国际化信息,可以使用getText(String key, String[] args)或 getText(String aTextName, List args)方法。
•
8
7.1.2 JAVA国际化
•
资源文件的命名规则是非常重要的,其分为如下三种形式: – baseName.properties – baseName_language.properties – baseName_language_country.properties baseName是资源文件的基本名称,由用户自由定义。但是 language和country就必须为Java所支持的语言和国家/地区代码。 例如:
•
•
•
5
7.1.2 JAVA国际化
•
在JAVA中编写国际化程序主要通过两个类来完成:java.util.Locale 类和java.util.ResourceBundle抽象类。
– Locale类用于提供本地信息,通常称它为语言环境。不同的语言
,不同的国家和地区采用不同的Locale对象来表示。
– ResourceBundle类称为资源包,包含了特定于语言环境的资源对
象。当程序需要一个特定于语言环境的资源时(如字符串资源),程 序可以从适合当前用户语言环境的资源包中加载它。采用这种方 式,可以编写独立于用户语言环境的程序代码,而与特定语言环 境相关的信息则通过资源包来提供。
6
7.1.2 JAVA国际化
•
Java.util.Locale类的常用构造方法如下: – public Locale(String language) – public Locale(String language,String country) – 其中language表示语言,它的取值是由ISO-639定义的小 写的、两个字母组成的语言代码。 – 其中country表示国家或地区,它的取值由ISO-639定义的 大写的、两个字母组成的代码 • 左表列出了常用的ISO-639语言代码。 右表列出了常用的ISO-3166国家和地区 代码
•
12
7.1.4 Action中访问国际化资源文件
•
ຫໍສະໝຸດ Baidu
Struts2中的Action可以通过三种方式来加载资源文件,包括指 指定全局资源文件、包范围资源文件、Action范围资源文件。 并且对于不同范围的资源文件有不同的加载顺序。
13
7.1.5 资源文件—全局资源文件
•
步骤: 1、首先编写中英文的资源文件,命名方式如下: basename_语言_国家.properties,保存目录为src目录下。
11
7.1.3 Struts2对国际化的支持
•
Struts2的国际化是建立在Java国际化的基础之上的,是使用 资源包的方式,通过getBundle()方法来寻找指定Locale相关联 的资源包,再从资源包文件中查找指定Key所对应的国际化资 源信息。 Struts2框架的底层国际化与Java国际化是一致的,作为一个 良好的MVC框架,Struts2将Java的国际化功能进行了封装和 简化,开发者使用起来会更加简单快捷。
7
7.1.2 JAVA国际化
•
最理想的实现国际化的方法是将要显示的字符内容从程序中分离 ,然后统一存储到一个资源包中,当显示时,从资源包中取出和 Locale对象相一致的字符内容。在Java中, 这种资源包是由类 来实现的,这个类必须要扩展java.util.ResourceBundle. 在编写国际化程序时, 要为不同的国家地区和语言编写不同的资 源类,这些资源类同属一个资源系列,共享同一个基名(base name).不同语言所对应的资源类的名称为基名加上ISO-639标准 的语言代码,而应用于某个特定国家或地区的资源类的名称,则 是在基名和语言代码后加上ISO-3166标准的同家或地区代码。
18
第七章:国际化
• 本章内容
7.1 Struts2国际化概述 7.2 国际化的实例应用
19
7.2.1 登陆页面国际化
步骤: 1、建立工程myI18N,导入struts2相就的JAR包 2、配置web.xml加入struts2过滤器 3、src建立app_en_US.properties文件加入内容:
•
10
7.1.2 JAVA国际化
示例 greeting={0},欢迎学习struts2,今天是星期{1}. • 我们编写代码:
•
Locale loc = Locale.getDefault(); ResourceBundle bundle = ResourceBundle.getBundle(“MyResource”,loc); String greeting = bundle.getString(“greeting”); Object[] obj = {"张三",new java.util.Date()}; String msg = MessageFormat.format(greeting,obj);
login.username=用户名:
login.password=密码:
要替换消息文本中的占位符,可以使用java.text.MessageFormat 类,该类提供了一个静态方法format(),用来格式化带参数的文本, format() 方法定义如下:
– public static String format(String pattern,Object …arguments)
时间:3学时
教学方法:授课+练习
3
第七章:国际化
• 本章内容
7.1 Struts2国际化概述 7.2 国际化的实例应用
4
7.1.1 国际化和本地化
•
程序国际化已成为Web应用的基本要求。随着网络的发展,大 部分的Web站点面对的已经不再是本地或者本国的浏览者,而 是来自全世界各国各地区的浏览者,因此国际化成为了Web应 用不可或缺的一部分。
国际化Internationalization是使程序在不做任何修改的情况下,就可 以在不同的国家或地区和不同的语言环境下,按照当地的语言和格式 习惯显示字符。例如,一个数字123456.78,在法国它的书写格式是 123 456,78,在德国是123.456,78,而在美国则是123,456.78。 国际化又被称为I18N,因为国际化的英文是Internationalization,它以 I开头,以N结尾,中间有18个字母。 一个国际化的程序,当它运行在本地机器时,需要根据本地机器的语 言和地区设置显示相应的字符,这个过程就叫做本地化 (Localization),通常简称为:L10N。
•
消息文本中的数字占位符将按照MessageFormat.format()方法 参数的顺序(从第二个参数开始)而被替换,在上例中,占位符 {0}被“张三”替换,{1}被new java.util.Date()所替换。此外 format()方法参数的顺序是与占位符的数字顺序对应的,而不 是与占位符出现在消息文本中的顺序对应
2、当准备好资源文件之后,我们可以在struts.xml中通过 struts.custom.i18n.resources常量把资源文件定义为全局资源 文件,如下: <constant name=“struts.custom.i18n.resources” value=“app” /> ,其中app为资源文件的基本名。
•
login.username=UserName: login.password=Password: login.login=Login welcome.msg=Welcome {0},Your password is {1} welcome.a=${welcome.msg}
4、src建立app_zh_CN.properties文件加入内容:
•
根目录。 2、当查找指定key的消息时,系统会先从package资源文
件查找,当找不到对应的key时,才会从常量 struts.custom.i18n.resources指定的资源文件中寻找。
•
15
7.1.5 资源文件—Action范围资源文件
•
Struts2还允许单独为Action指定一份国际化资源文件。Action 范围的资源文件只能被该Action访问。 步骤: 1、首先编写中英文资源文件,命名方式如下: ActionClassName_language_country.properties资源文件, ActionClassName为action类的简单名称,保存目录为Action 同目录下。 2、当查找指定key的消息时,系统会先从 ActionClassName_language_country.properties资源文件查找 ,如果没有找到对应的key,然后沿着当前包往上查找基本名 为package 的资源文件,一直找到最顶层包。如果还没有找到 对应的key,最后会从常量struts.custom.i18n.resources指定 的资源文件中寻找
9
7.1.2 JAVA国际化
•
在资源文件中的消息文本可以带有参数,例如: – greeting={0},欢迎学习struts2. – 花括号中的数字是一个占位符,可以被动态的数据替换。在消 息文本中的占位符可以使用0到9的数字,也就是说,消息文本 的参数最多可以有10个。例如: – greeting={0},欢迎学习struts2,今天是星期{1}.
14
7.1.5 资源文件—包范围资源文件
•
在一个大型应用中,整个应用有大量的内容需要实现国际化, 如果我们把国际化的内容都放置在全局资源属性文件中,显然 会导致资源文件变的过于庞大、臃肿,不便于维护,这个时候 我们可以针对不同模块,使用包范围来组织国际化文件。 步骤: 1、首先编写中英文资源文件,命名方式如下: package_language_country.properties ,保存目录为该包的
16
• •
7.1.6 国际化信息输出
在JSP页面中:
使用<s:text name=“”/>标签输出国际化信息: <s:text name=“user”/>,name为资源文件中的key
在Action类中:
可以继承ActionSupport,使用getText()方法,该方法的第一个参数用 于指定资源文件中的key。
中国大陆: baseName_zh_CN.properties 美国: baseName_en_US.properties
• •
Java中的资源文件只支持ISO-8859-1编码格式字符,直接编写中文 会出现乱码。 方法: – 使用native2ascii.exe命令; – 安装专门的属性编辑插件: – PropertiesEditor插件 – JInto插件 – jp.gr.java_conf.ussiy.app.propedit插件
在表单标签中:
通过key属性指定资源文件中的key,如: <s:textfield name="realname" key="user"/> 或者<s:textfield name=“realname” label=“%{getText(„user‟)}” />
17
7.1.7 带占位符的国际化信息输出
国际化
1
课程结构
内容
第一章:Struts2入门 第二章:Struts2中的Action 第三章:Struts2拦截器 第四章:表达式语言OGNL 第五章:Struts2标签库 第六章:类型转换 第七章:国际化 第八章:文件上传和下载
课时(30H)
3 6 3 3 3 3 3 3
第九章:校验框架
3
2
第七章:国际化
资源文件中的内容如下: welcome={0},你好,欢迎来到{1} 在jsp页面中输出带占位符的国际化信息
<s:text name="welcome"> <s:param>张三</s:param> <s:param>东软</s:param> </s:text>
在Action类中获取带占位符的国际化信息,可以使用getText(String key, String[] args)或 getText(String aTextName, List args)方法。
•
8
7.1.2 JAVA国际化
•
资源文件的命名规则是非常重要的,其分为如下三种形式: – baseName.properties – baseName_language.properties – baseName_language_country.properties baseName是资源文件的基本名称,由用户自由定义。但是 language和country就必须为Java所支持的语言和国家/地区代码。 例如:
•
•
•
5
7.1.2 JAVA国际化
•
在JAVA中编写国际化程序主要通过两个类来完成:java.util.Locale 类和java.util.ResourceBundle抽象类。
– Locale类用于提供本地信息,通常称它为语言环境。不同的语言
,不同的国家和地区采用不同的Locale对象来表示。
– ResourceBundle类称为资源包,包含了特定于语言环境的资源对
象。当程序需要一个特定于语言环境的资源时(如字符串资源),程 序可以从适合当前用户语言环境的资源包中加载它。采用这种方 式,可以编写独立于用户语言环境的程序代码,而与特定语言环 境相关的信息则通过资源包来提供。
6
7.1.2 JAVA国际化
•
Java.util.Locale类的常用构造方法如下: – public Locale(String language) – public Locale(String language,String country) – 其中language表示语言,它的取值是由ISO-639定义的小 写的、两个字母组成的语言代码。 – 其中country表示国家或地区,它的取值由ISO-639定义的 大写的、两个字母组成的代码 • 左表列出了常用的ISO-639语言代码。 右表列出了常用的ISO-3166国家和地区 代码
•
12
7.1.4 Action中访问国际化资源文件
•
ຫໍສະໝຸດ Baidu
Struts2中的Action可以通过三种方式来加载资源文件,包括指 指定全局资源文件、包范围资源文件、Action范围资源文件。 并且对于不同范围的资源文件有不同的加载顺序。
13
7.1.5 资源文件—全局资源文件
•
步骤: 1、首先编写中英文的资源文件,命名方式如下: basename_语言_国家.properties,保存目录为src目录下。
11
7.1.3 Struts2对国际化的支持
•
Struts2的国际化是建立在Java国际化的基础之上的,是使用 资源包的方式,通过getBundle()方法来寻找指定Locale相关联 的资源包,再从资源包文件中查找指定Key所对应的国际化资 源信息。 Struts2框架的底层国际化与Java国际化是一致的,作为一个 良好的MVC框架,Struts2将Java的国际化功能进行了封装和 简化,开发者使用起来会更加简单快捷。
7
7.1.2 JAVA国际化
•
最理想的实现国际化的方法是将要显示的字符内容从程序中分离 ,然后统一存储到一个资源包中,当显示时,从资源包中取出和 Locale对象相一致的字符内容。在Java中, 这种资源包是由类 来实现的,这个类必须要扩展java.util.ResourceBundle. 在编写国际化程序时, 要为不同的国家地区和语言编写不同的资 源类,这些资源类同属一个资源系列,共享同一个基名(base name).不同语言所对应的资源类的名称为基名加上ISO-639标准 的语言代码,而应用于某个特定国家或地区的资源类的名称,则 是在基名和语言代码后加上ISO-3166标准的同家或地区代码。
18
第七章:国际化
• 本章内容
7.1 Struts2国际化概述 7.2 国际化的实例应用
19
7.2.1 登陆页面国际化
步骤: 1、建立工程myI18N,导入struts2相就的JAR包 2、配置web.xml加入struts2过滤器 3、src建立app_en_US.properties文件加入内容:
•
10
7.1.2 JAVA国际化
示例 greeting={0},欢迎学习struts2,今天是星期{1}. • 我们编写代码:
•
Locale loc = Locale.getDefault(); ResourceBundle bundle = ResourceBundle.getBundle(“MyResource”,loc); String greeting = bundle.getString(“greeting”); Object[] obj = {"张三",new java.util.Date()}; String msg = MessageFormat.format(greeting,obj);
login.username=用户名:
login.password=密码:
要替换消息文本中的占位符,可以使用java.text.MessageFormat 类,该类提供了一个静态方法format(),用来格式化带参数的文本, format() 方法定义如下:
– public static String format(String pattern,Object …arguments)