如果你要進行 iOS 的 i18n,而且還要在 App 內動態切換語言,你可以使用這個套件 Localize-Swift。前陣子正在進行 i18n 的 feature,這邊整理了一下相關的資料。

安裝方法

使用 CocoaPods

pod 'Localize-Swift'

使用 Swift Package Manager

dependencies: [
    .package(url: "https://github.com/marmelroy/Localize-Swift.git", .upToNextMajor(from: "3.2.0"))
]

使用方法

/// 在需要多國語系的地方先引入套件
import Localize_Swift

新增 .localized() 到你想要翻譯的任何字串對象後面:

textLabel.text = "Hello World".localized()

取得可用語言的陣列:

Localize.availableLanguages()

更改當前語言:

Localize.setCurrentLanguage("fr")

如果需要在視圖控制器中更新 UI 以應對語言變更,請監聽 LCLLanguageChangeNotification

NotificationCenter.default.addObserver(self, selector: #selector(setText), name: NSNotification.Name(LCLLanguageChangeNotification), object: nil)

將語言重設為應用的預設語言:

Localize.resetCurrentLanguageToDefault()

除了 Localizable.strings 之外,現在還有 xcstrings 可以使用

在開發的過程中,有看到新增 strings 檔時,旁邊多了一個 deprecated 的字樣,旁邊則是多了個 xcstrings 的選項。一查之後,才看到 WWDC 2023 時,有推出 xcstrings 的功能,個格式看起來和 Android 開發的多國語系很像,我指的是 GUI 界面的長相。相關影片我列在下面,之後在真的用上專案後,會再寫一篇 blog。

WWDC 2023 - Discover String Catalogs | Apple

參考資料

Updated: