关于 iOS App 语言本地化的基本配置和用法,网上有很多详细的教程, 这里就不再赘述。
先举个例子说明一下这篇文章要干嘛。
Localizable.strings(English) 中内容:
"Home" = "Home";
Localizable.strings(Chinese) 中内容:
"Home" = "主页";
项目中使用时:
homeLabel.text = NSLocalizedString("home", comment: "")
网上大部分教程到这里就结束了。但是这样在代码中使用非常的麻烦。
NSLocalizedString 的第一个参数必须与国际化文件中的字符串一模一样。每次写都要去文件里查找复制。
如果可以像其它代码一样,输入时能有代码自动补全那多 happy
就像这样,不但有自动补全,还有注释
生成的 Swift 文件中的内容:
import Foundation
extension String {
var localized: String { return NSLocalizedString(self, comment: self) }
/// "Home";*
static var home: String { return "home".localized }
}
简单说下步骤 以下内容的前提是你的项目关于本地化的基本配置都 OK 了。
1. 添加脚本到项目
选中Targets->Build Phases 然后点击 『 + 』选择 『 New Run Script Phase 』
2. 复制脚本到 Run Script 下面的编辑框内
3. 点击 Build,第一次编译成功后需要到 Finder 中找到生成的代码文件(示例项目是 LocalizedUtils.swift ),添加到工程目录中。然后就可以愉快的 ppp 了
注意事项
- 脚本中文件目录一定要正确;
- Localizable.strings 有内容要纯粹,不要有任何与语言无关的东西,注释也不要有,这个可以通过优化脚本避免
- Localizable.strings 中 『 = 』前面的文字就是代码中的为 String 扩展的变量名,所以 key 的命名要注意符合 Swift 变量命名的规则,比如:不要有空格。示例项目中 『 "home" = "Home"; 』改为 『 "ho me" = "Home"; 』生成的代码就会编译失败。
脚本:
# -*- coding: utf-8 -*
# Localizable.strings文件路径
localizableFile="${SRCROOT}/${PROJECT_NAME}/en.lproj/Localizable.strings"
# 生成的swift文件路径
localizedFile="${SRCROOT}/${PROJECT_NAME}/LocalizedUtils.swift"
# 把等号后面的值替换成等号前的值, 为代码添加注释
awk '{print "/// "$3"*" "\n" $1,$2,$1";"}' "${localizableFile}" > "${localizableFile}.tmp"
# 将localizable.strings中的文本转为swift格式的常量,存入一个临时文件
sed "s/^\"/ static var /g" "${localizableFile}.tmp" | sed "s/\" = \"/: String { return \"/g" | sed "s/;$/.localized }/g" > "${localizedFile}.tmp"
# 先将localized作为计算属性输出到目标文件
echo "import Foundation\n\nextension String {\n var localized: String { return NSLocalizedString(self, comment: self) }" > "${localizedFile}"
# 再将临时文件中的常量增量输出到目标文件
cat "${localizedFile}.tmp" >> "${localizedFile}"
# 最后添加输出一个"}"到目标文件,完成输出
echo "\n}" >> "${localizedFile}"
# 删除临时文件
rm "${localizableFile}.tmp"
rm "${localizedFile}.tmp"