【发布时间】:2020-05-15 17:28:40
【问题描述】:
我制作了一个 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-PT 和pt-BR 的翻译,我拥有的代码将默认为“en”,因为“pt-RU”不存在。
我如何获得独立于用户区域的pt-PT 和pt-BR?
谢谢
【问题讨论】: