成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

iOS應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言-創(chuàng)新互聯(lián)

iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

分類: IOS開發(fā)工作筆記2013-12-07 18:21 1161人閱讀 評論(0) 收藏 舉報

創(chuàng)新互聯(lián)建站是一家專注于成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計與策劃設(shè)計,大方網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:大方等地區(qū)。大方做網(wǎng)站價格咨詢:18980820575

前言:網(wǎng)絡(luò)上關(guān)于iOS國際化的文章很多,但基本上都是基于跟隨系統(tǒng)語言的國際化,筆者就不贅述了-0 –

今天要講的是不跟隨系統(tǒng)的切換語言版本方案,即程序內(nèi)部的切換語言版本方案。

一、總則:

      應(yīng)用內(nèi)部語言不跟隨系統(tǒng)語言,由應(yīng)用自己進(jìn)行控制,通過配置多個語言文件,根據(jù)用戶的選擇動態(tài)獲取不同文件夾下的語言文件,顯示在界面上。

      最后把用戶選擇的語言持久化到本地,下次運(yùn)行時讀取。

二、應(yīng)用內(nèi)的國際化

1、新建工程

     新建Single View Application工程,取名為MyInternational。

                                                      iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

2、添加多語言文件

     我們選擇使用自己的語言文件,而不是系統(tǒng)的localizable.string,因為在項目開發(fā)使用svn時,多人操作同一文件可能會造成沖突。

在Resource中添加新的Strings File:

                                                          iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

     取名為hello(記得Targets要勾選項目)

                                                      iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

     新建完成之后會生成hello.string文件,把它拖進(jìn)Supporting Files里。

3、配置hello.string國際化

     首先配置剛才的hello.string文件。

     點擊hello.strings文件,點擊圈中的Make localized(本地化)。

                                                    iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

   只有English,沒關(guān)系點擊確定。

                                                                iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

4、配置項目國際化

     網(wǎng)絡(luò)上很多配置方法不靠譜,因為新版的Xcode位置“+”號的位置換了,這里教大家正確的方法,點擊項目—>選擇Project—>選擇Info—>點擊“+”號。

                                       iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

     點擊“+”號后,添加中文,當(dāng)然也可以添加其他的語言,彈出對話框,infoPlist是配置系統(tǒng)的國際化文件,可以配置圖標(biāo)之類的多語言環(huán)境,不屬于本文范圍,nib文件看需要配,這里選擇不配。

                                                      iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

     配置完成之后,再看hello.string便分成了兩個文件。

                                                                                 iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

     完成上面的四步便完成了項目內(nèi)的多語言環(huán)境配置,下面來看看代碼怎么寫。

5、添加需要的字符串

     分別在hello.strings(English)與hello.strings(Chinese)里面添加對應(yīng)語言的字符串。

     字符串的格式為“key”=“value”;鍵值對(別忘記分號?。?/p>

     接下來配置項目需要的字符串,一個用于lable的顯示,一個用于button的顯示。

   hello.strings(English)

   "invite" ="hello atany,come to join in us!";

  "buttonInfo" ="change Language";

   hello.strings(Chinese)

   "invite" ="你好 atany,快來加入我們吧!";

   "buttonInfo" ="切換語言";

6、看看流程

                                                     iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

【實現(xiàn)思路:】

     在初始化首個Controller的時候,進(jìn)行應(yīng)用語言的加載。首次加載因為userLanguage(應(yīng)用內(nèi)語言)不存在,則使用系統(tǒng)當(dāng)前的語言,保存到userlanguage,下次直接讀。讀出來之后,獲取到對應(yīng)文件路徑,得到文件的索引,儲存到工具類InternationalControl的靜態(tài)變量bundle中。

其他地方需要用字符串時,用工具類獲得bundle即可讀取相應(yīng)文件中的字符串。

7、新建工具類InternationalControl

                        iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

InternationalControl.h

[cpp] view plaincopy

  1. #import <Foundation/Foundation.h>

  2. #import <UIKit/UIKit.h>

  3. @interface InternationalControl : NSObject

  4. +(NSBundle *)bundle;//獲取當(dāng)前資源文件

  5. +(void)initUserLanguage;//初始化語言文件

  6. +(NSString *)userLanguage;//獲取應(yīng)用當(dāng)前語言

  7. +(void)setUserlanguage:(NSString *)language;//設(shè)置當(dāng)前語言

  8. @end

InternationalControl.m

1)創(chuàng)建靜態(tài)變量bundle,以及獲取方法bundle(注:此處不要使用getBundle)。

[cpp] view plaincopy

  1. static NSBundle *bundle = nil;

  2. + ( NSBundle * )bundle{

  3.     return bundle;

  4. }

2)初始化方法:

 userLanguage儲存在NSUserDefaults中,首次加載時要檢測是否存在,如果不存在的話讀AppleLanguages,并賦值給userLanguage。

