第四十四章 在CSP应用程序中本地化文本 - 显示本地化字符串的其他选项

47 阅读2分钟

本文正在参加「金石计划 . 瓜分6万现金大奖」

第四十四章 在CSP应用程序中本地化文本 - 显示本地化字符串的其他选项

显示本地化字符串的其他选项

在运行时显示本地化字符串的最简单方法是使用本章前面介绍的$$$Text宏之一。

本主题解释了在运行时从消息字典中检索消息文本的其他方法。如果消息文本包含参数(%1%2%3%4),则在页面上显示文本之前,还必须指定相应的替换文本。

%response.GetText Method

类中的%CSP.Response提供了一个GetText实例方法,使能够从消息字典中检索文本,并用值替换消息可能具有的任何参数。在CSP类代码中,对象中当前实例化的%CSP.Response由变量%Response表示。本主题将该方法称为%Response.GetText

方法签名为:

 method GetText(language As %String = "",
                domain As %String = "",
                id As %String,
                default As %String,
                args...) returns %String
  • domain - (可选)指定消息的域的字符串。如果未指定,域默认为%Response.Domain.
  • language - (可选)RFC1766以指定语言的代码。Caché将该字符串转换为全小写。如果未指定,则Language默认为%Response.Language的值,它会自动从浏览器设置中获取其运行时值。
  • id - 消息ID。
  • default - 找不到由语言、域和ID标识的消息时使用的字符串。
  • arg1, arg2, and so on - 消息参数的替换文本。所有这些都是可选的,所以可以使用%response.GetText(),即使消息没有参数。

FormatText Method

类中的%Library.MessageDictionary提供了FormatText()类方法,使能够用文本替换消息参数。当已经从消息字典中获得消息文本时,可以使用FormatText()

ClassMethod FormatText(text As %String, args...) As %String
  • text - 消息文本。在%Response.GetText$$$Text返回的使用%String
  • arg1, arg2, and so on - 消息参数的替换文本。

$$$FormatText Macros

这些宏使能够用文本替换消息参数。当已经从消息字典中获得消息文本时,可以使用它们:

  • $$$FormatText

  • $$$FormatTextJS (applies JavaScript escaping to the $$$FormatText result)

  • $$$FormatTextHTML (applies HTML escaping to the $$$FormatText result)

这些宏位于%occMessages.inc中,该文件包含在%occInclude.inc`中。

$$$FormatText宏返回%String。语法是:

$$$FormatText(text,arg1,arg2,...)
  • text - 消息文本。在%Response.GetText$$$Text返回的使用%String
  • arg1, arg2, and so on - 消息参数的替换文本。

MatchLanguage()方法

需要设置CSP响应的语言属性。为此,请设置%response.Language属性,使用%MessageDictionaryO的MatchLanguage()方法返回的值:

 Set language = ##class(%MessageDictionary).MatchLanguage(languages,domain,flag)

这将查找与指定域的语言列表中的语言最匹配的语言。该方法使用HTTP 1.1匹配规则(RFC 2616)。语言列表是以逗号分隔的RFC 1766列表,语言名称。列表中的每种语言可以被赋予相关联的质量值,该质量值表示用户对由语言列表指定的语言的偏好的估计。质量值默认为q=1

比如da,en-GB;q=0.8,en;q=0.7意味着:I prefer Danish, but will accept British English and other types of English 如果列表中的语言完全等于标记,或者完全等于标记的前缀,使得前缀后面的第一个标记字符是连字符(-),则该语言匹配支持的语言标记。特殊语言星号(*),如果出现在输入列表中,则匹配列表中没有任何其他语言与之匹配的所有支持的语言。

分配给支持的语言标签的语言质量因子是列表中与该语言标签匹配的最长语言的质量值。返回的语言是被分配了最高质量因子的受支持语言。

s flag (system)是一个可选标志,指示是匹配系统消息还是应用程序消息。