Swift中的本地化 - 即使应用程序具有更多语言,也将应用程序限制为一种语言
问题描述:
我在Swift 3.2中开发了一个应用程序,该应用程序目前使用的是基础语言英语。我为阿拉伯语和法语添加了字符串文件。 但是,直到所有由我的团队完成和测试的任何内容我都想限制应用程序使用一种语言,因为即使英文版本需要解决,我也需要解决这些问题,并上传到App Store。 删除sting和nib文件选项不适用于我。Swift中的本地化 - 即使应用程序具有更多语言,也将应用程序限制为一种语言
请让我知道是否有任何代码可以添加到appdelegate以限制应用程序仅适用于英语。
答
这里有你想要什么做的方法。我不认为在代码中有另一种方法可以做到这一点。
// You can change 'Base' to 'en' if you don't have Base.lproj folder
func localizedString(_ key: String) -> String? {
if let path = Bundle.main.path(forResource: "Base", ofType: ".lproj"),
let baseBundle = Bundle(path: path) {
return baseBundle.localizedString(forKey: key, value: nil, table: nil)
}
return nil
}
编辑:我发现了另一种方式在此基础上answer做到这一点。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UserDefaults.standard.set(["Base"], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
// Rest of your init code
}
编辑2:
,你可以上,以在viewDidLoad
最早推出的应用程序做什么您最初的ViewController
:
if let languageArray = UserDefaults.standard.object(forKey: "AppleLanguages") as? [String],
languageArray.count >= 1,
languageArray[0] != "Base" && languageArray.count == 1 {
UserDefaults.standard.set(["Base"], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
}
答
+0
此选项将删除我不想要的文件。 –
尝试第二个选项。 如何实现第一个选项 –
对于第一个选项,您可以使用该方法具有Singleton并用'YourSingleton.sharedInstance替换'NSLocalizedString'调用。 localizedString(“yourKey”)',或者你声明全局方法(在任何类之外,所以你可以从你的项目的任何地方访问它) – Jeremy
下面的代码工作。 它的工作的iphone设备上不能在模拟器 'UserDefaults.standard.set([ “基础”],forKey: “AppleLanguages”) UserDefaults.standard.synchronize()' –