JavaWEB开发-国际化
国际化开发概述
软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的、符合来访者阅读习惯的页面或数据。
国际化又称为i18n:internationalization
合格的国际化软件
软件实现国际化,需具备哪些特征:
对于程序中固定使用的文本元素,例如菜单栏、导航条等使用的文本元素、或错误提示信息,状态信息等,需要根据来访者的地区和国家,选择不同语言的文本为之服务。
对于程序动态产生的数据,例如(日期,货币等),软件应能根据当前所在的国家或地区的文化习惯进行显示。
固定文本元素的国际化
对于软件中的菜单栏、导航条、错误提示信息,状态信息等这些固定不变的文本信息,可以把它们写在一个properties文件中,并根据不同的国家编写不同的properties文件。这一组properties文件称之为一个资源包。
在JavaAPI中提供了一个ResourceBundle类用于描述一个资源包,并且ResourceBundle类提供了相应的方法getBundle,这个方法可以根据来访者的国家地区自动获取与之对应的资源文件予以显示。
创建资源包和资源文件
一个资源包中的每个资源文件都必须拥有共同的基名。除了基名,每个资源文件的名称中还必须有标识其本地信息的附加部分。例如:一个资源包的基名是“myproperties”,则与中文、英文环境相对应的资源文件名则为:
“myproperites_zh.properties”“myproperites_en.properties”
每个资源包都应有一个默认资源文件,这个文件不带有标识本地信息的附加部分。若ResourceBundle对象在资源包中找不到与用户匹配的资源文件,它将选择该资源包中与用户最相近的资源文件,如果再找不到,则使用默认资源文件。例如:
myproperites.properties
资源文件的书写格式
资源文件的内容通常采用“关键字=值”的形式,软件根据关键字检索值显示在页面上。一个资源包中的所有资源文件的关键字必须相同,值则为相应国家的文字。
并且资源文件中采用的是properties格式文件,所以文件中的所有字符都必须是ASCII字码,对于像中文这样的非ACSII字符,须先进行编码。(java提供了一个native2ascII命令用于编码)。例:
属性文件是不能保存中文的
username=username
password=password
submit=submit
resource_en.properties文件
username=\u7528\u6237\u540d
password=\u5bc6\u7801
submit=\u63d0\u4ea4
resource_zh.properties文件
编程实现固定文本的国际化
ResourceBundle类提供了一个静态方法getBundle,该方法用于装载资源文件,并创建ResourceBundle实例:
LocalecurrentLocale=Locale.getDefault();
ResourceBundlemyResources=
ResourceBundle.getBundle(basename,currentLocale);
basename为资源包基名(且必须为完整路径)。
如果与该locale对象匹配的资源包子类找不到。一般情况下,则选用默认资源文件予以显示。
加载资源文件后,程序就可以调用ResourceBundle实例对象的getString方法获取指定的资源信息名称所对应的值。
Stringvalue=myResources.getString(“key");
在WEB应用中实现固定文本的国际化
动态数据的国际化
数值,货币,时间,日期等数据由于可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理。Java中提供了解决这些问题的API类(位于java.util包和java.text包中)
Locale类
Locale实例对象代表一个特定的地理,政治、文化区域。
一个Locale对象本身不会验证它代表的语言和国家地区信息是否正确,只是向本地敏感的类提供国家地区信息,与国际化相关的格式化和解析任务由本地敏感的类去完成。(若JDK中的某个类在运行时需要根据Locale对象来调整其功能,这个类就称为本地敏感类)
与前面的Core标签一样,在使用标签前需要先导入标签库,在JSP页面中导入国际化标签库的语法如下:
<%@tagliburi="http://java.sun.com/jsp/jstl/fmt"prefix="fmt"%>
在JSTL之中的国际化标签主要包括<fmt:setLocale>、<fmt:bundle>、<fmt:setBundle>、<fmt:message>、<fmt:setLocale>:指定Locale环境。
<fmt:bundle>:指定消息资源使用的文件。
<fmt:setBundle>:设置消息资源文件。
<fmt:message>:显示消息资源文件中指定key的消息,支持带参数消息。
几种主要的国际化标签
<fmt:setLocale>
<fmt:setLocale>标签用于在JSP页面中显式地设置用户的本地化信息,并将设置的本地化信息以Locale对象的形式保存在某个Web域中,其在Web域中的属性名称为“javax.servlet.jsp.jstl.fmt.locale”。使用<fmt:setLocale>标签设置本地化信息后,国际化标签库中的其他标签将使用该本地化信息,而忽略客户端浏览器传递过来的本地信息。
<fmt:setLocalevalue="locale"
[variant="variant"]
[scope="{page|request|session|application}"]/>
<fmt:setBundle>
<fmt:setBundle>标签用于根据<fmt:setLocale>标签设置的本地化信息创建一个资源包(ResourceBundle)实例对象,并将其绑定到一个Web域的属性上。
标签的语法格式如下:
<fmt:setBundlebasename="basename"
[var="varName"]
[scope="{page|request|session|application}"]/>
<fmt:bundle>标签
<fmt:bundle>标签与<fmt:setBundle>标签的功能类似,但它创建的ResourceBundle实例对象只在其标签体内有效。
<fmt:bundlebasename="basename“>
bodycontent
</fmt:bundle>
<fmt:message>标签
<fmt:message>标签用于从一个资源包中读取信息并进行格式化输出。
<fmt:messagekey="messageKey"
[bundle="resourceBundle"]
[var="varName"] [scope="{page|request|session|application}"]/>
DateFormat类(国际化日期)
DateFormat类可以将一个日期/时间对象格式化为表示某个国家地区的日期/时间字符串。
DateFormat类除了可按国家地区格式化输出日期外,它还定义了一些用于描述日期/时间的显示模式的int型的常量,包括FULL,LONG,MEDIUM,DEFAULT,SHORT,实例化DateFormat对象时,可以使用这些常量,控制日期/时间的显示长度。
DateFormat类
例如,对于日期/时间“2005年9月15日下午4时41分20秒”,如设置了DateFormat的显示模式,则日期/时间显示样式分别为:
SHORT模式完全是数字的,在中文环境下显示为“05-9-15下午4:41”;在英文环境下为“9/15/054:41PM”。
MEDIUM模式比SHORT模式长些,在中文环境显示为“2005-9-1516:41:20”;在英文环境下显示为“Sep15,20054:41:20PM”。
LONG模式比MEDIUM模式更长一些,在中文环境下显示为“2005年9月15日下午04时41分20秒”;在英文环境下显示为“September15,20054:41:20PMCST”。
FULL模式指定日期/时间的完整格式,在中文环境下显示为“2005年9月15日星期四下午04时41分20秒CST”;在英文环境下,这个日期/时间显示为“Thursday,September15,20054:41:20PMCST”。
实例化DateFormat类
实例化DateFormat类有九种方式,以下三种为带参形式,下面列出的三种方式也可以分别不带参,或只带显示样式的参数。
getDateInstance(intstyle,LocaleaLocale):以指定的日期显示模式和本地信息来获得DateFormat实例对象,该实例对象不处理时间值部分。
getTimeInstance(intstyle,LocaleaLocale):以指定的时间显示模式和本地信息来获得DateFormat实例对象,该实例对象不处理日期值部分。
getDateTimeInstance(intdateStyle,inttimeStyle,LocaleaLocale):以单独指定的日期显示模式、时间显示模式和本地信息来获得DateFormat实例对象。
DateFormat类
DateFormat对象的方法:
format:将date对象格式化为符合某个本地环境习惯的字符串。
parse:将字符串解析为日期/时间对象
注意:parse和format完全相反,一个是把date时间转化为相应地区和国家的显示样式,一个是把相应地区的时间日期转化成date对象,该方法在使用时,解析的时间或日期要符合指定的国家、地区格式,否则会抛异常。
DateFormat对象通常不是线程安全的,每个线程都应该创建自己的DateFormat实例对象
NumberFormat类
NumberFormat可以将一个数值格式化为符合某个国家地区习惯的数值字符串,也可以将符合某个国家地区习惯的数值字符串解析为对应的数值
NumberFormat类的方法:
format方法:将一个数值格式化为符合某个国家地区习惯的数值字符串
parse方法:将符合某个国家地区习惯的数值字符串解析为对应的数值。
NumberFormat类
实例化NumberFormat类时,可以使用locale对象作为参数,也可以不使用,下面列出的是使用参数的。
getNumberInstance(Localelocale):以参数locale对象所标识的本地信息来获得具有多种用途的NumberFormat实例对象
getIntegerInstance(Localelocale):以参数locale对象所标识的本地信息来获得处理整数的NumberFormat实例对象
getCurrencyInstance(Localelocale):以参数locale对象所标识的本地信息来获得处理货币的NumberFormat实例对象
getPercentInstance(Localelocale):以参数locale对象所标识的本地信息来获得处理百分比数值的NumberFormat实例对象
相关推荐
该程序采用了Python的smtplib模块和pyqt5模块,实现了自动登录QQ邮箱的功能,并且支持向其他QQ邮箱或如网易邮箱等其他类型的邮箱发送文本邮件和附带文件的邮件。
2024年全球胚胎移植玻璃化冷冻介质行业总体规模、主要企业国内外市场占有率及排名
多式联运 (1)
sklearn中决策树算法进行泰坦尼克号人员幸存预测 有包的导入、数据处理、特征提取、预测结果等
编译原理实验报告(1和2)(可运行)
数据库第一次满分上机报告
j2se6.chm.zip
ins爬虫on工具,能够批量爬取ins资源
库房检测APP.apk
系统主要分员工管理员两个角色 管理模块具体有商品管理,部门员工管理,进货管理,订单管理,换货管理,供应商管理,供应商管理,客户管理,公告通知管理等模块,而员工模块具体由商品管理,进货管理,订单管理,供应商管理,客户管理,换货订单管理,公告通知管理等模块组成。 仓库管理信息系统所涉及的主要数据包括商品管理、进货管理、订单管理、换货管理和供应商管理,客户管理,公告通知管理下面分别分析这些数据需求。 (1)商品管理 商品管理主要是管理商品分类信息以及管理商品信息。 (2)进货管理 进货管理主要员工可以登记进货信息,以及查看我的进货记录,而管理员可以添加进货信息以及对进货信息的管理。 (3)订单管理 订单管理主要是对订单的一个统计,员工对销售的订单进行登记,管理员可以管理员工们的订单销售。 (4)换货管理 换货管理主要员工可以登记换货信息,以及查看我的换货记录,而管理员可以添加换货信息以及对换货信息的管理。 (5)供应商管理 管理员可以管理对他们厂家的供应商,来达到可以很好及时的跟供应商进行沟通。 (6)客户管理 管理员可以管理客户。对客户进行维护。
没有word只有图片,打印图片打印出来发黑怎么办?如何像打印doc一样清楚。教你一招搞定
matlab 独立分量分析 fastica,icaplot,remmean,whiten,盲源分离,去均值,白化处理.zip
文档Python双指针算法模板和题目同向相向快速排序归并排序提取方式是百度网盘分享地址
向天歌【简约扁平化】大学生实习社会实践报告.ppt
GEK气化炉sw18可编辑设计图纸.7z
数据来源:中经数据库 数据范围:各个省份的区县财政收入即一般公共预算收入、税收收入 (一般财政收入即一般公共预算收入的完整度较高。税收收入一般50%的区县会有数据) 数据年度区间:2000-2023(具体看文件名上的年度区间) 珍贵数据,包含了各省所有的区、县、县级市哦,很难找到的哦
tetris.rar
100L化学槽罐sw18可编辑设计图纸.7z
自动驾驶-决策规划算法八:贝塞尔曲线(C++)