随着软件应用的迅速推广与发展,应用软件无一例外的面临着支持多国家多语种的国际化问题,基于 Windows 的批处理文件应用广泛,然而作为一种通用脚本语言,批处理脚本没有提供一种体系化的多语言国际化支持。本文首先介绍编程语言和国际标准化对多语言问题作出的努力;其次,给出了通用多语言支持解决方案的灵活架构设计;再次,给出了批处理文件的轻量级、灵活架构的通用多语言支持解决方案,以及基于该解决方案构建支持多语言的批处理软件系统的一般步骤;最后作了一定的总结和展望。
背景
软件应用迅速发展扩张,逐步渗透到各行各业,越来越多的国家和地区认识到了计算机软件的重要性,大量的应用软件应用于日常的生活和工作当中。小到一个音乐播放软件,大到操作系统,都被广泛的应用。但是大量的计算机软件应用面临着一个非常严峻的问题,国际化问题。由于各个国家有不同的语言,而同一个国家的不同地区也有不同的语言习惯,例如中国大陆和台湾地区都使用中文,但是由于地区的语言等习惯不同,大陆地区使用简体中文,台湾地区使用的是繁体中文。对于一个应用软件要做到很好的本地化效果,就要充分考虑到用户的语言等习惯,例如 Windows Xp 系统包括中文简体 Xp 系统,中文繁体系统,英文系统等等。任何一个跨国家跨地域的软件都要碰到这样的问题,这个问题的解决和实现被称为国际化问题,所谓国际化就是 Internationalization,简称作 i18n 。
批处理脚本作为基于 Windows 直接支持的脚本,以其简洁、方便、快速而被广泛的直接应用或间接应用到大量的软件应用当中,然而作为一种通用的脚本语言没有提供一种成体系的多语言国际化支持,大大限制了这种简洁、方便的语言的使用,本文针对批处理脚本语言提出了一种有效的多语言支持解决方案。
Java 语言的国际化支持
Java 语言提供了 java.util.Locale 类进行多语言环境处理,Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗 / 传统来格式化该数值。使用此类中的构造方法来创建 Locale:
Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)
language 语言参数是一个有效的 ISO 语言代码。这些代码是由 ISO-639 定义的小写两字母代码。
表一 语言参数的 ISO 语言代码
English Name of Language | All English Names | All French Names | ISO 639_2 | ISO 639_1 |
Chinese | Chinese | chinois | chi/zho | zh |
English | English | anglais | eng | en |
French | French | français | fre/fra | fr |
country 国家/地区参数是一个有效的 ISO 国家/地区代码。这些代码是由 ISO-3166 定义的大写两字母代码。
表二 语言参数的 ISO 国家/地区代码
Country names | ISO 3166-1-alpha-2 code |
CHINA | CN |
TAIWAN, PROVINCE OF CHINA | TW |
UNITED STATES | US |
UNITED KINGDOM | GB |
FRANCE | FR |
根据 ISO 语言代码和国家/地区代码我们定位一个国家地区的语言习惯的时候可以使用“语言 - 国家”这样的格式,例如中国大陆的中文语言习惯可以表示为“ zh-CN ”,中国台湾的语言习惯可以表示为“ zh-TW ”等等以此类推。
Java 语言充分利用 Locale 对象对语言习惯进行处理和设计。基于 JAVA 语言的大部分应用充分利用这一特性进行多语言架构设计。例如 Struts 框架在进行多语言处理的时候结合 Web 应用的特点充分使用了 JAVA 的多语言特性,多语言处理按照如下逻辑,如果用户选择了某种语言习惯 Locale,则将该信息存储到该用户的会话当中,再次读取首先检查会话信息,然后将会话中语言习惯 Locale 映射为信息文件;如果会话信息不存在,则利用 Request 对象读取客户端浏览器的系统 Locale 信息,然后把这一信息解析,即可得到相应的语言习惯,并映射成相应的语言习惯文件中去。