[cpp] view plaincopy

  1. +(void)initUserLanguage{

  2.     NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

  3.     NSString *string = [def valueForKey:@"userLanguage"];

  4.     if(string.length == 0){

  5.         //獲取系統(tǒng)當(dāng)前語言版本(中文zh-Hans,英文en)

  6.         NSArray* languages = [def objectForKey:@"AppleLanguages"];

  7. <pre class="cpp" name="code">        NSString *current = [languages objectAtIndex:0];

  8.         string = current;

  9.         [def setValue:current forKey:@"userLanguage"];

  10.         [def synchronize];//持久化,不加的話不會保存

  11. }

  12.     //獲取文件路徑

  13.     NSString *path = [[NSBundle mainBundle] pathForResource:string ofType:@"lproj"];

  14.     bundle = [NSBundle bundleWithPath:path];//生成bundle

  15. }

  16. </pre>

3)獲得當(dāng)前語言方法

[cpp] view plaincopy

  1. +(NSString *)userLanguage{

  2.     NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

  3.     NSString *language = [def valueForKey:@"userLanguage"];

  4.     return language;

  5. }

4)設(shè)置語言方法

[cpp] view plaincopy

  1. +(void)setUserlanguage:(NSString *)language{

  2.     NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

  3.     //1.第一步改變bundle的值

  4.     NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj" ];

  5.     bundle = [NSBundle bundleWithPath:path];

  6.     //2.持久化

  7.     [def setValue:language forKey:@"userLanguage"];

  8.     [def synchronize];

  9. }

8、拖nib,配置點擊事件

一個button,一個label,button用于切換語言,label用于顯示信息。

                                                                    iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

9、配置加載的第一個Controller,這里是YGViewController

YGViewController.h

[cpp] view plaincopy

  1. #import <UIKit/UIKit.h>

  2. @interface YGViewController : UIViewController

  3. @property (retain, nonatomic) IBOutlet UILabel *inviteLabel;//label

  4. - (IBAction)changeLanguage:(id)sender;//點擊事件

  5. @property (retain, nonatomic) IBOutlet UIButton *btChange;//button

  6. @end

YGViewController.m

1)加載:

[cpp] view plaincopy

  1. - (void)viewDidLoad

  2. {

  3.     //注冊通知,用于接收改變語言的通知

  4.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeLanguage) name:@"changeLanguage" object:nil];

  5.     [InternationalControl initUserLanguage];//初始化應(yīng)用語言

  6.     NSBundle *bundle = [InternationalControl bundle];

  7.     NSString *inviteMsg = [bundle localizedStringForKey:@"invite" value:nil table:@"hello"];

  8.     NSString *buttonInfo = [bundle localizedStringForKey:@"buttonInfo" value:nil table:@"hello"];//table為hello.string的文件名

  9.     [_btChange setTitle:buttonInfo forState:UIControlStateNormal];

  10.     _inviteLabel.text = inviteMsg;

  11.     [super viewDidLoad];

  12. }

2)點擊修改語言方法

[cpp] view plaincopy

  1. - (IBAction)changeLanguage:(id)sender {

  2.     NSString *lan = [InternationalControl userLanguage];

  3.     if([lan isEqualToString:@"en"]){//判斷當(dāng)前的語言,進(jìn)行改變

  4.         [InternationalControl setUserlanguage:@"zh-Hans"];

  5.     }else{

  6.         [InternationalControl setUserlanguage:@"en"];

  7. }

  8.     //改變完成之后發(fā)送通知,告訴其他頁面修改完成,提示刷新界面

  9.     [[NSNotificationCenter defaultCenter] postNotificationName:@"changeLanguage" object:nil];

  10. }

3)接收到通知執(zhí)行方法,刷新界面

[cpp] view plaincopy

  1. -(void)changeLanguage{

  2.     [_btChange setTitle:[[InternationalControl bundle] localizedStringForKey:@"buttonInfo" value:nil table:@"hello"] forState:UIControlStateNormal];

  3.     _inviteLabel.text =[[InternationalControl bundle] localizedStringForKey:@"invite" value:nil table:@"hello"];

  4. }

如果有多個界面的話,需要每個界面都配置接收通知,用于修改界面。

10、運(yùn)行界面

                                                                             iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

                                                                             iOS 應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言

可以看到點擊切換語言之后,語言切換成功。

退出程序再次進(jìn)入,保留了上次選擇的語言。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站題目:iOS應(yīng)用程序內(nèi)部國際化,不跟隨系統(tǒng)語言-創(chuàng)新互聯(lián)
文章來源:http://jinyejixie.com/article2/jgioc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站服務(wù)器托管、定制開發(fā)網(wǎng)站排名、App開發(fā)手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
天峨县| 刚察县| 高平市| 拉孜县| 永康市| 正安县| 乳源| 左云县| 枣庄市| 全州县| 旬阳县| 白水县| 玉溪市| 万年县| 乐安县| 上杭县| 乌拉特前旗| 大丰市| 准格尔旗| 万年县| 元氏县| 嘉义市| 连州市| 来安县| 体育| 长顺县| 龙井市| 阿克| 寻乌县| 宁夏| 三台县| 宣化县| 咸丰县| 张家口市| 祁阳县| 会宁县| 商都县| 惠安县| 儋州市| 忻城县| 湖北省|