第一推薦一篇金先生的博客,受益非淺,在這裏真誠的感謝正則表達式
https://www.jianshu.com/p/7cb0fad6d06f金小白工具
首先金小白先生把兩種方式都作了介紹,第一種我就不在過多詳細的講解,主要針對已有項目所出現的問題給介紹一下搜索引擎
總結兩點就是:spa
1. 在代碼裏用NSLocalizedString獲取要本地化的字符串
2. 用genstrings掃描代碼文件,生成Localizable.strings,而後加到工程中。 .net
那麼如何具體操做呢,這裏講解一下。命令行
一,在代碼裏用NSLocalizedString獲取要本地化的字符串翻譯
正則搜索項目中全部的中文(首先,咱們須要一個正則,去匹配工程中全部須要替換的文本。若是你不太瞭解正則,點我點我!!。)
code
下面這個正則能夠匹配到全部符合OC字符串格式的包含有中文的字符串。若是你用Swift,請去掉@。
htm
@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?"
而後,重點來了。Command+Shift+F,進入全局搜索引擎,切換爲Replace模式,並把匹配模式改成Regular Expression。blog
在搜索條件裏輸入(@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?")
,在下面替換內容裏輸入NSLocalizedString($0, nil)
。此處正則表達式兩邊加括號的目的是爲了可以在替換時用$1
獲取原有字符串的值,在替換時把原有值放入宏定義內key的位置。而後,搜索,能夠看到搜索結果,點擊Replace All
,便可完成替換。
箭頭位置都是可選的,最後一個箭頭,是選擇工程,能夠除去pod裏的文件。 能夠先替換一個試試效果
二. 用genstrings掃描代碼文件,生成Localizable.strings,而後加到工程中。
替換完了原有字符串,下面就是生成多語言文件了。做爲一個文藝程序猿,我是不可能一處一處的把項目中的字符串挑出來再寫到Localizable.strings文件裏的。
好在Xcode自帶了一個命令行工具genstrings。咱們能夠利用這個工具生成所需的多語言文件。
首先,咱們須要先新建所需語言的文件夾。
cd 工程目錄
mkdir en.lproj
mkdir zh-Hans.lproj
而後,遍歷全部.m
文件,根據每一個文件內的須要國際化的字符串生成key和value。
find . -name "*.m" | xargs genstrings -o en.lproj find . -name "*.m" | xargs genstrings -o zh-Hans.lproj
此時,en.lproj
和zh-Hans.lproj
文件夾中就應該有了相應的Localizable.string文件了。
咱們把這兩個文件夾拖到工程裏,而後在相應的Localizable.strings文件中,修改每一個key所對應的value值就好了(這個應該是翻譯乾的事兒)。
至此,項目的國際化已經適配完成。
⚠️ 這裏重點說一下,有的童鞋老是出現這樣那樣的錯誤,不是不能寫入就是文件不支持,這裏你要把你的 lib/Tool/Supporting Files的文件夾先移出來放在根目錄下, 把 en.lproj
和zh-Hans.lproj
文件夾放在你的Controller模塊,解析你Controller中的.m文件,而後再把en.lproj
和zh-Hans.lproj
文件夾 拖到項目中。ok~~