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 18 App 程式設計實戰心法》、《iOS 18 App程式設計進階攻略》以及《精通SwiftUI》。曾任職於HSBC, FedEx等跨國企業,專責軟體開發、系統設計。2012年創立AppCoda技術部落格,定期發表iOS程式教學文章。現時專注發展AppCoda業務,致力於iOS程式教學、產品設計及開發。你可以到推特與我聯絡。
評論
更多來自 AppCoda 中文版
如何在 SwiftUI App 中開發 Live Activities
SwiftUI 框架

如何在 SwiftUI App 中開發 Live Activities

Live Activities 首次於 iOS 16 推出,是 Apple 最令人興奮的更新之一,能讓 App 與使用者在即時互動上更有連結。它不再需要使用者不斷打開 App,Live Activities 可以讓資訊直接顯示在鎖定畫面和 Dynamic Island 上。
使用 Tool Calling 強化 Foundation Models 功能
AI

使用 Tool Calling 強化 Foundation Models 功能

在前幾篇教學中,我們介紹了 Foundation Models 在 iOS 26 中的運作方式,以及如何使用這個全新框架打造具備 AI 功能的應用。我們也介紹了 @Generable 巨集,它能輕鬆地將模型回應轉換為結構化的 Swift 類型。 現在,在這個 Foundation
活用 Foundation Models 的 @Generable 與 @Guide 製作測驗 App
AI

活用 Foundation Models 的 @Generable 與 @Guide 製作測驗 App

在前一篇教學中,我們介紹了 Foundation Models 框架,並示範了如何用它來進行基本的內容生成。那個過程相當簡單——你提供一個提示詞(prompt),等幾秒鐘,就能獲得自然語言的回應。在我們的範例中,我們建立了一個簡單的問答 App,讓使用者可以提問,App 則直接顯示生成的文字。 但如果回應變得更複雜——你需要把非結構化文字轉換為結構化的物件呢? 舉例來說,
很好! 你已成功註冊。
歡迎回來! 你已成功登入。
你已成功訂閱 AppCoda 中文版 電子報。
你的連結已失效。
成功! 請檢查你的電子郵件以獲取用於登入的連結。
好! 你的付費資料已更新。
你的付費方式並未更新。