您的位置:首页 > 移动开发

IOS:国际化APP内部切换

2016-09-01 10:47 316 查看
这篇博客主要是APP需要国际推广,需要支持多语言,不重启切换语言的方法。生成国际化方法这里就不说了,直接上代码

因为一个工程里许多页面都要用 所以要创建个pch定义个宏

#define Localized(key)  [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:(key) value:nil table:@"Language"]


AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//消息
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationAction:) name:@"changeLanguage" object:nil];
//根视图
[self toMain];
if (![[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"]) {
NSArray *languages = [NSLocale preferredLanguages];
NSString *language = [languages objectAtIndex:0];
if ([language hasPrefix:@"zh-Hans"]) {//开头匹配
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];
}else{
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
}
}
return YES;
}
- (void)notificationAction:(NSNotification *)notification{
AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
//重设根视图
[delegate toMain];
}
#pragma mark - 根视图
- (void)toMain{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
ViewController *view = [[ViewController alloc] init];
self.window.rootViewController = view;
[self.window makeKeyAndVisible];
}


ViewController.m

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

_label.text = [NSString stringWithFormat:@"apple =%@,Language = %@",Localized(@"apple"),Localized(@"Language")];

[_changeBtn setTitle:[NSString stringWithFormat:@"按钮 %@",Localized(@"Language")] forState:UIControlStateNormal];

}
- (IBAction)change:(id)sender {
//IOS 8.0以后
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"语言切换" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

//消息 随意发
NSDictionary *passDic = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"notif",nil];

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

//修改本地获取的语言文件-交替
NSString *language = [[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"];
if ([language isEqualToString: @"en"]) {
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];
}else {
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
}
[[NSUserDefaults standardUserDefaults] synchronize];

}];
[alert addAction:cancelAction];
[alert addAction:okAction];
//显示弹框
[self presentViewController:alert animated:YES completion:nil];
}


github:https://github.com/SpadeZach/appChangeLanguage.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 国际化 app