Swift中的本地化 - 即使应用程序具有更多语言,也将应用程序限制为一种语言

问题描述:

我在Swift 3.2中开发了一个应用程序,该应用程序目前使用的是基础语言英语。我为阿拉伯语和法语添加了字符串文件。 但是,直到所有由我的团队完成和测试的任何内容我都想限制应用程序使用一种语言,因为即使英文版本需要解决,我也需要解决这些问题,并上传到App Store。 删除sting和nib文件选项不适用于我。Swift中的本地化 - 即使应用程序具有更多语言,也将应用程序限制为一种语言

请让我知道是否有任何代码可以添加到appdelegate以限制应用程序仅适用于英语。

I have tried disabling language Arabic in Settings which deletes localized string files

这里有你想要什么做的方法。我不认为在代码中有另一种方法可以做到这一点。

// 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

尝试第二个选项。 如何实现第一个选项 –

+0

对于第一个选项,您可以使用该方法具有Singleton并用'YourSingleton.sharedInstance替换'NSLocalizedString'调用。 localizedString(“yourKey”)',或者你声明全局方法(在任何类之外,所以你可以从你的项目的任何地方访问它) – Jeremy

+1

下面的代码工作。 它的工作的iphone设备上不能在模拟器 'UserDefaults.standard.set([ “基础”],forKey: “AppleLanguages”) UserDefaults.standard.synchronize()' –

您是否尝试过在本地化设置中删除语言该项目文件?

这是基于苹果公司提供的指南:Enabling Base Internationalization Image taken from developer.apple.com

我相信你也不会删除任何内容。这只会禁用本地化。

+0

此选项将删除我不想要的文件。 –

将以下代码添加到AppDelegate中didFinishLaunchingWithOptions第一行强制应用程序从左到右。 然后在编辑计划 - 在启动-AppleLanguages (Base)添加了一个参数。为了强制用户使用英语,我工作得很好。

UIView.appearance().semanticContentAttribute = .forceLeftToRight 
    UserDefaults.standard.set(["Base"], forKey: "AppleLanguages") 
    UserDefaults.standard.synchronize() 

enter image description here