iphone - sincronizados - ¿Existe una herramienta para diferenciar/fusionar/ordenar archivos de cadenas localizables?
limitar correos iphone 7 (7)
Como dije en esta publicación , recientemente encontré una aplicación gratuita llamada Localizable Strings Merge en la Mac App Store. Hace exactamente lo que pides, incluso la clasificación / embellecimiento. Y es gratis. Espero eso ayude.
Los archivos de cadenas localizables que se utilizan para la localización de aplicaciones de Apple / iPhone tienen el siguiente formato:
/* COMMENT */ "KEY" = "VALUE"
Tenga en cuenta que KEY es único en un archivo de cadenas dado.
COMENTARIO es opcional, sin embargo, puede ayudar al traductor con información adicional.
Ejemplo:
/* Menu item to make the current document plain text */ "Make Plain Text" = "Make Plain Text"; /* Menu item to make the current document rich text */ "Make Rich Text" = "Make Rich Text";
Me gustaría diferenciar / fusionar dos archivos de cadenas y, opcionalmente, ordenar ese tipo de archivos. Sería genial si los comentarios se mantuvieran mientras se realizan estas operaciones.
El formato es bastante simple y podría escribir, digamos un script en Python para hacer eso, pero si alguien ya lo ha hecho, prefiero no reinventar la rueda;)
¿Conoces una herramienta que pueda manipular archivos de cadenas?
Encontré esta herramienta del proyecto Three20 :
http://github.com/facebook/three20/blob/master/diffstrings.py
Responde a mi necesidad inicial de manera diferente a lo que había imaginado:
puede diferir entre la configuración regional principal y las demás configuraciones regionales para ver qué es necesario traducir en cada configuración regional. Y luego fusionar de nuevo las cadenas traducidas.
Tenga en cuenta que genera archivos xml para entregar a los traductores.
Feo pero funciona
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString* f1 = [NSString stringWithCString:argv[1] encoding:NSUTF8StringEncoding];
NSString* f2 = [NSString stringWithCString:argv[2] encoding:NSUTF8StringEncoding];
//
NSLog(@" Comparing %@ to %@/n", f1, f2);
//
NSError* error;
if ( [f1 hasPrefix:@"~"] ) {
f1 = [f1 stringByReplacingOccurrencesOfString:@"~" withString:NSHomeDirectory()];
}
if ( [f2 hasPrefix:@"~"] ) {
f2 = [f2 stringByReplacingOccurrencesOfString:@"~" withString:NSHomeDirectory()];
}
NSStringEncoding encoding;
NSString* f1Content = [NSString stringWithContentsOfFile:f1 usedEncoding:&encoding error:&error];
NSString* f2Content = [NSString stringWithContentsOfFile:f2 usedEncoding:&encoding error:&error];
//
NSArray* f1Strings = [f1Content componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
NSArray* f2Strings = [f2Content componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
for (NSString* keyString in f1Strings) {
NSString* trimKey = [keyString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ( !trimKey || [trimKey isEqualToString:@""] )
continue;
NSString* key = [keyString componentsSeparatedByString:@" = "][0];
BOOL found = NO;
for (NSString* keyString2 in f2Strings) {
if ( [keyString2 hasPrefix:key] ) {
found = YES;
break;
}
}
if ( !found ) {
printf("%s/n/n", [keyString UTF8String]);
}
}
}
return 0;
}
Puede probar /Developer/Applications/Utilities/FileMerge.app
. Eso siempre es un buen comienzo. Además, deberías probar genstrings
.
https://github.com/luckytianyiyan/TyStrings
$ tystrings diff diff1.strings diff2.strings
>>> Parsing File1 Reference...
>>> Parsing File2 Reference...
>>> Comparing...
+----+---------+---------+-------------+---------+
| | File1 | File2 | Key | Value |
|----+---------+---------+-------------+---------|
| + | 2 | | diff.test.0 | Test0 |
| - | | 2 | diff.test.0 | Test |
| - | | 5 | diff.test.4 | Test4 |
| + | 8 | | diff.test.2 | Test2 |
| - | | 11 | diff.test.3 | Test3 |
+----+---------+---------+-------------+---------+
Estaba desesperado por encontrar una manera decente de administrar Localized.strings
durante el desarrollo, cuando se agregan nuevas cadenas al código y no desea administrar manualmente todos los archivos.
Encontré el administrador de localización que hace esto bastante bien. Tiene una documentación inexistente, pero viene con un programa separado para los traductores. Importa sus cadenas, realiza un seguimiento de los cambios y exporta los archivos necesarios de Localization.strings
a su proyecto.
Hasta ahora parece ser freeware.