1. 程式人生 > >ios 簡單的多國語言切換,語言切換功能

ios 簡單的多國語言切換,語言切換功能

App Store 中很多流行的應用程式有多種語言版本。雖然這些應用程式可能因為很多因素而變得流行,但是具有多種本地化版本,肯定是其中一個因素。越多的人可以理解並使用您的應用程式,潛在的買家也就越多。

若要讓您的應用程式擁有多個語言版本,必須先將它國際化,然後將它本地化。國際化是整理本地化資源的一種技巧,以便應用程式在執行時,可以選擇使用者首選的資源集。本地化就是翻譯應用程式所顯示或讀出(例如 VoiceOver)的文字。它還可以包括某個區域專用的額外影象和其他資源。(本地化也可以指將一組資源本地化為某個特定語言和區域設定——例如簡體中文字地化。)

應用程式選擇使用者介面本地化語言的方法:在“設定”應用程式(“通用”>“多語言環境”>“語言”)中,iOS 裝置使用者選取想在應用程式使用者介面和系統本身所顯示的語言。應用程式將此偏好設定作為鑰匙,來訪問所請求的語言本地化資源。

若要了解國際化的所有方面,請參閱國際化程式設計主題

教程將教您進行的操作

在本教程中,您將會使 HelloWorld 應用程式國際化,以便其支援兩種本地化語言:英文和簡體中文。接下來您會將以下文字本地化:

  • 串聯圖中兩種語言的文字
  • 使用者點按“Hello”按鈕後,應用程式所構建和顯示的字串
  • 顯示給使用者的應用程式名稱
注:本教程使用簡體中文作為示例語言。如果不懂中文,您可以拷貝本教程中本地化文字項的中文字,然後將它們貼上到專案中的合適位置。或者,如果您喜歡,可以在新增的本地化語言中,使用簡體中文之外的某種語言。

在本教程中,您還將修改使用者介面並配置國際化的佈局約束。

本教程不會教您如何將本地化資源(例如影象檔案或聲音檔案)新增到專案。若要了解如何將本地化資源新增到專案,請閱讀國際化程式設計主題

中的相應章節。

當您選擇簡體中文作為首選語言,然後啟動國際化的 HelloWorld 後,該應用程式外觀應該是這樣的:

影象: ../Art/helloworld_chinese_2x.png

使用 Base Internationalization

“Base Internationalization”是 Xcode 4.5 推出的一項功能,使用該功能,本地化工程師(即翻譯人員)不再需要為應用程式支援的每種語言修改串聯圖和 nib 檔案。相反,一個應用程式只有一組串聯圖或 nib 檔案會本地化為預設語言,這些串聯圖和 nib 檔案稱為 Base Internationalization。當您將本地化語言新增到某個應用程式時,Xcode 會生成一個包含所有文字的字串檔案,這些文字包含每個串聯圖或 nib 檔案顯示的文字,或者作為輔助功能標籤或提示的文字。Xcode 會以串聯圖的名稱命名該檔案,檔案的副檔名為 strings。因此,如果串聯圖的名稱為 MyStoryboard.storyboard,所生成的字串檔案的名稱就是 MyStoryboard.strings。

正如您將看到的,字串檔案將應用程式中的文字(值)與其他字串(鍵)相關聯。本地化工程師使用該鍵以幫助識別使用者介面中的文字,然後翻譯該文字。在“Base Internationalization”中構建應用程式的使用者介面時,必須使用“Auto Layout”功能,以確保顯示翻譯字串的物件,在其相鄰檢視更改時,適當地調整其相對位置和大小。

使用 Base Internationalization
  1. 在 Xcode 中,選擇 HelloWorld 專案,並顯示“Info”面板。

    影象: ../Art/internat_choose_base_2x.png
  2. 選擇“Localizations”表格下方的“Use Base Internationalization”複選框。

    Xcode 顯示一張表單,要求您選擇要用於“Base Internationalization”的串聯圖。

    影象: ../Art/internat_select_base_sb_2x.png
  3. 請確定已選中 MainStoryboard.storyboard,並且參考語言為“English”。點按“Finish”按鈕。

  4. 在專案導航器中選擇 MainStoryboard.storyboard (Base)。

  5. 如果“Label”顯示在標籤物件中,請連按它以選擇該文字,然後按下“Delete”。

    這最後一步是必須的,因為使用者應該是看不到“標籤”的,因此不需要翻譯它。

