ios - localizable string swift 4
iOS-NSLocalizedString solo devuelve la cadena clave (3)
Cambie el nombre del archivo InfoPlist.strings a Localizable.strings (doble clic) y luego obtendrá la cadena correcta para esa clave.
Estoy teniendo problemas para depurar mi implementación de NSLocalizedString
. Debería ser simple, pero haga lo que haga, la función solo devuelve la cadena KEY
.
Estoy usando XCode 4.5 e iOS6, entonces yo:
- Se agregó un nuevo archivo llamado
File.strings
. - En la configuración de mi proyecto, agregué inglés y español como configuración de idioma.
- Hizo clic en "Hacer localizado" en el inspector de archivos, y me aseguré de que se seleccionaran las opciones en inglés y español, y también que se seleccionara la membresía de destino para mi objetivo.
- Se agregó
"KEY" = "TestEnglish";
a mi inglésFile.strings
- Se agregó
"KEY" = "TestSpanish";
a mi españolFile.strings
- Se agregó
NSLog(@"Localization: %@/n", NSLocalizedString(@"KEY", nil));
a mi archivo.m
Cuando ejecuto la aplicación, el valor "KEY"
siempre se muestra impreso en NSLog
.
Para saltar a esto un poco más, intenté esto también:
NSString *path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSString *str = [[NSBundle bundleWithPath:path] localizedStringForKey:@"KEY" value:@"" table:nil];
NSLog(@"Localization: %@/n", str);
y todavía se imprime el valor "KEY
", sin embargo, la path
es una ruta válida.
¿Alguien tiene alguna pista sobre cómo depurar esto? Siento que he leído todas las preguntas y respuestas SO, pero ninguna de las sugerencias me ayuda.
Me doy cuenta de que NSLocalizedString
devuelve la cadena KEY
cuando no puede coincidir con una clave, pero no veo cómo puedo depurar por qué mi aplicación podría no coincidir con la clave.
También borré / limpié la aplicación una docena de veces.
Si especifica table:nil
, entonces NSBundle
intentará obtener la localización de la tabla predeterminada (la de SOMELANG.lproj/Localizable.strings
). Si tiene la localización en otro lugar, debe especificar explícitamente la tabla usando la table:@"File"
(o usar la macro NSLocalizedStringFromTable()
manera similar:
NSString *value = NSLocalizedStringFromTable(@"key", @"File", nil);
En mi caso, el problema era con el caso de la cadena: "bla.bla.blabla.Book S lot", mientras que Localizable.strings lo tenía definido como "bla.bla.blabla.Book s lot"
Por lo tanto, verifique que la cadena clave esté en el caso correcto. Mejor aún, copiar y pegar.