strings multi localize localizable language app ios swift localization nslocalizedstring xliff

ios - multi - swift string localization



NSLocalizedString con variable rĂ¡pida (6)

Estoy tratando de localizar mi aplicación usando NSLocalizedString. Cuando importo el archivo XLIFF, la mayoría funciona como un encanto, pero algo no funciona y algunas cadenas no están localizadas. He notado que el problema es de NSLocalizedString que contiene algo variable dentro como:

NSLocalizedString(" - /(count) Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare")

o

NSLocalizedString("Notifica per /(medicina!) della prescrizione /(prescription!)/nMemo: /(memoTextView.text)", comment: "Messaggio della Local Notification")

Quizás esta no sea la sintaxis correcta para este tipo de cosas. ¿Alguien me puede explicar cómo hacerlo rápidamente? Muchas gracias.


Aquí hay una extensión que uso en String, agrega una función localizeWithFormat con argumentos variables,

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") } }

Uso:

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)

Solo tenga cuidado de no usar la misma función y nombres de propiedad que String tiene. Normalmente uso un prefijo de 3 letras para todas mis funciones de marco.


Creé una extension para String ya que tenía muchas strings para localized .

extension String { var localized: String { return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "") } }

Por ejemplo:

let myValue = 10 let anotherValue = "another value" let localizedStr = "This string is localized: /(myValue) /(anotherValue)".localized print(localizedStr)


En la sesión n. ° 412 de WWDC2014 "Localización con Xcode 6", la forma correcta de hacerlo en Swift es la siguiente:

String.localizedStringWithFormat( NSLocalizedString(" - %d Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare"), count)


He seguido el enfoque de crear una extensión para String, ya que tengo muchas cadenas para localizar.

extension String { var localized: String { return NSLocalizedString(self, comment:"") } }

Para usarlo para la localización en código, haga lo siguiente:

self.descriptionView.text = "Description".localized

Para cadenas con variables dinámicas, siga:

self.entryTimeLabel.text = "/("Doors-open-at".localized) /(event.eventStartTime)"

Declarar las cadenas en archivos de cadenas para diferentes idiomas (ejemplo: árabe e inglés)

¡La esperanza te ayudará!


Probé las soluciones anteriores, sin embargo, el siguiente código funcionó para mí

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? /"%@/"";


Puede usar los parámetros de formato sprintf dentro de NSLocalizedString , por lo que su ejemplo puede verse así:

let myString = String(format: NSLocalizedString(" - %d Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare"), count)