28

最近、5つのスタンドアロンプ​​ロジェクトを1つのプロジェクトにマージして、共通のコードベースを作成しました。これで、代わりに5つのターゲットを持つ1つのプロジェクトができました。

ターゲットごとに異なるいくつかのファイル(Default.pngやアイコンファイルなど)を除いて、各ターゲットには同じファイルセットがあります。私のアプリケーションは、デフォルトで英語を使用して7つの言語に翻訳されています。他の言語は、スウェーデン語、オランダ語、ドイツ語、フランス語、ポーランド語、スペイン語です。
次に、使用する言語に応じてアプリケーションの名前を翻訳したいと思います。たとえば、私のスウェーデンの航空アプリの場合、アプリはスウェーデン語で「Flyget ARN」と呼ばれる必要がありますが、英語の場合は「AviationARN」と呼ばれる必要があります。これはで行われるため、これはすべて問題ではありませんが、InfoPlist.stringこれをアプリのローカリゼーションと組み合わせるのは問題です。

私は最近この質問を書きました:いくつかのローカリゼーションはまだ英語のみを表示していて、いくつかの.stringsファイルを組み合わせることができないことがわかりました。(私が書いた答えを参照してください)。

したがって、私の質問は次のとおりです。
複数のターゲットを含むプロジェクトからローカライズされたアプリを取得し、DRY違反(重複コード)を発生させずにアプリケーション名をローカライズするにはどうすればよいですか。

更新
これはまだ問題です、与えられた答えは私の問題を解決しません。

4

6 に答える 6

20