注:在 Xcode 4.5 以前的版本中,開發者和本地化工程師必須為應用程式支援的每種語言修改串聯圖和 nib 檔案。這項任務需要他們不僅要翻譯串聯圖或 nib 檔案中的可見或可聽文字,還要在翻譯完成後,調整檢視的大小和位置。

新增本地化語言

建立 HelloWorld 時,Xcode 已自動將一個資料夾新增到了 Xcode 專案。此資料夾用於存放英文字地化的資源。稍後,當您請求某個“Base Internationalization”時,Xcode 會將另一個資料夾新增到專案。如果在 Finder 中檢視專案檔案,您將看到一個名為Base.lproj 的資料夾和另一個名為 en.lproj 的資料夾(用於英文字地化)。第一個資料夾中的是串聯圖檔案;第二個資料夾中的是InfoPlist.strings 檔案。(您將在“將應用程式名稱本地化”中瞭解有關 InfoPlist.strings 檔案的更多資訊。)英語是專案的預設語言。如果想要新增其他的本地化語言,您必須在 Xcode 中新增它們。

將某種本地化語言新增到專案
  1. 選擇專案設定的“Info”面板。

    影象: ../Art/internat_projectsettings_2x.png
  2. 點按“Localization”表格中的加號按鈕 (+),然後從彈出式選單中選取簡體中文。

    影象: ../Art/internat_selectLang_2x.png

    簡體中文的語言 ID 標識為 zh-Hans。

  3. 在要求您選取檔案和參考語言的表單中,請確定所有設定和選擇都如下所描述。然後點按“Finish”按鈕。

    影象: ../Art/internat_select_localiz_files_2x.png

在完成此項任務後,Xcode 會更新該專案導航器,以顯示新的本地化語言。點按 MainStoryboard.storyboard 旁邊的展示三角形,以顯示這些檔案的基本(英文)和簡體中文字地化。

影象: ../Art/internat_inProjNavigator_2x.png

在專案導航器中,您可能注意到有兩種型別的字串檔案。當您新增一種本地化語言時,Xcode 生成兩種字串檔案。第一種是來自“Base Internationalization”的字串檔案 (MainStoryboard.strings)。該字串檔案包含一個或多個鍵-值對,它們由 Xcode 從串聯圖檔案找到的文字自動生成。第二種字串檔案,是 InfoPlist.strings,您使用該檔案將使用者可見的應用程式屬性(例如其名稱)本地化。該檔案開始內容為空。您將在接下來的部分了解有關這兩種字串檔案的更多資訊。

應用程式捆綁包中的本地化資料夾:應用程式就是捆綁包,而捆綁包即是結構化目錄,內有可執行程式碼及其使用的資源。這些資源可以本地化或不加以本地化(所有語言都如此)。本地化的資源,放在名為 code.lproj 的捆綁包的資料夾中,而 code 可由以下組成:
  • 語言 ID。語言的 ISO 639-1(兩個字母)或 ISO 639-2(三個字母)識別符號。(ISO 代表“國際標準化組織”。)通過新增帶有連字元的字尾,您可以指定某種語言的方言,例如簡體中文 (-Hans) 和繁體中文 (-Hant)。
  • 區域 ID。一個區域或地區的可選 ISO 3166-1 識別符號。區域 ID 是一個由兩個字母組成的大寫程式碼,該程式碼使用下劃線字元連結語言指示符。例如,ID en_GB.lproj 指的是英文–英國。

這些約定的一個例外是 Base.lproj,它標識串聯圖或 nib 檔案的 Base Internationalization。

使用正確的輸入源

如果要為簡體中文字地化鍵入中文字,您需要一個合適的輸入源,來輸入這些字元。您在 OS X 的“系統偏好設定”中請求此輸入源。

選擇適合簡體中文的輸入源
  1. 啟動“系統偏好設定”應用程式,然後選擇“語言與文字”。

    若要啟動“系統偏好設定”,請從蘋果選單中選取“系統偏好設定”。(這不是 Xcode 的一項功能。)

  2. 選取“輸入源”檢視。

  3. 在輸入源列表中,選擇“中文 – 簡體”。

    影象: ../Art/input_source_pref_2x.png
  4. 請確定已選定“在選單欄中顯示輸入法選單”。

