gpt4 book ai didi

iOS 本地化、模拟器和设备始终使用 Base.lproj 而不是用户首选的区域设置

转载 作者:行者123 更新时间:2023-11-30 12:19:56 26 4
gpt4 key购买 nike

我正在创建一个应用程序,目前我想提供英语和德语版本。我检查了项目配置中的 Base 本地化标记并添加了 German。我把英语作为开发语言。

然后我创建了一个文件 Translation.plist 它基本上由我称之为类别的字典组成,例如我有一个用于按钮文本、标签文本等的字典。每个类别字典又由包含两个字符串的字典组成:值和注释。 Translation.plist 通过 XCode 进行本地化。文件夹 Base.lprojen.lprojde.lproj 存在,并且包含预期的 plist 文件的副本。

然后我创建了一个类 Translator.swift ,该类应该根据用户的偏好将 Translation.plist 文件作为 NSDictionary 加载语言环境。代码如下所示:

func relevantDictionary(category: String) -> NSDictionary {
let preferredLocale = Bundle.main.preferredLocalizations.first ?? "Base"
NSLog("User's preferred locale is \(preferredLocale)")
guard let url = Bundle.main.url(forResource: "Translation", withExtension: "plist") else {
fatalError("Could not find Translation.plist")
}

NSLog("Using \(url.absoluteURL) for translation")
guard let root = NSDictionary(contentsOf: url) else {
fatalError("Could not find dictionary for category (locale=\(preferredLocale)")
}

guard let relevant = root.value(forKey: category) as? NSDictionary else {
fatalError("Could not create dictionary from Translation.plist")
}

return relevant
}

然后我创建了一个使用转换器的字符串扩展,如下所示:

func localize(category: String) -> String {
return Translator.instance.translate(category: category, string: self)
}

这样我就可以通过“yes”.localize(“button”)来调用翻译器。在英语中我期望“Yes”,在德语中我期望“Ja”。日志内容如下:

2017-07-05 08:45:24.728 myApp[13598:35048360] User's preferred locale is de_DE

2017-07-05 08:45:24.728 myApp[13598:35048360] Using file:///Users/me/Library/Developer/CoreSimulator/Devices/A39D3318-943D-4EFE-BB97-5C2218279132/data/Containers/Bundle/Application/4614E696-B52E-4C30-BBE8-3C76F6392413/myApp.app/Base.lproj/Translation.plist for translation

我想知道为什么会发生这种情况以及我错过了什么。我希望加载 de.lproj/Translation.plist 而不是 Base.lproj/Translation.plist

非常感谢任何帮助。

最佳答案

您可以使用单个 .plist 文件来完成此操作。您不需要为其创建不同的 .plist 文件。

Firstly, Add English and German countries with locale in Project -> info
/image/M4QIY.png

Once, you added countries with locale in Project -> info then add localizable.strings file in your bundle.
/image/lnjgL.png

At the end, just add country's locale in your language support class.

NSArray* languages = @[@"en", @"de"];`enter code here`
NSString *current = [languages objectAtIndex:0];
[self setLanguage:current];

希望对您有帮助。

关于iOS 本地化、模拟器和设备始终使用 Base.lproj 而不是用户首选的区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44918890/

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