乐兵-JAVA国际化技术在ATM操作系统的设计与实现_第1页
乐兵-JAVA国际化技术在ATM操作系统的设计与实现_第2页
乐兵-JAVA国际化技术在ATM操作系统的设计与实现_第3页
乐兵-JAVA国际化技术在ATM操作系统的设计与实现_第4页
乐兵-JAVA国际化技术在ATM操作系统的设计与实现_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 学号 200532580205 密级 武汉大学本科毕业论文JAVA国际化技术在ATM操作系统的设计与实现院(系)名 称:国际软件学院专 业 名 称 :软件工程学 生 姓 名 :乐兵指 导 教 师 :李晓剑 教授;廖广志 老师二九年六月BACHELORS DEGREE THESIS OF WUHAN UNIVERSITYThe internationalization technology design in ATM OS and realizationCollege :Wuhan UniversitySubject :International School of SoftwareName

2、: LeBing Directed by :LiXiaoJian Professor; LiaoGuangZhi Teacher June 2009郑 重 声 明本人呈交的学位论文,是在导师的指导下,独立进行研究工作所取得的成果,所有数据、图片资料真实可靠。尽我所知,除文中已经注明引用的内容外,本学位论文的研究成果不包含他人享有著作权的内容。对本论文所涉及的研究工作做出贡献的其他个人和集体,均已在文中以明确的方式标明。本学位论文的知识产权归属于培养单位。本人签名: 乐兵 日期: 2009年6月 摘 要 随着科技发展和社会进步,尤其是计算机大范围的普及,计算机应用逐渐由大规模科学计算的海量数据处

3、理转向大规模的事务处理和对工作流的管理,这就产生了以台式计算机为核心,以数据库管理系统为开发环境的管理信息系统在大规模的事务处理和对工作流的管理等方面的应用,特别是在银行自动存取款帐目管理之中的应用日益收到人们的关注。ATM自动取款机系统对于银行业务的拓展有着非常重要的作用。 本文主要介绍了ATM操作系统的模块,ATM操作系统国际化所需要的工具,以及这些工具的原理。 另外,本文总结了JAVA国际化过程中易出现的问题及解决方法,并把传统软件的本地化和国际化软件的本地化进行了对比,得出国际化软件的优点。关键词:ATM操作系统;JAVA国际化;国际化软件的优点ABSTRACT Especially

4、the computer is big with science and technology development and social progress, range popularizing, the data handling the computer is applied gradually from the great capacity for liquor that large-scale science calculates changes to the large-scale affair treatment and the administration shedding

5、to the job, this has come into being take table model computer as core, the application taking data base management system as exploitation environment Management Information System in the respect of large-scale affair treatment and the administration shedding to the job etc. in the items of an accou

6、nt administration applying to bank automation access money, especially receives people gradually attention. ATM automation choose money machine system has the very important effect to the banking business Tuo exhibition ATM OS module the main body of a book has been introduced mainly , implement nee

7、ded by ATM OS internationalization , these implement principle and. Another , the main body of a book have summed up JAVA internationalization process middle problem and solution easy to appear, and with tradition software this locality-rization having composed in reply local-rization internationali

8、zation software go along contrast , the merit reaching the internationalization software.Keywords: ATM OS; JAVA internationalization; Internationalization software merit目 录第1章 绪论81.1 研究背景81.2 ATM操作系统的研究内容91.2.1 ATM操作系统的登录模块91.2.2 ATM操作系统的查询模块 余额查询 历史存款记录查询 历史取款记录查询 历史

9、转账记录查询 积分查询91.2.3 ATM操作系统的取款模块91.2.4 ATM操作系统的转账模块91.2.5 ATM操作系统的存款模块91.2.6 ATM操作系统的修改密码模块91.3 本课题的研究内容10第2章 JAVA国际化原理和工具102.1 概述102.2 JAVA实现本地化和国际化的原理112.2.1 JAVA国际化编程常用类 Locale类 ResourceBundle类122.2.2 JAVA本地化和国际化常用工具JILKIT2.0 项目管理器 国际化检验工具 国际化消息生