現在,您可以在選單欄中選取一種簡體中文輸入源,以將其設為活躍的輸入源。

影象: ../Art/select_input_source_2x.png

關於字串檔案

字串檔案包含文字項,這些文字項已本地化為特定語言,並與用作鍵的任何字串相匹配。該檔案的副檔名為 strings。當應用程式在裝置上執行時,它會從使用者首選語言所屬的字串檔案中,找出並顯示這些字串。(當然,該應用程式必須支援該語言的本地化。)在 iOS 中,國際化使用三種不同型別的字串檔案:

  • Xcode 從“Base-internationalization”串聯圖或 nib 檔案自動生成的字串檔案
  • 用於本地化使用者可見屬性的字串檔案,這些屬性存在於應用程式的資訊屬性列表,如應用程式的顯示名稱
  • 由應用程式程式碼所建立和顯示的字串的檔案

以下部分描述了,將應用程式國際化時如何配置各種型別的字串檔案。

所有字串檔案中的條目,具有以下基本格式:

/* Comment to localizers */
"Key" = "Value";

該註釋旨在通過澄清已本地化字串的上下文,來幫助本地化工程師。註釋(位於單獨一行)之後是一個鍵、一個等號、一個值和一個表示終止的分號。值是一個總被引號括起來的字串。鍵是通常被引號括起來的字串,但也可以是宣告為全域性字串的符號。

將串聯圖文字本地化

對於每種新增到應用程式專案的本地化語言,Xcode 從“Base-internationalization”串聯圖生成名為 StoryboardName.strings 的字串檔案,並將該檔案寫入該專案本地化語言(例如 zh-Hans.lproj)的資料夾。

檢查簡體中文的字串檔案
  1. 在專案導航器中,點按展示三角形,以顯示 MainStoryboard.storyboard 下方的專案。

  2. 選擇名稱為 MainStoryboard.strings (Chinese) 的專案。

    該字串檔案的內容,會顯示在專案編輯器中。

就 HelloWorld 應用程式而言,Xcode 從“Base Internationalization”生成以下字串檔案:

/* Class = "IBUITextField"; accessibilityHint = "Type your name"; ObjectID = "PzI-FE-QQF"; */ "PzI-FE-QQF.accessibilityHint" = "Type your name";  /* Class = "IBUITextField"; placeholder = "Your Name"; ObjectID = "PzI-FE-QQF"; */ "PzI-FE-QQF.placeholder" = "Your Name";  /* Class = "IBUIButton"; normalTitle = "Hello"; ObjectID = "fYK-eX-amY"; */ "fYK-eX-amY.normalTitle" = "Hello";

對於串聯圖中的每個字串,Xcode 將文字顯示物件識別符號的鍵、句點 (.) 和指定給該字串的屬性連線起來。值(等號後面的字串)是“Base-internationalization”串聯圖中的可見或可聽字串。本地化工程師會翻譯這些字串。(每個條目的註釋,會重複此資訊,但會新增 Xcode 已知的物件類。)如果使用者的首選語言與“Base Internationalization”的語言不同,應用程式在執行時會將“Base-internationalization”串聯圖中的每個字串,動態替換為當前本地化語言的 StoryboardName.strings 檔案中相匹配的字串。圖 1-1說明了此流程。

圖 1-1  將“Base Internationalization”中的字串本地化

將字串本地化為簡體中文
  1. 從選單欄中選取一種簡體中文輸入源。

    您可以使用中文鍵盤(如果有)。您也可以使用其他鍵盤(例如,“美國英文”鍵盤),但應該知道它的按鍵對映。

    如果拷貝下面示例中的中文字,並將它們貼上到字串檔案中(或者如果將文字本地化為其他語言),您可以跳過此步驟。

  2. 選擇專案導航器中的 MainStoryboard.strings (Chinese) 檔案,以在專案編輯器中顯示該檔案。

  3. 將每個值字串(即等號右邊的字串)翻譯成簡體中文。

    如果您要拷貝並貼上中文,以下是可供拷貝的字元。

  4. 儲存該檔案(“File”>“Save”)。

