很常

iOS 国际化开发 之 多语言(APP内切换)

2021-04-07  本文已影响0人  小猴子兵兵兵

前言

最近做了一个 意大利的 物流项目,要求支持中、英、意三种语言,在APP内可以自由切换3种语言,在此记录过程如下。

一、APP内 固定文本的多语言
    1. 添加语言项
    2. 创建strings file文件 勾选上面添加的所需要多个语言项
    3. 在创建好的各个语言的文件里面翻译对应的文本
    4. 添加 全局 的 切换APP 语言 宏
    5. AppDelegate 内 程序启动的 时候 判断设置语言
    6. APP内 切换语言的时候 修改本地字符串
    7.所有控件或者页面 设置文本的时候  都用 宏去设置

二、APP 的名称、权限描述、等基本信息的多语言
   1. 创建strings file文件  命名为 InfoPlist.strings文件
   2. 勾选所需要多个语言项,在创建好的各个语言的文件里面翻译对应的文本

一、APP内 固定文本的多语言

1.添加语言项

添加语言项
点击完成

2.创建strings file文件

创建strings file文件
随便选择一个你要添加的语言,点击Localize按钮确定

3.勾选所添加语言项,创建语言文件,在不同的语言文件自己翻译对应文本

勾选语言

4.在PrefixHeader.pch 预编译文件内 添加 全局 的 切换APP 语言 宏

//************************** 切换APP 语言 宏 ***********************
#define KLanguage(key)  [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:(key) value:nil table:@"Localizable"]

5.AppDelegate 内 程序启动的 时候 判断设置语言,如果 APP内没有 设置语言的时候 判断手机系统是什么语言

if (![[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"]) {
        //获得当前语言
        NSArray *languages = [NSLocale preferredLanguages];
        NSString *language = [languages objectAtIndex:0];
        if([language hasPrefix:@"en"]){
            [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:appLanguage];
        }else if([language hasPrefix:@"it"]){
            [[NSUserDefaults standardUserDefaults] setObject:@"it" forKey:appLanguage];
        }else{
            [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:appLanguage];
        }
        [[NSUserDefaults standardUserDefaults]synchronize];
    }

6.APP内 切换语言的时候 修改本地字符串

_changeView.selectSelectLanauageCallBack = ^(NSString * _Nonnull str) {
        if ([str isEqualToString:@"Italiano"]) {
            [[NSUserDefaults standardUserDefaults] setObject:@"it" forKey:@"appLanguage"];
        }else if ([str isEqualToString:@"中文"]){
            [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];
        }else if ([str isEqualToString:@"English"]){
            [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
        }
        [weakSelf refreshLanguage];
    };

7.所有控件或者页面 设置文本的时候 都用 宏去设置,例如:

_nameLab.text = KLanguage(@"注册");
[_changeBtn setTitle:KLanguage(@"语言") forState:UIControlStateNormal];
_nameTF.placeholder = KLanguage(@"请输入您的用户名");

二、APP 的名称、权限描述、等基本信息的多语言

1.创建strings file文件 命名为 InfoPlist.strings文件

\color{red}{文件名不能修改,必须叫InfoPlist.strings}

2. 勾选所需要多个语言项,在创建好的各个语言的文件里面翻译对应的文本,字段的key 是系统固定的字符串,具体字段名可以在info.plist文件里面能找到

勾选所需要多个语言项,翻译文本

Tips:

1.如果 不是APP内自由切换,只是根据系统设置来切换,可以不用通过保存本地字符串的方法来判断切换语言,可以直接用NSLocalizedString(@"", nil)方法设置文本。

  1. 创建strings 文件的时候 如果命名 不是Localizable.strings,而是其它,比方说是Logistics.strings, 那么设置文本的时候 需要用NSLocalizedStringFromTable(@"key",@"Logistics", nil)方法。
上一篇下一篇

猜你喜欢

热点阅读