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.一切完成之後,我們可以運行看下效果
切換成功之後,推出程序重新運行就可以看到保留了上次選擇的語言。。
法文,韓文等等其他語言皆是如此,只要寫好語言文件即可!iOS應用內切換多國語言