gpt4 book ai didi

swift - 获取 MacOS 使用的 "real"区域设置

转载 作者:行者123 更新时间:2023-12-03 17:37:29 24 4
gpt4 key购买 nike

我制作了一个 MacOS 应用程序,用户可以在应用程序中选择他想要的语言。

要在按钮中设置本地化标题,我这样做:

NSLocalizedString("CONTEXT_MENU_OPT_QUIT", bundle: myClass.localeBundle, comment: "Context menu option");

我在启动时运行此代码来设置localeBundle:

    func getLocale() -> String {
let availableLanguages: [String] = Bundle.main.localizations;
var locale: String = userDefaults!.string(forKey: "locale") ?? "";

if (locale.isEmpty) {
let preferredLocale: String = Locale.preferredLanguages.first!;

if (availableLanguages.contains(preferredLocale) == false) {
locale = "en";
}
}
return locale;
}

func loadLocale() {
let currentLocale: String = self.getLocale();
var bundlePath: String;

bundlePath = Bundle.main.path(forResource: currentLocale, ofType: "lproj")!;
myClass.localeBundle = Bundle.init(path: bundlePath)!;
}

这适用于大多数人,但如果您的系统语言设置与预期区域不同,则此操作将会失败。例如:

语言为葡萄牙语,区域设置为俄罗斯:Locale.preferredLanguages.first! 将返回 pt-RU

考虑到我只有 pt-PTpt-BR 的翻译,我的代码将默认为“en”,因为“pt-RU”没有存在。

如何独立于用户所在区域获取 pt-PTpt-BR

谢谢

最佳答案

用户的首选语言设置(在“系统偏好设置”中设置)存储在“AppleLanguages”键下的用户默认值中。它是一个语言标识符字符串数组(如“pt-BR”)。

用户的设置位于全局域中,但与所有用户默认设置一样,您可以在更多本地域中覆盖该设置。特别是,您可以在应用程序域中设置它以仅影响您的应用程序。

因此,我认为您应该在“AppleLanguages”键下存储一个数组,其中包含用户为您的应用程序选择的语言的标识符,然后让系统执行其操作。您不应该尝试自己重现资源搜索算法。

如果您想继续使用您的技术,您可以使用localization properties and methods Bundle 根据首选列表选择 bundle 中可用的实际本地化之一。也就是说,不要查询localizations,然后检查它是否包含您的区域设置标识符;使用 preferredLocalizations(from:forPreferences:) 为您进行搜索。它可能使用更复杂的算法。另外,请记住区域设置和语言之间的区别,尤其是区域设置 ID 与语言 ID 之间的区别。它们代表不同的事物并具有不同的形式,但您似乎可以互换使用它们。

关于swift - 获取 MacOS 使用的 "real"区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61825077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com