看过其他人写的的脚本后发现有些问题,其他人会把Localizable.strings中的value值传入NSLocalizedString,实际上这是不对的,按理应该传入key值,针对这个问题进行了修改。
# Localizable.strings文件路径
localizableFile="${SRCROOT}/${PROJECT_NAME}/en.lproj/Localizable.strings"
# 生成的swift文件路径(根据个人习惯修改)
localizedFile="${SRCROOT}/${PROJECT_NAME}/LocalizedUtils.swift"
# 将localizable.strings中的文本转为swift格式的常量,存入一个临时文件
sed -r "s/(.*) = (.*)/\1 = \1;/" "${localizableFile}" | sed "s/^\"/ static var localized_/g" | 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 "${localizedFile}.tmp"