2

我到处使用 NSLocalizedString(@"Text in deutsch",@"das Textfeld Text in deutsch") 我有两个 Localizable.strings 文件。一个是德语,一个是英语。

我现在意识到的是。如果你有一部德语 iPhone,你会得到德语文本,如果你的 iPhone 设置为英语,你会得到英文文本。但是,如果您说法语,那么您也会得到德语文本,因为我使用德语作为键,对吗?有没有办法将英语设置为后备语言,而不是我的代码中到处使用的德语?(我有很多 NSLocalizedString 的出现,以至于现在到处更改键会很痛苦(在代码中,在 Localized.string.en 和 Localized.string.de 中))

4

2 回答 2

1

你必须设置CFBundleDevelopmentRegionInfo.plist的英语。

这样做,只要不支持用户的首选语言(在您的情况下不支持英语和德语),就会使用开发语言。

我通常使用全局 func 来 wrap 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: "")
}

还有更多关于本地化的内容,我写了更多关于后备如何工作的文章。

于 2018-01-24T05:57:16.110 回答
0

始终选择本地化 (something.lproj)。如果 l10n 提供翻译,则不使用密钥本身;这意味着您可以使用“DISCOMBOBULATE_OR_OK”之类的键,它在适合的语言中翻译为“Discombobulate”,在“Discombobulate”的翻译对于可用空间而言太长的语言中翻译为“OK”。

可能性:

  • Info.plist 的 CFBundleDevelopmentRegion 中的语言用于选择默认语言。
  • 手机的后备语言受购买地点的影响(例如,在我的语言屏幕上,“英语”始终显示在第一个或第二个。)

值得请拥有英国/美国/澳大利亚手机的人进行测试。

于 2010-06-11T20:07:54.340 回答