由于Xcode对中文支持良好,所以在开发过程中经常直接使用中文字符串。
不过苹果推荐多语言化,需要为中文字符串添加个NSLocalizedString宏。
#!/usr/bin/python # -*- coding: utf-8 -*- ''' Localization The Objective-C Code @"..." --> NSLocalizedString(@"...", nil) Jason Lee 2012-03-01 ''' import os, sys import re import codecs targetPattern = re.compile('@"[^"]+"') global newFile, newFilePointer def isChineseCharacter(ch): return 0x4e00 <= ord(ch) <= 0x9fa5 def hasChineseCharacter(str): for char in str: if isChineseCharacter(char): return True return False def buildNewString(oldStr): newStrPrefix = 'NSLocalizedString(' newStrSuffix = ', nil)' newStr = newStrPrefix + oldStr + newStrSuffix return newStr def processLine(line): global newFile, newFilePointer matchResult = targetPattern.findall(line) for result in matchResult: if hasChineseCharacter(result): #print result, buildNewString(result) p = re.compile(result) line = p.sub(buildNewString(result), line) newFilePointer.write(line) def processFile(filename): #Xcode file is saved with utf-8 global newFile, newFilePointer newFile = 'Replaced.' + filename newFilePointer = codecs.open(newFile, 'wb', 'utf-8') fp = codecs.open(filename, 'rb', 'utf-8') for line in fp: processLine(line) fp.close() newFilePointer.close() oldFile = 'Old.' + filename os.system('mv ' + filename + ' ' + oldFile) os.system('mv ' + newFile + ' ' + filename) #os.system('rm -f ' + oldFile) if __name__ == "__main__": if len(sys.argv) > 1: output = os.popen('ls ' + sys.argv[1]).read() filelist = re.split('\n', output) filelist = filelist[:-1] #print filelist print 'Localizing...' for file in filelist: if os.path.exists(file): try: #print 'Processing File :', file processFile(file) except Exception as e: print e print 'Localization Done.'之后需要做的事情参考:http://blog.youkuaiyun.com/jasonblog/article/details/7299544
代码没用经过严格验证,请慎用。起码,没有检查该字符串是否已经加了NSLocalizedString宏。
:)