HelloWorld 使用者介面十分簡單,僅有一個串聯圖、一個場景和三個字串。使用者介面更為複雜的應用程式,含有許多帶文字的檢視,因此有許多字串需要本地化。Xcode 使用嵌入鍵中的物件 ID,幫助您識別顯示文字的檢視。選擇串聯圖中的檢視(例如,“Hello”按鈕),然後開啟“Identity”檢查器。在此檢查器的“Document”部分,查詢物件 ID,並將其與字串檔案中的物件 ID 相匹配。

影象: ../Art/internat_objectID_2x.png

MainStoryboard.strings 檔案的中文字地化內容,現在看起來應該是這樣的:

/* Class = "IBUITextField"; accessibilityHint = "Type your name"; ObjectID = "PzI-FE-QQF"; */ "PzI-FE-QQF.accessibilityHint" = "鍵入您的姓名";  /* Class = "IBUITextField"; placeholder = "Your Name"; ObjectID = "PzI-FE-QQF"; */ "PzI-FE-QQF.placeholder" = "您的姓名";  /* Class = "IBUIButton"; normalTitle = "Hello"; ObjectID = "fYK-eX-amY"; */ "fYK-eX-amY.normalTitle" = "您好";

將應用程式的名稱本地化

將本地化語言新增到某個應用程式專案時,Xcode 在預設情況下,會建立一個名稱為 InfoPlist.strings 的檔案,並將其寫入該檔案系統的本地化資料夾(例如,zh-Hans.lproj)中。該檔案(最開始內容為空)應該包含資訊屬性列表中使用者可見的本地化字串的鍵-值對;就 HelloWorld 應用程式而言,該屬性列表在 HelloWorld-Info.plist 檔案中。

最重要的使用者可見屬性,是應用程式的顯示名稱,現在您會將其本地化。InfoPlist.strings 檔案中的鍵,是由框架宣告的符號,可在資訊屬性列表中找到。

將應用程式名稱本地化
  1. 選擇 HelloWorld 目標,然後選取“Info”檢視。

  2. 按住 Control 鍵,點按屬性表格中的任何地方,然後從關聯選單中,選取“Show Raw Keys/Values”。

    影象: ../Art/internat_showcfprops_2x.png
  3. 找到屬性 CFBundleDisplayName(它是表示某個應用程式的顯示名稱的 Core Foundation 符號)的位置。

  4. 在專案導航器中,選擇 InfoPlist.strings 檔案,以在編輯器中顯示該檔案。

    該檔案用於簡體中文字地化。可以在“Identity”檢查器的“Localization”部分,驗證所選檔案的本地化情況。

    影象: ../Art/internat_checkLocalization_2x.png
  5. 在 InfoPlist.strings 檔案中,鍵入以下程式碼行,然後從“File”選單中,選取“Save”以儲存該檔案。

    /* The name of the app displayed on the device*/
    CFBundleDisplayName = "您好,世界";

    在本例中,可以不必給鍵加引號。

不需要為原始的英文字地化編輯 InfoPlist.strings 檔案,因為資訊屬性列表中使用者可見的屬性已經是英文的。

將程式碼顯示的字串本地化

應用程式的程式碼,經常在執行時建立和顯示文字字串。HelloWorld 專案的 changeGreeting: 方法,就是一個以程式設計方式生成文字的例子。

- (IBAction)changeGreeting:(id)sender {
    self.userName = self.textField.text;
    NSString *nameString = self.userName;
    if ([nameString length] == 0) {
        nameString = @"World";
    }
    NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@", nameString]; // programmatically created
    self.label.text = greeting;
}

該方法從文字欄獲取要顯示的姓名,然後使用 NSString 類的 initWithFormat: 方法,將字串“Hello, ”與該姓名連線起來。為了顯示此文字,該方法將標籤的 text 屬性設定為構建的字串。這裡國際化的問題,在於必須將單詞“Hello”翻譯為該應用程式支援的每種本地化語言。為了將程式碼生成的字串本地化,iOS 的國際化功能提供了字串檔案和 NSLocalizedString 巨集。以下部分描述如何使用該檔案和巨集。

配置 Localizable.strings 檔案

包含以程式設計方式顯示的文字,其本地化字串檔案的慣用名稱是 Localizable.strings。您將建立兩個此類檔案,一個用於英文,一個用於簡體中文,然後將合適的鍵-值對新增到其中。

