如何以编程方式删除 iOS 中的特定本地化语言?

问题描述 投票:0回答:1

我已将我的应用程序本地化为 4 种不同的语言。 我没有使用 String 目录,而是遵循旧的 Localized.strings 方法。

我想以编程方式指定用户可以使用哪些语言。 假设我想在我的 AppDelegate 中使用这种方法:

func setPreferredLanguages(_ languages: [String]) {
   /// ...
}

因此,如果我调用 setPreferredLanguages(["en, de"]),用户将无法在系统的设置 -> 我的应用程序 -> 语言(首选语言)中看到除英语和德语之外的其他语言。

我正在寻找一种在运行时“隐藏”本地化的方法。 我只需向最终用户提供 4 种语言中的 2 种,但无需实际删除 .lproj 文件。

ios swift xcode localization
1个回答
0
投票

我认为你想显示的这两种语言应该是用户的本地语言,并且英语作为附加语言是吗?但同时您应该考虑如果用户本地语言已经是英语,那么您不应该显示任何语言作为附加选项以进行正确选择? 所以你可以获取设备语言,然后检查它是否与英语不同,并显示它是哪种语言,同时也显示英语。

例如;

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        // Set preferred languages based on device language
        setPreferredLanguages()

        return true
    }

    func setPreferredLanguages() {
        let deviceLanguage = Locale.preferredLanguages.first ?? "en"
        
        if deviceLanguage.starts(with: "en") {
            // Device language is English, so only allow English
            UserDefaults.standard.set(["en"], forKey: "AppleLanguages")
        } else {
            // Device language is not English, allow device language and English
            UserDefaults.standard.set([deviceLanguage, "en"], forKey: "AppleLanguages")
        }

        UserDefaults.standard.synchronize()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.