objective c - NSLocalizedString con formato
objective-c (3)
¿Cómo usaría NSLocalizedString
para esta cadena?
[NSString stringWithFormat:@"Is “%@“ still correct for “%@“ tap “OK“ otherwise tap “Change“ to choose new contact details", individual.contactInfo, individual.name];
Cuando uso stringWithFormat antes de usarlo de la siguiente manera:
[NSString stringWithFormat:@"%d %@", itemCount, NSLocalizedString(@"number of items", nil)];
Dado que las oraciones se pueden construir con las partes variables en un orden diferente en algunos idiomas, entonces creo que debería usar argumentos posicionales con [NSString stringWithFormat:]
:
NSString *format = NSLocalizedString(@"number_of_items", @"Number of items");
Que cargaría la siguiente cadena para inglés:
@"Is /"%1$@/" still correct for /"%2$@/" tap /"OK/" otherwise tap /"Change/" to choose new contact details"
Y tal vez algo más para el francés (no sé francés, así que no intentaré una traducción, pero bien podría tener el primer y el segundo argumento en un orden diferente):
"French /"%2$@/" french /"%1$@/" french"
Y puede formatear la cadena de manera segura como siempre:
NSString *translated = [NSString stringWithFormat:format individual.contactInfo, individual.name];
Solo quiero agregar una definición muy útil que uso en muchos de mis proyectos.
He agregado esta función a mi archivo de header prefix
:
#define NSLocalizedFormatString(fmt, ...) [NSString stringWithFormat:NSLocalizedString(fmt, nil), __VA_ARGS__]
Esto le permite definir una cadena localizada como la siguiente:
"ExampleScreenAuthorizationDescriptionLbl"= "I authorize the payment of %@ to %@.";
y puede usarse a través de:
self.labelAuthorizationText.text = NSLocalizedFormatString(@"ExampleScreenAuthorizationDescriptionLbl", self.formattedAmount, self.companyQualifier);
[NSString stringWithFormat:NSLocalizedString(@"Is “%@“ still correct for “%@“ tap “OK“ otherwise tap “Change“ to choose new contact details", @"Query if parm 1 is still correct for parm 2"), individual.contactInfo, individual.name];