IOS:国际化APP内部切换

本文介绍了一种iOS应用中实现多语言支持且能在不重启应用的情况下切换语言的方法。通过定义宏来实现语言资源的加载,并在AppDelegate中进行初始化设置及监听语言切换通知,确保界面能实时更新。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值