本地化的應用程式可針對其他市場、語言或區域進行當地語系化,而不會發現應用程式中的任何功能缺陷。 可本地化應用程式的最基本屬性是其可執行的程式代碼已與可本地化的資源完全分開。 因此,您應該判斷應用程式的哪些資源需要當地語系化。 請問自己如果要讓應用程式針對其他市場進行本地化,哪些部分需要改變。
我們也建議您熟悉全球化的
將您的字串放入資源檔案 (.resw)
請勿在命令式程式碼、XAML 標記或應用程式套件描述檔中硬編碼字串常值。 相反地,將您的字串放入資源檔 (.resw) 中,讓它們可以獨立於您應用程式的建置二進位檔來適應不同的本地市場。 如需詳細資訊,請參閱 在您的使用者介面和應用程式套件清單中本地化字串。
該主題也會示範如何將批註新增至默認資源檔 (.resw)。 例如,如果您要採用非正式的語音或語氣,請務必在批注中解釋這一點。 此外,若要將費用降到最低,請確認只有需要翻譯的字串會提供給翻譯人員。
在應用程式套件指令清單來源檔案中適當地設定應用程式的默認語言(Package.appxmanifest
檔案)。 默認語言會決定當使用者慣用的語言不符合您應用程式的任何支援語言時所使用的語言。 使用其語言來標記您的所有資源(即使是默認語言中的資源,例如 \Assets\en-us\Logo.png
),讓系統可以分辨資源所在的語言,以及它在特定情況下的使用方式。
針對語言量身打造您的影像和其他檔案資源
在理想情況下,您將能夠讓影像去除任何文化依賴,實現文化無關性。 對於無法直接使用的影像和其他檔案資源,請視需要創建更多不同的版本,並在它們的檔案或資料夾名稱中加入適當的語言限定符。 若要深入瞭解,請參閱 針對語言、縮放比例、高對比度和其他限定符量身打造您的資源。
若要將當地語系化成本降到最低,請勿將文字或文化敏感的內容放入影像中。 在您自己的文化中被認為合適的影像,可能會在其他文化中被視為冒犯或引起誤解。 避免使用特定文化特性的影像,例如信箱,這些影像在世界各地並不常見。 避免宗教符號、動物、政治或性別特定圖像。 肉體、身體部位或手勢的顯示也可以是敏感主題。 如果您無法避免所有這些,則您的影像必須仔細調整以符合當地需求。 如果您要將語言當地語系化為與您自己的閱讀方向不同的語言,則使用對稱影像和效果可讓您更輕鬆地支援鏡像。
也請避免在影像中使用文字,以及音訊/視訊檔案中的語音。
在您的應用程式中使用色彩
使用色彩時請留意。 使用與國旗或政治運動相關聯的色彩組合可能會有問題。 可能需要由文化專家檢視色彩選擇。 使用色彩也有易用性問題。 如果您使用色彩來傳達意義,則也應該以其他方式傳達相同的資訊,例如大小、形狀或標籤。
請考慮將字串分解成句子
使用適當大小的字串。 簡短字串更容易轉譯,而且會啟用翻譯回收功能(這可節省費用,因為相同的字串不會多次傳送到本地化工具)。 此外,當地語系化工具可能不支援極長字串。
但這項指導方針與在不同情境中重複使用字串的風險之間存在衝突。 即使是「開啟」和「關閉」等簡單單字,也可能會根據內容以不同的方式翻譯。 在英文中,“on”和“off”可用於飛行模式、藍牙及裝置的切換。 但在義大利文中,翻譯取決於正在開啟和關閉的內容。 您需要為每個上下文建立一對字串。 如果兩個內容相同,您可以重複使用字串。 例如,您可以重複使用「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} 分鐘提醒我」。英文中使用「分鐘」或「minute(s)」是適用的,但其他語言可能會使用不同的詞彙。 例如,波蘭文會根據上下文使用「minuta」、「minuty」或「minut」。
若要解決此問題,請將整個句子當地語系化,而不是單一單字。 這樣做似乎是額外的工作和不優雅的解決方案,但它是最好的解決方案,因為:
- 所有語言都會顯示文法正確的訊息。
- 您的翻譯員不需要詢問那些字串會被替換成什麼。
- 當您的應用程式完成後,若出現類似問題,您就不需要實施成本高昂的程式碼修正。
字串的其他注意事項
請避免以預設語言撰寫的字串中的口語和隱喻。 特定人口群體的語言,例如文化和年齡,可能很難理解或翻譯,因為只有該人口群體中的人員使用該語言。 同樣地,比喻對一個人來說可能有意義,但對別人來說並不重要。 例如,「藍鳥」對於屬於滑雪文化的人來說有著特定的意義,而對不屬於這個文化的人來說則無法理解這一指稱。
請勿使用技術術語、縮略語或首字母縮略詞。 技術語言不太可能被來自其他文化或地區的非技術觀眾或人員理解,而且很難翻譯。 人們不會在日常交談中使用這類文字。 技術語言通常會出現在錯誤訊息中,以識別硬體和軟體問題,但只有當使用者需要該層級的資訊時,您才應以技術 字串,而且可以採取動作或尋找可以的人員。
在您的字串中使用非正式的語音或語氣是有效的選擇。 您可以使用預設資源檔 (.resw) 中的批注來指出該意圖。
虛擬本地化
虛擬本地化您的應用程式,以檢測任何區域化問題。 類本地化是一種本地化的模擬運行或揭露測試。 您會產生一些並未真正被翻譯的資源;它們看起來像是被翻譯過。 例如,您的字串大約比默認語言的 40% 長,而且它們中有分隔符,讓您一眼就能看到它們是否在 UI 中被截斷。
部署考慮
當您安裝包含本地化語言數據的應用程式時,您可能會發現只有預設語言可供應用程式使用,即使您最初包含多種語言的資源也一樣。 這是因為安裝程式已優化,只安裝符合裝置目前語言和文化特性的語言資源。 因此,如果您的裝置已設定為 en-US,則只有 en-US 語言資源會隨您的應用程式一起安裝。
備註
在初始安裝之後,無法為您的應用程式安裝其他語言支援。 如果您在安裝應用程式之後變更預設語言,應用程式會繼續使用原始語言資源。
如果您想要確保安裝之後可以使用所有語言資源,請為應用程式套件建立設定檔,指定安裝期間需要的特定資源(包括語言資源)。 當您的應用程式在封裝過程中產生 .appxbundle 時,這個優化的安裝功能會自動啟用。 如需詳細資訊,請參閱 確定資源已安裝在裝置上,而不論裝置是否需要它們。
或者,若要確保已安裝所有資源(不只是子集),您可以在封裝應用程式時停用 .appxbundle 產生。 不過,不建議這麼做,因為它會增加應用程式的安裝時間。
將「生成 App 套件」屬性設為「never」以停用自動生成 .appxbundle。
- 在 Visual Studio 中,以滑鼠右鍵按兩下項目名稱
- 選擇 市集 ->建立應用程式套件...
- 在 [建立套件] 對話框中,選取 [我想建立套件以使用新的應用程式名稱上傳至 Microsoft Store,然後按兩下 [下一步]。
- 在 [選取應用程式名稱] 對話框中,選取/建立套件的應用程式名稱。
- 在 [選取及設定套件] 對話框中,將 [產生應用程式套件組合] 設定為 [永不]。
地緣政治意識
避免地圖或提及地區時的政治冒犯。 地圖可能包含有爭議的地區或國家邊界,而且是政治犯罪的頻繁來源。 請注意,任何用來選取國家/地區的UI都會將其稱為「國家/地區」。 在標示為「國家/地區」的清單中列出爭議領土,例如在位址表單中,可能會冒犯某些使用者。
語言和區域變更事件
訂閱系統語言和區域設定變更時所引發的事件。 這樣做可讓您視需要重新載入資源。 如需詳細資訊,請參閱 更新字串以回應限定符值變更事件 和 更新影像,以回應限定符值變更事件。
確定格式化字串時的正確參數順序
請勿假設所有語言都以相同順序表示參數。 例如,請考慮此格式。
string.Format("Every {0} {1}", monthName, dayNumber); // For example, "Every April 1".
此範例中的格式字串適用於英文(美國)。 但不適用於德國(德國),例如,日和月會以相反順序顯示。 請確定翻譯者知道每個參數的意圖,以便針對目標語言適當地反轉格式字串中格式項目的順序(例如,“{1}{0}”)。
不要過度本地化
只向翻譯人員提交自然語言;不是程式設計語言,也不是標記。
<link>
標籤不是自然語言。 請考慮這些範例。
不要將此進行當地化 | 本地化這個 |
---|---|
<連結>使用條款</link> | 使用規定 |
<連結>隱私策略</link> | 隱私策略 |
在您的資源檔(.resw)中包含 <link>
標籤,表示它也可能被翻譯。 這會使標籤無效。 如果您有長字串需要包含標記,才能維護內容並確保排序,請在批註中清楚說明不翻譯的內容。
選擇適當的翻譯方法
將字串分隔成資源文件之後,就可以轉譯這些字串。 轉譯字串的理想時間是在專案中的字串完成之後,通常會在專案結尾發生。 您可以透過數種方式來處理翻譯過程。 這可能取決於要翻譯的字串數量、要翻譯的語言數目,以及翻譯的完成方式(例如內部與僱用外部廠商)。
請考慮這些選項。
- 您可以直接在項目中開啟資源文件來翻譯它們。 此方法適用於需要翻譯為兩或三種語言的少量字串的專案。 它適用於開發人員講多個語言且願意處理翻譯程式的案例。 這種方法的優點是快速、不需要任何工具,並將誤用的風險降到最低。 但無法調整。 特別是,不同語言的資源可以輕鬆地脫離同步,造成不良的用戶體驗和維護頭痛。
- 字串資源文件採用 XML 或 ResJSON 文字格式,因此可以使用任何文字編輯器來轉譯。 翻譯的檔案接著會複製回專案中。 這種方法可能會造成翻譯人員不小心編輯 XML 標籤的風險,但它可讓翻譯工作在 Visual Studio 專案Microsoft之外進行。 這種方法適用於需要翻譯為少數語言的專案。 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
在 Resources.resw 中,一般 ja-JP:新增 Appname “希蒼” 的字串資源
在 Resources.altform-msft-phonetic.resw 中,針對日文假名資源:為 AppName 新增假名值 “のあ”
使用者可以使用假名「のあ」(noa)和音韻值「まれあお」(mare-ao),透過輸入法編輯器(IME)的 GetPhonetic 函式來搜尋應用程式名稱“希蒼”。
排序會遵循 區域控制面板 格式:
- 在日文用戶地區設定下,
- 如果已啟用假名,「希蒼」將被排序在「の」之下。
- 如果沒有標註假名,「希蒼」將在「ま」的分類下。
- 在非日文用戶地區設定下,
- 如果已啟用假名,「希蒼」將被排序在「の」之下。
- 如果遺漏 furigana,則「希蒼」會排序在「漢字」底下。