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.