关于iOS 国际化(类似微信切换语言)

(1)第一次启动App 获取当前App语言版本

NSUserDefaults *userDefaults = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];

NSArray *langArr = [userDefaults valueForKey:@"AppleLanguages"];

第一语言是中文,定义一个 NSUserDefaults key value 保存当前语言。

(2)修改App内语言版本 

@implementation NSBundle (JJLanguage)

+ (void)setLanguage:(NSString *)language {

    object_setClass([NSBundle mainBundle], [BundleEx class]);

  objc_setAssociatedObject([NSBundle mainBundle], &_bundle, language ? [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]] : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}


调用者个方法,修改App语言。



(3)设置翻译语言包

在项目-> Project -> info -> Localizations

关于iOS 国际化(类似微信切换语言)_第1张图片

添加不同的语言包。

关于iOS 国际化(类似微信切换语言)_第2张图片

key -> value  

英语

日语

中文


(4)代码中实现

宏定义

#define kxLocal(key) NSLocalizedStringFromTable(key, @"Kx", nil);

使用

kxLocal(@"Delete");

或封装

+(NSString *)kxLocalized:(NSString *)key{

    

    NSString *str = kxLocal(key);

    return str;

}

例: 带参数

     

语音包 ->  "No.%@" = "%@";

 NSString *numStr = kxLocal(@"No.%@");

        _label.text = [NSString localizedStringWithFormat:numStr,@"5"];



该篇 近期项目中用到 与 2015年写的 实现方式不一致。个人建议用本篇比较合理,如有大神有更好的实现方案请留言。


你可能感兴趣的:(iOS-技巧)