iOS 程序內語言切換 -- 中英文切換

隨着時代的發展,應用程序相繼出現了不一樣語言的版本方案,中文,英文,法文,韓文等等;想在應用程序中實現語言的自由切換,須要配置多個語言的文件,根據用戶的動態選擇獲取不一樣語言文件下的語言文件,從而顯示到界面上面。這裏先說中英文的切換,至於其餘語言操做複製便可!!!工具

1.新建工程之類的就不用說了,配置項目本地化支持簡體中文和英文post

      工程-PROJECT-info->Localizations,點「+」,選擇(Chinese(Simplified))添加簡體中文,英文Xcode自帶有(English),因此不須要再次添加。(點擊添加彈出語言菜單,便可選擇你所須要的語言)ui

 

 

2.如今能夠添加多語言文件了。代理

   注意:須要手動切換語言,而不是根據系統語言變換,因此命名不能與系統語言文件同名,即Localizable.strings;code

本身隨意命名,後綴是.strings,必定要記得Targets要勾選項目orm

3.配置English.strings本地化,如今支持中文和英文。server

  (1)選中English.strings文件,查看右邊欄中的信息;(2)點擊Localization中的按鈕,彈出框中顯示出前面添加的語言;(3)選擇中文和英文,base選項無關緊要,blog

 

勾選以後,English.strings中多出了兩個文件繼承

 

 

完成以後即是完成了項目內多語言環境的配置,下面看一下這兩個文件中應該怎樣寫事件

4.文件中添加兩個須要的字符串

中文:

"change_language" = "悄悄是別離的笙簫,沉默是今晚的康橋";

"button" = "切換語言";

英文:
"change_language" = "Quietness is my farewell music, silence is Cambridge tonight";

"button" = "Change Language";

 

5.配置環境已經完成,如今看看代碼怎麼寫????

(1)新建立工具類,繼承自NSObject(在這裏我命名爲ChangeLanguage)

(2)ChangeLanguage.h

+(NSBundle *)bundle;//獲取當前資源文件

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

+(NSString *)userLanguage;//獲取應用當前語言

+(void)setUserlanguage:(NSString *)language;//設置當前語言

 

ChangeLanguage.m
static NSBundle *bundle = nil;

+ ( NSBundle * )bundle{

    

   return bundle;

}

 

//首次加載的時候先檢測語言是否存在

+(void)initUserLanguage{

    

    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

    

    NSString *currLanguage = [def valueForKey:LocalLanguageKey];

    

    if(!currLanguage){

        NSArray *preferredLanguages = [NSLocale preferredLanguages];

        currLanguage = preferredLanguages[0];

        if ([currLanguage hasPrefix:@"en"]) {

            currLanguage = @"en";

        }else if ([currLanguage hasPrefix:@"zh"]) {

            currLanguage = @"zh-Hans";

        }else currLanguage = @"en";

        [def setValue:currLanguage forKey:LocalLanguageKey];

        [def synchronize];

    }

    

    //獲取文件路徑

    NSString *path = [[NSBundle mainBundle] pathForResource:currLanguage ofType:@"lproj"];

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

}

 

//獲取當前語言

+(NSString *)userLanguage{

    

    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

    

    NSString *language = [def valueForKey:LocalLanguageKey];

    

    return language;

}


//設置語言
+(void)setUserlanguage:(NSString *)language{

    

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    NSString *currLanguage = [userDefaults valueForKey:LocalLanguageKey];

    if ([currLanguage isEqualToString:language]) {

        return;

    }

    [userDefaults setValue:language forKey:LocalLanguageKey];

    [userDefaults synchronize];

 

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

    bundle = [NSBundle bundleWithPath:path];

}


6.如今方法已經寫完,下面就來檢測一下是否好用吧
(1)拖拽storyboard,設置點擊事件(storyboard方便,簡單)

(2)ViewController.m

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

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

    //初始化應用語言

    [ChangeLanguage initUserLanguage];

    NSBundle *bundle = [ChangeLanguage bundle];

    /*

     localizedStringForKey:@"change_language" value:nil table:@"English"

     

     localizedStringForKey:各個語言文件中共同的名稱

     table: English.strings 多語言文件夾的名稱

     */

    NSString *str = [bundle localizedStringForKey:@"change_language" value:nil table:@"English"];

    NSString *buttonStr = [bundle localizedStringForKey:@"button" value:nil table:@"English"];

    [_changeButton setTitle:buttonStr forState:UIControlStateNormal];

    _languageLabel.text = str;

    

}

//切換語言的點擊方法

- (IBAction)change:(id)sender {

    //修改語言

    NSString *language = [ChangeLanguage userLanguage];

    if ([language isEqualToString:@"en"]) {

        [ChangeLanguage setUserlanguage:@"zh-Hans"];

    }else{

        [ChangeLanguage setUserlanguage:@"en"];

    }

    

    [[NSNotificationCenter defaultCenter] postNotificationName:@"changeLanguage" object:self];

}

 

//點擊改變語言,代理方法刷新界面

- (void)changeLanguage{

    [_changeButton setTitle:[[ChangeLanguage bundle] localizedStringForKey:@"button" value:nil table:@"English"] forState:UIControlStateNormal];

    _languageLabel.text =[[ChangeLanguage bundle] localizedStringForKey:@"change_language" value:nil table:@"English"];

}

//適當的位置移除通知

- (void)dealloc{

    [[NSNotificationCenter defaultCenter] removeObserver:self];

}

 

7.下面就來兩張運行的界面界面吧

 

 


語言切換成功以後,推出程序從新運行就能夠看到保留了上次選擇的語言。。

法文,韓文等等其餘語言皆是如此,只要寫好語言文件便可!

相關文章
相關標籤/搜索