私はXCodeプロジェクトでこの問題を解決しました。これは、あなたと同じ問題に取り組んでいると思います。これがお役に立てば幸いです。このソリューションには、同じコードベース(異なるアプリ名)から構築され、アプリの名前を含めて完全にローカライズされた2つのターゲットが含まれています。( Growth(フランス語:Croissance、スペイン語:Crecer )と呼ばれる私のフリーミアムアプリとGrowth +(フランス語:Croissance +、スペイン語:Crecer + )と呼ばれる有料バージョンを構築します。

InfoPlist.stringまた、ファイル(アプリの名前のみが含まれている)を見つけました。ソリューションでサブフォルダーを使用し、ターゲットを変更して、関連するサブフォルダーからのInfoPlist.stringsのローカライズされたセットを含めることで問題を回避しました。具体的には、私はこの構造を持っています:

    根
    +-en.lproj
    ¦ +-Localizable.strings
    ¦ +-SomeXib.xib
    +-es.lproj
    ¦ +-Localizable.strings
    ¦ +-SomeXib.xib
    +-fr.lproj
    ¦ +-Localizable.strings
    ¦ +-SomeXib.xib
    +-OnlyInAppA
    ¦ +-en.lproj
    ¦ ¦ +-InfoPlist.strings
    ¦ +-es.lproj
    ¦ ¦ +-InfoPlist.strings
    ¦ +-fr.lproj
    ¦ +-InfoPlist.strings
    +-OnlyInAppB
    ¦ +-en.lproj
    ¦ ¦ +-InfoPlist.strings
    ¦ +-es.lproj
    ¦ ¦ +-InfoPlist.strings
    ¦ +-fr.lproj
    ¦ +-InfoPlist.strings
    +-AppA.plist
    +-AppB.plist

また、ターゲット間の唯一の違い(異なるプリプロセッサシンボルと異なる.plistファイルを除く)は、AppAのビルド設定にOnlyInAppAの下のInfoPlist.stringsファイルが含まれているのに対し、AppBのビルド設定にはOnlyInAppBの下のInfoPlist.stringsファイルが含まれていることです。

私が使用した命名規則(OnlyInAppA / OnlyInAppBフォルダー、AppB / AppB plistファイル)は、私の個人的な意見では、これを満足のいくアプローチにするのに十分明白です。

編集:

これらの2つのXCode4スクリーンショットを参照して、ターゲットで変更された設定を正確に見つける場所を確認してください。

  1. ターゲットビルド設定では、別のplistファイルが指定されています(注:新しいターゲットを追加すると、XCodeが自動的にこれを行います) ビルド設定のスクリーンショット

  2. ターゲットビルドフェーズの[バンドルリソースのコピー]セクションで、関連するOnlyInAppXサブフォルダーからInfoPlist.stringsのバージョンを選択します(このスクリーンショットのInfoPlist.stringsの横にある灰色のテキストに注意してください。これにより、他のターゲットの別の場所が表示されます) 。+/-ボタンを使用してこれを実現し、ファイルを目的のファイルに置き換えます。 ビルドフェーズのスクリーンショット

于 2012-06-29T11:33:38.163 に答える
5

この問題が解決しない場合: プロジェクトのターゲットごとにローカライズされた複数の InfoPlist.string を追加する方法に関する解決策を見つけました。次の手順に従ってください。

  1. すでに複数のターゲットを持っていると思います。
  2. Finder でプロジェクト フォルダーに移動します。
  3. 各ターゲットに固有のフォルダーを作成します。

    フォルダを作成する

  4. 各フォルダーに InfoPlist.strings ファイルを作成します。

    ファイルを作成する

  5. プロジェクト内の各フォルダーに適切な (そして唯一の) ターゲットを指定して、フォルダーをターゲットに追加します。

    フォルダーをターゲットに追加する

  6. 新しいターゲットごとに、元の InfoPlist.strings ファイルのターゲット依存関係を削除します。

    古い .strings ファイルのターゲット依存関係を削除します

  7. 新しい InfoPlist.strings ファイルをローカライズします。

    新しいファイルをローカライズする 新しいファイルをローカライズする

  8. ターゲットをビルドし、言語設定を変更して確認します。

    フランス語版 英語版

于 2014-02-12T19:32:08.527 に答える
2

すべての InfoPlist.strings ファイルを別々のパスの下に保管してください。それぞれが 1 つのターゲットのメンバーにすぎません。

それとも質問の意味がわかりませんでしたか?

于 2012-05-09T22:32:23.670 に答える
1

同じソフトウェアが複数のドメインをサポートする同様のセットアップがあり、各ドメインはさまざまなモジュール (ブログ、フォーラムなど) のまったく同じパスにアクセスします。特にデータベース サービスが利用できなくなった場合にドメインごとの個性を維持するために、重要な情報、基本的にはメタ情報をファイルに保持します。ローカリゼーションのために、各サイト/プロジェクトのデフォルト言語を保持する変数を保持します。情報を含むファイルを独自のドメインにするか、すべてのプロジェクトを同じファイルに保存するかを決定できます。これは、最終的なフォールバックに使用したい場合、または権限が低い人/全員に対する公開オプションが単に不足している場合に使用できます。そのようなオプションを実装するまでは、あなたよりも優先されます (ユーザーは言語オプションをオーバーライドできます)。

于 2012-05-20T20:45:39.687 に答える
0

私は自分のアプリでこれを正確に行ってきました。

電話のデフォルト言語を変更すると、各 infoPlist.strings ファイルの名前が適切に取得されます。

しかし、私はこれを最初からやりました。必要な動作を得るためにバックアップする必要があるかどうかはわかりません。おそらく、ローカリゼーション フォルダーからさまざまな infoPlist.strings ファイルを脇に保存してから、次の手順を実行してから、現在の infoPList.strings ファイルの内容を、次の手順で新しく作成したファイルに再挿入します。

Xcode 4.3 を使用しています。手順:

1) info-plist.strings でデフォルト言語に必要な文字列を設定します。最終的に単一のファイルになるはずです。

最初の infoPlist.strings ファイル

2) ファイル インスペクターを開きます。

ここに画像の説明を入力

3) 右端のインスペクターで、ナビゲーターの下部にある + 記号をクリックできるようになりました。

ここに画像の説明を入力

4) 関心のある言語を選択すると、左側のプロジェクト ナビゲーターに次のように表示されます。

ここに画像の説明を入力

Localizable.strings やその他のファイル (次の例の写真の index.html など) に対してもこれを行うことができます。

ここに画像の説明を入力

于 2012-06-28T04:22:10.517 に答える
-3

iTunesConnect_DeveloperGuideを参照してみてください

「新しいローカリゼーションの追加」を参照してください。

ここでは、各言語のローカライズされたアプリ名を書くことができます

于 2012-06-28T06:20:04.960 に答える