iOS 語言切換、本地化,國際化,ios本地化

來源:互聯網
上載者:User

iOS 語言切換、本地化,國際化,ios本地化

什麼是本地化處理?

本地化處理就是我們的應用程式有可能發布到世界的很多國家去,因為每個國家應用的語言是不一樣的,所以我們要把我們的應用程式的語言要進行本地化處理一下。

本地化處理需要處理那些檔案?

(1):本地化應用程式名稱(我的的項目名稱)

(2):本地化字串處理(項目中所涉及的字串)

(3):本地化圖片

(4):XIB檔案本地化處理

(5):其他檔案

下面進行本地化處理:

1 . 設定我們的工程支援多語言

為什麼:因為只有設定成支援多語言了,我們才能在展示項目名稱和項目中的字串等將語言進行切換

(1): 首先建立一個項目,以“蘋果”為項目名做測試

(2):為工程添加可支援的語言,只有項目具有我們想要用的語言,我們才能講項目切換成這種語言


 

2:設定項目名稱本地化處理

(1):InfoPlist.strings檔案是對我們應用程式的名字進行管理的

(2):設定InfoPlist.strings其實很簡單,就是藉助我們上一步設定的語言環境,將我們想要支援的語言添加到InfoPlist.strings檔案之下就可以了

(3):添加過程:

 


 

 


 

(4)接下來我們只需要將CFBundleDisplayName屬性和它所對應的值分別寫在我們在InfoPlist下建立的檔案中

例如:

在InfoPlist.strings(English)中我們寫入:CFBundleDisplayName = "apple";

在InfoPlist.strings(Chinese(Simplified))中我們寫入:CFBundleDisplayName = "蘋果";

在InfoPlist.strings(English)中我們寫入:CFBundleDisplayName = "リンゴ";

注意:後面的“”前面不加@

(5):在Info.Plist檔案中添加一個屬性Application has localized display name然後設定成Boolean類型的Yes就可以了

 


 

(6):在模擬器中更改模擬器的語言就會看到以下三種效果:

 


 

 


 

 


 

3:本地化字串處理(項目中所涉及的字串)

提示:本地化字串處理和2中講的項目名本地化處理基本上是一樣的,只不過我們需要在建立一個像Info.Plist檔案一樣的檔案來管理我們的本地化字串

就是建立一個Localizable.strings檔案,然後同樣是在這個檔案夾下建立多種支援語言

 

在Xcode項目中,在你想要的位置建立檔案

 然後選中當前檔案,屬性中 點擊 "Localiztion"->"Localize..." ->勾選語言

 

 

 

(1):建立Localizable.strings檔案的方式和上面建立Info.Plist的方式是一樣的,只是檔案名稱不一樣

(2):在Localizable.strings檔案下添加支援的語言

 


 

(3):然後我們在Localizable.strings下得各個檔案添加類似於如下的內容:

例如:

Localizable.strings(English)中       “Login”=“Login”;

Localizable.strings(Chinese(Simplified)) 中   “Login” = “登陸”;

Localizable.strings(Japanese) 中  “Login” = “登録”;

然後有人可能問了我們每個等號前的"Login"是怎麼確定的? :往下看

然後我們怎麼用呢?

就是每次我們在用到我們設定的字串的時候不用NSString了,我們需要用到一個函數代替它:NSLocalizedString(key, comment) 

例如我們要再一個Button上設定主題:button.title = NSLocalizedString(@“Login”, nil);

這個裡面的@“Login”就會自動檢索於裝置相同語言的Localizable.strings下得檔案夾,然後在裡面找到與@“Login”相同的Key值,然後就輸出出來

其實我們在Localizable.strings下得檔案夾中設定的內容就像一個字典一樣,前面是Key值後面是對應的值,然後就是通過NSLocalizedString(@“Login”, nil);函數進行檢索,將key對應的值返回過來。

有人會文NSLocalizedString(key, comment)中的comment是什麼,很明顯根據字義判斷是注釋的意思

 


 

總結:

其實很簡單,就是我們把Localizable.strings下面設定好我們所需要的語言,然後我們在將我們在項目中用到的字串都用"Three"="3";的形式整理到各個對應的檔案裡面,然後我們要是用到我們需要的字串的時候我們就通過NSLocalizedString(key, comment)函數以key值的形式找裡面的值,然後將我們自己設定的語言對應的值展現出來,這就是本地化處理



文/深山老林飛(簡書作者)
原文連結:http://www.jianshu.com/p/b053bbd8c339

【自己的補充】

  

如果是自己的應用本地需要做語言切換的話,實現邏輯如下

 

1.配置的語言

#define lang_en @"en"#define lang_zh_hans @"zh-Hans"#define lang_zh_hant @"zh-Hant"

  下面的方法中languageCode: 就是這幾個值, 其他語言的不做闡述

2.通過當前選擇的語言調用相應語言字串

/** *  擷取國際化字串值 * *  @param key <#key description#> */- (NSString*)localeStringWithKey:(NSString*)key{    // Get the language code.    NSString *languageCode = self.language;        // Get the relevant language bundle.    NSString *bundlePath = [[NSBundle mainBundle] pathForResource:languageCode ofType:@"lproj"];    NSBundle *languageBundle = [NSBundle bundleWithPath:bundlePath];        // Get the translated string using the language bundle.    NSString *translatedString = [languageBundle localizedStringForKey:key value:@"" table:nil];        if (translatedString.length < 1) {                // There is no localizable strings file for the selected language.        translatedString = NSLocalizedStringWithDefaultValue(key, nil, [NSBundle mainBundle], key, key);    }        return translatedString;}

  

Swift:

//擷取國際化enum AppLanguage:String{    case en = "en"    case zh_Hans = "zh-Hans"    case zh_Hant = "zh-Hant"}func localString(key:String) -> String{    // Get the language code.    let languageCode = XPApplication.shareInstance.language        // Get the relevant language bundle.    let bundlePath = NSBundle.mainBundle().pathForResource(languageCode, ofType: "lproj")    let languageBundle = NSBundle.init(path: bundlePath!)        // Get the translated string using the language bundle.    var translatedString = languageBundle?.localizedStringForKey(key, value: "", table: nil)        if translatedString?.length < 1 {                // There is no localizable strings file for the selected language.        translatedString = NSLocalizedString(key, tableName: nil, bundle: NSBundle.mainBundle(), value: key, comment: key)    }        return translatedString!;}

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.