如果需求APP語言需要單獨(dú)設(shè)置,而不受系統(tǒng)語言影響
又或者兩種可以手動(dòng)和跟隨系統(tǒng)語言均可.
直接上代碼:下載Demo
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//初始化設(shè)置語言
[self initLanguagesSetting];
return YES;
}
/*
1.初始化設(shè)置語言
2.在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中
3.注意:本文中只判斷中文和英文,加入其它語言需要添加判斷
*/
- (void)initLanguagesSetting {
//初始化語言
if (![[NSUserDefaults standardUserDefaults] objectForKey:appLanguageType]) {
NSArray *languages = [NSLocale preferredLanguages];
NSString *language = [languages objectAtIndex:0];
if ([language hasPrefix:@"en"]) {
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:appLanguageType];
}else{
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:appLanguageType];
}
}
//初始化設(shè)置類型
[[NSUserDefaults standardUserDefaults] setInteger:appLanguageChangeTypeValue != 1 ? 1 : 0 forKey:appLanguageChangeTypeKey];
}
ViewController.m
//
// ViewController.m
// 多語言
//
// Created by niexiaobo on 2017/9/26.
// Copyright ? 2017年 niexiaobo. All rights reserved.
//
#import "ViewController.h"
//存儲(chǔ)語言類型key
#define appLanguageType @"appLanguageType"
//切換系統(tǒng)(0)還是手動(dòng)(1)模式key
#define appLanguageChangeTypeKey @"appLanguageChangeTypeKey"
//切換系統(tǒng)(0)還是手動(dòng)(1)模式value
#define appLanguageChangeTypeValue [[NSUserDefaults standardUserDefaults] integerForKey:appLanguageChangeTypeKey]
//key:字符key type:系統(tǒng)(0)還是手動(dòng)(1)模式
#define XBLocalizedString(key) appLanguageChangeTypeValue ? [NSString stringWithFormat:@"%@", [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:appLanguageType]] ofType:@"lproj"]] localizedStringForKey:(key) value:nil table:@"EnglishLocalize"]] : NSLocalizedStringFromTable((key), @"EnglishLocalize", nil);
@interface ViewController ()
@property(nonatomic,strong)UILabel *testLab;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self addUIView];
}
/*添加控件*/
- (void)addUIView {
//測試文本
self.testLab = [[UILabel alloc]initWithFrame:CGRectMake((self.view.frame.size.width - 200)/2.0, 100, 200, 60)];
self.testLab.text = NSLocalizedStringFromTable(@"測試文本", @"EnglishLocalize", nil);
self.testLab.textAlignment = 1;
[self.view addSubview:self.testLab];
//添加切換按鈕
UIButton *chineseBtn = [[UIButton alloc]initWithFrame:CGRectMake((self.view.frame.size.width - 200)/2.0, 200, 200, 60)];
[chineseBtn setTitle:@"切換語言" forState:0];
[chineseBtn setTitleColor:[UIColor blueColor] forState:0];
[chineseBtn addTarget:self action:@selector(exchangeText:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:chineseBtn];
//添加切換按鈕
UIButton *typeBtn = [[UIButton alloc]initWithFrame:CGRectMake((self.view.frame.size.width - 200)/2.0, 300, 200, 60)];
[typeBtn setTitle:@"手動(dòng)<->系統(tǒng)" forState:0];
[typeBtn setTitleColor:[UIColor blueColor] forState:0];
[typeBtn addTarget:self action:@selector(exchangetypeBtn:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:typeBtn];
}
/*
改變本地存儲(chǔ)數(shù)據(jù)
通過NSUserDefaults在沙盒中存入key=appLanguage的字符串,用來判斷手動(dòng)修改的當(dāng)前語言
注意:本文中只判斷中文和英文,加入其它語言需要添加判斷
*/
- (void)exchangeText:(UIButton *)sender {
if (![[NSUserDefaults standardUserDefaults] objectForKey:appLanguageType]) {
NSArray *languages = [NSLocale preferredLanguages];
NSString *language = [languages objectAtIndex:0];
if ([language hasPrefix:@"en"]) {
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:appLanguageType];
}else{
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:appLanguageType];
}
}
[self showLbl];
}
/*
切換系統(tǒng)還是手動(dòng)模式 系統(tǒng):0 手動(dòng):1
系統(tǒng):手動(dòng)設(shè)置無效,跟隨手機(jī)系統(tǒng)語言
手動(dòng):系統(tǒng)設(shè)置無效,跟隨手動(dòng)設(shè)置語言
*/
- (void)exchangetypeBtn:(UIButton *)sender {
sender.selected = !sender.selected;
[sender setTitle:sender.selected ? @"手動(dòng)" : @"系統(tǒng)" forState:0];
[[NSUserDefaults standardUserDefaults] setInteger:sender.selected ? 1 : 0 forKey:appLanguageChangeTypeKey];
[self showLbl];
}
/*更新文本*/
- (void)showLbl {
//這里才是label
self.testLab.text = XBLocalizedString(@"測試文本");
/*
如果整個(gè)系統(tǒng)生效,通過AppDelegate重新設(shè)置window啟動(dòng)主頁:
HomePageController *home = [[HomePageController alloc]init];
self.window.rootViewController = home;
[self.window makeKeyAndVisible];
*/
}
@end