iOS應用內切換多國語言


 

 

 

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

      工程-PROJECT-info->Localizations,點“+”,選擇(Chinese(Simplified))添加簡體中文,英文Xcode自帶有(English),所以不需要再次添加。(點擊添加彈出語言菜單,即可選擇你所需要的語言)

 

2.現在可以開始添加多語言文件了。

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

自己隨意命名,后綴是.strings,一定要記得Targets要勾選項目。

 

3.配置English.strings本地化,現在支持中文和英文。

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

 

勾選之后,English.strings中多出了兩個文件

 

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

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

中文:

 

"change_language" = "大家好,我叫陳明";

 

"button" = "切換語言";

英文:

 

"change_language" = "Hello,My name is Magellan";

 

"button" = "Change Language";

 

5.配置和語言配置表寫好后,接下來開始具體運用到業務中。

(1)新創建工具類,繼承自NSObject(在這里我命名為SwichLanguage)

(2)SwichLanguage.h

 

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

 

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

 

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

 

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

 

SwichLanguage.m 文件中

 

#import "SwichLanguage.h"

static NSString*LocalLanguageKey = @"SwitchLanguage";

@implementation SwichLanguage

 

 

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,設置點擊事件

(2)ViewController.m

 

#import "ViewController.h"

#import "SwichLanguage.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIButton *changeButton;

@property (weak, nonatomic) IBOutlet UILabel *languageLabel;

@end

 

@implementation ViewController

 

- (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];

    

    //初始化應用語言

    

    [SwichLanguage initUserLanguage];

    

    NSBundle *bundle = [SwichLanguage bundle];

    

    /*

     

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

     

     

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

     

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

     

     */

    

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

    _languageLabel.text = str;

    

    

}

 

//切換語言的點擊方法

 

- (IBAction)changeLanguage:(id)sender {

    

    //修改語言

    

    NSString *language = [SwichLanguage userLanguage];

    

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

        

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

        

    }else{

        

        [SwichLanguage setUserlanguage:@"en"];

        

    }

    

    

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

    

}

 

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

 

- (void)changeLanguage{

    

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

    

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

    

}

 

//適當的位置移除通知

 

- (void)dealloc{

    

    [[NSNotificationCenter defaultCenter] removeObserver:self];

    

}

 

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

 

@end

 

7.一切完成之后,我們可以運行看下效果

 

 

 

切換成功之后,推出程序重新運行就可以看到保留了上次選擇的語言。。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM