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,但是大大簡化了。