為每種本地化新增 Localizable.strings 檔案
  1. 在 Xcode 專案導航器中,選擇“Supporting Files”資料夾。

  2. 選取“File”>“New”>“File”。

  3. 在“iOS”的“Resources”類別中,選擇“Strings File”模板,然後點按“Next”按鈕。

    影象: ../Art/internat_addStrings_2x.png
  4. 在“Save As”欄中,給 Localizable.strings 檔案重新命名,然後點按“Create”按鈕。

    保持預設設定(例如,選定的目標)不變。

  5. 選擇專案導航器中的 Localizable.strings,然後點按“Identity”檢查器中的“Make localized”按鈕。

    影象: ../Art/internat_addLocalizable_2x.png
  6. 在出現的確認對話方塊中,請確定已在下拉式選單中選定“English”,然後點按“Localize”按鈕。

    影象: ../Art/internat_localizable_en_2x.png

    此步驟完成後,“Make localized”按鈕已由列出當前本地化語言的表格所替換。

  7. 選擇“Chinese”複選框,將 Localizable.strings 檔案新增到簡體中文字地化中。

現在,有了兩種本地化語言的 Localizable.strings 檔案,是時候將鍵-值對新增到其中了。

將“Hello”字串本地化
  1. 在專案導航器中,選擇 Localizable.strings (English)。

  2. 在編輯器中,鍵入以下文字:

    /* The string displayed */
    "HELLO" = "Hello, %@";

    為了幫助將左邊的字串 (“HELLO”) 識別為鍵,“Hello”為大寫。

  3. 在專案導航器中選擇 Localizable.strings (Chinese)。

  4. 在編輯器中,鍵入以下文字:

    /* The string displayed */
    "HELLO" = "您好,%@";

呼叫 NSLocalizedString 巨集

NSLocalizedString 巨集從 Localizable.strings 檔案獲取當前本地化語言的本地化字串。在 HelloWorld 應用程式中,您要以此巨集替換文字 @"Hello, %@"。

請求程式碼中的本地化字串
  1. 在專案導航器中,選擇 HelloWorldViewController.m。

  2. 修改 changeGreeting: 方法中的以下語句:

    NSString *greeting = [[NSString alloc] initWithFormat:@"Hello %@", nameString];

    使它看起來是這樣的:

    NSString *greeting = [[NSString alloc] initWithFormat:NSLocalizedString(@"HELLO", @"The string displayed"), nameString];

該巨集中的第一個引數,採用字串檔案中的一個鍵,第二個引數採用給本地化工程師的註釋。該巨集會返回與使用者首選語言相對應的本地化語言中鍵的值。您可能想知道此示例將給本地化工程師的註釋作為該巨集的引數的原因;畢竟,您已經在 Localizable.strings 檔案中,為英文和中文寫了一則註釋。

大型應用程式專案,通常使用名稱為 genstrings 的命令列程式,從該程式在程式碼中找到的資訊生成一個字串檔案(預設情況下,該檔名稱為 Localizable.strings)。該實用工具查詢 NSLocalizedString 巨集的每次呼叫,提取鍵(也是初始值)和註釋,並將這些專案寫入字串檔案。然後,您可以將該字串檔案,新增到專案中的每種本地化語言中,並翻譯這些值。

測試您的國際化

恭喜您。您已經完成了將應用程式國際化,並本地化為簡體中文。現在該開始測試該應用程式,以檢查當簡體中文為使用者的首選語言時,該應用程式是否顯示簡體中文字串。

測試應用程式的簡體中文版本
  1. 執行 iOS Simulator,啟動 Settings 應用程式,選取簡體中文作為首選語言。

    如果 iOS Simulator 正在執行 HelloWorld 或任何其他應用程式,點按主螢幕按鈕。

    在 Settings 應用程式中,選取“General”>“International”>“Language”。然後點按示例中所描述表格中的行。點按“Done”按鈕。

    影象: ../Art/internet_test_language_2x.png
  2. 在 Xcode 中,請確定“iPhone 版本號 Simulator”是處於活躍狀態的方案,然後點按“Run”按鈕。

    Xcode 會在 iOS Simulator 中執行 HelloWorld 應用程式。它的外觀應該是這樣的:

    影象: ../Art/helloworld_zh_beforeal_2x.png
  3. 從選單欄中,選取簡體中文作為輸入源,在文字欄中輸入一些中文字,然後點按按鈕。

    該應用程式應該顯示“您好,鍵入的文字”。如果發現有未翻譯為當前語言的任何字串,請確定在字串檔案中翻譯它們。

  4. 從“Hardware”選單中,選取“Rotate Left”或“Rotate Right”,以模擬方向的更改,並檢視方向更改的結果。

  5. 點按主螢幕按鈕,以退出該應用程式,並在模擬的 iPhone 中,找到該應用程式。

    影象: ../Art/helloworld_zh_appname_2x.png

    您會注意到,該應用程式的名稱已經本地化為簡體中文。

