讓您的應用程式可當地語系化
本地化應用程式是一種可以本地化到其他市場、語言或地區而不會發現應用程式中任何功能缺陷的應用程式。 可本地化應用程式的最基本屬性是,其可執行的程式代碼已與其可當地語系化資源完全分開。 因此,您應該確定應用程式的哪些資源需要本地化。 詢問自己,如果您的應用程式要針對其他市場進行本地化,需要進行哪些更改。
我們也建議您熟悉全球化的指導方針。
將您的字串放入資源檔案 (.resw)
請勿在命令式程式碼、XAML 標記或應用程式套件指令清單中硬式程式碼字串常值。 相反地,將您的字串放入資源檔 (.resw) 中,讓它們可以獨立於您應用程式的建置二進位檔來適應不同的本地市場。 如需詳細資料,請參閱將您 UI 和應用程式套件資訊清單中的字串當地語系化。
該主題也會示範如何將批註新增至默認資源檔 (.resw)。 例如,如果您要採用非正式的語音或語氣,請務必在批注中解釋這一點。 此外,若要將費用降到最低,請確認只有需要翻譯的字串會提供給翻譯人員。
在應用程式套件指令清單來源檔案中適當地設定應用程式的預設語言 (Package.appxmanifest
檔案)。 預設語言決定當使用者的首選語言與應用程式支援的任何語言都不匹配時使用的語言。 使用其語言來標記您的所有資源 (例如 \Assets\en-us\Logo.png
,甚至是預設語言中的資源),讓系統能夠分辨資源所在的語言,以及資源在特定情況下的使用方式。
針對語言量身打造您的影像和其他檔案資源
在理想情況下,您將能夠將影像全球化,也就是讓影像成為獨立的文化特性。 對於不可能的任何影像和其他檔案資源,請根據需要建立盡可能多的不同變體,並將適當的語言限定符放入其檔案或資料夾名稱中。 如需深入了解,請參閱針對語言、縮放比例、高對比及其他限定詞量身打造您的資源)。
為了最大限度地降低本地化成本,首先不要將文字或文化敏感材料放入影像中。 適合您自己文化的影像在其他文化中可能會令人反感或被誤解。 避免使用特定文化的影像 (例如郵箱),這在世界各地並不常見。 避免宗教符號、動物、政治或性別特定影像。 肉體、身體部位或手勢的顯示也可以是敏感主題。 如果您無法避免這些情況,則您的影像必須經過深思熟慮的當地語系化。 如果您要將語言當地語系化為與您自己的閱讀方向不同的語言,則使用對稱影像和效果可讓您更輕鬆地支援鏡像。
還要避免在影像中使用文本,以及在音訊/視訊文件中使用語音。
在應用程式中使用顏色
使用色彩時請留意。 使用與國旗或政治運動相關的顏色組合可能會出現問題。 顏色選擇可能需要由文化專家審查。 使用色彩也會存在無障礙問題。 如果您使用色彩來傳達意義,則也應該以其他方式傳達相同的資訊,例如大小、形狀或標籤。
請考慮將字串分解為句子
使用適當大小的字串。 短字串更容易翻譯,並且可以實現翻譯回收 (這可以節省費用,因為相同的字串不會多次發送到本地化程式)。 此外,當地語系化工具可能不支援極長字串。
但與此準則相矛盾的是在不同上下文中重複使用字串的風險。 即使是「開啟」和「關閉」等簡單單字,也可能會根據內容以不同的方式翻譯。 在英語中,「開啟」和「關閉」可用於切換飛航模式、藍牙和裝置。 但在義大利文中,翻譯取決於正在開啟和關閉的內容。 您必須為每個內容建立一對字串。 如果兩個上下文相同,您可以重複使用字串。 例如,您可以將字串「Volume」重複用於音效音量和音樂音量,因為兩者都指聲音的強度。 在參考硬碟磁碟區時,您不應該重複使用相同的字串,因為上下文和含義不同,並且該詞的翻譯可能會有所不同。
此外,像「text」或「fax」這樣的字串在英語中可以同時用作動詞和名詞,這可能會混淆翻譯過程。 相反地,請為動詞和名詞格式建立個別的字串。 當您不確定內容是否相同時,請在安全端進行錯誤,並使用不同的字串。
簡言之,請將您的字串分解成在所有內容中運作的片段。 在某些情況下,字串需要是整個句子。
請考慮下列字串:「{0} 無法同步處理」。
各種不同的文字可以取代 {0},例如「約會」、「任務」或「文件」。 雖然此範例適用於英語,但並非在所有情況下都適用於相應的句子,例如德語。 請注意,在下列德文句子中,範本字串中有些字組 (“Der”、“Die”、“Das”) 必須符合參數化字組:
英語 | 德文 |
---|---|
預約無法同步。 | Der Termin konnte nicht synchronisiert werden. |
無法同步處理工作。 | Die Aufgabe konnte nicht synchronisiert werden. |
無法同步處理文件。 | Das Dokument konnte nicht synchronisiert werden. |
另一個例子是,請考慮句子「{0} 分鐘提醒我」。使用「分鐘」適用於英文,但其他語言可能會使用不同的詞彙。 例如,波蘭文會根據內容使用「minuta」、「minuty」或「minut」。
若要解決此問題,請將整個句子當地語系化,而不是單一單字。 這樣做似乎是額外的工作和不正常的解決方案,但它是最好的解決方案,因為:
- 所有語言都會顯示文法正確的訊息。
- 您的翻譯工具不需要詢問將取代哪些字串。
- 當您的應用程式完成之後,就不需要實作成本高昂的程式代碼修正。
字串的其他注意事項
在使用預設語言編寫的字串中避免使用口語和隱喻。 特定於某個人口群體的語言 (例如文化和年齡) 可能難以理解或翻譯,因為只有該人口群體中的人才使用該語言。 同樣,隱喻可能對其一個人有意義,但對其他人來說毫無意義。 例如,「藍鳥」對於那些屬於滑雪文化的人來說意味著特定的東西,但那些不屬於該文化的人則無法理解。
請勿使用技術術語、縮寫或縮寫。 技術語言不太可能被非技術受眾或來自其他文化或地區的人理解,而且很難翻譯。 人員在日常交談中不使用這類文字。 技術語言經常出現在錯誤訊息中以識別硬體和軟體問題,但只有當使用者需要該層級的資訊並且可以採取行動或找到可以 採取行動的人時,您才應該將其字串化為技術性 語言。
在您的字串中使用非正式的語音或語氣是有效的選擇。 您可以使用預設資源檔案 (.resw) 中的批注來指出該意圖。
虛擬當地語系化
對您的應用程式進行偽本地化以發現任何本地化問題。 虛擬當地語系化是一種當地語系化試執行或洩漏測試。 您產生了一組並未真正翻譯的資源;他們只是看起來那樣。 例如,您的字串比預設語言長約 40%,而且它們中有分隔符,讓您一目瞭然是否在 UI 中截斷它們。
部署考量
當您安裝包含本地化語言資料的應用程式時,您可能會發現即使您最初包含多種語言的資源,該應用程式也只能使用預設語言。 這是因為安裝過程經過最佳化,僅安裝與裝置目前語言和文化相符的語言資源。 因此,如果您的裝置設定為 en-US,則只有 en-US 語言資源會隨您的應用程式一起安裝。
注意
在初始安裝之後,無法為您的應用程式安裝其他語言支援。 如果您在安裝應用程式之後變更預設語言,應用程式會繼續使用原始語言資源。
如果要確保安裝後所有語言資源可用,請為應用程式套件建立一個設定文件,指定安裝過程中所需的某些資源 (包括語言資源)。 此最佳化安裝功能會在封裝期間產生應用程式的 .appxbundle 時自動啟用。 如需詳細資訊,請參閱確保無論裝置是否需要資源,都安裝在裝置上。
或者,為了確保安裝所有資源 (而不僅僅是子集),您可以在打包應用程式時停用 .appxbundle 生成。 不過,不建議這麼做,因為它會增加應用程式的安裝時間。
透過將「Generate App Bundle」屬性設定為「never」來停用 .appxbundle 自動產生:
- 在 Visual Studio 中,以滑鼠右鍵按兩下項目名稱
- 選取市集 - >建立應用程式套件...
- 在「建立您的套件」對話方塊中,選擇「我想建立要使用新應用程式名稱上傳到 Microsoft Store 的套件」,然後點擊「下一步」。
- 在選取應用程式名稱對話框中,選取/建立套件的應用程式名稱。
- 在選擇並配置套件對話方塊中,將產生應用程式套件設定為從不。
地緣政治意識
避免地圖中的政治罪行,或在參考區域時發生。 地圖可能包括有爭議的地區或國家邊界,他們是政治犯罪的頻繁來源。 請注意,任何用來選取國家/地區的 UI 都會將其稱為「國家/地區」。 在標示為「國家/地區」的清單中列出爭議領土,例如在位址表單中,可能會冒犯某些使用者。
語言和區域變更事件
訂閱系統語言和區域設定變更時所引發的事件。 這樣做可讓您視需要重新載入資源。 如需詳細資訊,請參閱更新字串以回應限定符值變更事件和更新影像以回應限定符值變更事件。
確定格式化字串時的正確參數順序
請勿假設所有語言都以相同順序表示參數。 例如,考慮這種格式。
string.Format("Every {0} {1}", monthName, dayNumber); // For example, "Every April 1".
此範例中的格式字串適用於英文 (美國)。 但它不適用於德語 (德國),例如,日和月以相反的順序顯示。 請確定翻譯工具知道每個參數的意圖,以便針對目標語言,反轉格式字串中格式專案的順序 (例如「{1}{0}」)。
不要過度當地語系化
只向翻譯人員提交自然語言;不是程式設計語言,也不是標記。 <link>
標籤不是自然語言。 請考慮下列範例。
不要將此當地語系化 | 將此當地語系化 |
---|---|
<連結>使用<規定/連結> | 使用條款 |
<連結>隱私策略</連結> | 隱私權原則 |
在您的資源檔 (.resw) 中包含 <link>
標籤,也表示它也可能轉譯。 這會使標籤無效。 如果您有長字串需要包含標記,才能維護內容並確保排序,請在批註中清楚說明不翻譯的內容。
選擇適當的翻譯方法
將字串分隔成資源文件之後,就可以轉譯這些字串。 轉譯字串的理想時間是在專案中的字串完成之後,通常會在專案結尾發生。 您可以透過數種方式來處理翻譯程式。 這可能取決於要翻譯的字串數量、要翻譯的語言數目,以及翻譯的完成方式(例如內部與僱用外部廠商)。
請考慮這些選項。
- 您可以直接在項目中開啟資源文件來翻譯它們。 此方法適用於需要翻譯為兩或三種語言的少量字串的專案。 它適用於開發人員講多個語言且願意處理翻譯程式的案例。 這種方法的優點是速度快,不需要工具,並且可以最大限度地減少誤譯的風險。 但無法調整。 特別是不同語言的資源很容易不同步,導致糟糕的使用者體驗和維護麻煩。
- 字串資源檔案採用 XML 或 ResJSON 文字格式,因此可以使用任何文字編輯器進行翻譯。 然後,翻譯後的文件將被複製回專案中。 這種方法有翻譯人員不小心編輯 XML 標籤的風險,但它可讓翻譯工作在 Microsoft Visual Studio 專案之外進行。 這種方法非常適合需要翻譯成少量語言的專案。 XLIFF 格式是專為本地化使用而設計的 XML 格式,應該得到一些本地化供應商或本地化工具的良好支援。 您可以使用多語應用程式工具組從其他資源檔案產生 XLIFF 檔案,例如 .resw 或 .resjson。
注意
其他資產可能也需要當地語系化,包括影像和音訊檔案。
您還應該考慮以下幾點:
- 當地語系化工具許多當地語系化工具可用於剖析資源檔,只允許翻譯工具編輯可翻譯的字串。 這種方法可降低翻譯工具不小心編輯 XML 標籤的風險。 但它的缺點是在本地化過程中引入了新的工具和流程。 本地化工具適用於字串數量較多但語言數量較少的項目。 若要深入瞭解,請參閱如何使用多語應用程式工具組。
- 如果您的應用程式包含需要翻譯成大量語言的大量字串,當地語系化廠商請考慮使用當地語系化廠商。 本地化廠商可以提供工具和程式的相關建議,以及翻譯您的資源檔。 這是理想的解決方案,但也是成本最高的選項,而且可能會增加翻譯內容的轉機時間。
讓存取金鑰和標籤保持一致
因為兩個字串資源會分類為兩個不同的區段,所以「同步」輔助功能中使用的存取密鑰與當地語系化存取金鑰的顯示是一項挑戰。 請務必提供標籤字串的批註,例如:Make sure that the emphasized shortcut key is synchronized with the access key.
支援可排序的日文字串的假名
日文漢字字元具有一個以上的閱讀 (發音) 屬性,視所使用的單字而定。 當您嘗試對日語命名物件 (例如應用程式名稱、檔案、歌曲等) 進行排序時,這會導致問題。 日本漢字過去通常以稱為 XJIS 的機器可理解順序排序。 不幸的是,由於這個排序順序不是注音,所以對人類來說並不十分有用。
Furigana 可讓使用者或建立者指定所使用字元的注音,以解決此問題。 如果您使用下列程式將假名新增至應用程式名稱,您可以確定它會在應用程式清單中的適當位置排序。 如果您的應用程式名稱包含漢字字元,而且當使用者的UI語言或排序順序設定為日文時,不會提供假名,Windows 會盡最大努力產生適當的發音。 不過,應用程式名稱可能會包含罕見或唯一的讀取,改為以較常見的閱讀方式排序。 因此,日語應用程式 (尤其是名稱中包含漢字字元的應用程式) 的最佳實踐是提供應用程式名稱的注音版本,作為日語本地化過程的一部分。
將「ms-resource:Appname」新增為套件顯示名稱和應用程式顯示名稱。
在字串下建立 ja-JP 資料夾,並新增兩個資源檔,如下所示:
strings\ en-us\ ja-jp\ Resources.altform-msft-phonetic.resw Resources.resw
在一般 ja-JP 的 Resources.resw 中:新增 Appname「希蒼」的字串資源
在 Resources.altform-msft-phonetic.resw 中,針對日文假名資源:為 AppName 新增假名值「のあ」
使用者可以使用注音假名值「のあ」(noa) 和語音值 (使用輸入法編輯器 (IME) 中的 GetPhonetic 功能)「まれあお」(mare-) 來搜尋應用程式名稱「希蒼」)。
排序遵循區域控制台格式:
- 在日文用戶地區設定下,
- 如果已啟用假名,則會在「の」下排序「希蒼」。
- 如果遺漏假名,則會在「ま」下排序「希蒼」。
- 在非日語使用者區域設定下,
- 如果已啟用假名,則會在「の」下排序「希蒼」。
- 如果遺漏假名,則會在「漢字」下排序「希蒼」。