資源管理系統如何比對語言標記
上一個主題 (資源管理系統如何比對和選擇資源) 主要綜觀限定詞比對。 本主題著重於語言標記比對的細節。
簡介
具有語言標籤限定詞的資源會根據應用程式執行階段語言清單來比較和評分。 有關不同語言清單的定義,請參閱瞭解使用者設定檔語言和應用程式資訊清單語言。 清單中第一種語言的符合度比對發生在清單中第二種語言之前,即使對於其他區域變體也是如此。 例如,如果應用程式執行階段語言為 en-US,則會選擇 en-GB 的資源,而不是 fr-CA 資源。 只有當沒有 en 形式的資源是 fr-CA 選擇的資源時 (請注意,在此情況下,應用程式的預設語言無法設定為任何形式的 en)。
評分機制使用 BCP-47 子標籤登錄和其他資料來源中包含的資料。 它允許具有不同相符度品質的評分梯度,並且當有多個候選項目可用時,它會選取具有最佳相符度分數的候選項目。
因此,您可以用通用術語標記語言內容,但仍可以在需要時指定特定內容。 例如,您的應用程式可能會有許多英文字串,這些字串同時適用於美國、英國和其他區域。 將這些字串標記為「en」(英文) 可節省空間和當地語系化開銷。 需要區分時,例如,在包含「color/color」字組的字串中,美國和英式版本可以使用語言和區域子標籤分別標記為「en-US」和「en-GB」。
語言標記
語言是使用標準化且格式正確的 BCP-47 語言標籤來識別。 子標籤元件定義於 BCP-47 子標籤登錄中。 BCP-47 語言標籤的一般結構是由下列一或多個子標籤元素所組成。
- 語言子標籤 (必要)。
- 指令碼子標籤 (可使用子標籤登錄中指定的預設值推斷)。
- 區域子標籤 (選擇性)。
- 變體子標籤 (選擇性)。
其他子標籤元素可能會存在,但它們會對語言相符度比對產生微不足道的影響。 沒有使用萬用字元 (「」) 定義的語言範圍,例如「en-」。
比對兩種語言的相符度
每當 Windows 比較兩種語言時,通常會在較大的程序內容中完成。 它可能是在評估多種語言的情況下,例如 Windows 產生應用程式語言清單時 (請參閱瞭解使用者設定檔語言和應用程式清單語言)。 Windows 透過將使用者喜好設定中的多種語言與應用程式清單中指定的語言進行相符度比對來執行這項作業。 比較也可能是在評估語言與其他特定資源限定詞的內容中。 其中一個範例是當 Windows 將特定檔案資源解析為特定資源內容時;使用者的主位置或裝置的目前縮放比例或 dpi 做為資源選取項目中考慮的其他因素 (除了語言之外)。
比較兩個語言標籤時,會根據相符度的接近程度來指派分數。
比對 | 分數 | 範例 |
---|---|---|
完全相符 | 最高 | en-AU:en-AU |
變體相符度 (語言、指令碼、區域、變體) | en-AU-variant1:en-AU-variant1-t-ja | |
區域相符度 (語言、指令碼、區域) | en-AU:en-AU-variant1 | |
部分相符度 (語言、指令碼) | ||
- 巨集區域相符度 | en-AU:en-053 | |
- 區域中性相符度 | en-AU:en | |
- 正寫法親和性相符度 (有限支援) | en-AU:en-GB | |
- 偏好的區域相符度 | en-AU:en-US | |
- 任何區域相符度 | en-AU:en-CA | |
未確定的語言 (任何語言相符度) | en-AU:und | |
不相符 (指令碼不符或主要語言標籤不符) | 最低 | en-AU:fr-FR |
完全相符
標籤完全相等 (所有子標籤元素都相符)。 比較可能會從變體或區域相符度升級為此相符度類型。 例如,en-US 與 en-US 相符。
變體相符度
標籤會與語言、指令碼、區域和變體子標籤相符,但在其他方面則有所不同。
區域相符度
標籤會與語言、指令碼和區域子標籤相符,但在其他方面則有所不同。 例如,de-DE-1996 符合 de-DE,而 en-US-x-Pirate 符合 en-US。
部分相符度
標籤會與語言和指令碼子標籤相符,但在區域或其他一些子標籤上有所不同。 例如,en-US 符合 en,或 en-US 符合 en-*。
巨集區域相符度
標籤會與語言和指令碼子標籤相符;這兩個標籤都有區域子標籤,其中一個代表包含另一個區域的巨集區域。 巨集區域子標籤一律為數值,衍生自聯合國統計處 M.49 國家與地區代碼。 有關包含關係的詳細資訊,請參閱巨集地理 (大陸) 區域、地理次區域以及選定的經濟和其他分組的構成。
注意:BCP-47 不支援「經濟分組」或「其他分組」的聯合國代碼。
注意:具有巨集區域子標籤「001」的標籤被認為等同於區域中性標籤。 例如,「es-001」和「es」會被視為同義字。
區域中性相符度
標籤會與語言和指令碼子標籤相符,而只有一個標籤具有區域標籤。 上層相符度優先於其他部分相符度。
正寫法親和性相符度
標籤會與語言和指令碼子標籤相符,而區域子標籤具有正寫法親和性。 親合性取決於 Windows 中維護的定義特定於語言的親合區域之資料,例如「en-IE」和「en-GB」。
偏好的區域相符度
標籤會與語言和指令碼子標籤相符,其中一個區域子標籤是語言的預設區域子標籤。 例如,「fr-FR」是「fr」子標籤的預設區域。 因此,fr-FR 與 fr-BE 的相符度勝過 fr-CA。 這取決於 Windows 中維護的資料,此資料為 Windows 當地語系化的每種語言定義預設區域。
同層級相符度
標籤會與語言和指令碼子標籤相符,而且兩者均有區域子標籤,但兩者之間沒有定義其他關聯性。 如果存在多個同層級相符項目,則在沒有更高相符項目的情況下,最後一個列舉的同層級將成為獲勝者。
未決定的語言
資源可能會標記為「und」,表示它符合任何語言。 此標籤也可以與指令碼標籤搭配使用,以根據指令碼篩選相符項目。 例如,「und-Latn」會與任何使用拉丁指令碼的語言標籤相符。 如需詳細資訊,請參閱下方。
指令碼不符
當標籤僅與主要語言標籤相符而不與指令碼相符時,該對被視為不相符,並且分數低於有效相符度的層級。
沒有符合的結果
與主要語言子標籤不符的分數低於有效相符項目的層級。 例如,zh-Hant 不符合 zh-Hans。
範例
使用者語言「zh-Hans-CN」(簡體中文 (中國)) 會以顯示的優先順序比對與下列資源的相符度。 X 表示沒有相符項目。
- 完全相符;2. & 3. 區域相符度;4. 上層相符度;5. 同層級相符度。
當語言子標籤在 BCP-47 子標籤登錄中定義隱藏指令碼值時,會發生對應的比對,並採用隱藏指令碼程式碼的值。 例如,en-Latn-US 與 en-US 相符。 在下一個範例中,使用者語言為「en-AU」(英文 (澳洲))。
- 完全相符;2. 巨集區域相符度;3. 區域中性相符度;4. 正寫法親和性相符度;5. 偏好的區域相符度;6. 同層級相符度。
比對語言與語言清單
有時候,比對是比對單一語言與語言清單之較大程序的一部分。 例如,基於單一語言的資源可能與應用程式的語言清單相符。 相符度分數會依清單中第一個相符語言的位置來加權。 語言在清單中越低,分數就會越低。
當語言清單包含兩個或多個具有相同語言和指令碼子標籤的區域變體時,第一個語言標籤的比較只會針對完全、變體和區域相符項目進行評分。 評分部分相符項目會延後至最後一個區域變體。 這可讓使用者精細控制其語言清單的比對行為。 如果第三個項目符合第一個項目的語言和指令碼,比對行為可以包括允許清單中的次要項目的完全相符,優先於清單中的第一項目的部分相符。 以下是範例。
- 語言清單 (按順序):「pt-PT」(葡萄牙文 (葡萄牙))、「en-US」(英文 (美國))、「pt-BR」(葡萄牙文 (巴西))。
- 資源:「en-US」、「pt-BR」。
- 分數較高的資源:「en-US」。
- 說明:比較從「pt-PT」,但找不到完全相符的項目。 由於使用者語言清單中存在「pt-BR」,部分相符的比對會延後到與「pt-BR」比較後進行。 下一個語言比較是「en-US」,其完全相符。 因此,獲勝的資源是「en-US」。
OR
- 語言清單 (按順序):「es-MX」(西班牙文 (墨西哥))、「es-HO」(西班牙文 (宏都拉斯))。
- 資源:「en-ES」、「es-HO」。
- 分數較高的資源:「es-HO」。
未決定的語言 (「und」)
語言標籤「und」可用於指定在沒有更好相符項目的情況下,將與任何語言相符的資源。 它可以被視為類似於 BCP-47 語言範圍「」或「-<指令碼>」。 以下是範例。
- 語言清單:「en-US」、「zh-Hans-CN」。
- 資源:「zh-Hans-CN」、「und」。
- 分數較高的資源:「und」。
- 說明:比較從「en-US」開始,但找不到以「en」為基礎的相符項目 (部分或更好)。 由於有以「und」標記的資源,因此比對演算法會使用該資源。
「und」標籤可讓多種語言共用單一資源,並允許將個別語言視為例外狀況。 例如,
- 語言清單:「zh-Hans-CN」、「en-US」。
- 資源:「zh-Hans-CN」、「und」。
- 分數較高的資源:「zh-Hans-CN」。
- 說明:比較會尋找第一個項目完全相符的項目,因此不會檢查標示為「und」的資源。
您可以使用「und」搭配指令碼標籤來按照指令碼篩選資源。 例如,
- 語言清單:「ru」。
- 資源:「und-Latn」、「und-Cyrl」、「und-Arab」。
- 分數較高的資源:「und-Cyrl」。
- 說明:比較找不到「ru」的相符項目 (部分或更好),因此會比對與語言標籤「und」的相符度。 與語言標籤「ru」相關聯的隱藏指令碼值「Cyrl」符合資源「und-Cyrl」。
正寫法區域親和性
當具有區域子標籤差異的兩個語言標籤相符時,特定的區域配對彼此之間的親和力,可能比其他區域配對的親和力更高。 唯一支援的親合群組適用於英文 (「en」)。 區域子標籤「PH」(菲律賓) 和「LR」(賴比瑞亞) 具有與「US」區域子標籤具有正寫法親和性。 所有其他區域子標籤都會與「GB」(英國) 區域子標籤親合。 因此,當「en-US」和「en-GB」資源同時可用時,「en-HK」 (英文 (香港特區)) 的語言清單使用「en-GB」資源將獲得比使用「en-US」資源更高的分數。
處理具有許多地區變體的語言
某些語言在不同區域擁有大量的使用者社群,這些社群使用該語言的不同變體,例如英文、法文和西班牙文,這些語言是多語系應用程式中最常支援的語言。 區域差異可能包括正寫法的差異 (例如,「color」與「colour」),或詞彙等方言差異 (例如,「truck」與「lorry」)。
這些具有顯著區域變體的語言在製作全球通用的應用程式時提出了某些挑戰:「應該支援多少種不同的區域變體?」「支援哪個?」「為我的應用程式管理這些區域變體資產最經濟有效的方法是什麼?」回答所有這些問題超出了本主題的範圍。 不過,Windows 中的語言比對機制確實提供可協助您處理區域變體的功能。
應用程式通常只支援任何指定語言的單一種類。 假設某個應用程式只擁有一種英文資源,而英文使用者無論來自哪個地區都會使用此英文資源。 在此情況下,沒有任何區域子標籤的標籤「en」會反映該期望。 但應用程式過去可能已使用標籤,例如包含區域子標籤的「en-US」。 在這種情況下,這也將能發揮作用:應用程式僅使用一種英文,Windows 會以適當的方式將標記為一種區域變體的資源,與針對不同區域變體的使用者語言喜好設定進行比對。
然而,如果要支援兩個或多個區域變體,「en」與「en-US」等差異可能會對使用者體驗產生重大影響,因此考慮使用哪個區域子標籤變得非常重要。
假設您想要為加拿大使用的法文和歐洲法文提供單獨的法文當地語系化。 對於加拿大法文,可以使用「fr-CA」。 對於來自歐洲的使用者,當地語系化將使用法文 (法國),因此可以使用「fr-FR」。 但是,如果指定的使用者來自比利時,語言喜好設定為「fr-BE」;他們會得到哪一個? 區域「BE」與「FR」和「CA」不同,表明兩者都符合「任何區域」。 然而,法國恰好是法國的首選地區,因此「fr-FR」將被視為在這種情況下最好的相符項目。
假設您先將應用程式當地語系化為僅針對一種法文,使用法文 (法國) 字串,但將它們一般限定為「fr」,那麼您會希望新增對加拿大法文的支援。 可能只有某些資源需要為加拿大法文重新翻譯。 您可以繼續使用所有原始資產,使其限定為「fr」,只要使用「fr-CA」新增一小組新資產即可。 如果使用者語言喜好設定為「fr-CA」,則「fr-CA」資產的比對分數會高於「fr」資產。 但是,如果使用者語言喜好設定是針對任何其他種類的法文,則區域中性資產「fr」會比「fr-CA」資產更相符。
另一個範例是,假設您想要為來自西班牙的演講者與拉丁美洲的演講者提供個別的西班牙文當地語系化。 假設拉丁美洲的翻譯是從墨西哥的一家廠商提供的。 您應該使用「es-ES」(西班牙) 和「es-MX」 (墨西哥) 來取得兩組資源嗎? 如果您這樣做,這可能會為來自阿根廷或哥倫比亞等其他拉丁美洲地區的演講者造成問題,因為他們會獲得「es-ES」資源。 在此情況下,有一個更好的替代方案:您可以使用巨集區域子標籤「es-419」來反映您想要將資產用於來自拉丁美洲或加勒比海任何地區的演講者。
如果您想要支援多個區域變體,區域中性語言標籤和巨集區域子標籤可能非常有效。 若要將您需要的個別資產數目降到最低,您可以透過反映適用資產最廣泛的涵蓋範圍的方式限定指定的資產。 然後,視需要以更具體的變體來補充廣泛適用的資產。 具有區域中性語言限定詞的資產將用於任何區域多樣性的使用者,除非有另一個資產具有適用於該使用者的區域特定限定詞。 例如,「en」資產會符合澳洲英文使用者,但具有「en-053」的資產 (澳洲或紐西蘭使用的英文) 將會更符合該使用者,而具有「en-AU」的資產將是最佳相符項目。
英文需要特殊考慮。 如果應用程式新增兩個英文變體的當地語系化,這些可能適用於美國英文和英國或「國際」英文。 如上所述,美國以外的某些區域遵循美國拼字慣例,而 Windows 語言比對會考慮這一點。 在此案例中,不建議針對其中一個變體使用區域中性標籤「en」;請改用「en-GB」和「en-US」。 (如果指定的資源不需要個別的變體,則可以使用「en」。如果「en-GB」或「en-US」取代為「en」,則會干擾 Windows 所提供的正寫法區域親和性。 如果新增第三個英文當地語系化,則視需要針對其他變體使用特定或巨集區域子標籤 (例如,「en-CA」、「en-AU」或「en-053」),但繼續使用「en-GB」和「en-US」。