關(guān)于 iOS App 語言本地化的基本配置和用法,網(wǎng)上有很多詳細(xì)的教程, 這里就不再贅述。
先舉個(gè)例子說明一下這篇文章要干嘛。
Localizable.strings(English) 中內(nèi)容:
"Home" = "Home";
Localizable.strings(Chinese) 中內(nèi)容:
"Home" = "主頁";
項(xiàng)目中使用時(shí):
homeLabel.text = NSLocalizedString("home", comment: "")
網(wǎng)上大部分教程到這里就結(jié)束了。但是這樣在代碼中使用非常的麻煩。
NSLocalizedString 的第一個(gè)參數(shù)必須與國際化文件中的字符串一模一樣。每次寫都要去文件里查找復(fù)制。
如果可以像其它代碼一樣,輸入時(shí)能有代碼自動(dòng)補(bǔ)全那多 happy
就像這樣,不但有自動(dòng)補(bǔ)全,還有注釋
0.gif
生成的 Swift 文件中的內(nèi)容:
import Foundation
extension String {
var localized: String { return NSLocalizedString(self, comment: self) }
/// "Home";*
static var home: String { return "home".localized }
}
簡單說下步驟 以下內(nèi)容的前提是你的項(xiàng)目關(guān)于本地化的基本配置都 OK 了。
1. 添加腳本到項(xiàng)目
選中Targets->Build Phases 然后點(diǎn)擊 『 + 』選擇 『 New Run Script Phase 』
2. 復(fù)制腳本到 Run Script 下面的編輯框內(nèi)
1.png
3. 點(diǎn)擊 Build,第一次編譯成功后需要到 Finder 中找到生成的代碼文件(示例項(xiàng)目是 LocalizedUtils.swift ),添加到工程目錄中。然后就可以愉快的 ppp 了
注意事項(xiàng)
- 腳本中文件目錄一定要正確;
- Localizable.strings 有內(nèi)容要純粹,不要有任何與語言無關(guān)的東西,注釋也不要有,這個(gè)可以通過優(yōu)化腳本避免
- Localizable.strings 中 『 = 』前面的文字就是代碼中的為 String 擴(kuò)展的變量名,所以 key 的命名要注意符合 Swift 變量命名的規(guī)則,比如:不要有空格。示例項(xiàng)目中 『 "home" = "Home"; 』改為 『 "ho me" = "Home"; 』生成的代碼就會(huì)編譯失敗。
腳本:
# -*- coding: utf-8 -*
# Localizable.strings文件路徑
localizableFile="${SRCROOT}/${PROJECT_NAME}/en.lproj/Localizable.strings"
# 生成的swift文件路徑
localizedFile="${SRCROOT}/${PROJECT_NAME}/LocalizedUtils.swift"
# 把等號(hào)后面的值替換成等號(hào)前的值, 為代碼添加注釋
awk '{print "http:/// "$3"*" "\n" $1,$2,$1";"}' "${localizableFile}" > "${localizableFile}.tmp"
# 將localizable.strings中的文本轉(zhuǎn)為swift格式的常量,存入一個(gè)臨時(shí)文件
sed "s/^\"/ static var /g" "${localizableFile}.tmp" | sed "s/\" = \"/: String { return \"/g" | sed "s/;$/.localized }/g" > "${localizedFile}.tmp"
# 先將localized作為計(jì)算屬性輸出到目標(biāo)文件
echo "import Foundation\n\nextension String {\n var localized: String { return NSLocalizedString(self, comment: self) }" > "${localizedFile}"
# 再將臨時(shí)文件中的常量增量輸出到目標(biāo)文件
cat "${localizedFile}.tmp" >> "${localizedFile}"
# 最后添加輸出一個(gè)"}"到目標(biāo)文件,完成輸出
echo "\n}" >> "${localizedFile}"
# 刪除臨時(shí)文件
rm "${localizableFile}.tmp"
rm "${localizedFile}.tmp"