我已将我的应用程序本地化为 4 种不同的语言。 我没有使用 String 目录,而是遵循旧的 Localized.strings 方法。
我想以编程方式指定用户可以使用哪些语言。 假设我想在我的 AppDelegate 中使用这种方法:
func setPreferredLanguages(_ languages: [String]) {
/// ...
}
因此,如果我调用 setPreferredLanguages(["en, de"]),用户将无法在系统的设置 -> 我的应用程序 -> 语言(首选语言)中看到除英语和德语之外的其他语言。
我正在寻找一种在运行时“隐藏”本地化的方法。 我只需向最终用户提供 4 种语言中的 2 种,但无需实际删除 .lproj 文件。
我认为你想显示的这两种语言应该是用户的本地语言,并且英语作为附加语言是吗?但同时您应该考虑如果用户本地语言已经是英语,那么您不应该显示任何语言作为附加选项以进行正确选择? 所以你可以获取设备语言,然后检查它是否与英语不同,并显示它是哪种语言,同时也显示英语。
例如;
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()
}
}