33.2.6 Strings
UEFI 环境中的 string 是使用 UCS-2 格式定义,每个字符由 16bit 数据表示。对于用户界面,strings 也是一种可以安装到 HIIdatabase 的一种数据。
为了本土化,每个 string 通过一个唯一标识符来识别,而每一个标识符可以和多个 package 关联比如英语、法语、中文等。需要显示的时候根据系统的语言配置来选择显示。
实际的每种语言的 package 是独立存储的,所以在添加删除的时候,只需要 including /excluding 对应的 package 就可以了。
每个字符串都可能有与之关联的字体信息,包括字体族名称、字体大小和字体样式。并非所有的平台或显示器都支持系统默认字体(fonts)以外的字体和样式,因此与字符串相关的字体信息应被视为一组提示。
33.2.6.1 Configuration Language Paradigm
该规范使用RFC 4646语言命名方案来标识给定字符串所关联的语言。由于RFC 4646允许相同的主语言标签包含大量不同的子标签(例如区域),因此在RFC 4647中定义了最佳匹配语言算法。需要RFC 4646语言代码来检索Unicode字符串的接口调用者必须使用RFC 4647算法来查找具有最接近匹配RFC 4646语言代码的Unicode字符串。
例如:STR_MODULE_ABSTRACT 就是一个 string identifier 对应语言包就是 en-US
#string STR_MODULE_ABSTRACT #language en-US "Provides the default logo bitmap picture shown on setup screen."
33.2.6.2 Unicode Usage
本节描述Unicode规范的不同方面如何与该规范中的字符串相关。
33.2.6.2.1 Private Use Area
Unicode定义了一个包含6500个字符的私有使用区域,可以为本地使用而定义。建议的用法包括埃及语、象形文字。
UEFI禁止在UEFI环境中使用此区域。这是因为从各种驱动程序(一个有效的实现)中积累的集中字体数据库最终会在私有使用区域中产生冲突,并且通常会导致错误XML浏览器无法显示这些字符。
33.2.6.2.2 Surrogate Area
Unicode规范有两个16位字符表示:UCS-2和UTF-16。UEFI规范使用UCS-2。主要区别在于UTF-16定义了代理区域,这些区域允许扩展16位Unicode的字符表示。这些字符表示非常类似于双字节字符集(DBCS)——将2048个Unicode值分成两组(D800-DBFF和DC00-DFFF)。
33.2.6.2.3 Non-Spacing Characters
Unicode使用非空格字符的概念。这些符号用于向其他字符添加重音等,方法是在逻辑上将该符号与前一个符号进行“OR”。在Unicode编码中似乎没有任何可预测的范围来确定非空格字符,然而这些字符出现在许多语言中。
33.2.6.2.4 Common Control Codes
该规范允许使用特殊控制字符对字符串中的字体显示信息进行编码。这些控制代码意味着显示提示,不同的平台可能会忽略它们,这取决于显示功能。在单字节编码中,它们的形式是0x7F 0xyy或0x7F 0x0y 0xzz。单字节编码仅在与Unicode的标准压缩方案(见字符串编码)结合使用时使用。在双字节编码中,它们的形式是0xF6yy, 0xF7zz或0xF8zz。当转换为UCS-2时,所有控制码都应该使用0xFxyy形式。
33.2.6.2.5 Line Breaks
一般来说,下列任何一个空格字符都是换行:
本节描述使用控制字符来确定字符串中中断的机会。这些指导方针基于Unicode Technical Report #14,但是大大简化了。