本地实现多语言-ios

1、新建语言文件,命名为language.strings


本地实现多语言-ios_第1张图片

2、配置需要用到的语言,我们只用到了中英文


本地实现多语言-ios_第2张图片

配置好后,language.strings文件下会出现2个文件,一个中文 一个英文

注意:文件中的格式为“key”=“value”; 如:"mine" ="Me"; //我的
接下来就是获取某个文件下的某个值了
3、新建工具类

#import "InternationalControl.h"

@implementation InternationalControl
static NSBundle *bundle = nil;
+ ( NSBundle * )bundle{
    return bundle;
}
+(void)initUserLanguage{
    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
    NSString *string = [def valueForKey:@"userLanguage"];  //保存在本地
    if(string.length <= 0){
        NSArray *appLanguages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];  //获取系统语言  app首次打开显示的语言与系统语言一致
        NSString *languageName = [appLanguages objectAtIndex:0];
        if ([languageName containsString:@"en"]) {   //系统语言为英文
            [def setValue:@"en" forKey:@"userLanguage"];   //英文保存en 为了与服务器保持一致
        }else {
            //获取系统当前语言版本(中文zh-Hans,英文en)
            [def setValue:@"zh-Hans" forKey:@"userLanguage"];
        }
        [def synchronize];//持久化,不加的话不会保存
    }
    //获取文件路径
    NSString *path = [[NSBundle mainBundle] pathForResource:string ofType:@"lproj"];
    bundle = [NSBundle bundleWithPath:path];//生成bundle
}
//获取当前选择的语言
+(NSString *)userLanguage{
    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
    NSString *language = [def valueForKey:@"userLanguage"];
    return language;
}
//选择某种语言 保存到本地
+(void)setUserlanguage:(NSString *)language{
    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
    //1.第一步改变bundle的值
    NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj"];
    bundle = [NSBundle bundleWithPath:path];
    //2.持久化
    [def setValue:language forKey:@"userLanguage"];
    [def synchronize];
}

4、初始化语言

[InternationalControl initUserLanguage];

5、加载语言

#define GetLanguageForkey(a) [Utils setTitleWithKey:a]
+ (NSString *)setTitleWithKey:(NSString *)key {
    return [[InternationalControl bundle] localizedStringForKey:key value:nil table:@"language"];
}

6、切换语言

[InternationalControl setUserlanguage:@"en"];

文章借鉴http://blog.csdn.net/yang8456211/article/details/12031667

你可能感兴趣的:(本地实现多语言-ios)