2009-11-06 11 views
20

アップル/ iPhoneアプリケーションのローカリゼーションに使用されるローカライズ可能な文字列ファイルは、次の形式をとります。ローカライズ可能な文字列ファイルを比較/マージ/ソートするツールはありますか?

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

KEYは、特定の文字列ファイルで一意です。
COMMENTはオプションですが、いくつかの追加情報で翻訳者を助けることができます。

例:

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

2つの文字列ファイルを差分/マージし、オプションでその種類のファイルをソートしたいと思います。 これらの操作を実行しているときにコメントが保持されるとよいでしょう。

形式は非常に単純で、私はそれを行うためのPythonスクリプトを書こうとしますが、もし誰かが既にそれをしているなら、私は車輪を再植替えしたくはありません;)

操作できるツールを知っていますか文字列ファイル?

答えて

26

コードに新しい文字列が追加され、すべてのファイルを手動で管理したくない場合、開発中にLocalized.stringsを適切に管理することが必死でした。

私はLocalization Managerを見つけましたが、これは非常にうまくいきます。それは存在しないドキュメントを持っていますが、翻訳者のための別のプログラムが付属しています。文字列をインポートし、変更を追跡し、必要なファイルをプロジェクトに戻します。

今まではフリーウェアのようです。

+1

ローカリゼーションマネージャーが素晴らしいです!私の悪夢の終わり!このツールが1000倍も優れている場合、diffstringスクリプトはどのように受け入れられる解決策になりますか? – Martin

+1

私には分かりませんが、なぜこのサイトでそれを使用する方法について言及していないのですか?そのページにはゼロの情報があり、ダウンロードするにはさまざまなファイルがあります。本当に奇妙なプロジェクト。 – dontWatchMyProfile

+0

あなたがそれを理解したら、それは素晴らしいことです! –

-3

/Developer/Applications/Utilities/FileMerge.appを試すことができます。それはいつも良いスタートです。また、genstringsを試してください。

2

私はThree20 projectから、このツールを見つけました:

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

それは私が想像していたかの異なる方法で私の最初の必要性に答える:
それは見るために、メインのロケールおよびその他のロケールの間のdiffをすることができます他のロケールで翻訳する必要があるもの そして翻訳された文字列をマージします。

翻訳者に与えるためにxmlファイルを出力することに注意してください。

+0

diffstrings.pyを使用するには?私はエラーが発生し続ける:トレースバック(最新の最後の呼び出し): ファイル "diffstrings.py"、行656、 main() ファイル "diffstrings.py"、行638、メイン のプロジェクト=リスト(openProjects (projectPaths、options.locale)) ...などです。このツールは驚くほど貴重なものです。私は何がうまくいかないかを知るためにPythonについて十分に知りません。 (パスとして渡される引数が不思議に思えます。 "ソースファイル?"どのソースファイルですか?) –

+0

回答のリンクが404のように見えるため、https://github.com/alunny/three20/blob/master/diffstrings.py – Isaac

6

私がthis postで言ったように、私は最近Mac App StoreにLocalizable Strings Mergeという無料のアプリを見つけました。それはまさにあなたが尋ねること、さらに分類/美化を行います。それは無料です。それが役に立てば幸い。

醜い
+0

非常に便利でシンプルなので、それを使用する価値があり、多くの時間を節約できます。 – DreamOfMirrors

+1

もう無料ではありませんが、とにかく私はそれが非常に便利だと思います。 – ivanzoid

0

が、両方の文字列ファイルを開いて、それらをマージする

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

使用のTextWranglerを動作します。

これは簡単で無料です。

あなたはTextWranglerの

  • であなた

    1. オープン文字列ファイルの両方を選択し、比較
    2. 以下

    、それがどのように見えるかのスクリーンショットです上のクリックしたときに何が起こるかをここで見ることができます。

    enter image description here

  • +0

    これは問題を解決するための貴重なヒントになるかもしれませんが、良い答えが解決策を示しています。あなたが意味することを示すサンプルコードを提供するために[編集]してください。代わりに、これをコメントとして書くことを検討してください。 –

    関連する問題