10、成工具 资源处理工具 翻译器172.3 中文软件的国际化方法172.3.1 编写符合Unicode标准的程序 定义字符变量或常量时使用Unicode数据类型 字符串为Unicode字符串 字符版本的函数原型 对Unicode字符的特殊处理192.3.2 分离一二进制资源文件 传统做法与新的做法的比较 新的做法具体步骤202.3.3 中文软件国际化应注意的问题 避免运行时合并字符串 变量唯一命名 不组

11、合多个变量 保持句子在单一的字符串 不使用硬编码222.4传统软件和国际化软件本地化的比较22第3章 ATM操作系统的国际化243.1 概述243.2 ATM操作系统的国际化方法及过程243.2.1 ATM操作系统国际化分析243.2.2 Eclips工具国际化ATM系统过程243.2.3 登录模块国际化成果303.2.4 关于其他模块国际化32结论32参考文献33致谢34附录351.1 研究背景第1章 绪论 ATM自动取款机操作系统是现代科技与银行业务的结晶,随着信息化、网络化的日新月异,以ATM交易为代表的自助交易将逐步取代银行网点交易。其能为持卡人提供

12、取款、存款、转账、余额查询,更改密码等多种功能,这也成为了现代商业银行为客户服务的主流渠道,它的广泛应用可提高银行工作效率,减少由于业务量增加对柜台产生的压力,同时又自动延长了银行的服务时间。 随着金融行业竞争加剧,银行的需求出现了变化:希望对不同ATM品牌机上运行程序进行整合,以减少应用开发和维护成本;银行对自助服务渠道有整合成统一的体系结构的需求;市场竞争需要银行自助服务更加丰富,开发方式更灵活;自助渠道成为新的赢利中心。 正如桌面操作系统最终从封闭式走向开放式那样,ATM的操作系统平台也随着技术的发展逐渐开放。一直以来,ATM都是运行在OS/2操作系统之上的。随着Windows的安全性和

13、稳定性逐渐增强,其上的应用迅速增多,而OS/2则逐渐退出整个PC行业。加之在Windows平台上开发应用具有相对简单性,所以在ATM机上采取基于Windows操作系统的跨平台技术逐渐成为业界发展趋势。许多银行已经将他们的自助服务渠道转移到Windows支持的软件环境上。事实上,全球已经有200多家银行已经将自助设备操作系统全面转移到Windows平台上,超过85的银行会在未来两年内转移至Windows。 由此可以看到银行ATM自动取款机操作系统未来的运行效率、经营成本、管理水平和盈利能力的高低将直接决定其核心竞争力的高低。基于Windows开发的ATM自动取款机操作系统就是建立在这个基础上开发

14、出来的,为银联提供一个强大的公共的软件服务平台。1.2 ATM操作系统的研究内容 121 ATM操作系统的登录模块 负责提供用户登录功能。当用户登录时,跳转到ATM操作系统的首页或者提示用户登录失败信息。122 ATM操作系统的查询模块1221 余额查询查询用户现有余额。 1221 历史存款记录查询查询用户历史存款记录。1221 历史取款记录查询查询用户历史取款记录。1221 历史转账记录查询查询用户历史转账记录。1221 积分查询查询用户现有积分。123 ATM操作系统的取款模块 负责提供用户取款的功能。124 ATM操作系统的转账模块 负责提供用户转账的功能。125 ATM操作系统的存款模

15、块 负责提供用户存款的功能。126 ATM操作系统的修改密码模块 负责提供用户修改密码的功能。1.3 本课题的研究内容 随着软件技术的发展, 为使软件更好地进入国际市场, 人们提出了软件的国际化与本地化理论。软件国际化的关键所在是要解决不同国家与地区不同语言的信息处理问题,以使软件的本地化更容易、更高效。本文讨论了中文软件的特点,结合Unicode 字符编码标准的优势,根据ATM操作系统国际化实例分析了中文软件的国际化思想和方法。第2章 JAVA国际化原理和工具2.1 概述 由于历史的原因, 计算机及软件几乎都只能处理单一的语言英语。随着软件在世界各国的广泛应用, 软件处理语言的单一性给软件的

