美文网首页程序员
iOS swift 自动生成本地化对应swift类

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

作者: xuanhr | 来源:发表于2020-10-25 19:00 被阅读0次

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"

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

相关文章

网友评论

    本文标题:iOS swift 自动生成本地化对应swift类

    本文链接:https://www.haomeiwen.com/subject/pqmnmktx.html