第十六章 字符串本地化和消息字典(二)

网友投稿 249 2022-09-22

第十六章 字符串本地化和消息字典(二)

文章目录

​​第十六章 字符串本地化和消息字典(二)​​​​XML 消息文件​​

​​ Element​​​​ Element​​​​ Element​​

​​管理消息字典​​​​导入 XML 消息文件​​

​​导入特定 XML 消息文件​​​​导入目录中的所有 XML 消息文件​​​​导出 XML 消息文件​​​​以一种语言导出特定域​​​​以特定语言导出所有域​​​​删除消息​​​​列出消息​​

第十六章 字符串本地化和消息字典(二)

XML 消息文件

​​XML​​ 消息文件是消息字典的导出。这也是希望导入的任何消息的必需格式。

只要有可能,​​XML​​​ 消息文件应该使用 ​​UTF-8​​​ 编码。但是,在某些情况下,开发人员或翻译人员可能会使用本地平台编码,例如 ​​shift-jis​​​,以便于编辑 XML 消息文件。无论 ​​XML​​ 文件使用何种编码,应用程序的语言环境都必须支持它,并且它必须能够表达该语言的消息。

​​XML​​ 消息文件可能包含一种语言和多个域的消息。

​​​​​ 元素是 XML 消息文件的顶级容器,每个文件只有一个 ​​​​元素。

​​​​​元素有一个必需的属性,​​Language​​​。 ​​​​​ ​​Language​​​ 属性的值是一个全小写的 ​​RFC1766​​​ 代码,用于标识文件的语言。它由一个或多个部分组成:主要语言标签(例如 ​​en​​​ 或 ​​ja​​​)可选地后跟连字符 (​​-​​​) 和次要语言标签(​​en-gb​​​ 或 ​​ja-jp​​)。

在以下示例中,此语言为​​“en”​​(英语)。

Source Samples Menu

​​​​​必须包含至少一个​​​​​ 元素。它可能包含多个​​​​。

​​​​​元素具有一个必需的属性域。 ​​​​ Domain 属性的值是用来组织应用程序中消息的域名之一。

任何 ​​​​​元素都可以包含零个或多个 ​​​​ 元素。

​​​​​ 元素有一个必需的属性,Id。 ​​​​​ Id 属性的值是用来组织应用程序中的消息的消息 ​​ID​​ 字符串之一。

任何 ​​​​ 元素都可以包含一个文本字符串。字符串可以由以下任何一项组成,单独或组合:

文件格式允许的简单文本替换参数​​%1​​​、​​%2​​​、​​%3​​​ 或​​%4​​​​HTML​​ 格式ObjectScript 格式的字符串表达式

以下示例使用 ​​%1​​​、​​%2​​​、用于粗体格式的 ​​HTML​​ 标记以及两个连续双引号字符表示单个双引号的 ObjectScript 字符串约定:

The session $Username="%1" $Roles="%2"

管理消息字典

本节总结了使用消息字典时最常用的 ​​%Library.MessageDictionary​​ 方法。可以使用这些方法:

从​​XML​​ 消息文件导入消息将消息导出到 XML 消息文件从消息字典中删除消息在消息字典中列出消息

导入 XML 消息文件

要导入 ​​XML​​ 消息文件,请打开终端并执行以下操作:

更改为正在开发应用程序的命名空间:

set $namespace = "myNamespace"

运行导入命令。默认情况下,每种语言都在一个单独的 XML 消息文件中,文件名末尾带有语言环境名称。因此:

只能导入特定语言的那些消息:

SET file="C:\myLocation\Messages_ja-jp.xml" DO ##class(%Library.MessageDictionary).Import(file)

或者,为同一个应用程序导入多种语言:

SET myFiles="C:\myLocation" DO ##class(%Library.MessageDictionary).ImportDir(myFiles,"d")

检查同一命名空间中的​​^IRIS.Msg​​ 全局变量以查看结果。

以下主题总结了这两种导入方法。

导入特定 XML 消息文件

​​%Library.MessageDictionary​​​ 类方法 ​​Import()​​ 具有以下签名:

classmethod Import(filepath As %String, flag As %String = "") returns %Status

