(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
添加不同的语言包。
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年写的 实现方式不一致。个人建议用本篇比较合理,如有大神有更好的实现方案请留言。