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

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

введите здесь описание изображения

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

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


person Sunil Targe    schedule 11.09.2018    source источник
comment
Есть ли в файле базовой строки более 1 языковой строки или только строки для японского языка?   -  person Ankit Jayaswal    schedule 11.09.2018
comment
Базовая строка имеет переводы всех английских строк, и если отладчик не находит строку на японском языке, он должен выбрать по умолчанию из базового файла.   -  person Sunil Targe    schedule 11.09.2018
comment
Да, это должно произойти так. Какую строку вы сейчас видите?   -  person Ankit Jayaswal    schedule 11.09.2018
comment
@AnkitJayaswal Я вижу только ключ, к которому пытаюсь получить доступ, когда мой iPhone использует японский язык.   -  person Sunil Targe    schedule 11.09.2018


Ответы (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()

person Harshal Wani    schedule 11.09.2018
comment
Кстати, лучше проверить значение, возвращаемое NSLocalizedString, и если такого ключа у нас нет - нужно предпринять какие-то действия, например - написать сообщение в лог. - person Torello; 31.05.2019

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

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

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

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

Если вы используете Экспорт для локализации… Xcode, файл xliff будет включать ключи от всех ваших NSLocalizedStrings

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

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

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

"LAYOUT_NAME_WHATEVER" = "Whatever";

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

person Ashley Mills    schedule 11.09.2018

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

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

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

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

person ViruMax    schedule 11.09.2018