由于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.csdn.net/jasonblog/article/details/7299544

代码没用经过严格验证,请慎用。起码,没有检查该字符串是否已经加了NSLocalizedString宏。


:)

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