2009-11-06 10 views
20

archivo de cadenas localizables que se utilizan para Apple/iPhone Apps localización tiene el siguiente formato:¿Hay alguna herramienta para distinguir/fusionar/ordenar archivos de cadenas localizables?

/* COMMENT */ 
"KEY" = "VALUE"

Tenga en cuenta que CLAVE es única en un determinado cadenas archivo.
COMENTARIO es opcional pero 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 diferencias/fusión de dos archivos de cuerdas y, opcionalmente, una especie ese tipo de archivos. Sería genial si los comentarios se mantienen mientras se realizan estas operaciones.

El formato es muy simple y yo podría escribir digamos que un script en Python para hacer eso, pero si alguien ya ha hecho eso, prefiero no reinveting la rueda;)

¿Conoce una herramienta que puede manipular archivo de cadenas?

Respuesta

26

Estaba desesperado por encontrar una forma decente para administrar Localized.strings durante el desarrollo, cuando hay nuevas cadenas agregadas al código y no desea administrar todos los archivos manualmente.

Encontré Localization Manager que hace esto bastante bien. Tiene una documentación inexistente, pero viene con un programa separado para los traductores. Importa tus cadenas, realiza un seguimiento de los cambios y exporta los archivos Localization.strings necesarios a tu proyecto.

Hasta ahora parece ser freeware.

+1

¡Localization Manager es increíble! ¡El final de mi pesadilla! ¿Cómo puede el script diffstring ser la solución aceptada aquí cuando esta herramienta lo hace 1000 veces mejor? – Martin

+1

Lo que no entiendo es, ¿por qué este sitio ni siquiera menciona cómo usarlo? No hay información en esa página, y muchos archivos diferentes para descargar. Proyecto realmente extraño. – dontWatchMyProfile

+0

¡Una vez que lo entendiste, es genial! –

-3

Puede intentar /Developer/Applications/Utilities/FileMerge.app. Eso siempre es un buen comienzo. Además, debes probar genstrings.

2

me encontré con esta herramienta desde el Three20 project:

http://github.com/facebook/three20/blob/master/diffstrings.py

Responde a mi necesidad inicial en forma diferente de lo que había imaginado:
puede diff entre el local principal y los otros lugares para ver qué necesita traducirse en cada otro lugar. Y luego fusionar las cadenas traducidas.

Tenga en cuenta que genera archivos xml para entregar a los traductores.

+0

¿Hay alguna documentación sobre cómo usar diffstrings.py? Sigo recibiendo errores: Rastreo (llamada más reciente pasado): Archivo "diffstrings.py", línea 656, en principales() de archivos "diffstrings.py", línea 638, en los principales proyectos = lista (OpenProjects (projectPaths, options.locale)) ... y así sucesivamente. Esta herramienta parece increíblemente valiosa; Simplemente no sé lo suficiente sobre Python para descubrir qué está pasando mal. (Incluso los argumentos que deben transmitirse como caminos parecen misteriosos. "¿Archivos fuente?" ¿Qué archivos fuente?) Cualquier ayuda sería apreciada. –

+0

Como el enlace en la respuesta parece ser 404: https://github.com/alunny/three20/blob/master/diffstrings.py – Isaac

6

Como dije en this post, recientemente encontré una aplicación gratuita llamada Localizable Strings Merge en Mac App Store. Hace exactamente lo que pide, incluso la clasificación/embellecimiento. Y es gratis. Espero eso ayude.

+0

Muy útil y simple, vale la pena usarlo ahorra mucho tiempo. – DreamOfMirrors

+1

Ya no es gratuito, sin embargo, de todos modos, lo encuentro muy útil. – ivanzoid

0

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; 
} 
0

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 | 
+----+---------+---------+-------------+---------+ 
-2

Uso TextWrangler para abrir tanto los archivos de cuerda y fusionarlas.

¡Es fácil y gratis también!

Se puede ver aquí lo que pasa cuando

  1. abrir los archivos de cadena en TextWrangler
  2. seleccionar ambos y luego haga clic en comparar

A continuación se muestra la captura de pantalla de cómo se ve:

enter image description here

+0

Si bien esto podría ser una pista valiosa para resolver el problema, una buena respuesta también demuestra la solución. Por favor [edite] para proporcionar un código de ejemplo para mostrar lo que quiere decir. Alternativamente, considere escribir esto como un comentario en su lugar. –

Cuestiones relacionadas