當然,大多數商業應用程式顯示的文字,要比 HelloWorld 多;它們也可能包括本地化的影象和其他資源。這些應用程式也可能含有多種本地化語言版本。對於每種本地化語言,您應該執行該應用程式,並前往每個顯示文字的螢幕或對話方塊,以檢視是否存在任何未本地化的字串或資源。

如果已配置應用程式使用 VoiceOver,您也要檢查該應用程式的輔助功能是否已正確本地化。您可以使用 iOS Simulator 內建的“Accessibility Inspector”來檢查。有關“Accessibility Inspector”的更多資訊,請參閱 Accessibility Programming Guide for iOS(iOS 輔助功能程式設計指南)。

使用自動佈局進行國際化

測試簡體中文版的 HelloWorld 應用程式時,您模擬了方向的更改。該應用程式顯示文字的方式,適合任何本地化語言。因為文字欄中的佔位符文字和以程式設計方式顯示在標籤中的文字,在各自物件中居中顯示(佔據螢幕的寬度),無論方向如何,它們可以是任何合理的長度。並且,該按鈕會調整自身的大小,以適合任何本地化字串。

當然,像 HelloWorld 使用者介面一樣簡單的應用程式很少(即物件在螢幕上居中顯示,並且旁邊沒有別的物件)。使用者介面文字的一個常見設計,就是標籤後跟著一個文字欄。當本地化工程師把 StoryboardName.strings 檔案中的標籤文字翻譯成特定的語言時,該標籤應該調整自身的大小,以適合新文字。而該文字欄的寬度應該隨之更改,以配合新的標籤尺寸,如圖 1-2 所示。

圖 1-2  常見本地化模式中的自動佈局

在本教程的餘下部分,您將瞭解一些有關 iOS 的自動佈局系統,以及如何使用 Xcode 的“Auto-Layout”工具,來指定用於應用程式國際化的佈局規則的資訊。之後,您將修改該使用者介面,以擁有標籤-文字欄設計,並對其進行配置,以擁有如圖 1-2 所示的行為。

若要了解有關“Auto Layout”的更多資訊,請參閱 Cocoa Auto Layout Guide(Cocoa 自動佈局指南)。

Xcode 中的“Auto Layout”演示

iOS 的自動佈局系統,可讓您定義應用程式檢視佈局的規則,以便當一個檢視更改其尺寸或位置後,相鄰的檢視會適當地調整自己的尺寸和位置。“Auto Layout”是對裝置擺放方向的更改作出響應的關鍵功能。它也是將應用程式國際化的關鍵功能,特別是使用“Base Internationalization”的時候。

使用“Auto Layout”時,您使用佈局約束來描述您想應用程式如何為使用者介面進行佈局。在您的首個 iOS 應用程式中配置 HelloWorld 使用者介面時,您接受了“Auto Layout”系統(符合 Aqua 指南)施加的自動約束,例如使用建議的物件間距,並使物件的前置或後置邊緣固定到其父檢視。串聯圖場景中,檢視周圍的藍色佈局細線表示自動約束。現在,您要檢查這些約束。

檢查佈局約束
  1. 在專案導航器中,選擇 MainStoryboard.storyboard (Base Internationalization)。

  2. 在 Hello World 檢視控制器的大綱檢視中,點按每個“Constraints”項旁邊的展示三角形,以顯示其內容。

    大綱檢視應該是這樣的:

    影象: ../Art/internat_constraints_2x.png
  3. 選擇一種約束(例如“Horizontal Space – Label – View”),然後開啟“Attributes”檢查器。

    “Attributes”檢查器顯示有關該約束的如下資訊:

    影象: ../Art/internat_constraints2_2x.png

    檢查器中的值與該標籤的父檢視有關。選中“Standard”,意味著約束是自動的,換句話說,“Auto Layout”系統將根據 Aqua 指南佈局物件。

    Xcode 也可讓您檢視與下面步驟中所描述的特定檢視相關聯的所有約束。

  4. 選擇該文字欄,然後選取“Size”檢查器。

    除了顯示約束外,“Size”檢查器還會顯示檢視的“Content Hugging Priority”值和“Content Compression Resistance Priority”值。

    影象: ../Art/internat_constraintsPerView_2x.png

