IOS:国际化APP内部切换
2016-09-01 10:47
316 查看
这篇博客主要是APP需要国际推广,需要支持多语言,不重启切换语言的方法。生成国际化方法这里就不说了,直接上代码
因为一个工程里许多页面都要用 所以要创建个pch定义个宏
AppDelegate.m
ViewController.m
github:https://github.com/SpadeZach/appChangeLanguage.git
因为一个工程里许多页面都要用 所以要创建个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 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)
- swift3.0-iOS app内部语言国际化(本地化)
- IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)
- IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)
- iOS开发:国际化之app支持多种语言切换
- iOS国际化之app内切换语言
- swift 国际化,app内部中英语言切换
- 关于iOS国际化(根据手机App用户自己来切换语言) App支持多语言切换
- iOS App的国际化,以及App内的语言切换
- 关于iOS国际化(根据手机系统来切换语言) App支持多语言切换
- iOS开发 - app国际化+手动切换语言
- iOS App的国际化,以及App内的语言切换
- IOS APP软件多国语言切换,国际化app
- iOS开发:国际化之app支持多种语言切换
- ios的APP国际化
- IOS代码管控APP页面横竖屏切换
- iOS App多语言国际化
- 【iOS持续集成】公司账号($99)搭建公司内部分发APP平台
- iOS 应用程序内部国际化,不跟随系统语言
- iOS app 企业内部发布及HTTPS服务器配置