#!/bin/bash
#过滤出工程中未使用的国际化字符串
path="../BLing/Classes/Resource/zh-Hans.lproj/Localizable.strings"
target_folder1="../BLing/Classes/Section" #指定目录
target_folder2="../BLing/Classes/Main"
unusing_localizable_result="unusing_localizable_log"
#白名单
white_array=("BLing" "//")
function array_contains_value(){
array=$1
value=$2
if [[ "${array[@]}" =~ "$value" ]]; then
return 0
elif [[ ! "${array[@]}" =~ "$value" ]]; then
return 1
fi
}
function unusing_localizable_log()
{
echo "">$unusing_localizable_result #清除文件
sed -i "" 's/ //g' $path #剔除国际化中的空格,会修改源文件
#过滤出=的行并截取第一列放入数组中
res_arr=(` grep "=" $path | cut -d= -f1 `)
for var in ${res_arr[@]}
do
array_contains_value white_array $var
if [ $? != 0 ];then
grep -n $var -r $target_folder1 $target_folder2
if [ $? != 0 ]; then
echo $var>>$unusing_localizable_result
fi
fi
done
}
unusing_localizable_log
1.使用说明
- path是国际化文件路径
- target_folder1和target_folder2需要遍历的文件夹路径,可以指定多个
- unusing_localizable_result是工程中未使用的国际化字符串筛选出的结果
- white_array配置的白名单,比如工程名,可以过滤掉
2.思路
- 剔除国际化的空格
- grep匹配出=的行,再按=分割获取第一列,即国际化的key
- 遍历所有的key在指定的目录下查找,如果未找到则写入unusing_localizable_result文件中
总结:
- 熟悉并应用shell语法
- 使用脚本来解决一些问题
- 脚本在找到并确定后,可以剔除过滤出的行
sed -i "" '/匹配的字符/d' $file_name
网友评论