國際化替換方案(一)

Bundle在本地化中的用法

NSBundle是用來獲取可執行資源的,經過bundle來定位具體的資源文件的位置,從而加載或執行代碼操做。而且每個能夠獲取到的bundle都是獨立的
xcode

獲取bundle本地化
bash

//獲取對應key字符串在表中的值
[[NSBundle mainBundle] localizedStringForKey:@"abc" value:nil table:@"Localized"];
//獲取當前使用第一語言
[[NSBundle mainBundle] preferredLocalizations][0];
//獲取應用默認development的語言
[[NSBundle mainBundle] developmentLocalization];
//返回頂部首選本地化
[NSBundle preferredLocalizationsFromArray:[[NSBundle mainBundle] localizations]];
//系統默認識別Localizable.strings表
NSLocalizedString(@"abc", nil);
//獲取自定義表
NSLocalizedStringFromTable(@"abc", @"Localizable", nil);複製代碼

本地資源國際化

1.字符串本地化

根據系統語言,識別不一樣的.lproj本地語言文件夾,替換對應的字符串文件佈局

1.新建Strings File文件ui

2.Project新增App語言(圖1示例)spa

3.本地化字符串文件列表(圖2示例)翻譯

3.設置字符串資源(圖4示例)3d

(1)能夠替換Info.plist文件,例如CFBundleDisplayName (更改App名稱)。
(2)也能夠替換內置字符串名稱。調試

"abc" = "111";//替換字符串
CFBundleDisplayName = "333";//替換info文件複製代碼

4.運行App
code





2.資源文件本地化

具體來講是在找到本地資源文件,進行替換成咱們對應的文件,如App圖標、修飾圖片等。cdn

圖片資源

1.統一管理圖片,使用本地化字符串方式,經過NSLocalizedString(key,comment)來獲取自定資源的圖片名稱
2.使用.lproj包來管理圖片資源,經過圖片名稱,來訪問不一樣語言包中的文件複製代碼

第二種實現思路

1.選擇須要本地化的圖片或拖拽一張圖片到你的App工程

2.點擊右邊欄Localization,勾選增長對應圖片的本地化(圖1示例)

因爲在此以前咱們爲項目工程添加過咱們須要的語言,每當生成一門本地化語言,系統會自動幫咱們生成一個本地化文件夾.lproj,用來管理不一樣語言的本地化資源

3.這裏成功勾選後,能夠看到左邊欄變成了一個摺疊列表(圖1示例)

4.爲不一樣語言包替換新的圖片(圖2示例)

此時的兩張圖片類似,show in finder進入它的.lproj文件夾,刪掉當前圖片文件而且拖入新的圖片,這時工程目錄中咱們使用的本地化圖片會報紅,由於找不到它對應路徑下的文件,咱們將圖片名稱更改成咱們使用的名稱,此時報紅取消一切正常




3.infoPlist配置本地化

1)新建Strings File文件,命名爲InfoPlist.strings

2)加入國際化語言

"CFBundleDisplayName"="MyApp";
"NSHumanReadableCopyright"="2016 Goldrush Computing Inc.版權全部。";複製代碼


4.storyboard/xib本地化

如圖1示例,有兩種本地化文件的方式:

(1)爲不一樣的語言環境使用單獨的storyboard / xib文件。(生成storyboard/xib文件)

(2)使用不一樣語言的字符串文件並提供翻譯文本。(生成.strings文件)


Interface Builder Cocoa Touch XIB/Interface Builder Storyboard

右側未選中的NIB本地化方式,左側爲Main.storyboard下本地化文件的格式,中間部分是新的stroyboard文件


Localizable Strings

右側爲選中NIB本地化文件的方式,左側爲Main.storyboard下本地化文件的格式,中間部分是生成本地化字符串的位置,寫法爲:

三個元素缺一不可:(1)控件類型,(2)屬性,(3)ObjectID
/* Class = "UILabel"; text = "zhong"; ObjectID = "dwh-91-MnC"; */
"dwh-91-MnC.text" = "zhong";//規範寫法複製代碼


最後咱們能夠這樣理解,若是您想爲特定本地化提供稍微不一樣的佈局效果,增長它的利用性使用單獨的Storyboard/ xib來呈現,可是相應的也將會增長大型項目的應用程序包大小和維護難度,除非絕對必要,不然不該該這樣作。

若是咱們在IB中更改了某些內容,strings不會更新文件,使用ibtool或AppleGlot(連接)來更新字符串文件


5.xcode調試語言環境

1.選中Edit Scheme,而後將Application Language--System Language更改成指定語言,能夠在用模擬器調試的時候不用手動切換系統語言,只是更改爲爲咱們應用須要的語言,在幾中語言切換時比較方便查看本地化的效果


2.使用AppleLanguages的方式,更改key也能切換App本地化語言(若是全都勾選只會讀取最上面的一個,若是上下兩種方法一塊兒實現,AppleLanguages的優先級 > System Language的優先級)


3.使用代碼在應用內部切換語言

//獲取當前應用全部的本地化語言
NSArray *langArr = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];
//獲取應用默認語言
NSString *language1 = langArr.firstObject;
//切換語言
NSArray *lans = @[@"en"];
[[NSUserDefaults standardUserDefaults] setObject:lans forKey:@"AppleLanguages"];複製代碼


6.Storyboard/ xib預覽調試

經過預覽Storyboard/ xib能夠作的事情不少,不只能夠查看本地化語言的顯示,同時也能夠查看不一樣機型的顯示效果,適合常常用NIB的開發者。須要注意的是,調試本地多語言的時候,只有經過Localizable Strings方式建立的本地化才能夠預覽效果。


服務端資源國際化

服務端國際化處理主要包括返回字段內信息、圖片和須要下載的資源文件等,處理方式分爲如下兩種:

  1. 服務端不關心當前用戶的本地化語言,返回全部適配的本地化內容,由客戶端本身控制顯示

    特色:返回全部國際化資源,由客戶端本身篩選

  2. 服務端獲取當前用戶的本地化信息,返回相應的本地化內容

    特色:只返回對應語言的資源,由服務端處理,優勢:過濾掉不須要的資源,客戶端的處理更簡單


總結思路:

全部nib、文本、資源的國際化均可以使用本地字符串方式,也能夠經過生成新替代文件的方式來作國際化。

相關文章
相關標籤/搜索