LocaleManager 1.4.0

LocaleManager 1.4.0

Amir Abbas Mousavian 维护。



LocaleManager

这个库可以动态修改区域/语言。

对于从右到左的语言,用户界面方向将自动更新。

Swift Version Platform License Release version

需求

  • Swift 5.0 或更高版本
  • iOS 9.0
  • XCode 10.2

安装

首先,您需要从 github 复制此项目

git clone https://github.com/amosavian/LocaleManager

然后,您可以通过将 Sources/LocaleManager 目录添加到您的项目中,或者创建一个 xcodeproj 文件并将其添加为动态框架来手动安装

swift package generate-xcodeproj

使用方法

初始化

首先,将以下行添加到您的 AppDelegate 类中:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Your initialization code here
        
        LocaleManager.setup()
        return true
    }

}

准备故事板

Main.storyboard 中为根视图控制器设置 Storyboard ID 为非空字符串。

如果您不使用故事板,请将 LocaleManager.rootViewController 设置为闭包或返回应用程序根视图控制器实例的方法。

向用户展示可用的本地化

您的应用程序应提供本地化列表给用户。您可以通过以下方式根据项目获取可用的本地化列表:

let languages = LocaleManager.availableLocalizations

现在 languages 变量是一个字典。如果没有本地化,该字典将是 ["Base": "Base"],所有其他本地化将在其后添加。

您必须将字典的键传递给 LocaleManager 的方法,而字典的值是对应键的本地化名称。例如,“de”在英文环境中是“德语”,而在德语环境中是“Deutsch”。

当用户选择了一个本地化后,继续下一步。

动态更改本地化

在这里没有特别之处,只需添加以下行

let localeID = "fa"
LocaleManager.apply(identifier: localeID)

如果您有 Locale 对象而不是标识符

let locale = Locale(identifier: "fa")
LocaleManager.apply(locale: locale)

这将在更改语言时引起翻转动画。如果您不想要这个动画

let localeID = "en"
LocaleManager.apply(identifier: localeID, animated: false)

移除任何自定义本地化,允许iOS根据系统语言选择本地化

LocaleManager.apply(locale: nil)

如果您之前使用了其他库如 maximbilan/ios_language_manager,请首次调用 LocaleManager.apply(locale: nil) 以删除残留片段,以避免冲突。

获取活动地区

let locale = Locale.userPreferred // e.g "en_US"
print(locale.languageCode)  // e.g "en"

本地化数字

默认情况下数字不会进行本地化,要显示本地化数字

// Int
let n = 10
label.text = (n as NSNumber).localized()

// Double with 2 fraction
let d = 10.12
label.text = (n as NSNumber).localized(precision: 2)

// Percentage
let d = 0.5 // 50%
label.text = (n as NSNumber).localized(style: .percent)

格式化字符串(仅Swift中)

使用 NSLocalizedString() 方法,您可以从 Localizable.strings 文件中获取本地化字符串。如果返回的字符串是可格式化的文本,可以轻松填充占位符

let completed = 10
let total = 15
let completedText = (completed as NSNumber).localized()
let totalText = = (total as NSNumber).localized()
let template = NSLocalizedString("Progress %@ out of %@ items", comment: "")
let formattedText = template.localizedFormat(completedText, totalText)

镜像图片

由于iOS中的潜在错误,如果您有一个需要为RTL语言反转的图片,不要使用资产的方向属性来镜像图片,而是使用 image.imageFlippedForRightToLeftLayoutDirection() 来初始化可翻转的图片。

附加步骤

如果您的应用程序需要更新用户界面(例如清除缓存)的额外步骤,请使用 LocaleManager.updateHandler 属性。

已知问题

请检查 问题页面

贡献

我们非常希望您为 LocaleManager 贡献代码,有关更多信息,请查看 LICENSE 文件。