iOS - 项目国际化 , 应用内修改app语言

在做项目中 , 如果是人群使用不那么局限的app就可能涉及到国际化问题 , 国际化 大致可以分为 代码部分国际化 , xib 和故事板国际化 , 获取权限提示国际化 (访问相册权限 , 定位权限等等..)和应用内切换语言

前言 : 创建的string文件 , 如果是英文资源的文件 ,系统会生成一个en.lproj文件存放string文件 , 简体中文则是 zh-Hans.lproj文件


一 . 首先 , 最简单的 , 代码部分权限

1.项目配置 —> command + N –>Strings文件 —>命名 : Localizable.strings (必须命名为Localizable.strings , 因为系统会自动加载这个名字的文件 . 也可以自己命名 , 但是个人觉得完全没必要 ,就不说了)

这里写图片描述


2.配置需要支持的语言 , 此处我仅设置了英文 , 和中文 ,如需要可以设置多国语言

这里写图片描述


2.1选中创建好的 Localizable.strings 文件 ,右侧点击此按钮
这里写图片描述


2.2 选择添加英文和中文 , 添加 2次
这里写图片描述


2.3 选中需要国际化的模板 , Base基础模板可以不选
这里写图片描述


3.可以开始配置对应的文本了 , 通常情况来讲我们的App都是中文版的 , 所以这对于一个中国人来讲 , 是一件比较好的事 , 中文版的我们就可以不用配置了 . 英文版的 , 在对于的strings文件中 , 添加键值对如下 :

//需要注意的是 , 分号必须要写
这里写图片描述


4. 可以开始写代码了 , 具体使用方法如下 :

// NSLocalizedString(<#key#>, <#comment#>) 此宏为foundation框架定义 , 直接在key中书写中文即可 , 当手机切换成英文版本时 , 程序会自动将key对应的中文换成中文 .如果是手机设置为中文 , 或者其他语言 , 则还是显示中文
    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(150, 300, 100, 50)];

    label.textColor = [UIColor redColor];
    label.text = NSLocalizedString(@"你好世界",nil);
    [self.view addSubview:label];

————————————————-

二 . 访问权限提示国际化

1. 如上述一样 , 配置语言 . 然后新建 InfoPlist.strings文件 , 同样选中,并勾选英文版本和中文版 —-> 在info.plist文件中添加权限字段


这里写图片描述


在中文文件中 , 添加权限提示

这里写图片描述


在英文文件中 , 添加权限提示 value值
这里写图片描述


配置info.plist文件 , 对应的提示内容 不写 , 因为需要根据设置语言 , 加载 string文件中对应的语言
这里写图片描述


代码中请求用户权限

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {


    //判断用户授权状态
    ABAuthorizationStatus state = ABAddressBookGetAuthorizationStatus();

    //判断   如果授权状态是未决定的,则请求授权
    if (state == kABAuthorizationStatusNotDetermined) {

        //请求
        //1.获取通讯录对象
        ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);

        //2.请求授权 (用户决定后就会回调block)
  ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {

            if (granted) {
                NSLog(@"用户授权成功");
            }else{
                NSLog(@"用户授权失败");
            }
        });
    }
    return YES;
}

运行设置语言 中文

这里写图片描述


运行设置语言 英文

这里写图片描述

我试过使用info.plist原生国际化 , 但是一国际化后 , info.plist的目录结构就发生变化 , 编译报错
这里写图片描述

我试着把info.plist文件还原到原来的目录下 , 编译不报错了 . 运行弹框获取权限时 , 国际化并没有成功 . 不知道是不是不支持 …

———————————————

三 . 应用内修改语言逻辑

//注意 : 通常来说 , 项目中如果使用了国际化 , 那么项目中语言会跟随手机系统的语言变化而变化 ,程序会自动去读取Userdefault中appleLanguage键的值作为a

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值