语言国际化差异检测实现

由于iOS端老项目使用了国际化,需要配置多国语言,又因为出现使用的多而配置的少的情况,所以最近有个需求,如何去检测所使用的字符串是否都有对应的国际化配置,因此就写了以下脚本,可能有更好的方法或者写法,欢迎交流!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# !/bin/bash

arr1=()
arr2=()
# 递归遍历文件夹获取文件夹下的文件,并读取文件内容保存到数组arr1
function read_dir(){
for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令
do
if [ -d $1"/"$file ] #注意此处之间一定要加上空格,否则会报错
then
read_dir $1"/"$file
else
if [[ ${file:0-2} == '.m' ]]; # 查找扩展名为 .m的文件
then
echo $1"/"$file
for line in `cat $1"/"$file`
do
if [[ "${line}" =~ "LocalizedStr(" ]]; #判断是否包含所指定的字符串
then
if [[ "${line}" =~ "@" ]]#判断是否包含所指定的字符串
then
# echo $line
tmpline=${line#*'LocalizedStr(@"'} #去掉字符串LocalizedStr(@"之前的
linestr=${tmpline%%'")'*} #去掉字符串")之后的
arr1[${#arr1[*]}]=$linestr #存储到数组arr1
else
tmpline=${line#*'LocalizedStr('} #去掉字符串LocalizedStr(之前的
linestr=${tmpline%%')'*} #去掉字符串")之后的
arr1[${#arr1[*]}]=$linestr #存储到数组arr1
fi
fi
done
fi
fi
done
}
# 读取文件内容并保存到数组arr2
function read_file(){
# 获取当前脚本(或者项目)所在目录路径
CURRENT_DIR=$(cd $(dirname $0); pwd)
# echo $CURRENT_DIR
# 文件路径---此处需修改为自己的文件路径
file_path="文件所在项目中的绝对路径"
# 要比较的文件完整路径
file_p=$CURRENT_DIR$file_path
# 先列出路径下的文件
# (ls -l $file_p)
# read -p "请输入要读取的文件名称:" file_n
# count=0
while read line
do
# echo "$line"
# let "count += 1"
# echo "$count" # 这个地方用于验证是按照行读取内容的,读者测试的时候可以将注释掉的三行代码打开 ,这样就可以看到效果
if [[ "${line}" =~ "=" ]];
then
tmpline=${line#*'"'}
linestr=${tmpline%%'" = "'*}
arr2[${#arr2[*]}]=$linestr
# echo $linestr
fi
done < "$file_p"
}

declare -a diff_list
function check(){

t=0
flag=0

for list1_num in "${arr1[@]}"
do
# echo list1_num is ${list1_num}
for list2_num in "${arr2[@]}"
do
# echo list2_num is ${list2_num}
if [[ "${list1_num}" == "${list2_num}" ]]; then
# echo "打印数组相同元素:"$list1_num
flag=1
break
fi
done
if [[ $flag -eq 0 ]]; then
diff_list[t]=$list1_num
t=$((t+1))
else
flag=0
fi
done
echo "-------------------------------打印数组差异---------------------------------------------------------------"
# for var in ${diff_list[@]}
# do
# echo "打印数组差异:"$var
# done
}
# 数组去重
function hasExist(){
length=${#diff_list[@]}
for (( i=0; i<$length; i++ )); do
for (( j=$(expr $length - 1); j>$i; j-- ));do
if [[ "${diff_list[$i]}" = "${diff_list[$j]}" ]];then
unset diff_list[$i]
fi
done
done
echo
index=0
for arr in ${diff_list[@]};do
array2[$index]=$arr
((index++))
done
echo
length=${#array2[@]}
for ((index=0;index<$length;index++))
do
echo "array2[$index]="${array2[$index]}
done
}
echo "-----------------------------以下是.m中包含的国际化字符串-----------------------------------"
#读取第一个参数
read_dir $1
# for var in ${arr1[*]}
# do
# echo "打印的内容:"$var
# done
echo "------------------------------以上是.m中包含的国际化字符串----------------------------------"
echo "----------------------------------------------------------------------------------------------"

echo "------------------------------以下是配置文件中包含的国际化字符串----------------------------------"
read_file
# for var in ${arr2[*]}
# do
# echo "打印的内容:"$var
# done
echo "------------------------------以上是配置文件中包含的国际化字符串----------------------------------"
echo "----------------------------------------------------------------------------------------------"

echo "-------------------------------以下是数组比较---------------------------------------------------------------"
check

echo "-------------------------------以下是数组去重---------------------------------------------------------------"
hasExist

执行脚本

1
sh check.sh 项目文件夹名称
-------------本文结束感谢您的阅读-------------
枫林飘雪 wechat
欢迎您扫一扫上面的微信订阅号,订阅我的博客!
坚持技术分享,您的支持将鼓励我继续创作!