Строки файла Localizable.strings (Base), не прочитанные другим языком, установленным в iPhone?
Я реализовал многоязычный в моем приложении и имеет несколько Localizable.strings
файлы созданы.
У меня есть все строки ключ и значение в Localizable.strings (Base)
файл, как файл по умолчанию, считываемый со всех других языков, если в файле строки конкретного языка отсутствует строка, например, Localizable.strings (Japanese)
и некоторые строки отсутствуют в Japanese
файл, так что я ожидаю получить перевод строки из Base
,
Но этого не происходит, это моя проблема.
3 ответа
Я столкнулся с той же проблемой и применил это решение:
- Создать новый файл локализации по умолчанию для английского языка (
DefaultEnglish.strings
) Например:"hello_key" = "Hello"
- Добавить поддержку других языков в
Localizable.strings
файл Например: японская строка:"hello_key" = "こんにちは"
Создать строку
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: "") } }
и установить строку
"hello_key".localizedStringKey()
Нет, базовый файл локализации используется, когда нет конкретной доступной локализованной версии файла. Например, если ваше приложение имеет базовую локализацию на английском языке и вы добавляете французскую локализацию, значения, отличные от французского, получат значения на английском языке.
Документация для NSLocalizedString(key,comment)
довольно ясно -
Начальное значение для
key
в файле строки будетkey
, ИспользоватьNSLocalizedStringWithDefaultValue
макрос для указания другого значения ключа.
Что еще вы ожидаете, что он вернется? Код просто ищет ключ в словаре. Он не знает, какое сообщение связано с ключом, не говоря уже о том, как перевести это сообщение на русский язык.
При локализации приложения нет необходимости использовать Base
Localizable.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 будет содержать ключи от всех ваших NSLocalizedString
s
Единственный раз, когда вам понадобится Base
Localizable.strings
для ключей, которые не отображаются в виде строки в вашем источнике, например
let localisableName = "LAYOUT_NAME_" + name.uppercased()
NSLocalizedString(localisableName)
В этом случае вы должны добавить
"LAYOUT_NAME_WHATEVER" = "Whatever";
на ваш base
файл, и он также будет включен в сгенерированный xliff