WBLanguage 2.0.0

WBLanguage 2.0.0

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布最近发布2021年11月
SPM支持SPM

JsonBin维护。



  • 作者:
  • JsonBin

WBLanguage

Build Status Pod version Carthage Compatible Platform info

gif

什么是

WBLanguage 是一个高级 LanguageKit。它提供了一组高级 API,为您的应用程序提供国际语言支持。

特点

  • 切换语言时间更少
  • 设置语言更方便
  • 支持的语言:英语/法语/意大利语/德语/俄语/简体中文/繁体中文
  • 后续可以添加更多国家语言

安装

WBLanguage 支持多种安装库到项目中的方法。

CocoaPods

CocoaPods 是 Objective-C 的依赖管理工具,可以自动化并简化在项目中使用第三方库(如 WBAlamofire)的过程。您可以使用以下命令安装它:

$ gem install cocoapods

构建 WBLanguage 需要使用 CocoaPods 1.2.0+。

Podfile

要使用 CocoaPods 将 WBLanguage 集成到您的 Xcode 项目中,请在 Podfile 中指定它:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

target 'TargetName' do
use_frameworks!

pod 'WBLanguage'

end

然后,运行以下命令:

$ pod install

Carthage

Carthage 是一个去中心化的依赖管理器,构建您的依赖并提供二进制框架。

您可以使用以下命令通过 Homebrew 安装 Carthage:

$ brew update
$ brew install carthage

要使用 Carthage 将 WBLanguage 集成到您的 Xcode 项目中,请在 Cartfile 中指定它

github "JsonBin/WBLanguage"

运行 carthage 命令以构建框架,并将构建好的 WBLanguage.framework 拖到您的 Xcode 项目中。

需求

  • iOS 9+
  • Xcode 10.0+
  • Swift 5.0+
WBLanguage 版本 最小 iOS 目标 注意
1.x iOS 8 需要 Xcode 9+。
2.x iOS 9 需要 Xcode 10+。

您可以在项目中创建 Language.bundle 资源来存储国际化语言。否则,它将从 main.bundle 资源中搜索。

使用

WBLanguageManager 类

我们可以在应用启动时设置 WBLanguageManager 的属性,以下是示例:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        WBLanguageManager.shared.startup()
        WBLanguageManager.shared.duration = 2.0
        return true
    }

如果想要设置新的语言,可以使用 updateLanguage(_:) 来更新 UI。并且它将自动保存您选择的语言。

WBLanguageManager.shared.updateLanguage(type)

可以使用 localizedString(_:, place:) 从 *.lproj 获取本地化文本。

let string = WBLanguageManager.shared.localizedString("key")

WBLanguage 类

WBLanguage 支持将任何符合 WBLanguageProtocol 协议的自定义类型进行序列化和反序列化。

public extension WBLanguageProtocol {
    public var lt: WBLanguage<Self> {
        return WBLanguage(self)
    }
}

extension `yourCustom` : WBLanguageProtocol {}

注意:WBLanguageProtocol 是 WBLanguage 内部直接使用的协议。因此,您需要完成语言设置。

例如

private func setLanguagePicker(
    _ object: NSObject,
    selector: Selector,
    picker: WBLanguagePicker?
) {
    object.pickers[selector] = picker
    object.performLanguage(selector, picker: picker)
}

extension WBLanguage where T : UILabel {
    public var picker: WBLanguageTextPicker? {
        set {
            let selector = #selector(setter: T.text)
            setLanguagePicker(value, selector: selector, picker: newValue)
        }
        get {
            let selector = #selector(setter: T.text)
            return getLanguagePicker(value, selector: selector) as? WBLanguageTextPicker
        }
    }
    
    public var attributedPicker: WBLanguageDictionaryPicker? {
        set {
            let selector = #selector(setter: T.attributedText)
            setLanguagePicker(value, selector: selector, picker: newValue)
        }
        get {
            let selector = #selector(setter: T.attributedText)
            return getLanguagePicker(value, selector: selector) as? WBLanguageDictionaryPicker
        }
    }
    
    public func setPicker(_ picker: WBLanguageTextPicker?) {
        let selector = #selector(setter: T.text)
        setLanguagePicker(value, selector: selector, picker: picker)
    }
    
    public func setAttributedPicker(_ picker: WBLanguageDictionaryPicker?) {
        let selector = #selector(setter: T.attributedText)
        setLanguagePicker(value, selector: selector, picker: picker)
    }
}

UIKit

UILabel

let label = UILabel()
label.lt.picker = "Label"

UILabel 可以使用 *.lt.picker*.lt.setPicker(_:) 加载文本。

当然,如果您想为字体添加属性,可以使用 WBLanguageDictionaryPickerWBLanguageManager.shared.localizedString("key")

先取出文本,然后添加属性。

使用 WBLanguageDictionaryPicker

label.lt.attributedPicker = WBLanguageDictionaryPicker(["picker": "Label", NSAttributedStringKey.foregroundColor: UIColor.black, NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 17)])

另一个

if let text = WBLanguageManager.shared.localizedString("Label") {
    let att = NSAttributedString(string: text, attributes: [.font: UIFont.boldSystemFont(ofSize: 17), .foregroundColor: UIColor.black])
    label.attributedText = att
}

UITextField

UITextFieldUILabel 的使用方式相同,只是增加了占位符。

let textfield = UITextField()
textfield.lt.placeHolderPicker = "Label"

属性选择器

textfield.lt.attributedPlaceHolderPicker = WBLanguageDictionaryPicker(["picker": "Label", NSAttributedStringKey.foregroundColor: UIColor.black, NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 17)])

UIButton

let button = UIButton(type: .system)
button.lt.setPicker("Button", forState: .normal)

属性文本

let picker = WBLanguageDictionaryPicker(["picker": "Button", NSAttributedStringKey.foregroundColor: UIColor.black, NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 17), NSAttributedStringKey.strikethroughStyle:NSUnderlineStyle.styleDouble.rawValue])
button.lt.setAttributedPicker(picker, forState: .normal)

UISegmentedControl

let segment = UISegmentedControl(items: ["","","","",""])
segment.lt.setPicker("English", forSegmentAt: 0)
segment.lt.setPicker("Russian", forSegmentAt: 1)
segment.lt.setPicker("French", forSegmentAt: 2)
segment.lt.setPicker("Italian", forSegmentAt: 3)
segment.lt.setPicker("German", forSegmentAt: 4)

UISegmentedControl 只有一个方法用于设置文本选择器。

授权

WBLanguage 可以在 MIT 许可证 下使用。更多信息请见 LICENSE 文件。