我到处使用NSLocalizedString(@“deutsch中的文字”,@“das Textfeld in deutsch”) 我有两个Localizable.strings文件。一个用于德语,一个用于英语。
我现在意识到的是。 如果您有德语iPhone,则会获得德语文本,如果您将iPhone设置为英语,则会获得英文文本。但如果你说法语,那么你也会得到德语文本,因为我用德语作为键,对吧? 有没有办法将英语设置为后备语言而不是我的代码中到处使用的德语? (我有很多次出现的NSLocalizedString,现在到处更改密钥会很麻烦(在代码中,在Localized.string.en和Localized.string.de中)。
答案 0 :(得分:1)
您必须将CFBundleDevelopmentRegion
中的Info.plist
设置为英语。
这样做,只要用户的首选语言不受支持(在您的情况下不是英语和德语),就会使用开发语言。
我通常使用全局函数来包装NSLocalizedString
,并且当存在未翻译的德语短语并且您希望它回退到英语时也提供后备。
public func LS(_ key: String) -> String {
let value = NSLocalizedString(key, comment: "")
if value != key || NSLocale.preferredLanguages.first == "en" {
return value
}
// Fall back to en
guard
let path = Bundle.main.path(forResource: "en", ofType: "lproj"),
let bundle = Bundle(path: path)
else { return value }
return NSLocalizedString(key, bundle: bundle, comment: "")
}
还有更多关于本地化的内容,我写了更多关于how fallback works的内容。
答案 1 :(得分:0)
总是选择本地化(something.lproj)。如果l10n提供翻译,则不使用密钥本身;这意味着你可以使用像“DISCOMBOBULATE_OR_OK”这样的键,它在适合的语言中使用“Discombobulate”,在“Discombobulate”的翻译对于可用空间来说太长的语言中可以“OK”。
的可能性:
值得请一位有英国/美国/澳大利亚电话的人进行测试。