美文网首页程序员
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