MHLocalizationKit
MHLocalizationKit 是一个实用和基础设施库,可以通过修改标准 iOS 本地化系统的行为和使用相同的翻译资源来实现运行时语言更改。
简而言之 - 您可以继续使用 .strings
文件和 NSLocalizedString
宏/函数,并能够在运行时指定和更改语言。
工作原理
NSLocalizedString
宏/函数实际上是使用 Bundle.localizedString(forKey:value:table:)
。内部此方法根据系统的语言加载所需的 .strings
文件。
此库通过使用 方法交换(method swizzling),来改变 Bundle
的默认行为,强制它在运行时从指向应用语言 .strings
文件的目录的 bundle 中加载 .strings
。
安装
Carthage
将github "KoCMoHaBTa/MHLocalizationKit"
添加到您的Cartfile
中,然后直接将框架嵌入到您的项目中。
Cocoapods
将pod 'MHLocalizationKit'
添加到您的Podfile
Submodules
在您的仓库中添加一个submodule
,然后将框架直接嵌入到您的项目中。
手动
下载,然后将框架直接嵌入到您的项目中。
如何使用
基础
- 在您希望处理运行时语言更改的
UIViewController
子类中遵循Localizable
协议 - 实现
languageDidChange(from:to:)
方法,并从那里使用标准的NSLocalizedString
宏或函数加载您的本地化字符串。 - 当您的应用启动时,设置期望的值到
Bundle.language
- 这将在符合Localizable
协议的所有活动视图控制器上调用languageDidChange(from:to:)
。
NSLocalizedString 函数
截至 Xcode 11,由于与更新的 genstrings
不兼容,已经移除了与之不符的重载函数,因为 genstrings
现在支持 Swift 版本的 NSLocalizedString
。
详细信息
语言设置将在应用启动之间持续。
符合 Localizable
协议的 UIViewController 子类将在 viewDidLoad()
上自动接收到 languageDidChange(from:to)
调用。这是通过使用 方法冒险 来实现的。
您可以将 Bundle.trackSystemLanguageChanges
和 Bundle.trackSystemLocaleChanges
设置为 true
以选择自动跟踪系统语言和区域设置。
您可以使用 LanguageWillChangeNotificationName
和 LanguageDidChangeNotificationName
来订阅语言更改通知。
变更日志
1.0.0
- 初版文档