用 Visual Basic编写国际化代码

对一个产品进行本地化不仅仅是翻译文本信息,该产品还必须支持本国的惯例和数字格式。为了使用不同格式的日期、货币、及数值和分隔符,必须了解 Visual Basic 是如何区分系统区域和代码区域的。

系统区域和代码区域

系统区域是应用程序用户的区域—它是用户输入和输出的参照,是通过设置操作系统的控制面板实现的。在 Visual Basic 中 code locale 总是英语/美国而不考虑用的是哪一国际版本。代码区域决定编程语言和所有与区域有关的设置。

日期

在 Visual Basic 中不要把日期当成字符串输入。应以 # 月/日/年 # 的格式输入日期以确保能被任何系统区域识别。由于 Visual Basic 只允许英语/美国作为编程的区域,因此无论应用程序在哪里运行,日期都是一样的。

例如,在输入对话框中输入 8/2/97,

CDate ("8/2/97")

根据不同的系统区域返回以下结果:

操作系统 输出
法语/法国 08/02/97 (= 1997 年 2 月 8 日)
英语/美国 8/2/97 (= 1997 年 8 月 2 日)

但如果在代码中输入 8/2/97,

CDate (#8/2/97#)

根据不同的系统区域返回以下结果:

操作系统 输出
法语/法国 02/08/97 (= 1997 年 8 月 2 日)
英语/美国. 8/2/97 (= 1997 年 8 月 2 日)

如果在法国输入 8/2/97,应用程序将解释为 1997 年 2 月 8 日,这是因为在法国日期格式为日/月/年。而在美国输入相同的字符串,应用程序就知道该日期为 1997 年 8 月 2 日,因为日期的格式为月/日/年。

货币

避免在代码中按字符串输入货币。以下代码只能运行于把美元符号 ($) 当作货币符号的区域。

Money = "$1.22"
NewMoney = CCur(Money)

如果本代码示例运行于法语/法国区域,此时“F”代表货币符号,Visual Basic 将产生一条错误信息“类型不匹配”,这是因为 $ 不被本国当成货币符号。此时应只简单地使用数字,如下例所示。由于 Visual Basic 的区域总是英语/美国,因此使用句号作为小数点。以下代码将不考虑区域因而能正确执行。

Money = 1.22
NewMoney = CCur(Money)

数值和分隔符

在美国,句号 (.) 被作为小数点。但在一些欧洲国家/地区,小数点是逗号 (,)。类似地,美国把逗号作为分隔小数点左边每三位的千分位符,而一些欧洲国家/地区使用空格实现此功能。下表列出了不同数字格式的一些例子。

国家/地区 数字格式
美国 1,234,567.89
1,234.56
.123
法国 1 234 567,89
1 234,56
0,123
意大利 1.234.567,89
1.234,56
0,123

注意 在Visual Basic 中函数 Str 和 Val 总是把句号当成小数点。但这在大多数区域中是不适用的。因此应该使用 CStr, CDbl, CSng, CInt 和 CLng 函数把其它数据类型转换为需要的数据类型。这些函数通过系统区域来决定小数点。

详细信息 关于 Print 和 Format 函数的详细信息请参阅本章后面的“区域识别函数”。关于函数“CStr 函数”,“CDbl 函数”,“CSng 函数”,“CInt 函数”,“CLng 函数”,“CDate 函数”和“CCur 函数”,请参阅《语言参考》。也可参阅“变量、常数和数据类型”。