IOS:国际化APP内部切换

来源:互联网 发布:深入解析wpf编程 pdf 编辑:程序博客网 时间:2024/06/05 04:27

这篇博客主要是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

0 0
原创粉丝点击