SwiftUI 框架

iOS App 本地化: 如何使用字符串目錄(String Catalogs)

隨著 Xcode 15 的發布,Apple 引入了一項令人興奮的功能,稱為字串目錄(String Catalogs)。 此功能旨在簡化 App 的本地化過程,使你可以更輕鬆地在一個集中位置管理所有字串。
iOS App 本地化: 如何使用字符串目錄(String Catalogs)
iOS App 本地化: 如何使用字符串目錄(String Catalogs)
In: SwiftUI 框架

隨著 Xcode 15 的發布,Apple 引入了一項令人興奮的功能,稱為字串目錄(String Catalogs)。 此功能旨在簡化 App 的本地化過程,使你可以更輕鬆地在一個集中位置管理所有字串。 透過利用字串目錄,你可以確保你的 App 在到達用戶之前已完全本地化。 這項新功能為本地化過程提供了更多便利和信心。

在早期版本的 Xcode 中,你需要通過在本地化之前使用 「String(localized:)」 巨集修改現有文字來進行字符串國際化。 然而,隨著字串目錄的引入,這個過程已經不再需要。 對於 SwiftUI 項目,字串目錄會自動為你提取所有使用者界面的文本,省去了手動修改的步驟。

讓我們創建一個簡單的項目,看看字符串目錄如何簡化你的 SwiftUI 應用程序項目的本地化過程。

構建一個簡單的本地化示例

假設你已經安裝了 Xcode 15,請建立一個新的 SwiftUI 項目,並將 ContentView 中的程式碼替換為以下內容:

struct ContentView: View {
    var body: some View {
        VStack {
            Text("ProLingo")
                .font(.system(size: 75, weight: .black, design: .rounded))
            
            Text("Learn programming languages by working on real projects")
                .font(.headline)
                .padding(.horizontal)
              
            Spacer()
            
            Image(systemName: "macbook.and.iphone")
                .font(.system(size: 200))
            
            Spacer()
            
            Button(action: {}) {
                Text("Get Started for free")
                    .font(.headline)
                    .frame(maxWidth: .infinity)
            }
            .tint(.indigo)
            .controlSize(.large)
            .buttonStyle(.borderedProminent)
            
            Button(action: {}) {
                Text("I already have an account")
                    .font(.headline)
                    .frame(maxWidth: .infinity)
            }
            .tint(.black)
            .controlSize(.large)
            .buttonStyle(.borderedProminent)
            
        }
        .padding()
    }
}

這是一個非常簡單的登錄界面,僅供示範目的。如果你已經編寫了上面的程式碼,Xcode 應該會在預覽窗格中顯示示例登錄界面。

使用字符串目錄

在預設情況下,Xcode 項目僅配置支持英語語言。如果你想支援其他語言,首先在項目導航器中選擇項目文件。然後進入「Info」選項卡,找到「Localizations」部分。點擊「+」按鈕添加一種新語言。接下來,從可用選項中選擇你想要的語言,例如繁體中文。

完成這些步驟後,你的 Xcode 項目將支援選定的語言,從而實現本地化。

Xcode 項目中並未包含字符串目錄文件。在進行本地化之前,你需要手動創建一個字符串目錄文件。在項目導航器中,右鍵點擊項目文件夾,選擇「New File...」。在 iOS 類別下,尋找字符串目錄模板。點擊「Next」繼續,然後將文件命名為 Localizable

這個過程將生成一個空的 Localizable 文件,其中包含你的 App 支援的所有語言。要將所有用戶界面文本提取到此文件中,可以按照以下步驟進行操作:從 Xcode 菜單中選擇「Product」,然後選擇「Build」以重新構建項目。在構建過程完成後,Xcode 將自動提取所有文本並將其填充到 Localizable 文件中。

提取文字後,你可以直接在字串目錄檔案中為每種語言提供翻譯。 另外,當你在項目中添加新的用戶界面文本時,Xcode 會自動將它們包含在字符串目錄中。這個過程在每次構建項目時都會發生。它確保新添加的文本被正確管理,並可以輕鬆本地化為不同的語言。

測試本地化應用程式

