1. 程式人生 > >iOS應用內切換多國語言

iOS應用內切換多國語言

apple 按鈕 cal () sta err ans 移除 系統

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.一切完成之後,我們可以運行看下效果

技術分享

技術分享

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

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

iOS應用內切換多國語言