2009-11-06 8 views
20

plik Lokalizowane struny, które są stosowane dla Apple/iPhone apps lokalizacja mieć następujący format:Czy istnieje narzędzie do różnicowania/scalania/sortowania plików ciągów podlegających lokalizacji?

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

Zauważ, że KEY jest unikalna w danym strings pliku.
COMMENT jest opcjonalny, ale może pomóc tłumaczowi z dodatkowymi informacjami.

przykład:

 
/* 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";

Chciałbym diff/połączyć dwa pliki łańcuchy i ewentualnie rodzaj tego typu plików. Byłoby wspaniale, gdyby komentarze były przechowywane podczas wykonywania tych operacji.

Format jest dość prosty i mógłbym napisać powiedzmy skrypt python to zrobić, ale jeśli ktoś już zrobił, że wolę nie reinveting koło;)

Wiesz narzędzie, które może manipulować plik ciągów?

Odpowiedz

26

Byłem zdesperowany, aby znaleźć porządny sposób zarządzania Localized.strings podczas programowania, gdy do kodu dodawane są nowe ciągi i nie chcesz ręcznie zarządzać wszystkimi plikami.

Znalazłem Localization Manager, który robi to całkiem dobrze. Ma nieistniejącą dokumentację, ale jest dostarczany z osobnym programem dla tłumaczy. Importuje ciągi, śledzi zmiany i eksportuje potrzebne pliki Localization.strings z powrotem do projektu.

Do tej pory wydaje się być darmowy.

+1

Localization Manager jest niesamowity! Koniec mojego koszmaru! W jaki sposób skrypt diffingowy może być tutaj akceptowanym rozwiązaniem, gdy to narzędzie robi to 1000 razy lepiej !? – Martin

+1

Czego nie rozumiem, dlaczego ta strona nawet nie wspomina, jak z tego korzystać? Na tej stronie jest zero informacji i wiele różnych plików do pobrania. Naprawdę dziwny projekt. – dontWatchMyProfile

+0

Po zrozumieniu tego, jest po prostu świetne! –

-3

Możesz spróbować /Developer/Applications/Utilities/FileMerge.app. To zawsze dobry początek. Powinieneś także spróbować genstrings.

2

znalazłem to narzędzie z Three20 project:

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

Odpowiada moje początkowe potrzeby w inny sposób, co sobie wyobrażałem:
może diff między głównej lokalizacji i innych lokalizacjach oglądnąć co wymaga tłumaczenia w innych lokalizacjach. A następnie wróć do przetłumaczonych ciągów.

Należy zauważyć, że generuje pliki xml, które należy przekazać tłumaczom.

+0

Czy istnieje dokumentacja dotycząca sposobu korzystać z diffstrings.py? Wciąż dostaję błędy: Traceback (ostatnie ostatnie połączenie): Plik "diffstrings.py", wiersz 656, w główny() Plik "diffstrings.py", wiersz 638, główny projects = list (openProjects (projectPaths, options.locale)) ... i tak dalej. To narzędzie wydaje się niezwykle cenne; Po prostu nie wiem wystarczająco dużo o Pythonie, aby dowiedzieć się, co jest nie tak. (Nawet argumenty, które należy przekazać jako ścieżki, wydają się tajemnicze. "Pliki źródłowe?" Które pliki źródłowe?) Każda pomoc będzie doceniona. –

+0

Jako link w odpowiedzi wydaje się być 404: https://github.com/alunny/three20/blob/master/diffstrings.py – Isaac

6

Jak już powiedziałem w this post, niedawno znalazłem bezpłatną aplikację o nazwie Localizable Strings Merge w sklepie Mac App Store. Robi dokładnie to, o co prosisz, nawet sortowanie/upiększanie. I jest za darmo. Mam nadzieję, że to pomoże.

+0

Bardzo przydatny i prosty, warto go używać, oszczędza dużo czasu. – DreamOfMirrors

+1

Już nie za darmo, ale i tak uważam to za bardzo przydatne. – ivanzoid

0

brzydki, ale działa

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

Zastosowanie TextWrangler otworzyć oba pliki ciągów i połączyć je.

To też jest łatwe i darmowe!

Widać tutaj, co się dzieje, kiedy

  1. otworzyć pliki ciągów w TextWrangler
  2. Wybierz oba, a następnie kliknij porównać

Poniżej znajduje się zrzut ekranu jak to wygląda:

enter image description here

+0

Chociaż może to być cenna wskazówka, aby rozwiązać problem, dobra odpowiedź pokazuje również rozwiązanie. Proszę [edytuj], aby podać przykładowy kod, aby pokazać, co masz na myśli. Ewentualnie rozważ napisanie tego jako komentarza. –

Powiązane problemy