您可以覆蓋自動約束的設定,從而建立使用者約束,但是沒必要那麼做。正如先前所述,HelloWorld 的簡單使用者介面適合本地化。該文字欄(及其佔位符文字)和標籤可在螢幕上擴充套件,從而可以容納幾乎任何長度的字串。而且,“Hello”按鈕會調整自己的大小,以適合每種本地化的標題,並在其父檢視中保持居中。

修改使用者介面以進行國際化

現在您將修改 HelloWorld 的使用者介面,以將標籤和文字欄配對,這是應用程式中一種更為常見的使用者介面設計。

更改 HelloWorld 應用程式的使用者介面和佈局約束
  1. 選擇該文字欄,在“Attributes”檢查器中刪除“Placeholder”欄中的 Your Name。

  2. 調整該文字欄的寬度,以使其佔據其父檢視的右半部分。

  3. 在“Utility”區域中開啟物件庫,並將一個標籤物件拖到串聯圖場景上。

    影象: ../Art/internat_dragLabel_2x.png
  4. 選擇該標籤,然後點按“Attributes”檢查器中的“Align Right”按鈕。

    影象: ../Art/internat_rightAlignLabel_2x.png
  5. 選擇該文字欄,然後點按“Align Left”按鈕。

  6. 連按該標籤的預設文字 (Label),以將其選中,然後使用 Your Name: 將其替換。

  7. 調整標籤和文字欄的位置和大小,以便該標籤適合其文字,並且使自動約束(藍色細線)能夠生效。

    兩個物件都選中後,現在使用者介面應該是這樣的:

    影象: ../Art/internat_finalLabelField_2x.png
  8. 選擇新標籤物件,在“Size”檢查器中,將“Content Hugging Priority”的“Horizontal”值設為 1000。

    影象: ../Art/internat_setContentHugging_2x.png

    “Content Hugging Priority”告訴“Auto Layout”系統,相對其他檢視來說,檢視應該按其內容調整多少尺寸;就該標籤而言,值 1000 實際上代表該標籤應該總是調整其大小,以包含其字串。因為該文字欄的“Content Hugging Priority”仍使用 250 的預設值,它是一個當標籤寬度變更後也隨之更改其寬度的物件。

現在已將標籤-文字欄對國際化了。如果鍵入 A Very Long Name 作為標籤文字,然後按下 Return 鍵,您會看到文字欄縮短自己的寬度,以容納新標籤值。您也可以執行這個程式的英文字地化版本和簡體中文字地化版本,並觀察各自行為的變化。

當串聯圖更改時更新串聯圖字串檔案

在剛完成的“Auto Layout”練習中,您將新文字顯示物件(“Your Name”標籤)新增到了 HelloWorld 使用者介面。因此,現在中文MainStoryboard.strings 檔案與“Base Internationalization”(MainStoryboard.storyboard) 不同步。您可以使用命令列實用工具ibtool,從“Base Internationalization”生成新字串檔案,然後將該新字串檔案條目新增到現有的 MainStoryboard.strings 檔案

將新使用者介面物件與現有的中文 MainStoryboard.strings 檔案合併
  1. 啟動“終端”應用程式。

    此應用程式位於“/應用程式/實用工具”中。

  2. 在“終端”的“Shell”中,連線到專案資料夾的 Base.lproj 目錄。

    例如:

    cd /Users/UserName/Projects/HelloWorld/HelloWorld/Base.lproj
  3. 在提示符後輸入以下命令:

    ibtool MainStoryboard.storyboard --generate-strings-file NewStuff.strings

    可以給輸出檔案命名隨您選取的任何名稱(本示例是用 NewStuff.strings)。

  4. 在 Xcode 中,開啟生成的輸出檔案,並將新字串檔案條目(即“Your Name:”標籤的註釋和鍵-值對)拷貝到中文MainStoryboard.strings 檔案。

  5. 翻譯新字串值。