iOS国际化切换 for Swift

公司业务做到了国外,要做给印度尼西亚使用的APP,需要在APP内部直接切换语言,而不是根据系统语言而显示不同的语言,经过一番调研做了一个简单的Demo,分享学习成果的同时自己也做个总结。

国际惯例先上效果图

iOS国际化切换 for Swift_第1张图片
效果图

准备工作

  • command+N进入创建new files菜单,选择Strings File创建。


    iOS国际化切换 for Swift_第2张图片
    第一步创建strings文件
  • 选择创建好的Customer.strings后,点击localize


    iOS国际化切换 for Swift_第3张图片
    第二步选择Customer后,点击localize
  • 这里点击“+”创建需要的语言文件,这里笔者添加了4个,分别是英语、简体中文、繁体中文、印尼语。


    iOS国际化切换 for Swift_第4张图片
    点击+添加所需要的语言

这里需要提醒一下,如何查看国家对应语言代码,笔者在调研过程中各种搜索也无果,后自己发现 添加语言时()里即为国家对应语言代码,后面写代码时会用到,具体如下图。

iOS国际化切换 for Swift_第5张图片
()里为国家对应语言代码

  • 然后再次选择Customer.strings把需要添加的语言进行勾选


    iOS国际化切换 for Swift_第6张图片
    勾选语言文件
  • 展开Customer.strings可以看到刚刚添加的四个语言文件,其中showText是展示文字,iamge是图片名称。

    iOS国际化切换 for Swift_第7张图片
    语言文件

    之后分别在语言文件中填写相同参数名的参数,例子:

    CustomerLaction.strings(Chinese(Traditionnal))对应
    "showText" = "這是壹個臺灣繁體";
    "image" = "zh-Hant";
    
    CustomerLaction.strings(English)对应
    "showText" = "this is a English Text";
    "image" = "en";
    
    CustomerLaction.strings(Indonesian)对应
    "showText" = "Ini adalah bahasa Indonesia.";
    "image" = "id";
    

代码实现

创建CustomLanguage工具类,其中语言代码如何查看上文已提到,如下:

class CustomLanguage: NSObject {
    //单例
    static let share = CustomLanguage()
    // 国家语言代码
    var lan = ""
    
    func showText(key: String) -> String {
        // 查找对应国家语言代码的路径
        guard let path = Bundle.main.path(forResource: lan, ofType: "lproj") else { return "" }
        // 通过路径在CustomLacation语言文件中查找对应key的字符串
        guard let bundle = Bundle(path: path)?.localizedString(forKey: key, value: nil, table: "CustomLacation") else { return "" }
        return bundle
    }
}

四个按钮的点击方法,其中setAttributedWithImage方法是封装的富文本类别,可在github中下载源码查看。

@objc func englishBtnClick() {
    CustomLanguage.share.lan = "en"
    label.attributedText = CustomLanguage.share.showText(key: "showText").setAttributedWithImage(subText: CustomLanguage.share.showText(key: "showText"), subColor: #colorLiteral(red: 0.2196078449, green: 0.007843137719, blue: 0.8549019694, alpha: 1), image: UIImage(named: CustomLanguage.share.showText(key: "image"))!)
}


@objc func chineseSimpleBtnClick() {
    CustomLanguage.share.lan = "zh-Hans"
    label.attributedText = CustomLanguage.share.showText(key: "showText").setAttributedWithImage(subText: CustomLanguage.share.showText(key: "showText"), subColor: #colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1), image: UIImage(named: CustomLanguage.share.showText(key: "image"))!)
}

@objc func chineseTWBtnClick() {
    CustomLanguage.share.lan = "zh-Hant"
    label.attributedText = CustomLanguage.share.showText(key: "showText").setAttributedWithImage(subText: CustomLanguage.share.showText(key: "showText"), subColor: #colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1), image: UIImage(named: CustomLanguage.share.showText(key: "image"))!)
}

@objc func indonesiaBtnClick() {
    CustomLanguage.share.lan = "id"
    label.attributedText = CustomLanguage.share.showText(key: "showText").setAttributedWithImage(subText: CustomLanguage.share.showText(key: "showText"), subColor: #colorLiteral(red: 0.2745098174, green: 0.4862745106, blue: 0.1411764771, alpha: 1), image: UIImage(named: CustomLanguage.share.showText(key: "image"))!)
}

如果感兴趣可以到我的github中下载源码,记得点击Stars哈,感谢。

你可能感兴趣的:(iOS国际化切换 for Swift)