在 Xamarin 中使用 watchOS 當地語系化
針對多種語言調整 watchOS 應用程式
watchOS 應用程式會使用標準 iOS 方法進行當地語系化:
- 在 分鏡腳本元素上使用當地語系化標識碼 ,
- 與分鏡腳本相關聯的 .strings 檔案,以及
- 用於程式代碼中文字的 Localizable.strings 檔案。
默認分鏡腳本和資源位於 基底 目錄中,而語言特定的翻譯和其他資源會儲存在 .lproj 目錄中。 iOS 和監看式 OS 會自動使用使用者的語言選擇來載入正確的字串和資源。
因為 Apple Watch 應用程式有兩個部分 - Watch App 和 Watch Extension - 當地語系化字串資源需要兩個位置,視它們的使用方式而定。
在監看式應用程式和監看式延伸模組中,本地化的文字和資源會 有所不同 。
監看應用程式
監看應用程式包含描述應用程式使用者介面的分鏡腳本。 支援本地化的任何控制項(例如 Label
和)都有當地語系化標識碼Image
。
每個特定語言的 .lproj 目錄都應該包含 具有每個元素翻譯的 .strings 檔案(使用 本地化標識符),以及分鏡腳本所參考的影像。
監看延伸模組
監看延伸模組是應用程式程式代碼執行的位置。 從程式代碼向用戶顯示的任何文字,都必須在延伸模組中當地語系化,而不是在監看應用程式中。
擴展名也應該包含特定語言的 .lproj 目錄,但 .strings 檔案只需要翻譯程序代碼中使用的文字。
全球化監看式解決方案
全球化是讓應用程式本地化的程式。
對於監看應用程式,這表示將設計具有不同文字長度的分鏡腳本,確保每個螢幕配置會根據顯示的文字進行調整。 您也需要確保監看式延伸模組程式代碼中參考的任何字串都可以使用 LocalizedString
方法來翻譯。
監看應用程式
根據預設,監看應用程式不會設定本地化。 您需要移動預設分鏡文稿檔案,並為您的翻譯建立一些其他目錄:
建立Base.lproj目錄,並將Interface.storyboard移至其中。
針對您想要支援的每個語言建立 <language.lproj> 目錄。
.lproj 目錄應該包含 Interface.strings 文本文件(檔名應該符合 storboard 的名稱)。 您可以選擇性地在這些目錄中放置任何需要本地化的映像。
監看應用程式項目在進行這些變更之後看起來像這樣(只有新增英文和西班牙文檔案):
分鏡腳本文字
當您編輯分鏡文稿時,請選取每個元素,並注意 [屬性] 面板中顯示的當地語系化識別碼:
在Base.lproj資料夾中,建立索引鍵/值組,如下所示,其中索引鍵是由控件的當地語系化標識碼和屬性名稱所組成,並以點 (.
) 聯結。
"AgC-eL-Hgc.title" = "WatchL10nEN"; // interface controller title
"0.text" = "Welcome to WatchL10n"; // Welcome
"1.text" = "Language settings are in Apple Watch App"; // How to change language
"2.title" = "Greetings"; // Greeting
"6.title" = "Detail";
"39.text" = "Second screen";
請注意,在此範例中, 當地語系化識別碼 可以是簡單的數位字串(例如:“0”、“1”等)或更複雜的字串串(例如 “AgC-eL-Hgc” )。 Label
控件具有 Text
屬性,且 Button
具有 Title
屬性,其反映方式是設定其當地語系化值的方式 - 請務必使用小寫屬性名稱,如上述範例所示。
當腳本在監看式上呈現時,系統會根據用戶選取的語言自動擷取並顯示正確的值。
分鏡腳本影像
此範例解決方案也包含每個語言資料夾中的 gradient@2x.png 影像。 此影像對於每個語言可能不同(例如,它可能有需要翻譯的內嵌文字,或使用本地化的圖示)。
只要在分鏡腳本中設定影像的 Image 屬性,就會根據用戶選取的語言,在監看式上轉譯正確的影像。
注意:因為所有 Apple Watch 都有 Retina 顯示器,因此只需要 @2x 版的影像。 您不需要在分鏡腳本中指定 @2x 。
監看延伸模組
監看式延伸模組需要類似的目錄結構來支援當地語系化,但是沒有分鏡腳本。 延伸模組中的當地語系化字串只是 C# 程式代碼所參考的字串。
程序代碼中的字串
Localizable.strings 檔案的結構與腳本相關聯的結構稍有不同。 在此情況下,我們可以選擇任何「索引鍵」字串;Apple 的建議是使用索引鍵來反映預設語言中顯示的實際文字:
"Breakfast time" = "Breakfast time!"; // morning
"Lunch time" = "Lunch time!"; // midday
"Dinner time" = "Dinner time!"; // evening
"Bed time" = "Bed time!"; // night
方法 NSBundle.MainBundle.LocalizedString
可用來將字串解析成其翻譯的對應專案,如下列程式代碼所示。
var display = "Breakfast time";
var localizedDisplay =
NSBundle.MainBundle.LocalizedString (display, comment:"greeting");
displayText.SetText (localizedDisplay);
程序代碼中的影像
程式代碼所填入的影像可以透過兩種方式進行設定。
您可以將
Image
控制項的值設定為已存在於監看式應用程式中的影像字串名稱,例如displayImage.SetImage("gradient"); // image in Watch App (as shown above)
您可以使用 將影像從延伸模組移至監看式
FromBundle
,而應用程式會自動為使用者的語言選取選擇選擇正確的影像。 在範例解決方案中,每個語言資料夾中都有一個影像 language@2x.png ,而且會使用下列程式代碼來DetailController
顯示:using (var image = UIImage.FromBundle ("language")) { displayImage.SetImage (image); }
請注意,在參考影像的檔名時,您不需要指定 @2x 。
如果您從遠端伺服器下載影像以在監看式上轉譯,則第二種方法也適用;不過,在此情況下,您應該確定您下載的影像會根據使用者的喜好設定正確當地語系化。
當地語系化
設定解決方案之後,翻譯工具必須針對您想要支援的每個語言處理 . strings 檔案和影像。
您可以視需要建立多個 .lproj 目錄(每個支持的語言各一個)。 它們分別使用語言代碼命名,例如 en、es、de、ja、pt-BR 等(英文、西班牙文、德文、日文和葡萄牙文(巴西)。
附加的範例會使用 (計算機產生的) 翻譯來示範如何將 watchOS 應用程式當地語系化。
監看應用程式
這些值可用來轉譯監看應用程式分鏡腳本中定義的使用者介面。 索引 鍵 值是每個分鏡腳本控件的 當地語系化標識碼 和所轉譯屬性的組合。
建議將包含原始文字的批註新增至檔案,讓翻譯人員知道翻譯應該是什麼。
es.lproj/Interface.strings
分鏡腳本的 (機器翻譯) 西班牙文字符串如下所示。 將批注新增至每一行很有幫助,因為很難知道本地化標識碼所參考的內容,否則為:
"AgC-eL-Hgc.title" = "Spanish"; // app screen heading
"0.text" = "Bienvenido a WatchL10n"; // Welcome to WatchL10n
"1.text" = "Ajustes de idioma están en Apple Watch App"; // Change the language in the Apple Watch App
"2.title" = "Saludos"; // Greetings
"6.title" = "2nd"; // second screen heading
"39.text" = "Segunda pantalla"; // second screen
監看延伸模組
這些值會用於程式代碼中,在向用戶顯示資訊之前翻譯資訊。 開發人員 在撰寫程式代碼時會選取金鑰 ,且通常會包含要翻譯的實際字串。
es.lproj/Localizable.strings 檔案
(機器翻譯) 跨語言字串:
"Breakfast time" = "la hora del desayuno"; // morning
"Lunch time" = "hora de comer"; // midday
"Dinner time" = "hora de la cena"; // evening
"Bed time" = "la hora de dormir"; // night
測試
變更語言喜好設定的方法在模擬器和實體裝置之間有所不同。
模擬器
在模擬器上,選取使用 iOS 設定 應用程式測試的語言(模擬器主畫面中的灰色齒輪圖示)。
監看裝置
使用手錶進行測試時,請在配對的 i 電話 上,在 Apple Watch 應用程式中變更手錶的語言。