16、普及和用户的应用带来了不便. 如何使软件能够处理多种语言已成为人们关注的问题。 软件的国际化和本地化是解决这一问题的有效途径。 所谓本地化, 即针对某一地域所支持的编码字符集、语言和地域习惯为软件建立符合本地要求的信息的过程。从另个角度看,为特定地区编写的所有应用程序都本地化了,虽然这些应用程序大多数只支持一种语言环境。然而,真正的本地化通常是由访问语言环境、位置、政治或其他特定组件和模块的核心代码,以及将文本翻译成适合于用户的版本来实现的。适当国际化的程序使本地化更为便利,并为本地化提供了基础。 所谓国际化, 即不对软件要处理的语言、字符编码方式、习惯数据表达方式做出任何假定的软件开发方法。

17、按该方法开发的软件可以在运行时按照特定的地域环境要求改变程序的表现行为。世界各国除了有不同的语言外,在表示日期、数字、数量、货币符号等方面也有很大的差异。显然,要开发能够满足不同地区语言、文化生活习惯要求的本地化版本, 必定要对软件进行改动, 使之能够处理本地的文字, 提供本地语言的信息, 支持不同的习惯表示方法等。这种修改通常需要改写大量的软件源代码, 除了耗费大量的人力、物力外,还难以保持软件源代码的统一,给软件维护、升级带来了极大的问题,而国际化的软件可大幅简化其本地化的过程。2.2 JAVA实现本地化和国际化的原理221 JAVA国际化编程常用类2221 Locale类Locale 对

18、象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为环境敏感的操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗或传统来格式化该数值。 使用此类中的构造方法来创建 Locale: Locale(String language) Locale(String language, String country) Locale(String language, String country, String variant)语言参数是一个有效的 ISO 语言代码。这些代码是由 ISO-639 定义的小写

19、两字母代码。国家/地区参数是一个有效的 ISO 国家/地区代码。这些代码是由 ISO-3166 定义的大写两字母代码。变量参数是特定于供应商或浏览器的代码。例如,用 WIN 代表 Windows、MAC 代表 Macintosh等等。有多个变量时,把它们用下划线区分开来,把最重要的放在前面。例如,一个传统的西班牙排序规则可能用下列语言、国家/地区和变量参数来构造一个语言环境:es、ES、Traditional_WIN。Locale 类提供了一些方便的常量,可用这些常量为常用的语言环境创建 Locale 对象。例如,下面的内容为美国创建了一个 Locale 对象: Locale.US创建完 Lo

20、cale 后,就可以查询有关其自身的信息。使用 getCountry 可获取 ISO 国家/地区代码,使用 getLanguage 则获取 ISO 语言代码。可用使用 getDisplayCountry 来获取适合向用户显示的国家/地区名。同样,可用使用 getDisplayLanguage 来获取适合向用户显示的语言名。有趣的是,getDisplayXXX 方法本身是语言环境敏感的,它有两个版本:一个使用默认的语言环境作为参数,另一个则使用指定的语言环境作为参数。 一个Locale代码可由语言代码和地区代码组合而成。常用的两种Locale代码如下表1.1:表1.1 Locale代码表 语言代

21、码地区代码Locale代码说明enUSEn-US美国英语zhCNzh-CN简体中文 Locale类的主要方法如下表1.2:表1.2 Locale类主要方法方法功能getAvailableLocale()获取所有可用国家或地区的列表getDefault()获取系统默认的国家或地区setDefault(Locale)将新的Locale设置为系统默认的国家或地区toString()返回代表Locale的字符串2222 ResourceBundle类 ResourceBundle类是所有资源包必须扩展的抽象父类。当程序需要一个特定地区的资源时,可以从适合用户地区的资源包中调入。用这种方式可以写出与用户

22、所在地区独立的程序代码, 而把特定于地区的信息隔离在资源包中。这使得编程可以: 容易本地化或翻译成不同的语言 一次处理多种语言环境 以后容易更改以支持更多的语言环境 一个资源束从概念上讲是相关的类集合,这些类是从 ResourceBundle 继承而来的。 ResourceBundle 的每个相关的子类有同一基名并加上标识它的语言环境的附加成分。例如,假设您的资源束命名为 MyResource。您写的第一个类可能是缺省的资源束,它与它的家族有同一个名字-MyResource 。也可按需要提供许多特定于语言环境的类:如,可能为它提供一个德文的名字MyResources_de。 ResourceB

