ios objective-c swift ios7 localization

ios - Compruebe si el archivo Localizable.strings es válido



objective-c swift (5)

Estoy creando localizable, archivo de cadenas programáticamente. Estoy descargando el archivo del servidor y mostrando la localización de ese archivo.

Pero si hay algún error en el archivo, entonces mi localización no funciona. Me muestra las llaves. Si en el servidor edito el archivo de localización y agregué una cadena como

"HELLO_WORLD" = Hola

Aquí, la clave es correcta pero el valor no está en el formato correcto. El formato debe ser como

"HELLO_WORLD" = "Hola";

¿Cómo puedo verificar en tiempo de ejecución si mi archivo Localizable.strings no contiene ningún error y es válido?

Por favor ayuda


Además de la respuesta de @Aderstedt:

plutil -lint Localizable.strings funciona, pero debes ejecutarlo para cada versión del archivo. P.ej

  1. cd en la raíz de su proyecto
  2. cd en.lproj : puede reemplazarlo con cualquier localización con la que esté trabajando.
  3. plutil -lint Localizable.strings

Cuando ejecute el paso 3, se le mostrará un error que le indicará qué es lo que está mal en su archivo. O le dirán que el archivo está bien.


Como se mencionó anteriormente, plutil (utilidad de lista de propiedades) es una excelente herramienta para validar sus archivos .plist y .strings si los edita manualmente. Puede aplicarlo a todos sus archivos .strings combinándolo con find . En su directorio de proyectos ejecute

find . -name *.strings -exec plutil -lint {} /;

o usar

find . -path ./DerivedData -prune -o -name *.strings -exec plutil -lint {} /;

si desea excluir su directorio DerivedData (como normalmente lo hago).


Hay muchas respuestas, pero no se enfocaron en los puntos principales, es "verificar programáticamente en tiempo de ejecución ". Mi sugerencia es:

  1. Encuentre programáticamente la ruta de su programa de archivo descargado (como ... / Documents / YourApp.bundle / fr-FR.lproj / Localizable.strings)

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings" inDirectory:nil forLocalization:@"ja"];

  2. Convertirlo en array de cadenas

    NSString *fileContents = [NSString stringWithContentsOfFile:localizablePath encoding:NSUTF8StringEncoding error:nil]; NSArray *allLinedStrings = [fileContents componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]];

  3. Verifique todas las líneas de allLinedStrings manualmente o con expresiones regulares. El siguiente código es un ejemplo de verificación manual con algunas reglas simples:

    for (NSString *line in allLinedStrings) { if (line.length >= 2) { NSString *firstTwoCharacters = [line substringToIndex:2]; if (![firstTwoCharacters isEqualToString:@"//"]){ if (![line containsString:@"/";"]) { NSLog(@"Invalid line"); } NSUInteger numberOfOccurrences = [[line componentsSeparatedByString:@"/""] count]; if (numberOfOccurrences < 4) { NSLog(@"Invalid line"); } } } else if (line.length > 0) { NSLog(@"Invalid line"); } }


Tuve el mismo problema y encontré que el plural no es lo suficientemente "detallado". La gente que edita los archivos quería algo que les dijera más exactamente qué es lo que está mal.

Plutil es demasiado amplio.

Así que escribí una herramienta java rápida y sucia para probar un archivo de cadenas:

https://github.com/Daij-Djan/parseAndValidateAppleStringsFile

descargo de responsabilidad: mi código


Usa plutil desde la terminal:

plutil -lint Localizable.strings