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
-
cd
en la raíz de su proyecto -
cd en.lproj
: puede reemplazarlo con cualquier localización con la que esté trabajando. -
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:
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"];
Convertirlo en array de cadenas
NSString *fileContents = [NSString stringWithContentsOfFile:localizablePath encoding:NSUTF8StringEncoding error:nil]; NSArray *allLinedStrings = [fileContents componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]];
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