SwiftLocaleKit 是一个库,用于简化本地化并将其与系统本地化设置同步。
SwiftLocaleKit 可通过 CocoaPods 和 Swift Package Manager 获取。
CocoaPods 是 Cocoa 项目的依赖管理工具。 有关使用和安装说明,请访问他们的网站。 要使用 CocoaPods 将 SwiftLocaleKit 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它
pod 'SwiftLocaleKit'
Swift Package Manager 是一种用于自动化 Swift 代码分发的工具,它已集成到 swift
编译器中。
设置好 Swift 包后,将 SwiftLocaleKit 添加为依赖项就像将其添加到 Package.swift
的 dependencies
值一样简单。
dependencies: [
.package(url: "https://github.com/FuturraGroup/SwiftLocaleKit.git", .branch("main"))
]
首先 - 导入 SwiftLocaleKit
import SwiftLocaleKit
let localized = "My Awesome string".localized
您无需进行特殊设置即可使用 SwiftLocaleKit
。 首次调用 LocaleKit
的单例后,它会自动将系统传递的语言设置为默认语言。
例如,获取当前语言信息将设置所有基本内容
let language = LocaleKit.shared.currentLanguage
调用本地化也会做同样的事情
let localized = "My Awesome string".localized
有 3 种方法可以使用 SwiftLocaleKit
本地化您的字符串
示例 1 如何获取 localized
字符串。 这是 NSLocalizedString
的简化版本。 在这种情况下,key
是您在此变量属性上调用的字符串。
let localized = "My Awesome string".localized
示例 2 如何获取 localized
字符串。 此版本基于 NSLocalizedString
。 接受除 bundle
和 key
之外的所有 NSLocalizedString
参数。 在这种情况下,key
是您在此方法上调用的字符串。
let localized = "My Awesome string".localized(comment: "My locale string")
示例 3 如何获取 localized
字符串。 此方法的工作方式类似于 LocaleKit
中的 localized
property
,但使用您传递的自定义 language
进行本地化。 在这种情况下,key
是您在此方法上调用的字符串。 您可以将任何自定义 LocaleKitLanguage
传递给此方法。
let localized = "My Awesome string".localized(LocaleKit.shared.currentLanguage)
您可以在运行时更改应用程序的本地化。 您所需要做的就是在更改区域设置完成时实现重新加载本地化的 UI。
let selectedLanguage = LocaleKit.shared.sortedLanguages[indexPath.row]
/// Set new localization language.
/// Handle locale changes and reload UI in completion
LocaleKit.shared.setLocale(selectedLanguage) { [weak self] in
/// Start UI reload after language select.
/// In our example will use local `Notificatication`
NotificationCenter.default.post(name: Notification.Name(rawValue: "App.reloadLocaleNotification"), object: nil)
DispatchQueue.main.async { [weak self] in
self?.navigationController?.popViewController(animated: true)
}
}
...
NotificationCenter.default.addObserver(forName: Notification.Name(rawValue: "App.reloadLocaleNotification"), object: nil, queue: OperationQueue.main) { [weak self] _ in
translatedText1Label.text = "My Awesome string".localized
}
此外,SwiftLocaleKit
还提供了一些附加功能
currentLanguage
- LocaleKit
单例的属性,表示默认/当前选择的语言。
preferedLanguages
- LocaleKit
单例的属性,表示 preferredLanguages
列表,作为 LocaleKitLanguage
数组。
allSupportedLanguages
- LocaleKit
单例的属性,表示您的应用程序中实现的所有支持本地化的语言。 也是 LocaleKitLanguage
数组。
sortedLanguages
- 排序后的语言列表,顺序为:首先是 preferedLanguages
,然后是 allSupportedLanguages
,其中排除了来自 preferedLanguages
的语言。 也是 LocaleKitLanguage
数组。
LocaleKitLanguage
- LocaleKit
使用的结构来表示任何语言并本地化您的应用程序。 可以使用任何语言 code
进行初始化
let language = LocaleKitLanguage(code: "en")
let languageZhHans = LocaleKitLanguage(code: "zh-Hans")
具有以下属性: code
- 使用其初始化的语言代码。
shortCode
- code
的简短版本,它会删除地区或/和转录。 例如,如果您初始化
let languageZhHans = LocaleKitLanguage(code: "zh-Hans")
简短代码将是
print(languageZhHans.shortCode) // Print output: "zh"
locale
- 基于提供的语言 code
的 [Locale](https://developer.apple.com/documentation/foundation/locale)
对象
nativeName
- 此语言的本地化语言名称。
deviceLocaleName
- 系统提供的语言的本地化语言名称。 如果您在 SwiftLocaleKit
中更改了区域设置,则系统语言可能与 SwiftLocaleKit
不同
currentLocaleName
- SwiftLocaleKit
中 currentLanguage
的本地化语言名称
欢迎为改进做出贡献。 随意提交拉取请求以帮助扩展该库。 如果您有任何问题、功能建议或错误报告,请将其发送到 Issues。
MIT License
Copyright (c) 2023 Futurra Group
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.