您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 第19章 国际化支持
第19章国际化支持互联网的普及,任何人都可以随时与全球沟通。在这种全球一体化的大环境下,一个成熟的软件也应该有满足国际化应用的能力。国际化能力体现在两个方面。首先是可以针对不同国家或地区的用户,显示该国或地区的语言信息,而且可以根据系统的语言环境自动选择显示的语言;第二是具有处理国际化信息的能力,包括能够根据各国或地区的一些语言习惯(例如日期的表达习惯),采取相应的处理方式。19.1国际编码UTF-8首先来了解一下现在的软件是如何处理国际化的。现在绝大部分流行的操作系统,WindowsXP、Linux、MacOS等等内核都全部支持国际化。除了操作系统外,大部分的应用软件,包括著名的开源软件也都支持国际化。也就是说,这些操作系统本身就已经是可以随意变换系统的显示语言,或者根据不同的国家或地区应用不同的操作方式。为了能够在一个系统中同时显示多个国家或地区的字符编码,都采用UTF-8作为内核字符编码。19.1.1统一字符编码标准Unicode在了解UTF-8之前,先回顾一下以前的软件是如何处理字符编码的。大家都知道,现代的计算机从一开始都只能处理英文、数字和一些标点符号,多数采用的字符编码是ASCII编码。随着计算机在全球的普及,要处理各国或地区的语言。于是各国或地区在ASCII编码的基础上发展出了各自的编码。这对于软件开发来说也是一大挑战,必须要根据不同的语言分别开发和编译、发行相应的版本,增大了开发的难度,让项目管理更复杂。19.1.2UTF-8和UnicodeUTF-8(8位元UniversalCharacterSet/UnicodeTransformationFormat)是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容,使得原来处理ASCII字符的软件无需或只作少部份修改后,便可继续使用。因此,它逐渐成为电子邮件、网页及其他储存或传送文字的应用中,优先采用的编码。UTF-8使用一至四个字节为每个字符编码:一个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)。带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码(Unicode范围由U+0080至U+07FF)。19.1.3Java与国际化Java从诞生开始,就是准备作为一种互联网的开发语言的。Java从一开始就已经为国际化做好准备了。Java的国际化支持主要体现在下面几个部分:Java的内核就是采用Unicode编码的。且相应地,原始char数据类型的长度是两个字节(16位),以容纳Unicode值。由于大家熟悉的String由char组成,因此String也是基于Unicode的。Java提供了一系列和字符编码转换相关的API有一套本地化资源规范,并提供了相关API,其中主要的类是ResourceBundle。提供日历与时区的支持。货币、日期的格式化。输入法。19.1.4了解Java的Properties文件Java软件的国际化必然要用到Properties文件。Properties文件通常以*.properties作为扩展名,当然开发者也可以用其他扩展名,Java并没有规定一定要用properties作为扩展名。Properties文件根据用途不同有不同的名称。Properties文件用于保存软件的配置时称为“属性文件”或者“配置文件”。这种文件已经接触过很多了,例如在插件项目中就有build.properties。在国际化的应用中,则作为“资源文件”。19.2Eclipse的国际化开发环境Eclipse为国际化提供了几个主要的功能,首先是可以设置项目采用UTF-8编码。在Eclipse中,一个Java项目被设置为采用UTF-8编码,其源代码会默认采用UTF-8编码,构造的程序也会采用UTF-8编码。19.2.1设置项目默认编码为UTF-8虽然项目可以采用其他的编码方式,例如可以采用GBK。当处理其他编码的字符时,很容易出现乱码。如果要避免乱码,就要作复杂的编码转换。从国际化的角度去考虑,所有项目都采用UTF-8编码是绝对不会错的。以UTF-8编码作为中介,也可以很方便地转换成其他编码。要让Eclipse对所有项目默认采用UTF-8编码,需要作一下设置。Eclipse在默认的情况下,采用操作系统的默认国家或地区的编码。如果是简体中文版的Windows,会自动采用GBK编码。19.2.1设置项目默认编码为UTF-819.2.2安装Properties编辑器软件的国际化少不了要编辑资源文件(即Properties文件)。虽然编辑Properties文件用普通文本编辑器就可以了,但是遇到非英文的字符,是不可能自己输入转义字符串的。这就要依赖工具了。Eclipse的JDT中提供了PropertiesFileEditor,不过这个编辑器不能直观地编辑非英文字符,除了语法提示外,实际上和普通的文本编辑器差不多。于是就要安装另外一个Properties编辑器。安装方法有两种途径,一种是通过Eclipse的UpdateManager在线更新安装,另一种是下载Properties编辑器的插件包复制到Eclipse的plugins文件夹中。先来看一下如何在线安装。19.2.2安装Properties编辑器19.2.3建立国际化的步骤把需要翻译的字符串移植到*.properties文件中。根据原始的properties文件建立其他语言版本的properties文件,并进行翻译和格式转换。建立国际化的插件fragment发布国际化fragments19.3移植字符串到properties文件在软件开发初期,为了快速建立软件的雏形,一般不会考虑到国际化的问题。随着软件功能的完善,需要增加国际化的支持,这时候就根据原来代码中的文本建立properties文件。EclipseJDT为国际化提供的另外一项功能是ExternalizeString(字符具体化)。这项功能提供了一个向导,引导开发者建立程序中字符串的资源文件。19.3.1打开ExternalizeString对话框打开源代码com.smartdio.company.views中的CompanyEditDialog。现在要对其中的一些提示信息移植到properties文件中。在编辑器中右击,弹出快捷菜单,选择Sources-ExternalizeString。或者选择菜单上的Sources-ExternalizeString。19.3.1打开ExternalizeString对话框19.3.2编辑键的名称按图19-4的提示修改键的名称。Eclipse的向导默认为每个键加上一个前缀,这个前缀就是所在类的名称。19.3.3设置Messages类和Properties文件的位置完成对词条的编辑后,如图还要设置Messages类和Properties文件的位置,通常会把这两个文件定位在项目的起始包中。19.3.4建立Messages.java文件完成后,将建立一个Messages类,和一个messages.properties文件。下面是Messages.java的源代码。packagecom.smartdio.company;importjava.util.MissingResourceException;importjava.util.ResourceBundle;publicclassMessages{privatestaticfinalStringBUNDLE_NAME=com.smartdio.company.messages;//$NON-NLS-1$privatestaticfinalResourceBundleRESOURCE_BUNDLE=ResourceBundle.getBundle(BUNDLE_NAME);privateMessages(){}publicstaticStringgetString(Stringkey){try{returnRESOURCE_BUNDLE.getString(key);}catch(MissingResourceExceptione){return'!'+key+'!';}}}19.3.5应用字符翻译请看被修改的CompanyEditDialog,文本字符串都集中在createDialogArea()方法中。一个是setTitle()设置对话框的窗口标题、另一个是setTitle()设置对话框标题栏的标题。原本是直接用文本串的。现在字符串变成了Messages.getString(CompanyEditDialog.edit_company_msg)这样的代码。19.3.6编辑properties文件最后一个自动建立的文件是messages.properties文件。下面是刚刚新建立的messages.properties文件的源代码。CompanyEditDialog.create_new_company=\u5EFA\u7ACB\u65B0\u7684\u4F01\u4E1ACompanyEditDialog.edit_company_msg=\u7F16\u8F91\u4F01\u4E1A\u4FE1\u606F19.3.6编辑properties文件19.3.7使用PropertiesEditorPropertiesEditor有什么优势呢?如图就是用PropertiesEditor打开的messages.properties文件。可以看到,PropertiesEditor直接把UTF-8的编码字符显示成了直观的字符。19.3.8制作中文版的properties文件messages.properties是默认的本地化资源文件,根据具体的语言环境,还要建立对应的资源文件。这些资源文件的命名都是“messages_”加上“语言国家或地区缩写”。简体中文的缩写是“zh_cn”。19.4自动转换界面标签字符按照前面的方法转换界面中的字符标签有一些缺点:如果使用像VisualEditor这样的编辑工具,会造成设计界面的时候看不到具体的文字内容;另外界面如果有大量的部件,采用上面的方法,工作量会相当大。下面介绍一种自动转换界面字符、实现国际化的方案,供大家参考。19.4.1编写WidgetMessagesUtil下面WidgetMessagesUtil是实现自动专管的工具类。其中两个方法i18nWidget()和i18nWidgetWithChilds()是对SWT部件进行自动翻译的方法。publicstaticvoidi18nWidget(Widgetcontrol,ResourceBundlebundle):对control中的文本字符进行翻译。publicstaticvoidi18nWidgetWithChilds(Widgetcontrol,ResourceBundlebundle):对control中的文本字符进行翻译,如果control包含子部件,将递归深入进去,对所有子部件的文本进行翻译。19.4.2修改Messages类制作好WidgetMessagesUtil后,修改Messages.java。加入两个方法i18nWidget()和i18nWidgetWithChilds()。publicstaticvoidi18nWidget(Widgetcontrol){WidgetMessagesUtil.i18nWidget(control,RESOURCE_BUNDLE);}publicstaticvoidi18nWidgetWithChilds(Widgetcontrol){WidgetMessagesUtil.i18nWidgetWithChilds(control,RESOURCE_BUNDLE);}19.4.3修改界面字符标签修改界面部件上显示的字符。需要应用国际化翻译的文本,都
本文标题:第19章 国际化支持
链接地址:https://www.777doc.com/doc-3880679 .html