这个库用于即时更改本地化/语言。
对于从右到左的语言,用户界面方向将自动更新。
首先,您必须从 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
设置为一个非空字符串。
如果您不使用 Storyboard,请将 LocaleManager.rootViewController
设置为一个闭包或方法,该闭包或方法返回应用程序根视图控制器的实例。
您的应用程序应向用户提供本地化列表。您可以根据您的项目获取可用的本地化列表,如下所示:
let languages = LocaleManager.availableLocalizations
现在,languages
变量是一个字典。 如果您没有任何本地化,则该字典将为 ["Base": "Base"]
,所有其他本地化都将在之后添加。
您必须将字典的键传递给 LocaleManager
的方法,而字典的值是相应键的本地化名称。 例如,“de”在英文环境下将是“German”,而在德文环境下将是“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)
使用 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 语言翻转,请不要使用资源的direction属性来镜像图片,而是使用 image.imageFlippedForRightToLeftLayoutDirection()
来初始化可翻转图片。
如果您的应用程序需要额外的步骤来更新界面(例如,清除缓存),请使用 LocaleManager.updateHandler
属性。
查看 Issues 页面。
我们很乐意您为 LocaleManager 做出贡献,请查看 LICENSE 文件以获取更多信息。