第二章 使用系统类提供国家语言支持 - %SYS.NLS类
现代应用程序可以适应各种语言和地区,而无需进行工程更改。这个过程叫做国际化。通过添加特定组件使应用程序适应特定区域或语言的过程就是本地化。
定义用户语言、国家和任何其他特殊变量首选项的参数集是一个区域设置。区域设置指定了数据输入、输出和处理的约定。这些是这样的事情
- 数字格式
- 日期和时间格式
- 货币符号
- 单词的排序顺序
- 将字符串自动翻译成另一种字符集
通常通过标注使用的语言及其地理区域(或其他变体)来识别一个地区。这些通常是由国际标准化组织(ISO
)给出的语言和位置的缩写。例如,en-us
可以表示在美国使用的英语的约定,en-gb
表示在英国使用的英语。
注意:镜像的所有成员上的 IRIS
实例必须具有相同的区域设置和排序规则。
%SYS.NLS
类
IRIS
通过%SYS.NLS
包中的类支持本地化(NLS
指的是国家语言支持)。这些类包含 IRIS
使国际化程序适应其运行时环境所需的信息。
注意:使用这些类中的任何一个,应用程序都可以获取当前为系统或进程设置的值。更改与该进程关联的值将立即生效。要更改系统设置,应用程序必须使用适当的值定义新的区域设置,并指示 IRIS
开始使用新的区域设置。
%SYS.NLS.Locale
%SYS.NLS.Locale
中的属性包含有关可能需要查阅的当前语言环境的信息。更改其中任何一个都不会影响系统的任何行为。
%SYS.NLS.Device
%SYS.NLS.Device
类包含当前设备的一些属性,不一定是实例化对象时的当前设备。
通常,特定设备的属性是在打开设备时设置的。这保证了将使用正确的翻译。通过更改此类的流程实例中的 XLTTable
属性,可以在设备打开后更改转换表,但如果没有充分的理由,不建议这样做。
%SYS.NLS.Device
中的其他属性能够处理翻译过程中发生的错误。默认情况下,当当前表无法处理某个字符时,不会触发任何错误并将违规字符翻译为问号 (?
)。这个字符,称为替换值或替换字符串,可以更改为任何其他字符串。此外,不是默默地翻译未定义的字符,而是可能发出错误。此行为称为默认操作,可能的选择有:
-
0
— 产生错误 -
1
— 用替换值替换不可翻译的字符 -
2
- 忽略错误并通过不可翻译的字符
该类的属性中有针对输入和输出操作的单独属性:
InpDefaultAction
InpReplacementValue
OutDefaultAction
OutReplacementValue
%SYS.NLS.Format
类 %SYS.NLS.Format
包含影响 $ZDATE()
和相关函数行为的属性。这些属性继承自为当前语言环境定义的值,但可以在进程级别更改而不影响其他用户。例如,属性 DateSeparator
和 TimeSeparator
分别包含分隔日期和时间项的字符。
$ZDATE
、$ZDATEH
和 $FNUMBER
的文档描述了更改这些值的效果。
语言环境属性
类 %SYS.NLS.Format
中的 Locale
属性允许控制当前进程中值的“外观”。例如:
- 如果
Locale
是一个空字符串,则系统默认格式(通常是美国英语)有效。 - 如果
Locale
是区域设置名称,例如rusw
或csy8
,则格式来自该区域设置。 - 如果
Locale
是Current
,格式来自系统。
该属性可以在实例化对象后更改,也可以通过将所需的语言环境传递给 %New()
方法来更改,如下所示:
Set fmt = ##class(%SYS.NLS.Format).%New("jpnw")
这些更改仅影响当前进程。
网友评论