多語系設定
首先建立一個命名為 Localizable 的 Strings File

新增所要支援的語系,這邊用繁體中文當範例

成功的話會在 Localizable
這邊看到新增了繁體中文的 .strings
檔

在這兩個檔案中建立 localizedKey
所相對應的內容,等號前面是我們要設定的 key,等號後面則是要設定的 value

系統設定切換語系
extension String { var localized: String { return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "") }}
不隨著系統設定切換語系
若想要讓 App 的語系不隨著系統設定改的話,可以透過以下寫法去指定要讀的 Localizable 檔案
extension String {var localized: String {// forResource: 指定要讀的副檔名 繁體中文=“zh-Hant”let path = Bundle.main.path(forResource: "zh-Hant", ofType: "lproj")!let bundle = Bundle(path: path)!return NSLocalizedString(self, tableName: nil, bundle: bundle, value: "", comment: "")}
}
實作如下,”Test”
是設定的 key

如果有像以下這樣會需要帶參數的字串,可以透過格式化字串的部分來實作

self.localized
是上面 extension 所建立的變數
extension String {func localizeWithFormat(arguments: CVarArg...) -> String {return String(format: self.localized, arguments:arguments)}}
實作如下,如果有多個參數帶入的話,只需要加入逗號,如 “字串”, “次數”

圖片多語系
在 Localization 選擇你要支援的語系,再將對應語系的圖片放進對應欄位即可

Summary
這次在做多語系的時候,有兩點紀錄一下。
- 由於專案裡有部分的文案是寫在 xib 或 storyboard 上,常常在找文案設定多語系時會遺漏掉,建議純用程式碼刻畫面。
- 另外還有在做專案前,建議文案的部分先寫在
Localizable.strings
檔裡,用 key 來塞字串,免得未來有多語系需求時,還要重寫文案!!