23、undle 的每个相关的子类包含同样的项目,但是项目已经为那个 ResourceBundle 子类描述的语言环境所翻译。例如,MyResources 和 MyResources_de 可能都有一个用在确认操作按钮上的 String 。在 MyResources 中,String 可能包含 OK ,在 MyResources_de 中,它可能包含 Gut。 如果对不同的国家有不同的资源,可做出规定:例如, MyResources_de_CH 是 Switzerland 的资源。如果仅想更改规定中的一些资源,可以这样做。 当您的程序需要特定于语言环境的对象时,它使用 getBundle 方法装入

24、ResourceBundle 类: ResourceBundle myResource = ResourceBundle.getBundle(MyResource, currentLocale); 第一个参数指定包含有疑问对象的资源束的家族名,第二个参数指定了期望的语言环境。getBundle 使用这两个参数来构造 ResourceBundle 子类的名字,它应按下面的方法装入: baseclass + _ + language1 + _ + country1 + _ + variant1 baseclass + _ + language1 + _ + country1 baseclass +

25、 _ + language1 baseclass baseclass + _ + language2 + _ + country2 + _ + variant2 baseclass + _ + language2 + _ + country2 baseclass + _ + language2 资源束用不同的后缀查找类,根据(1) 期望的语言环境和 (2) 缺省的语言环境(基类), 以下面从更低级别(指定较多的)到父类级别(指定较少的)的顺序来查找: 查找的结果是一个类,但是那个类可能由磁盘上的特性文件支持。如果查找失败,getBundle() 抛出 MissingResourceExcept

26、ion 异常。资源束包含键/值对,键用于唯一地识别资源束中特定于语言环境的对象。下面是一个包含键/值对的 ListResourceBundle 的例子: class MyResource extends ListResourceBundle public Object getContents() return contents; static final Object contents = / LOCALIZE THIS OkKey, OK, CancelKey, Cancel, / END OF MATERIAL TO LOCALIZE ; 键总是 String。 在这个例子中,键是 OkK

27、ey 和 CancelKey。 在上面的例子中,值也是 String-OK 和 Cancel-但是它们不是一定如此。值可以是任何类型的对象。 使用适当的获取方法从资源束中获取一个对象。因为 OkKey 和 CancelKey 都是字符串,可用 getString 方法检索它们: button1 = new Button(myResourceBundle.getString(OkKey); button2 = new Button(myResourceBundle.getString(CancelKey);获取方法都要求把键作为一个参数,并且如果找到的话就返回这个对象。如果对象未找到,获取方法抛

28、出 MissingResourceException 异常。 除了 getString,资源束支持获取不同类型对象的其它方法,例如 getStringArray。如果没有任何对象匹配这些方法,可以使用 getObject,并把结果映射成适当的类型。例如: int myIntegers = (int) myResources.getObject(intList);注意: 应该一直提供没有后缀的基类。 如果要求的语言环境不存在,这将是类的 最后选择。例如,下面一个类 MyResources。它碰巧包含 US 字符串,所以不必用显式的 MyResource_en 或 MyResource_en_US

29、。 JDK 提供了 ResourceBundle 的两个子类: ListResourceBundle 和 PropertyResourceBundle , 它们提供了非常简单的创建资源的方法。 (一旦序列化完全被集成,将提供另一个方法。) 如在先前的例子中所见到的,ListResourceBundle 把它的资源作为键/值对管理。 PropertyResourceBundle 使用特性文件管理它的资源。 如果 ListResourceBundle 或 PropertyResourceBundle 不符合需求,还可以写自己的 ResourceBundle 子类。但是写的子类必须覆盖两个方法:ha

30、ndleGetObject 和 getKeys()。 下面是 ResourceBundle 子类管理少数资源的例子(对于更大的资源,应使用 Hashtable)。注意: 如果未找到键,handleGetObject 必须返回 null。如果一个“父类级别的”ResourceBundle 处理有同一值( 见下面的 uk ) 的同一键,则不必提供任何值。 abstract class MyResources extends ResourceBundle public Object handleGetObject(String key) if (key.equals(okKey) return Ok

31、; if (key.equals(cancelKey) return Cancel; return null; abstract class MyResources_de extends MyResources public Object handleGetObject(String key) if (key.equals(okKey) return Gut; if (key.equals(cancelKey) return Vernichten; return null; abstract class MyResources_uk extends MyResources public Obj

32、ect handleGetObject(String key) / dont need okKey, since parent level handles it. if (key.equals(cancelKey) return Dispose; return null; ResourceBundle类的主要方法如下表1.3: 表1.3 ResourceBundle类主要方法方法功能getBundle(String,Locale)取得ResourceBundle的合适子类getObject(String)获取键所对应的一个对象getString(String)获取键所对应的一个字符串getKe

33、ys()返回关键字的枚举getLocale()返回此ResourceBundle的LocalehandleGetObject(String)从ResourceBundle中取得所对应的一个对象ListResourceBundle 类的主要方法如下表1.4:表1.4 ListResourceBundle表主要方法 方法 功能getContents()返回与地区资源相关的数组getKeys()重写ResourceBundle.getKeys()handleGetObject(String)重写ResourceBundle.handleGetObject(String)222 JAVA本地化和国际化

34、常用工具JILKIT2.0 项目管理器能定义一个项目来管理所有的java源文件及与它们相关的资源文件。 国际化检验工具能在policies文件的帮助下完成java国际化和本地化有效性的验证并生成报告。 国际化消息生成工具 能定义ResourceBundle类,转换和获取消息,在不同的Locale下产生ResourceBundle 文件,冻结所有不需要国际化的消息项。所有在国际化检验工具中的功能在此工具中都包括。 资源处理工具能合并和区分不同的Resources,转换ResourceBundle(ListResourceBundle,Pro

35、pertyResourceBundle)的类型和resource文件的编码( 从本地编码到Unicode)。 翻译器能在字典或可重用资源的帮助下翻译Resources。2.3 中文软件的国际化方法2.3.1 编写符合Unicode标准的程序 Unicode 是为了解决因不同语言字符集的编码冲突而带来的字符集无法统一的问题。它是16位双字节编码的国际统一字符集, 支持世界上超过650 种语言字符, 为软件的国际化提供了一个很好的解决方案。使用Unicode标准编写程序有以下优点:(1) 可以很容易地在不同语言之间进行数据交换。 (2) 使你能够分配支持所有语言的单个二进制.exe文

36、件或DLL文件。 (3) 提高应用程序的运行效率。事实上,Windows 2000是使用Unicode从头进行开发的,如果调用任何一个Windows函数并给它传递一个ANSI字符串,那幺系统首先要将字符串转换成Unicode,然后将Unicode字符串传递给操作系统。如果希望函数返回ANSI字符串,系统就会首先将Unicode字符串转换成ANSI字符串,然后将结果返回给你的应用程序。进行这些字符串的转换需要占用系统的时间和内存。通过从头开始用Unicode来开发应用程序,就能够使你的应用程序更加有效地运行。 Windows CE 本身就是使用Unicode的一种操作系统,完全不支持ANSI W

37、indows函数 Windows 98 只支持ANSI,只能为ANSI开发应用程序。 Microsoft公司在将COM从16位Windows转换成Win32时,公司决定需要字符串的所有COM接口方法都只能接受Unicode字符串。 定义字符变量或常量时使用Unicode数据类型Windows 针对16 位的Unicode 字符定义了一些Unicode 数据类型, 如表1。它方便了Unicode的编程。表1 中的WCHAR 表示16 位的字符数据,PWSTR 表示16 位字符串的指针, PCWSTR 表示16 位的字符串常量的指针, 通用数据类型是这样使用的( 以TCHAR 为例)

38、 :# ifdef UNICODE# define TCHAR WCHAR# else# define TCHAR CHAR# endif也就是说, 如果在预编译时设置了UNICODE编译标志, 编译器将TCHAR 编译为WCHAR( 表示宽字符) , 如果没有设置UNICODE 标志, 编译器将TCHAR 编译为CHAR( 表示ANSI 字符) 。使用通用声明可以维护唯一一组源文件, 并可以编译它们, 以支持Unicode 或ANSI。当然也可以直接定义数据为WCHAR, 使其只支持Unicode 标准。如下表1.5:表1.5 Unicode 数据类型表Unicode数据类型说明 对应的AN

39、SI数据类型WCHAR Unicode字符 CHAR PWSTR指向Unicode字符串的指针变量 LPSTR PCWSTR指向Unicode字符串常量的指针变量 LPCSTR TCHAR,PTSTR,LPCTSTRANSI/Unicode通用数据类型 字符串为Unicode字符串Visual C+允许在字符串前面添加“L”前缀以指明该字符串是Unicode 字符串, 如: LPWSTR str= L“ 这是一个Unicode 字符串”。在源文件中,以编辑器或编译器能理解的代码页来表示该字符串, 在编译时, 这些字符被转化为Unicode。Windows 还定义了一个文本宏TEX

40、T( ) 或_T( ) , 这个宏可以依据是否设置了Unicode 编译标记来决定是否将字符串定义为Unicode 字符串。那么字符串的通用形式应该是: LPWSTR str=TEXT(“ 这是一个Unicode 字符串”) 。 字符版本的函数原型Unicode 数据类型与ANSI C 中的宽字符数据wchar_t 兼容, 因此可以访问宽字符串函数。大多数C 运行时库包含了字符串函数的宽字符版本, 处理字符串的C 运行时库函数以str 开头如strcpy, 而其宽字符版本以wcs 开头如wcscpy, 也提供了ANSI 和Unicode 的通用版本以_tcs 开头如_tcscpy

41、。但是,Win32 API 提供了更通用的函数集,可以执行与C 运行时库相同的功能。例如, 8 位字符集字符串处理函数lstrcpyA, 其Unicode 字符串处理函数为lstrcpyW, 函数名最后的“A”表示是ANSI,“W”表示是宽字符(wide) , 它们也有通用的版本为lstrcpy。在编写程序时, 对字符串处理的函数应该使用宽字符版本, 以使其能够处理Unicode字符串。当然, 更好的做法是使用它们的通用版本, 根据预编时是否设置Unicode 编译标记来确定将函数编译为单字节还是双字节版本。 对Unicode字符的特殊处理不要用sizeof( ) 操作符来获得字

42、符串的长度。因为Unicode 是双字节16 位的, 而sizeof( ) 是一个计算单字节字符长度的函数, 所以在Unicode环境下就会有2 倍的误差。我们可以用一些方法来隐藏Unicode 的一些细节, 比如在需要获得字符长度的时候, 我们可以定义一个叫做SIZEOF的宏, 这个宏被定义在一个头文件中, 然后在需要用到这个宏的程序中包含这个头文件:#define SIZEOF( x) ( sizeof( ( x) ) /sizeof( ( x) 0 ) )这个宏不仅可以用来解决Unicode 字符串长度的问题, 也可以用在编译时定义的表格上, 它可以获得表格的项数如下:class Wha

43、tever Whatever data = ,;for( int i = 0; i SIZEOF( data); i+)/ / 扫描表格寻找匹配项。2.3.2 分离一二进制资源文件 传统做法与新的做法的比较表1.6 两种做法比较表分离方式 分离思想 优点及缺点传统做法把所有的资源都放到动态链接库中, 一种语言一个动态库, 程序运行的时候通过加载不同的动态链接库来实现多语言功能不能动态切换语言;更换语言必须重启软件;当程序需要修改资源时,必须更新所有的动态链接库,容易出错;新的做法把所用的字符串都放到文件中, 每一种语言用一个文件表示, 根据所选择的语言到对应的文件中去加载字符串可

44、以动态切换语言;根据需要可以添加新的语言;非常灵活; 新的做法具体步骤第一步: 在程序启动时检查所选择的语言, 确定该语言文件, 保存该文件路径。 第二步: 提供一个全局函数如g_LoadString(CString StringID) , 根据提供的字符串ID 返回其内容, 可在函数中判断是何种语言, 这样在程序中只要提供一个字符串ID 就可以自动加载不同语言的文字了。 第三步: 在程序中使用。 如下代码:原代码:CString str;Str = TEXT(“文件”) ;改动后代码:CString str;Str = g_LoadString( IDS_MENU_FILE)

45、;源代码中的str 在任何时候都被赋值为字符串“ 文件”, 而改动后代码中str 的值由函数g_LoadString( ) 获得, 其参数IDS_MENU_FILE 表明现在要获取的是语言文件中ID 为ID_MENU_FILE 的值, 当选择的是中文语言文件则取值为“文件”, 选择的是英文语言文件则取值为“File”。 第四步: 在对话框中使用。如果像在程序中使用那样, 每个字符串都要去加载一次的话, 当对话框较多时, 则工作量可能很大。所以我们可以定义一个函数g_SetDialogStrings(CDialog *pDlg, UINT uDlgID) , 每个对话框在初始化的时候调用该函数,

46、 传递对话框的指针, 在函数中循环枚举所有的子控件, 逐个设置文字, 这样就可以省去很多的工作。2.3.3 中文软件国际化应注意的问题 避免运行时合并字符串使用带变量的、在应用程序运行时组合的文本字符串。如下:TCHAR szString = TEXT(“确定您要删除”) ;TCHARszStringDel MaxSz =szString + szObjectDel+“?”; 其中szObjectDel 是一个可以包含文件、目录或者子目录的变量。这种方法对程序来说很好,但是转化人员根本不知道被删除的内容。变量的值通常确定了是否要用不同的句法或定冠词,这取决于要被删除的项目, 原因

47、是在某些语言中的名词是有性别的。合并字符串的编程方法不便于分离可本地化的资源最好是每个句子使用确定的字符串, 但不要在句子中使用变量。 变量唯一命名 如果一个字符串中只有一个变量, 最好是使用允许文本中放置至少一个占位符的函数, 如:TCHAR szString = TEXT(“确定您要删除%S”) 。 如果一个字符串中有几个变量, 如:TCHARString =TEXT(“由于您的等级是%S, 所以您只能对%S 进行操作! ”) , 当翻译成其他国家的语言时, 可能出现第一个%S 与第二个%S 的位置发生变化, 在这种情况下就应该使用消息表, 它用有序数字而非任意的字母来标记替

48、换参数, 从而更便于存储包含若干个替换参数的字符串。 不组合多个变量例如, 翻译人员在本地化过程中遇到这样的代码:“%d: %d %s on %s, %s %d, %d ”,那么翻译人员就不知道怎样翻译单词“on” 保持句子在单一的字符串当一个句子被拆散为几个字符串时, 这些字符串不一定连续出现在字符串表中, 把这些字符串接合到一起形成正确的句子是一个很难的过程, 翻译者很难为一个句子正确地翻译几个字符串。 不使用硬编码所谓硬编码就是把需要本地化的字符串放在程序的主体代码中, 而不是放在外部易于本地化的资源文件中。或者基于假设的字符串长度, 设定字

49、符串的长度数值常量, 在代码中对需要本地化的关于语言或文化的信息( 例如日期和时间格式等) 作出任何假设。软件国际化设计应该避免任何硬编码, 以提高本地化能力。2.4传统软件和国际化软件本地化的比较表1.7 两种软件比较 软件名称 本地化优缺点传统软件需要修改源程序;需要重新连接才能获得一个本地化的软件版本; 国际化软件不需要修改源程序;非常方便的可以获得本地化的软件版本,不需要重新连接;如下图: 图1.1是传统软件的本地化过程,图1.2是国际化软件的本地化过程:图1.1 传统软件的本地化过程图1.2 国际化软件的本地化过程第3章 ATM操作系统的国际化3.1 概述 ATM操作系统的国际化实际

50、上就是一个工作量的问题.只要搭起正确的框架,国际化是可以轻松实现的.3.2 ATM操作系统的国际化方法及过程321 ATM操作系统国际化分析 ATM操作系统实际上是由六个功能模块构成。所以对于ATM操作系统的国际化实现过程很明显,分为六大模块。不过首先必须建立好整个ATM操作系统国际化所需要的两个资源文件。在本系统中两个资源文件分别为application_perties和application_zh_CN.properties。设计好资源文件后,再配置好相应的Action,配置好XML文件,最后在JSP页面中使用标签即可实现国际化功能。322 用Eclips工具国际化ATM系统过

51、程 首先,在Eclips中点击“File”,新建二个文件,文件名分别为application_perties和application_zh_CN.properties。文件都保存在目录“/ATMProject/src/com.yourcompany.struts”下,如图1.3: 图1.3 ATMProject 其次,对application_perties和application_zh_CN.properties文件进行配置。如下图: 图1.3 application_perties (图1.4 application_zh_CN.properties 配置好资源文件后,点击“SAVE” 保存。 随后,配置国际化所需Action.下面给出系统中配置的LanguageAciton源码:/* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */package com.yourcompany.struts.action;import java.util.Locale;import javax.servlet.http.HttpServletRequest;imp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论