2011-01-04 6 views
0

私のXCodeプロジェクトの特定の.mファイルからすべてのNSStringをリッピングしたいので、より簡単にローカライズできます。Xcodeの.mファイルからNSStringsを解析します。

誰でも助けることができるRegex-gurusはありますか?私はPerlやRubyが良い場所になるかもしれないと思っていますか?

NSStringsは、コード内で次のようになります。

NSString * myStringWhichShouldHaveBeenLocalizedToBeginWith = @"foo"; 

が、私が本当にしたい部分だけ"foo" という @です。

+0

いくつかのサンプルデータは、PerlやRubyに慣れていてXCodeには慣れていない人にとって役に立ちます。 –

答えて

2

これには既に組み込みのメカニズムがあります。 Cocoa string resource docsを参照してください。

genstringsは、文字列を抽出し、変換のために.stringsファイルに書き込むツールです。 NSLocalizedStringマクロ(およびその他の関連)を使用すると、ロケール固有の.stringsファイルからローカライズされた文字列を簡単に取得できます。 genstringsはNSLocalizedStringで使用されている文字列だけをすべて抽出しません。NSLocalizedStringはローカライズされた文字列なので、 ""ます。

単に「NSStringの」で始まる行をスキップします
+0

はい私はgenstringsに精通しています。残念なことに、私はたくさんのNSStringsを持つプロジェクトを継承し、比較的シンプルなメカニズムを使ってファイルからそれらを取り除きたいと思っています。ありがとう、しかし! – Genericrich

0
perl -wln -e 'next if /^NSString/; print' whatever.m > nonsstring.m 

- あなたは凝った何かをしたい場合は、NSStringsを持っているラインの部品を交換するように、あなたは私たちにいくつかのより多くの情報を与える必要があります。

EDIT:さて、

use strict; 
use warnings; 
use 5.010; 
use autodie; 

my $file = 'whatever.m'; 

open my $fh, '<', $file; 

while (<$fh>) { 
    say $+{capture} for /NSString 
          \s* \* \s* 
          [^=]+ \s* = \s* 
         (?<capture>@[^;]+?); 
         /gx; 
} 

..明確あたりとして、あるいは便利なワンライナーとして:

perl -wln -E 'print $+{capture} for /NSString\s*\*\s*[^=]+\s*=\s*(?<capture>@[^;]+?);/g' whatever.m 

編集:私は、データの形式を知らないので、これを変更して、単一レコード内の複数のNSStringを処理します。

0

はこれを試してみてください:

perl -nle 'while (/(@".*?")/g) { print "$1\n";}' <source file> 

これは正しくエスケープ引用符文字または複数行のNSStringを含む文字列を処理しませんが、それはあなたのために十分な、おそらく近いです。

関連する問題