Я пытаюсь локализовать свое приложение с помощью NSLocalizedString. Когда я импортирую файл XLIFF, большинство из них работает как шарм, но что-то не работает, а некоторые строки не локализованы. Я заметил, что проблема связана с NSLocalizedString, содержащим внутри что-то переменное, например:
NSLocalizedString(" - \(count) Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare")
или же
NSLocalizedString("Notifica per \(medicina!) della prescrizione \(prescription!)\nMemo: \(memoTextView.text)", comment: "Messaggio della Local Notification")
Возможно, это неправильный синтаксис для подобных вещей. Кто-нибудь может объяснить мне, как это сделать быстро? Большое спасибо.
ios
swift
localization
nslocalizedstring
xliff
Андорат
источник
источник
Ответы:
Вы можете использовать
sprintf
параметры формата внутриNSLocalizedString
, поэтому ваш пример может выглядеть так:let myString = String(format: NSLocalizedString(" - %d Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare"), count)
источник
" - %d Notifica"=" - %d Notifica";
%s
модификатор, который не сработал = \%@
для замены строки.В Сессии № 412 WWDC2014 «Локализация с помощью Xcode 6» правильный способ сделать это в Swift следующий:
String.localizedStringWithFormat( NSLocalizedString(" - %d Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare"), count)
источник
Я использовал подход к созданию расширения для String, так как мне нужно локализовать много строк.
extension String { var localized: String { return NSLocalizedString(self, comment:"") } }
Чтобы использовать его для локализации в коде, выполните:
self.descriptionView.text = "Description".localized
Для строк с динамическими переменными выполните следующие действия:
self.entryTimeLabel.text = "\("Doors-open-at".localized) \(event.eventStartTime)"
Объявите строки в файлах String для разных языков (пример: арабский и английский)
Надеюсь поможет!
источник
The doors open at %@ o'clock
. Будет ли ваше решение работать?Localizable.strings
. Однако я думаю, что у @Houman есть серьезные опасения.Я пробовал вышеуказанные решения, но приведенный ниже код работал у меня
SWIFT 4
extension String { /// Fetches a localized String /// /// - Returns: return value(String) for key public func localized() -> String { let path = Bundle.main.path(forResource: "en", ofType: "lproj") let bundle = Bundle(path: path!) return (bundle?.localizedString(forKey: self, value: nil, table: nil))! } /// Fetches a localised String Arguments /// /// - Parameter arguments: parameters to be added in a string /// - Returns: localized string public func localized(with arguments: [CVarArg]) -> String { return String(format: self.localized(), locale: nil, arguments: arguments) } } // variable in a class let tcAndPPMessage = "By_signing_up_or_logging_in,_you_agree_to_our" .localized(with: [tAndc, pp, signin]) // Localization File String "By_signing_up_or_logging_in,_you_agree_to_our" = "By signing up or logging in, you agree to our \"%@\" and \"%@\" \nAlready have an Account? \"%@\"";
источник
Вот расширение, которое я использую в String, оно добавляет функцию localizeWithFormat с переменными аргументами,
extension String:{ func localizeWithFormat(arguments: CVarArg...) -> String{ return String(format: self.localized, arguments: arguments) } var localized: String{ return Bundle.main.localizedString(forKey: self, value: nil, table: "StandardLocalizations") } }
Применение:
let siriCalendarText = "AnyCalendar" let localizedText = "LTo use Siri with my app, please set %@ as the default list on your device reminders settings".localizeWithFormat(arguments: siriCalendarTitle)
Только будьте осторожны, чтобы не использовать те же имена функций и свойств, что и у String. Обычно я использую трехбуквенный префикс для всех своих функций фреймворка.
источник
Я создал
extension
к,String
так как у меня было многоstrings
бытьlocalized
.extension String { var localized: String { return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "") } }
Например:
let myValue = 10 let anotherValue = "another value" let localizedStr = "This string is localized: \(myValue) \(anotherValue)".localized print(localizedStr)
источник
Editor > Export for Localization...
они не будут подбираться.