Используйте другой резервный язык, чем ключи, используемые в NSLocalizedString (@ "Text aka. Key", @ "Description") - PullRequest
2 голосов
/ 11 июня 2010

Я использую везде NSLocalizedString (@ "Text in deutsch", @ "das Textfeld Text in deutsch") У меня есть два файла Localizable.strings. Один для немецкого и один для английского.

То, что я понял сейчас, Если у вас есть немецкий iPhone, вы получите текст на немецком языке, если ваш iPhone установлен на английский, вы получите текст на английском языке. Но если у вас есть, скажем, французский, то вы получите текст на немецком языке, потому что я использую немецкий в качестве ключей, верно? Есть ли способ установить английский в качестве запасного языка вместо немецкого, используемого везде в моем коде? (У меня так много экземпляров NSLocalizedString, что было бы больно менять ключи сейчас везде (в коде, в Localized.string.en и в Localized.string.de))

Ответы [ 2 ]

1 голос
/ 24 января 2018

Вы должны установить 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: "")
}

Там больше о локализации, и я написал больше о , как работает резервный .

0 голосов
/ 12 июня 2010

Локализация (some.lproj) всегда выбирается.Сами ключи не используются, если l10n обеспечивает перевод;это означает, что вы можете использовать такие ключи, как «DISCOMBOBULATE_OR_OK», что переводится как «Discombobulate» на языках, где он подходит, и «OK» на языках, где перевод «Discombobulate» слишком длинный для доступного места.

Возможности:

  • Язык в CFBundleDevelopmentRegion в Info.plist используется для выбора языка по умолчанию.
  • На резервный язык телефона влияет то, где вы его покупаете (например, на экране "Мои языки"«Английский» - это всегда , отображаемый либо первым, либо вторым.)

Стоит попросить кого-нибудь с телефоном из Великобритании / США / Австралии провести тестирование.

...