ios9升级后导致的多语言问题

14 篇文章 0 订阅
11 篇文章 0 订阅

  升级ios9之后,使得原本支持中英文的app出现闪退,中英文混乱的问题!大家不要慌,原因是升级之后中英文目录名字改了。在真机上,中文资源目录名由zh-Hans---->zh-Hans-CN,英文资源目录名由en---->en-CN,ios9模拟器上面的中英文资源目录名和真机上面的不一样,分别是zh-Hans-US,en-US。所以喜欢在模拟器上面调试的小伙伴要注意了!

ios9之前版本中,模拟器中英文的资源目录为:


中文的资源目录为:

目录的位置如下:

在app内部切换语言的实现方式:

#define AppLanguage @"userLanguage"

#define CustomLocalizedString(key, comment) \
[[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[[NSUserDefaults standardUserDefaults] valueForKey:AppLanguage] ofType:@"lproj"]] \
 localizedStringForKey:(key) value:@"" table:nil]

使用方法:

[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:AppLanguage];


CustomLocalizedString(@"username", nil)

这样就获取了中文资源!

修改ios9中英文资源找不到、错乱的问题,方法如下:

#define OSVersionIsAtLeastiOS9() ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9 ? YES :NO)

NSArray *languages = [NSLocale preferredLanguages];
    NSString *currentLanguage = [languages objectAtIndex:0];
 
    if (![[NSUserDefaults standardUserDefaults] objectForKey:AppLanguage]) {
        
        if (OSVersionIsAtLeastiOS9()) {
            if ([currentLanguage isEqualToString:@"zh-Hans-US"] || [currentLanguage isEqualToString:@"zh-Hans-CN"]) {
                //简体中文
                [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:AppLanguage];
            }
            else if ([currentLanguage isEqualToString:@"en-US"] || [currentLanguage isEqualToString:@"en-CN"]) {
                //英文
                [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:AppLanguage];
            }
        }
        else {
            [[NSUserDefaults standardUserDefaults] setObject:currentLanguage forKey:AppLanguage];
        }
        
    }



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值