你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS 迭代版本之多語言開發

iOS 迭代版本之多語言開發

編輯:IOS開發基礎

1.jpg

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

既然要替換項目中使用到的中文字符串,那麼前提就必須要先找到這些個字符串,然後將這些字符串,替換成我們定義的, 為了替換方便,可將這些字符串自身作為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(@"我是多語言")

替換規則如圖:

多語言

這次選中的是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

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved