iOS swift 自动生成本地化对应swift类

iOS本地化网上已经有足够的资料,这里就不反复重复了。
关键是使用脚本读取 Localizable.strings ,然后输出成我们需要的常量格式Swift类。
中文网上能查到的Localizable.strings脚本,各自都有小问题。要不是对空行注释处理问题,要不就是生成变量使用了key-value中的value。
修改后的脚本如下。

# Type a script or drag a script file from your workspace to insert its path.
# Localizable.strings文件路径
localizableFile="${SRCROOT}/${PROJECT_NAME}/Resources/en.lproj/Localizable.strings"
# 生成的swift文件路径(根据个人习惯修改)
localizedFile="${SRCROOT}/${PROJECT_NAME}/Utils/LocalizedUtils.swift"
# 转换格式
cat "${localizableFile}" > "${localizableFile}.tmp"
sed '/^[ \t]*\/\//d' "${localizableFile}.tmp" | sed "/^[ \t]*\/\*/,/.*\*\//d" | sed "/^$/d" > "${localizableFile}_space.tmp"
# 转换格式
awk '{print $1,$2,$1";"}' "${localizableFile}_space.tmp" > "${localizableFile}.tmp"
# 将localizable.strings中的文本转为swift格式的常量,存入一个临时文件
sed "s/^\"/ static var localized_/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"
rm "${localizableFile}_space.tmp"

如果希望有更完整的教程可以参考:

  • https://www.jianshu.com/p/ad45bd2faf35
  • http://zhenxiaobin.com/2017/09/30/iOS%E8%AF%AD%E8%A8%80%E6%9C%AC%E5%9C%B0%E5%8C%96%E4%BB%A5%E5%8F%8A%E8%87%AA%E5%8A%A8%E5%8C%96/

你可能感兴趣的:(iOS swift 自动生成本地化对应swift类)