老青菜

iOS 快速国际化

2015-10-29

IOS APP国际化一般是通过Localizable.strings来实现。
过程很简单:
1.先选择xib或者.strings文件,在右侧属性选择器中Localize下选择自己需要的语言,最终在每个语言文件夹下生成对应语言的文件

# 繁体
/zh-Hant.lproj/Localizable.string    
# 简体
/zh-Hans.lproj/Localizable.string     
# 英文
/en.lproj/Localizable.string

2.在代码里,我们使用 宏

NSLocalizedString
NSLocalizedStringFromTable 
...
#我们重新宏定义下,这样使用起来方便一点
#define LOC(a) NSLocalizedStringFromTable(a, @"XXLocalizable", @"")

这样我们就可以这样使用

LOC(@”号”)

字符串提取


这样会有一个问题,字符串的翻译和维护带了了巨大的工作量。为了避免人工提取、翻译字符串,为此我写了 一套python脚本 ,主要做下面这些事情:

.对比已经有的字符串文件 XXLocalizable.string,找出项目中增量字符串。
.进行翻译,并且保存哥哥语言的文件。
.对比代码,找出XXLocalizable.string 多余的字符串,并删除。

其实就是一个循环遍历的过程。我们先看一下我们脚本结构:

参数定义

KDMacor.py文件主要是一些参数定义

# -*- coding:utf-8 -*-
'''
Created on Dec 24, 2014

@author: naruto
'''
#需要检索的路径 '/doc/workspace/java/ConvertLanguage/src/test'
KD_ROOT_PATH = '/Users/Green/doc/workspace/taxi4.0'
#不需要检索的文件夹
KD_CONVERT_NO_DOC = ',Resources,CoreData,'
#检索的文件类型
KD_CONVERT_FILE_TYPE = ',.h,.m,.mm,.c,'
#过滤的文件
KD_CONVERT_NO_FILE = ',Localizable.strings,'
#文件路径(不需要检索的字符串)
KD_CONVERT_NO_STRING_FILE = '/Users/Green/doc/workspace/taxi4.0/KDTaxicab/en.lproj/Localizable.strings'
if __name__ == '__main__':
print('请运行 main.py')

提取字符串

ConvertLang.py文件:循环比较文件内容,提取字符串

翻译

LangConv.py文件:把简体转成繁体
jft.py文件:简体繁体编码表

main

main.py文件:脚本入口

'''
Created on Jan 6, 2015

@author: naruto
'''

from curses.ascii import NUL
import KDMacor
import ConvertLang


if __name__ == '__main__':
objConv=ConvertLang.ConvertLang()
print('开始加载字符串黑名单...')
objConv.loadBlackList(KDMacor.KD_CONVERT_NO_STRING_FILE)
print('开始检索目录...')
objConv.searchDocument(KDMacor.KD_ROOT_PATH)
print('开始保存简体字符串...')
objConv.saveLocaleData(objConv.listLocale,'Hans')
print('开始保存繁体字符串...')
objConv.saveHantLocaleData(objConv.listLocale,'Hant')
del objConv

使用方式:

#终端执行
python ./ExtractString/main.py

Tags: objc
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章