2011-12-06 8 views
7

私は最初のローカライズされたアプリケーションを構築しようとしています。 NSLocalizedString(genstringsツール用)を使用してコード内のすべての文字列を翻訳しました。今私はibtoolにぶつかっています。増分ローカリゼーションはどのように機能しますか?マニュアルページに関しては、次のような記述が必要です。増分ローカリゼーションはどのように機能しますか?

$ ibtool --previous-file path/to/prev.xib \ 
--incremental-file path/to/inc.xib --localize-incremental \ 
--write path/to/new.xib mod.xib 

インクリメンタルファイルはどこで入手できますか?もし私がバージョンコントロール(git/svn)を使用しているのであれば、 "古い"ファイルは数回前にコミットされ、インクリメンタルファイルはdiffとpath/to/new.xibが新しく生成されたxibファイルになります。 mod.nibは私にとって謎です。誰が私にこの作品の仕組みを説明できますか?また、以前のバージョンがない場合(つまり、インクリメンタルではなく初期ローカリゼーションを行っている場合)、xibのローカライズを開始するにはどうすればよいですか?

答えて

12

特に、--incremental-fileの用語の選択が混乱の原因になると思います。その考えは、xibの古いバージョンを2つの言語(ソースとターゲット)で使用し、ソース言語でそれを変更し、ターゲット言語のバージョンを一致させるように更新することです。

例を考えてみましょう。以前はhome.xibを英語(ソース言語)で使用していて、それをフランス語(ターゲット言語)に翻訳する人がいました。以来、あなたは新しい機能を開発しました。あなたはUILabelとUITextFieldを追加して物事を動かしたhome.xibの更新版を英語で提供しています。あなたが示したコマンドは、新しいUILabelとUITextFieldを持つようにフランス語でhome.xibの更新版を手に入れるのに役立ちます。新しいUILabelとUITextFieldで設定したテキストコンテンツはすべて英語で追加されるため、フランス語のxibで翻訳する必要があります(ただし、--import-strings-fileを追加してもう1つのファイルに翻訳を提供することで自動化できます)。

だから私たちは、あなたがこの例に示したコマンドをマップする場合:

  • --previous-file path/to/prev.xibは古い英語XIB
  • --incremental-file path/to/inc.xib
  • --write path/to/new.xibが作成される新しいフランスのXIBを指定し、古いフランスのXIBを指定する指定を
  • mod.xib
XIB新しい英語を指定します

プロセスの開始方法に関するその他の質問については、実際にxibをローカライズする方法によって異なります。あなたは明らかにxibの新しい言語バージョンを作成します(XCodeでは言語をxibの言語リストに追加するだけで、ローカライズされたxibsは自動的に作成されます)。また、Interface Builderでそれらをローカライズする場合は、ローカライズされたxibで関連する変更(テキストの翻訳と必要なサイズ変更)を行うだけです。あるいは、xibs内のテキストを.stringsファイルに抽出し、翻訳して、これらのxibの関連言語バージョンに挿入することもできます。このために、ibtoolを使用しますが、抽出フェーズには--generate-strings-file、注入フェーズには--import-strings-fileを使用します。

+0

"古い英語XIB" 私が使用している場合は、バージョン管理を生産上の任意のヒント? – Eimantas

+0

あなたのすべてのxibがバージョン管理されているとします(間違いなく!)、あなたのバージョン履歴に古い英語xibがあります。私たちは、英語があなたの基本言語であり、あなたが翻訳しようとしている言語であるという前提で取り組んでいます。 – Clafou

+0

そうですね、古い英語のファイルを入手するには、最後に更新された翻訳のバージョンコントロールからチェックする必要があります。これはちょっと退屈なようです。私は他に何もできないと思う。ご回答有難うございます! – Eimantas

3

変更を別の言語に移行するために必要なステップ(上記のanswerで説明)を自動化するgitプロジェクトのスクリプトを作成しました。

用途:

migrate_changes.sh <target_language> <xib file without ending> 

例:

あなたは英語XIBファイルに変更をコミットした後、あなたのリソースフォルダのルートにスクリプトを実行します。

migrate_changes.sh de MyViewController 

出典:

#!/bin/sh 

LANG_FROM='en' 
LANG_TO=$1 
XIB_FILE=$2 

FROM_FILE=${LANG_FROM}.lproj/${XIB_FILE}.xib 
PREV_FILE=${LANG_FROM}.lproj/${XIB_FILE}_old.xib 
TO_FILE=${LANG_TO}.lproj/${XIB_FILE}.xib 

# checkout old version of xib file 
git show `git log -2 --format="%H" $FROM_FILE | tail -n 1`:./$FROM_FILE > $PREV_FILE 

# merge changes 
ibtool --previous-file $PREV_FILE --incremental-file $TO_FILE --localize-incremental --write $TO_FILE $FROM_FILE 

# remove previous version 
rm $PREV_FILE 
関連する問題