第三章 使用系统类提供国家语言支持 - %SYS.NLS.Tab

2023-03-01  本文已影响0人  Cache技术分享

第三章 使用系统类提供国家语言支持 - %SYS.NLS.Table

%SYS.NLS.Table

%SYS.NLS.Table 类可以实例化反映各种表类别的系统默认设置或当前进程设置的对象。表是基本的 NLS 机制,它允许应用程序数据被接受为输入、排序并以适合指定区域设置的格式显示。与 %SYS.NLS.Locale 一样,更改系统对象的任何属性都不会影响系统。但是,更改流程对象的属性将导致关联的行为立即更改。

NLS 表可以分为 I/O 表和内部表。每种表类型都有自己的一组相关数据:

I/O Tables

这些表在系统运行的当前语言环境支持的基本底层字符集和 IRIS 之外的某个实体支持的外部字符集之间进行转换。例如,语言环境字符集可能是 Latin2(更恰当地称为 ISO 8859-2),而外部字符集可能是 UTF-8,通常用于与终端通信。因此,在输出上,将使用像 Latin2–to-UTF8 这样的表,而在输入上,将需要一个反向映射表,UTF8–to-Latin2

虽然这里涉及到两个表(一个用于输入,另一个用于输出),但这些表通常是相互补充的。为简单起见,在谈到语言环境定义和系统默认值时, IRIS 对一对 I/O 表使用一个名称。这个名字通常是外来字符集的名字,默认的另一半是locale字符集。但是,在创建自定义表时,可以选择任何传达交易所含义的名称。

I/O 表用于设备;在这种情况下,设备一词指的是 IRIS 与外部世界接触并需要转换的任何接口,包括进程和系统调用接口。

Internal Tables

内部表还将当前本地字符集中的字符串映射到某个其他值,但它们并不打算用于与外部世界的通信。内部表标识属于以下部分的字符:

使用 %SYS.NLS 的示例

重要提示:这些示例都是可执行的,但没有一个有 RunIt 按钮,因为它们操纵当前语言环境的进程默认值。此外,许多都需要管理权限和/或对 %SYS 命名空间的写入权限。如果希望执行它们,请在单独的进程中运行它们,例如 终端工具 (Windows),或通过 TCP/IP 连接,并使用适当的权限。

  Set Info = ##class(%SYS.NLS.Locale).%New()
  Set Items = "Name" _
              "/Description" _
              "/Country" _
              "/CountryAbbr" _
              "/Language" _
              "/LanguageAbbr" _
              "/Currency" _
              "/CharacterSet"

  Write !
  For i = 1 : 1 : $LENGTH(Items, "/")
  {
    Set Item = $PIECE(Items, "/", i)
    Write $JUSTIFY(Item, 15),": ", $PROPERTY(Info, Item), !
  }

显示系统和进程表数据

这应该为系统和进程表显示相同的值,除非在运行此示例之前某些属性已从外部更改。

  Set IOTables = "Process" _
                 "/IRISTerminal" _
                 "/OtherTerminal" _
                 "/File" _
                 "/TCPIP" _
                 "/SystemCall" _
                 "/Printer"
  Set IntTables = "PatternMatch" _
                  "/Identifier" _
                  "/Uppercase" _
                  "/Lowercase" _
                  "/Titlecase" _
                  "/Collation" _
                  "/XYAction"

  // iterate over the systems, and then the process data
  For Type = "System", "Process"
  {
    Write !
    Set Table = ##class(%SYS.NLS.Table).%New(Type)
    Write "Type: ", Type, !

    Write "I/O Tables", !
    For i = 1 : 1 : $LENGTH(IOTables, "/")
    {
      Set PropName = $PIECE(IOTables, "/", i)
      Write $JUSTIFY(PropName, 15), ": ", $PROPERTY(Table, PropName), !
    }

    Write "Internal Tables", !
    For i = 1 : 1 : $LENGTH(IntTables, "/")
    {
      Set PropName = $PIECE(IntTables, "/", i)
      Write $JUSTIFY(PropName, 15), ": ", $PROPERTY(Table, PropName), !
    }
  }
上一篇 下一篇

猜你喜欢

热点阅读