美文网首页
iOS - 语言国际化,手动切换语言

iOS - 语言国际化,手动切换语言

作者: 哆啦_ | 来源:发表于2016-05-31 14:53 被阅读1229次

    本人只是记录下自己实现的过程, 大家可以参考:http://www.cnblogs.com/boai/p/5337558.html

    或者:http://jingyan.baidu.com/article/fd8044fac8c0d55030137a4c.html

    1.添加语言

    在工程的info里面选择添加语言

    2.创建.strings文件

    因为是手动切换,所以文件名不需要为Localizable.strings

    文件名可以自己取 这里是Language.strings

    3.创建完成之后选择.strings文件, 点击右侧的Localization按钮, 会弹出一个框, 选择下拉框里的语言

    勾选语言, Base可以勾选,也可以不勾选

    然后会发现.string文件会多出两个文件,(English 和 Simplified)

    4.在对应的文件里面进行设置不同语言下要显示的数据

    格式为

    "key" = "values"; 
    没有@符号, 而且要用双引号,不要忘记最后的分号

    英语文件里面

    汉语文件里面

    两个文件里面的values是最后显示的数据, key类似于字典里面的key, 两个文件key值要一致, 不然显示的时候数据会不是你想要的效果, 而且key值是唯一的,意味着不能重复, 否则会报错,键可以用中文,也可有用英文,性能有没差别看不出

    5。

    写个宏定义,用来读取语言文件和返回的value值。宏最好是全局的,毕竟在一个项目里会有多个文件会用到。(pch文件或者其他文件)

    #define Localized(key)  [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:(key) value:nil table:“创建.strings的文件名”]

    其中“appLanguage”是保存在本地的语言key,这里保存在了NSUserDefaults中,table是指创建的.strings文件名称,这里是"Language",注意没有".string"后缀

    6 保存当前使用语言到NSUserDefaults

    在AppDelegate.m文件didFinishLaunchingWithOptions获取当前手机语言,并存储到NSUserDefaults。

    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"];

    }

    }

    7  切换语言的事件

    在ViewController.m创建并初始化UILabel用于显示多语言文字,UIButton切换语言按钮及响应事件。

    //修改本地获取的语言文件-交替

    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];

    8.因为切换语言之后要停留在当前页面,所以发送一个通知重新设置文字

    [[NSNotificationCenter defaultCenter] postNotificationName:kLanguageChanged object:nil];

    上面第二个语言是重新回到rootVc里面,相当于重新初始化整个vc,所以不需要重新设置文字, 因为虽然我们选择了语言, 但是只有在控件初始化的时候会读取我们的语言文件, 所以要么是回到rootVc, 要么是自己重新设置文字(暂时不知道其他方法, 如果有人知道请告知。 谢谢), 在自己pop回去的上一个页面里面接收通知,并设置文字, 但是如果是重新进入新的页面,那该页面不需要进行任何操作, 会自动切换语言

    相关文章

      网友评论

          本文标题:iOS - 语言国际化,手动切换语言

          本文链接:https://www.haomeiwen.com/subject/zlicdttx.html