objective-c nslocalizedstring

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];