Xcode 4.6、ターゲットiOS 6、SDK iOS 6.1
私は自分のアプリでうまく機能するストーリーボードから始めました。含まれている文字列は英語です。フランス語のローカリゼーションを追加したかったのです。これは私がしました:
- MainStoryboard.storyboardをen.lprojからBase.lprojに転送するベースローカリゼーションを追加しました。
- InfoPlist.strings(英語)とMainStoryboard.storyboard(ベース)をfr.lprojに複製するフランス語のローカリゼーションを追加しました。
- フランス語のMainStoryboard.storyboardのいくつかの文字列(UISegmentedControlのセグメントのタイトル)を変更しました。
- シミュレーターで、言語をフランス語に設定します。
- Xcodeからアプリを実行しました。
結果:これは機能しました。変更した文字列が実行中のアプリケーションに表示されました。
しかし、私はすべて空想になりたいです。.stringsファイルを使用してフランス語のローカリゼーションを実行したいと思います。(それは単に空想の問題ではありません。フランス語のローカリゼーションは、Interface Builderを習得することを期待できない非技術的な翻訳者に引き継がれます。)だから:
- XcodeプロジェクトナビゲータでベースのMainStoryboard.storyboardを選択しました。
- ファイルインスペクターの[ローカリゼーション]で、フランス語のローカリゼーションを「Interface BuilderCocoaTouchStoryboard」から「LocalizableStrings」に変更しました。
- アシスタントエディタに表示される.stringsファイルを優先して、フランス語のストーリーボードが破棄されるというXcodeの警告を受け入れました。
- 同じ2つの編集を行いました。それらはすべてIBUISegmentedControl...segmentTitlesとしてコメントされているため、間違った文字列であることに疑問の余地はありません。ラベルテキストは、.stringsファイルの他の場所には表示されません。
- アプリの既存の(作業中の)コピーをシミュレーターから削除しました。
- アプリを実行しました。
結果:ビューは、フランス語の文字列をロードする代わりに、ベース(元々は英語)のローカリゼーションを使用します。
自動レイアウトへの変換は効果がありませんでした。シミュレーターからアプリを削除しても効果はありませんでした。DerivedProductsディレクトリを削除しても効果はありませんでした。スタックオーバーフローは、Xcodeの代わりにibtoolを使用して.stringsファイルを生成することを提案しました。生成された2つのファイルは同一です。
これは満足のいくものではありません。私が言ったように、私は.storyboardファイルを非技術的な翻訳者に引き渡すことはできません。iOSに.stringsファイルからストーリーボードのローカリゼーションを受け入れさせるにはどうすればよいですか?