Строки файла Localizable.strings (Base), не прочитанные другим языком, установленным в iPhone?

Я реализовал многоязычный в моем приложении и имеет несколько Localizable.strings файлы созданы.

У меня есть все строки ключ и значение в Localizable.strings (Base) файл, как файл по умолчанию, считываемый со всех других языков, если в файле строки конкретного языка отсутствует строка, например, Localizable.strings (Japanese) и некоторые строки отсутствуют в Japanese файл, так что я ожидаю получить перевод строки из Base,

Но этого не происходит, это моя проблема.

3 ответа

Решение

Я столкнулся с той же проблемой и применил это решение:

  1. Создать новый файл локализации по умолчанию для английского языка (DefaultEnglish.strings) Например: "hello_key" = "Hello"
  2. Добавить поддержку других языков в Localizable.strings файл Например: японская строка: "hello_key" = "こんにちは"

  1. Создать строку extension

    extension String {
    
    func localizedStringKey(bundle _: Bundle = .main, tableName: String = "Localizable") -> String {
        return NSLocalizedString(self, tableName: tableName, value: "\(NSLocalizedString(self, tableName: "DefaultEnglish", bundle: .main, value: self, comment: ""))", comment: "")
    }     }
    
  2. и установить строку "hello_key".localizedStringKey()

Нет, базовый файл локализации используется, когда нет конкретной доступной локализованной версии файла. Например, если ваше приложение имеет базовую локализацию на английском языке и вы добавляете французскую локализацию, значения, отличные от французского, получат значения на английском языке.

Документация для NSLocalizedString(key,comment) довольно ясно -

Начальное значение для key в файле строки будет key, Использовать NSLocalizedStringWithDefaultValue макрос для указания другого значения ключа.

Что еще вы ожидаете, что он вернется? Код просто ищет ключ в словаре. Он не знает, какое сообщение связано с ключом, не говоря уже о том, как перевести это сообщение на русский язык.

При локализации приложения нет необходимости использовать BaseLocalizable.strings файл.

Локализуйте свои строки следующим образом...

NSLocalizedString("DISMISS_BUTTON", value: "Press To Dismiss", comment: "Button used to dismiss the payment screen")

затем key (первый параметр) используется для поиска в Localizable.strings для данного языка. Если он не найден, он будет использовать value параметр в строке как запасной вариант.

Если вы используете Xcode Export For Localization..., файл xliff будет содержать ключи от всех ваших NSLocalizedStrings

Единственный раз, когда вам понадобится BaseLocalizable.strings для ключей, которые не отображаются в виде строки в вашем источнике, например

let localisableName = "LAYOUT_NAME_" + name.uppercased()
NSLocalizedString(localisableName)

В этом случае вы должны добавить

"LAYOUT_NAME_WHATEVER" = "Whatever";

на ваш base файл, и он также будет включен в сгенерированный xliff

Другие вопросы по тегам