2012-08-17 12 views
6

Estoy creando una aplicación Mac y quiero localizar mis etiquetas. Pensé que un archivo .strings sería una mejor opción. Pero tengo problemas para leer el archivo .strings en Objective-C. Estoy buscando un método más simple.¿Leíste el archivo .strings en Objective-C?

Este es el contenido de mi .string archivo:

"LABEL_001" = "Start MyApp"; 
"LABEL_002" = "Stop MyApp"; 
"LABEL_003" = "My AppFolder"; 
... 

ya he mirado http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/LoadingResources/Strings/Strings.html.

Este es mi código:

NSBundle *bundle = [NSBundle mainBundle]; 
NSString *strFilePath = [[NSBundle mainBundle] pathForResource:@"Labels" ofType:@"strings"]; 
NSString *tt =NSLocalizedStringFromTableInBundle(@"LABEL_001",strFilePath,bundle, nil); 
NSLog(@"STRING ::: %@",tt); 

Pero la cadena tt da "LABEL_001", quiero "Start MyApp"

¿Qué estoy haciendo mal?

+0

¿Has mirado en NSLocalizedString? – Luke

Respuesta

23

Uno. Debe nombrar su archivo Localizable.strings en el directorio <LANGUAGENAME>.lproj en el paquete de la aplicación.

Dos. Use la macro NSLocalizedString:

NSString *loc = NSLocalizedString(@"LABEL_001", nil); 

Tres. Si nada funciona, puede inicializar un NSDictionary utilizando un archivo de cadenas, como un archivo de cadenas es un tipo especial de plist:

NSString *fname = [[NSBundle mainBundle] pathForResource:@"whatever" ofType:@"strings"]; 
NSDictionary *d = [NSDictionary dictionaryWithContentsOfFile:fname]; 
NSString *loc = [d objectForKey:@"LABEL_001"]; 
+0

funciona bien – svmrajesh

2
NSString *path = [[NSBundle mainBundle] pathForResource:@"Labels" ofType:@"strings"]; 
    NSData *plistData = [NSData dataWithContentsOfFile:path]; 
    NSString *error; NSPropertyListFormat format; 

    NSDictionary *dictionary = [NSPropertyListSerialization propertyListFromData:plistData 
                  mutabilityOption:NSPropertyListImmutable 
                    format:&format 
                  errorDescription:&error]; 
    NSString *stringname = [dictionary objectForKey:@"LABEL_001"]; 

Creo que va a ser útil para usted.

1

Aquí el código

NSBundle *bundle = [NSBundle mainBundle]; 
NSString *strFilePath = [[NSBundle mainBundle] pathForResource:@"Labels" ofType:@"strings"]; 
NSString *tt =NSLocalizedStringFromTableInBundle(@"LABEL_001",strFilePath,bundle, nil); 
NSLog(@"STRING ::: %@",tt); 

El problema aquí es la segunda Param "strFilePath", cambiarlo a @ "etiquetas" para que el código anterior podría llegar a ser,

NSString *tt =NSLocalizedStringFromTableInBundle(@"LABEL_001",@"Labels",bundle, nil); 

Como referencia, la siguiente línea copiada de Apple Docs con respecto al nombre de la tabla, "Al especificar un valor para este parámetro, incluya el nombre del archivo sin la extensión .strings".

Espero que esto ayude.

0

código simple

Basta con crear un método de la siguiente manera

- (void)localisationStrings 
{ 
    NSString* path = [[NSBundle mainBundle] pathForResource:@"localisation" ofType:@"strings"]; 
    NSDictionary *localisationDict = [NSDictionary dictionaryWithContentsOfFile:path]; 
    NSLog(@"\n %@",[localisationDict objectForKey:@"hello"]); 
}