有幾種方法可以測試你的 App 的本地化。一種方法是更改模擬器的語言首選設定,然後在模擬器上運行本地化應用程序,以查看 App 在不同語言下的情況。另一個選擇是在 Xcode 中利用預覽功能,在運行時和Preview中以各種語言和地區測試應用程序。

讓我們詳細探討這些選項。

要在Xcode中啟用運行時預覽功能,你可以修改方案設置(Scheme Settings)。在方案設置中,你可以在對話框中設置首選語言,這樣你就可以預覽應用程序在特定語言下的外觀和功能。

在對話框中,選擇「Run」 > 「Options」,並將「App language」更改為你首選的語言,例如繁體中文。點擊「Close」按鈕保存設置。

現在點擊「Run」按鈕啟動 App;模擬器的語言應該已經設置為你的首選語言。如果你將其設置為中文,你的App 應該看起來像屏幕截圖一樣。

使用預覽(Preview)測試本地化

要預覽 SwiftUI 應用程序的本地化,你可以在預覽程式碼中使用 locale 環境變數。這可以讓你模擬應用程序在不同語言下的用戶界面。例如,如果你希望在繁體中文中預覽 App 的用戶界面,可以添加一個額外的預覽程式碼塊,並設置所需的語言環境。以下是一個示例:

#Preview("Traditional Chinese") {
    ContentView()
        .environment(\.locale, .init(identifier: "zh-Hant"))
}

通過將語言環境變數設置為 .init(identifier: "zh-Hant"),你可以使用繁體中文預覽 App 的用戶界面。你可以根據需要修改識別符以模擬其他語言。

為文本添加註釋

在 Localizable 文件中,有一個註釋字段,用於顯示每個鍵和翻譯的相關註釋。如果你希望為特定的鍵添加註釋,可以在定義 Text 視圖時包含它們,如下所示:

Text("I already have an account", comment: "Login button")

一旦你修改了帶有註釋的程式碼,它將出現在 Localizable 文件中。

總結

在本教學中,我為你介紹了在 Xcode 中進行本地化的過程。Xcode 15 中引入的字符串目錄顯著簡化了開發人員的工作流程。這個新功能自動從 SwiftUI 視圖中提取文本並將其整合到一個集中的文件中。此外,譯者可以方便地在 Xcode 中直接編輯翻譯,從而簡化了本地化過程。

作者
Simon Ng
軟體工程師,AppCoda 創辦人。著有《iOS 17 App 程式設計實戰心法》、《iOS 17 App程式設計進階攻略》以及《精通SwiftUI》。曾任職於HSBC, FedEx等跨國企業,專責軟體開發、系統設計。2012年創立AppCoda技術部落格,定期發表iOS程式教學文章。現時專注發展AppCoda業務,致力於iOS程式教學、產品設計及開發。你可以到推特與我聯絡。
評論
更多來自 AppCoda 中文版
如何使用 Vision APIs 從圖像中辨識文字
AI

如何使用 Vision APIs 從圖像中辨識文字

Vision 框架長期以來一直包含文字識別功能。我們已經有詳細的教程,向你展示如何使用 Vision 框架掃描圖像並執行文字識別。之前,我們使用了 VNImageRequestHandler 和 VNRecognizeTextRequest 來從圖像中提取文字。 多年來,Vision 框架已經顯著演變。在 iOS 18 中,Vision
iOS 18更新:SwiftUI 新功能介紹
SwiftUI 框架

iOS 18更新:SwiftUI 新功能介紹

SwiftUI的技術不斷演進,每次更新都讓 iOS 應用程式開發變得更加便捷。隨著 iOS 18 Beta 的推出,SwiftUI 引入了多個令人興奮的新功能,使開發者僅需幾行程式碼即可實現出色的效果。 本教學文章旨在探索這個版本中的幾項主要改進,幫助你了解如何運用這些新功能。 浮動標籤列 (Floating Tab Bar)SwiftUI中的標籤視圖(Tab
很好! 你已成功註冊。
歡迎回來! 你已成功登入。
你已成功訂閱 AppCoda 中文版 電子報。
你的連結已失效。
成功! 請檢查你的電子郵件以獲取用於登入的連結。
好! 你的付費資料已更新。
你的付費方式並未更新。