iOS多语言处理

2020-05-17  本文已影响0人  livesxu

当项目中语言种类很多时,策略不对,多语言的的配置就会成为一个麻烦活。

手动处理风险太大,而且有不少语言都是倒序的,甚至在excel、android、iOS里面你看到的结果都是不一样的,这时候其实就是你看到的不是真的。就是你肉眼去辨认都辨认不出来的。

本文提供python脚本思路和处理示例:

1.利用python的csv模块读取和整理子串;

a.在收到子串excel后将其另存为csv格式,子串在csv中有指定格式(第一行是语种(android,因为android的语种较多一点,所以目录中使用的android语种名在iOS中做映射不同语种名和操作路径),第一列是key)

b.录入路径过程中对路径的空格做去除:filepath.rstrip()

2.

a.将key与值拼接成iOS多语言key-value格式

b.将同属于同一个语种的多个子串组合

"hello_key" = "hello";

"friend_key" = "friend";

3.根据语种找到对应的语种文件path,对语言文件进行写入操作

4.涉及单复数请看下面介绍,需要改步骤2.a中的拼接格式

多语言单复数字段说明

多语言单复数使用

5.代码示例:

import csv

import os

import re

# 获得csv文件路径

file_path = raw_input("Place input csv file path:")

file_path = file_path.rstrip()

print(file_path)

# 判断是否为csv文件

if not file_path.endswith('.csv'):

print('not csv file,check --> ' + file_path)

raise Exception("not csv file!")

# 定义处理结果文件用以核对

file_list = file_path.split('/')

file_list.pop()

file_list.append('outputHandle.csv')

file_path2 ='/'.join(file_list)

print(file_path2)

# 指定到多语言的总目录下

project_locs_path = raw_input("Place input language bundle file path:")

project_locs_path = project_locs_path.rstrip()

if not project_locs_path.endswith('/'):

project_locs_path +='/'

print(project_locs_path)

# 代码中添加注释

mark_str = raw_input("Place input mark for action:")

print(mark_str)

if os.path.exists(file_path):

print("123 - go")

with open(file_path, "rb")as fr:

csv_reader = csv.reader(fr)

data = []# 获得csv中的数据

        for rowin csv_reader:

data.append(row)

savedatas = []# 将key与值拼接成iOS多语言key-value格式

        for index, itemin enumerate(data):

if index ==0 or len(item[0]) >0:

for indexj, jin enumerate(item):

if index !=0 and indexj !=0:

item[indexj] ='"' + item[0] +'" = "' + item[indexj] +'";'

                savedatas.append(item)

comdatas = []# 将同属于同一个语种的多个子串组合

        first_item = savedatas[0]

next_item = []

for t, strin enumerate(first_item):

column_t = []

for index, itemin enumerate(savedatas):

if index !=0:

column_t.append(item[t])

column_str ='\n'.join(column_t)# 使用换行符将多个子串组合,同时对子串中不合理的字符替换

            column_str = re.sub(r'<subnode.*?>', '', column_str)

column_str = column_str.replace(r'</subnode>', '')

column_str = column_str.replace(r'$s', '$@')

column_str = column_str.replace(r'%s', '%@')

next_item.append(column_str)

comdatas.append(first_item)

comdatas.append(next_item)

print(savedatas)

with open(file_path2, "wb")as f:

writer = csv.writer(f)

writer.writerows(comdatas)

print("csv -- " + file_path2)

print('prepare in project...')

# 每个语种对应的在iOS中的名称,因为跟android用的同一套,android语种较多,所以根据他们进行的处理

        loc_map = {'values':'en',

                  'values-zh-rCN':'zh-Hans',

                  'values-az-rAZ':'az',

                  'values-b+sr+Latn':'sr',

                  'values-bo-rCN':'bo',

                  'values-en-rGB':'en-GB',

                  'values-es-rUS':'es-419',

                  'values-eu-rES':'eu',

                  'values-gl-rES':'gl',

                  'values-iw':'he',

                  'values-in':'id',

                  'values-ka-rGE':'ka',

                  'values-km-rKH':'km',

                  'values-my-rMM':'my-MM',

                  'values-my-rZG':'my-ZG',

                  'values-pt-rPT':'pt-PT',

                  'values-si-rLK':'si',

                  'values-uz-rUZ':'uz',

                  'values-zh-rHK':'zh-Hant-HK',

                  'values-zh-rTW':'zh-Hant-TW',

                  }

total_num = []

for t, strin enumerate(first_item):

new_str =''

            if loc_map.has_key(str):

new_str = loc_map.get(str)

else:

new_str = str.replace('values-', '')

loc_path = project_locs_path + new_str +'.lproj/Localizable.strings'  # 得到每个语种对应的操作文件的路径

            if os.path.exists(loc_path):

print('prepare handle path --> ' + loc_path)

total_num.append(new_str)

ap_str = comdatas[1][t]

with open(loc_path, "ab")as f:

f.writelines('\n//' + mark_str +'\n')# 写入注释

                    f.writelines(ap_str)# 写入子串

                    f.close()

print(new_str +'handle end. please check.')

print(len(total_num))

else:

print('csv file not exist,check --> ' + file_path)

上一篇下一篇

猜你喜欢

热点阅读