SwiftLocaleKit

Swift Workflow Swift Platform licence

概述

SwiftLocaleKit 是一个库,用于简化本地化并将其与系统本地化设置同步。

安装

SwiftLocaleKit 可通过 CocoaPods 和 Swift Package Manager 获取。

CocoaPods

CocoaPods 是 Cocoa 项目的依赖管理工具。 有关使用和安装说明,请访问他们的网站。 要使用 CocoaPods 将 SwiftLocaleKit 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它

pod 'SwiftLocaleKit'

Swift Package Manager

Swift Package Manager 是一种用于自动化 Swift 代码分发的工具,它已集成到 swift 编译器中。

设置好 Swift 包后,将 SwiftLocaleKit 添加为依赖项就像将其添加到 Package.swiftdependencies 值一样简单。

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。 接受除 bundlekey 之外的所有 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 - SwiftLocaleKitcurrentLanguage 的本地化语言名称

贡献

欢迎为改进做出贡献。 随意提交拉取请求以帮助扩展该库。 如果您有任何问题、功能建议或错误报告,请将其发送到 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.