web-dev-qa-db-ja.com

Xcode 5でストーリーボードを変更した後、ローカライズされたストーリーボードの文字列を同期する方法

私はIOS AppsのローカライズXCode 5を見て始めました。そして、イタリア語ローカリゼーションを追加しようとしました。 Adding Italian Localization

Xcode 5は、Main.storyboardファイル内に配置した唯一のラベルに対して、単一のエントリを持つMain.stringsファイルを自動的に生成します。

/* Class = "IBUILabel"; text = "Label"; ObjectID = "PeT-4z-NSf"; */
"PeT-4z-NSf.text" = "Etichetta";

XCode 5 generated file

後でMain.storyboardファイルを変更して新しいボタンをビューに追加する場合、できればXcode 5に、欠落しているローカライズ文字列を- Main.strings file? Interface BuilderObject IDフィールドを見て、手動で新しいエントリを追加する必要があります(動作しますが、これがどういう意味なのかわかりませんストーリーボードのローカライズを更新しますか?) Main.storyboardファイルでgenstringsのようなものを実行して、すべてのラベルのテキストを抽出し、新しいものをローカライズされたMain.stringsに追加できますか=ファイル?

40
Gianni Costanzi

チェックアウトBartyCrouch、それはあなたの問題を完全に解決します。また、オープンソース積極的に保守されプロジェクト内で簡単にインストールおよび統合


InstallHomebrew を介したBartyCrouch

brew install bartycrouch

または、 Mint でインストールします:

mint install Flinesoft/BartyCrouch

Storyboards/XIBs Stringsファイルを段階的に更新します

$ bartycrouch update

これはまさにあなたが探していたものです。


keepするために、Storyboards/XIBs Stringsファイルを更新しますIビルドスクリプトの追加を強くお勧めします(ビルドスクリプトの追加方法に関する指示 here ):

if which bartycrouch > /dev/null; then
    bartycrouch update -x
    bartycrouch lint -x
else
    echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi

Storyboards/XIBs Stringsファイルをインクリメンタルに更新することに加えて、これはLocalizable.stringsファイルは、NSLocalizedStringを使用してコードに新しく追加されたキーで更新されたままであり、重複キーまたは空の値に関する警告を表示します。

追加情報については、 GitHub でBartyCrouchをチェックアウトしてください。

20
Dschee

Xcodeが自動的に更新しないファイル(少なくとも5.xバージョンは更新しませんでした)は、アプリの_Localizable Strings_です。次のように、_Main.storyboard_から新しいファイルを作成できます。

プロジェクトナビゲーター(左端のペイン)で、_Main.storyboard_ファイルをクリックします。 [ユーティリティ]ペイン(右端のペイン)で[ファイルインスペクターを表示]アイコンをクリックします。以下の画像の青色の一番左のアイコンです。

File inspector is the leftmost icon

表示される右側のペインで、セクションの1つがLocalizationになります。

Localization section

English (Localizable Strings)行のチェックを外し、ポップアップするウィンドウでディスクからローカライズされたリソースファイルを削除するをチェックし、削除ボタンをクリックします(しない削除を確認する必要があります。その場合、Xcodeは次にビルドするときに、オーバーライドする許可を求めます。

次に、English (Localizable Strings)をもう一度チェックして、ゼロから構築します。

17
Rahav

Xcode 6を使用すると、次のことがうまくいきました:

SO h.orim投稿の質問 で提案されているように、言語のローカライズを "Localizable Strings"から "Interface Builder ..."に変更しました。ただし、設定は変更されませんでしたが、「ローカライズ可能な文字列」に設定されたままでした。次のステップは、それを再度行うことで、作成したストーリーボードを見つけ、使用するか置き換えるかを尋ねるプロンプトを表示します。 「置換」の代わりに「ファイルを使用」、そうでない場合は同じことが再び発生します。

これで、希望する言語のローカライズされたストーリーボードができました。 「ローカライズ可能な文字列」に切り替えた後、ストーリーボードで使用されているすべての現在の文字列を含むファイルが作成され、以前の翻訳はそのまま残ります。

5
olik79

これにはUpdatStoryboardStringsというスクリプトを使用できます!
こちらから入手: https://github.com/AppliedIS/iOSL10n
使用説明書: http://blog.appliedis.com/2013/05/22/localization-of-an-xcode-ios-app-part-2/

4
Trond

別の方法は、ストーリーボード上で翻訳するフィールドを選択して手動で行うことです。 「IDインスペクター」に移動し、オブジェクトID(HP8-op-SmXなど)をコピーします。

identity inspector

その後、ストーリーボードの言語ファイル(Main.strings、ほとんどの場合)を開き、オブジェクトIDを過ぎます。必要に応じて、.textまたは.placeholderを追加するだけです。

   "HP8-op-SmX.placeholder" = "My translated placeholder text";
   "HP9-op-VvD.text" = "My translated text";

保存、クリーニング、ビルド。少し苦痛ですが、翻訳する必要のあるものが少ない場合は、時間を大幅に節約できます。

4
tryp

Xcode 6以降では、開発者は文字列ファイルを手動で管理する必要はありません。 XLIFFエクスポートを使用して、開発言語の文字列を自動的に収集して翻訳者に送信し、XLIFFインポートを使用して文字列ファイルを翻訳で更新します。

https://developer.Apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/LocalizingYourApp/LocalizingYourApp.html#//Apple_ref/doc/uid/10000171i-CH5-SW9

別のオプションは、ibtool --export-strings-fileを直接使用することです。

https://developer.Apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/ibtool.1.html

2
Quinn Taylor

次の2つのオプションがあります。

オプション1

Xcodeは、ファイルを[Interface Builder Cocoa Touch Storyboard]ファイルタイプまたは[Localizable Strings]ファイルタイプのいずれかに変換することにより、ファイルを「リロード」できます。

Project Navigatorからベースストーリーボードファイルを選択します。ファイルインスペクターの[ローカライズ]セクションを探します。ファイルが現在[ローカライズ可能な文字列]である場合は、[Interface Builder Cocoa Touch Storyboard]に変更します。 Xcodeは、古いローカライズの取り組みを維持しながら、ストーリーボードを現在のバージョンに変換する必要がありました。ここで、必要に応じてファイルを元のファイルタイプに戻すことができます。

オプション2

Ibtoolを使用して、ストーリーボードの文字列を抽出します。

ターミナルアプリケーションを開きます。Base.lprojディレクトリを見つけます。この行を使用して文字列を抽出します。

ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings ibtoolが文字列をfile_name.stringsに抽出した後、元の.stringsファイルにコピーアンドペーストできます。

0
Amrit Sidhu