WBLanguage
什么是
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(_:)
加载文本。
当然,如果您想为字体添加属性,可以使用 WBLanguageDictionaryPicker
或 WBLanguageManager.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
UITextField
和 UILabel
的使用方式相同,只是增加了占位符。
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 文件。