​​filepath​​​ - 导入由​​filepath​​​ 指定的​​XML​​ 消息文件。确保目录中只有 XML 消息文件,因为其他 XML 文件会生成错误。​​flag​​​ - (可选)如果提供,​​d​​ 标志(显示)指示终端控制台将在导入文件时显示确认消息。否则,没有确认。

导入目录中的所有 XML 消息文件

​​%Library.MessageDictionary​​​ 类方法 ​​ImportDir()​​ 具有以下签名:

classmethod ImportDir(directory As %String, flag As %String = "") returns %Status

​​directory​​​ - 导入指定目录中的所有​​XML​​ 消息文件。​​flag​​​ - (可选)如果提供,​​d​​ 标志(显示)指示终端控制台将在导入文件时显示确认消息。否则,没有确认。

导出 XML 消息文件

要将消息字典的部分导出到 ​​XML​​ 消息文件,请在终端中执行以下操作:

更改为正在开发应用程序的命名空间:

set $namespace = "myNamespace"

识别输出文件及其位置:

SET file="C:\myLocation\Messages.xml"

运行导出命令:

仅导出特定域中的那些消息可能是可行的:

DO ##class(%Library.MessageDictionary).ExportDomainList(file,"myDomain")

或者,导出命名空间中的所有消息:

DO ##class(%Library.MessageDictionary).Export(file)

以一种语言导出特定域

​​%Library.MessageDictionary​​​ 类方法 ​​ExportDomainList()​​ 具有以下签名:

classmethod ExportDomainList(file As %String, domainList As %String, language As %String) returns %Status

​​file​​​ - (必需)此格式的输出文件名模板:​​filepath.ext​​​ 实际输出文件名将语言值附加到扩展名为​​ext​​ 的文件路径中。​​domainList​​ - (可选)要导出的域的逗号分隔列表。​​language​​​ - (可选)仅导出指定的语言。该值必须是全小写的​​RFC1766​​​ 代码。如果未提供,则该值默认为系统默认语言,该值存储在特殊变量​​$$$DefaultLanguage​​ 中。

以特定语言导出所有域

​​%Library.MessageDictionary​​​ 类方法 ​​Export()​​ 具有以下签名:

​​file​​​ - (必需)此格式的输出文件名模板:​​filepath.ext​​​ 输出文件的名称是​​filepathlanguage-code.ext​​​ 例如,如果文件是​​c:/temp/mylang_.txt​​​ 并且语言包括语言代码​​ja- jp​​​,则输出文件之一命名为​​c:/temp/mylang_ja-jp.txt​​​​languages​​​ - (可选)以逗号分隔的语言代码列表。列表中的每个值都必须是全小写的​​RFC1766​​​ 代码。如果未指定语言或为空,则导出数据库中的所有语言。每种语言都使用为​​file​​ 参数描述的约定导出到一个单独的文件中。​​flag​​​ - (可选)如果提供,则​​s​​ 标志(系统)指示除了应用程序消息字典之外还要导出系统消息字典。否则,仅导出应用程序消息字典。

删除消息

要删除消息,请使用以下命令:

Set status = ##class(%MessageDictionary).Delete(languages,flag)

语言是可选的以逗号分隔的语言列表。如果未指定语言,则删除所有语言。默认值是仅删除应用程序消息。 ​​s​​​ 标志(系统)是一个可选标志,指示是否也删除系统消息。与包含文件关联的消息名称总是被删除,但包含文件不会。还支持 ​​d​​ 标志(显示)。

列出消息

要获取为指定域加载了消息的所有语言的列表,请使用 ​​GetLanguages()​​ 方法:

Set list = ##class(%MessageDictionary).GetLanguages(domain,flag)

​​GetLanguages()​​​ 以标准 ​​RFC1766​​​ 格式返回语言代码的 ​​%ListofDateTypes​​​ 格式列表,全部为小写。如果指定了域,则列表中仅包含指定域存在的语言。否则,所有语言都包含在列表中。 ​​s​​​ 标志(系统)是一个可选标志,指示是否要返回系统或应用程序消息支持的语言。默认值是返回应用程序消息的语言。还支持 ​​d​​ 标志(显示)。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:涉嫌侵犯客户隐私 南京率先要求售楼处拆除“人脸识别系统”!
下一篇:SAP Spartacus checkout 流程的扩展(extend)实现介绍
相关文章

 发表评论

暂时没有评论,来抢沙发吧~