strings multi localize localizable language app ios swift internationalization string-formatting

ios - multi - ¿Cómo formatear cadenas localizadas en Swift?



nslocalizedstring swift (3)

Estoy aprendiendo a localizar mi aplicación a chino simplificado. Estoy siguiendo este tutorial sobre cómo hacer esto.

Debido a que el tutorial se basa en Obj-C, las cadenas formateadas pueden escribirse así:

"Yesterday you sold %@ apps" = "Ayer le vendió %@ aplicaciones";

"¿Te gusta?" = "~ Es bueno? ~";

Pero estoy usando Swift. Y en Swift no creo que puedas usar %@ para indicar que hay algo para colocar allí. Tenemos la interpolación de cuerdas ¿verdad?

Mi aplicación está relacionada con las matemáticas. Y quiero mostrar qué entrada (s) se usa para calcular el resultado en una etiqueta detallada de una celda de vista de tabla. Por ejemplo

-------------- 1234.5678 From x, y <---- Here is the detailed label --------------

Aquí, From x, y significa "el resultado se calcula a partir de x e y". Quiero traducir esto al chino:

从 x, y 得出

Antes, solo puedo usar esto:

"From /(someVariable)"

con el archivo de cadenas:

"From" = "从 得出";

Y así es como lo usaría en código.

"/(NSLocalizedString("From", comment: "")) /(someVariable)"

Pero si esto se usó en la versión china, la cadena final será así:

"从 得出 x, y"

Quiero decir que puedo poner y 得出 en dos entradas diferentes en el archivo de cadenas. ¿Pero hay una mejor manera de hacerlo?


Desde la WWDC 2017 :

let format = NSLocalizedString("%d popular languages", comment:"Number of popular languages") label.text = String.localizedStringWithFormat(format, popularLanguages.count)


En el objetivo C, si queremos que se agreguen cadenas en el tiempo de ejecución como se muestra a continuación

John Appleseed es el nombre

YourLocalizable.strings

"theStringToDisplay" = "%@ is the name";

ViewController.m

NSString *username = @"John Appleseed"; NSString *messageBeforeFormat = NSLocalizedStringFromTable(@"theStringToDisplay", @"YourLocalizable", nil); NSString *messageAfterFormat = [NSString stringWithFormat:messageBeforeFormat, username ]; self.yourLabel.text = messageAfterFormat;

Explicación adicional en esta bonita publicación.

https://www.oneskyapp.com/academy/learn-ios-localization/2-format-strings-plurals/


Puede usar %@ en la String(format:...) de Swift String(format:...) , se puede sustituir por una String Swift o cualquier instancia de una subclase de NSObject . Por ejemplo, si el archivo Localizable.strings contiene la definición

"From %@, %@" = "从 %@, %@ 得出";

entonces

let x = 1.2 let y = 2.4 let text = String(format: NSLocalizedString("From %@, %@", comment: ""), "/(x)", "/(y)") // Or alternatively: let text = String(format: NSLocalizedString("From %@, %@", comment: ""), NSNumber(double: x), NSNumber(double: y))

produce "从 1.2, 2.4 得出". Otra opción sería usar el formato %f para los números de punto flotante doble:

"From %f, %f" = "从 %f, %f 得出";

con

let text = String(format: NSLocalizedString("From %f, %f", comment: ""), x, y)

Vea la respuesta de Niklas para una solución aún mejor que también localiza la representación numérica.