iOS 迭代版本之多語言開發

wmm4033 8年前發布 | 9K 次閱讀 iOS開發 正則表達式 Objective-C開發

來自: http://www.cocoachina.com/ios/20160126/15091.html

如何辨別項目中的中文字符串?

既然要替換項目中使用到的中文字符串,那么前提就必須要先找到這些個字符串,然后將這些字符串,替換成我們定義的 , 為了替換方便,可將這些字符串自身作為 key , 這里不理解的不要緊,下面我還會講到。 既然是辨別中文字符串,那也就是說在項目文件中進行匹配查找,說到匹配,那就需要正則表達式了,用正則表達式匹配Xcode中的使用的中文字符串,使用 (@"[^"]*[u4E00-u9FA5]+[^" ]*?")s* 即可, 打開你的Xcode 試試看,切記find 后面的選項要選擇  Regular Expression , 默認選中的是 Text , 如圖

如何取出識別到的中文字符串?

我們已經知道如何識別項目中的字符串了,但是如何取出來使用呢? 這就需要遍歷項目中所有的指定后綴(e.g: .h、.m等)的文件,然后利用正則表達匹配所有使用到的中文字符串,并寫入文件中。為了方便起見,我將此過程寫了一個Mac客戶端 小應用 ,可直接將選中的項目中所有的中文字符串,導出到指定的路徑下;該應用還可以選擇對于重復出現的中文字符串進行處理,以及還可以將中文字符串導出為繁體;  小應用 更值得關注的是它導出的文件,可以直接拿來當做多語言文件中的 key=value 使用,非常簡單,喜歡的可以去 下載看看 , 含有源碼的哦;小應用運行圖如下:

如何使用取出的中文字符串?

已經拿到取出的中文字符串文件,這個文件是可以直接拿來用做多語言文件使用的,小應用導出的文件,只可以用于中文以及繁體多語言文件,而對于其他的語言,就需要你拿著導出的文件,找你們公司的翻譯人員,進行翻譯; 拿繁體版來舉個例子,導出來的繁體文件如下(收留我App導出的文件):

這個繁體文件,可以直接作為繁體多語言使用,如何想要翻譯成英文,可以將此文件拷貝一份,交給翻譯人員,讓其翻譯。翻譯的時候,你一定要給翻譯人員溝通好,讓其只翻譯 value , 也就是圖中 = 后面雙引號中的內容,格式什么的也不要讓他亂改,否則容易出現問題,導致key與value對不上號。 一切溝通妥當后,等翻譯把文件給你后,直接將文件中的內容,復制到多語言文件的英語文件中即可;

如何將項目中的中文字符串進行替換

多語言文件已經配置完成,到了這里,那么問題來了,我們只是取出項目中使用的中文字符串,然后將字符串封裝成多語言文件,但是對于項目中使用的中文字符串依然還是中文字符串,我們還并沒有進行替換處理。當然,這一步我們是不能夠忘了,由于是替換項目中所有的使用中文字符串,我們還是謹慎為好,首先將你的項目進行 備份、備份、備份 ,非常重要的事情說三篇,切記一定要備份。備份好后,我們就可以開始替換工作了,沒有備份的不要往下看了,趕緊備份去;

?假設你已經備份好了,你就可以開始替換工作了,前面我們說過讓中文字符串自身作為 key 進行替換,之所以讓其自身作為key, 是因為這樣可以大大減輕替換的困難度,而且還有利于代碼的可讀性,基本上算是保持原有代碼;既然要替換項目中的使用中文字符串,就要用到Xcode 自帶的字符串替換功能,首先還需要使用正則表達式 (@"[^"]*[u4E00-u9FA5]+[^" ]*?")s* ,匹配出項目中使用的中文字符串,然后在對其進行替換處理。

由于我們在 iOS 多語言版本的開發(二) 中,對取key對應的語言內容,進行了宏的封裝, 這里我們可以將匹配到的使用中文字符直接替換成我們定義的宏的使用

#define ASLocalizedString(key)  [NSString stringWithFormat:@"%@", [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:(key) value:nil table:@"ASLocalized"]]

以上是宏的定義,我們需要將字符串進行替換成宏的使用,如:

替換前是這樣的 _lbl.text = @"我是多語言";

替換后 _lbl.text = ASLocalizedString(@"我是多語言")

</div>

替換規則如圖:

這次選中的是 Replace , 不是 Find 。按圖中所示,選擇完畢后,點擊 ReplaceAll , 會出來一個彈框,不用管它直接繼續,即可,然后你在看項目中使用到的中文字符串是否已經替換掉了,到這里基本上大功告成了;

遺留問題

1、正則表達式,不懂得可以先照文章里寫就行,然后再去學習下, 這里有篇基礎文章

2、ASLocalizedString(key) , 該宏使用面積廣,可以將其定義成公共頭文件中,然后用時引用頭文件即可,也可將文件封裝進pch文件中,這樣無需使用頭文件接口使用

3、替換后,可能會有些地方報錯,command + b 編譯下,看看報錯的地方,進行相應修改即可。報錯原因:a. 可能是你定義的常量字符串; b. 可能是定義的宏; c. 可能是替換后沒有換行; 基本上報的錯誤很明顯,進行修改即可;

4、在迭代版本中,再次使用中文字符串,就需要使用 ASLocalizedString(key) , 來代替了,然后再多語言文件中,進行 key=value 配置;

原文地址: http://www.devashen.com/blog/2016/01/18/localized03/

作者博客地址: www.devashen.com

</div>

 本文由用戶 wmm4033 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!