iOSのinfo.plistファイル内の文字列をローカライズする方法は?


259

ご存知かもしれませんが、iOS 8ではユーザーの位置情報を使用するためにNSLocationWhenInUseUsageDescriptionキーが必要です。このキーといくつかの一般的な情報をinfo plistに追加しました。 ここに画像の説明を入力してください

plistファイル内で翻訳文字列を使用するにはどうすればよいですか?

-更新-

ローカライズ可能な文字列を既に持っています。plist文字列内でNSLocalizedString(MYSTRING、nil)のようなものを使用できるのかと思っているところです。ローカライズ用にinfo.plistの複数のファイルを作成できることは知っていますが、もっと簡単な方法があるのではないかと思っていました。


これを解決したことがありますか?NSLocationWhenInUseUsageDescriptionもローカライズするのに苦労していますか?
Oliver Pearmain 2014

回答:


490

InfoPlist.stringsfileを使用しての値をローカライズする必要がありますInfo.plist。これを行うには、に移動しFile->New->File、のタブでを選択Strings Fileして名前を付け、作成します。ローカライズする値を開いて挿入します。ResourceiOSInfoPlistInfo.plist

NSLocationWhenInUseUsageDescription = "Description of this";

これでInfoPlist.strings、翻訳を使用してファイルをローカライズできます。幸運を!

編集:

ローカリゼーションオプションを選択するか、必要に応じてローカリゼーションを有効にします。

右側のエディター

左側のエディタでもファイルを確認できるはずです。

左側のエディター

編集:

ここでの公式文書であるInfo.plistキーのローカライズは。

マルコへのクレジット、この回答に写真を含めてくれてありがとう!


15
文字列ファイルを作成した後、Info.plistファイルにもキーを含める必要がありますか、それともそこから削除しても安全ですか?
rounak 2015年

11
ヒント:「InfoPlist.strings」という名前を正確に使用し、他には何も使用しないでください。たとえば、元のinfoplistファイルには別の名前が付けられていましたが、機能させるためにはこの名前を正確に使用する必要がありました。
Sjoerd Perfors、2015

22
シミュレータでローカリゼーションをテストするとき。xcodeターゲットの言語だけでなく、シミュレータ自体の言語も変更する必要がありました。他の人への警告です。
John Webb

10
正しい使い方はkeyname = "your text";です。例:NSLocationWhenInUseUsageDescription = "your text"
Magurizio

10
注意:このファイルのキーには引用符を含めないでください。通常のローカリゼーションとは異なります。例:NSMicrophoneUsageDescription = "あなたの説明";
Yuchao Zhou 2017

33

上記のすべてが私(XCode 7.3)で機能しなかったため、その方法についてAppleのリファレンスを読みました。これは、上記の説明よりもはるかに簡単です。アップルによると:

ローカライズされた値は、Info.plistファイル自体には保存されません。代わりに、特定のローカリゼーションの値をInfoPlist.stringsという名前の文字列ファイルに保存します。このファイルは、同じローカリゼーションの他のリソースを格納するために使用するのと同じ言語固有のプロジェクトディレクトリに配置します。

したがって、InfoPlist.stringsという名前の文字列ファイルを作成し、「xx」言語のxx.lprojフォルダーに配置しました(そして、[ファイル]→[ファイルを追加...]を使用してプロジェクトに追加しました)。それでおしまい。キー「ローカライズされたリソースを混在させることができます」= YESの必要はなく、base.lprojまたはen.lprojにInfoPlist.stringsの必要もありません。

言語固有のファイルでキーが見つからない場合、アプリケーションはInfo.plist Key-Valueをデフォルト値として使用します。したがって、私はInfo.plistファイルに英語の値を入れ、言語固有のファイルに翻訳した値を入れて、テストすると、すべてが機能します。

特に、InfoPlist.strings(base.lproj、en.lroj、およびxx.lprojにファイルのバージョンを作成する)をローカライズする必要はありません。私の場合、この方法では機能しませんでした。


2
適切なドキュメントへのリンクが含まれていないのはなぜですか?
Jurasic 2017

3
ここではケース誰におけるAppleのドキュメントの関連ページへのリンクが興味を持っている:developer.apple.com/library/archive/documentation/General/...
曲げ

そして、どうやってそのxxを決めるのですか?たとえば英語の場合、en、En、Eng、Englishなどになりますか?私が初心者なので、愚かな質問なら申し訳ありません
Awais Nasir

あなたの答えはフォールバック言語シナリオを除いて私のために働きました、アプリは常に以前に使用された言語でありフォールバック言語を取得していますが、私の英語の値はInfo.plistファイルに存在しますが、base.lprojも試しました
Awais Nasir

19

何かがうまくいかない場合は、追加したことを確認してください:

「ローカライズされたリソースを混在させることができます」=はい

info.plistに。私の場合、InfoPlist.stringsファイルは無視されました。


15

チップ

  1. iOSシミュレーターはデフォルトでシステム言語を利用することを覚えておいてください。翻訳をテストするために、iOSシミュレータ設定でも言語(および地域)を変更してください。

  2. ローカリゼーション文字列(Appleのドキュメントはこちらを参照)は

    NSLocationWhenInUseUsageDescription = "Description of this";

    ない(引用 "..."付き)

    "NSLocationWhenInUseUsageDescription" = "Description of this";

貴重な追加ですが、これは新しい答えではなく、それぞれの答えの下のコメントであるべきだと思います。また、「363」は投稿の識別子ではなく、回答の投票数です(数はその後変更されています)。
John J. Camilleri

7
私はそこにコメントを追加する評判がありません。
Giuseppe Beccari

キーの周りに引用符「...」を使用するかどうかは関係ありません"NSLocationWhenInUseUsageDescription"="description"。例:(は有効です)。それがあってもなくてもかまいません。
mluisbrown

12

Appleのガイドを読み、ここにリストされているWWDCリソースを表示することを強くお勧めします: 国際化とローカリゼーションのトピック

具体的に質問に答えるために、プロジェクトに新しい言語を追加するここに画像の説明を入力してくださいと、含めるInfoPlistファイルを選択する機会が得られます(複数のターゲットがある場合は、複数のInfo plistファイルがあります)。次の画面を表示するために必要なことは、[ローカライズ]の下の[+]をクリックして、サポートを追加する新しい言語を選択することです。 ここに画像の説明を入力してください

追加すると、指定した言語の適切なlprojディレクトリに必要な文字列ファイルが作成されます。

-編集-

明確にするために、iOSはローカライズされた文字列ファイルのキーとしてplistエントリのキーを使用して、ユーザーの現在選択されている言語に基づいてPlistファイルの文字列を交換します。


3
plist全体をたった1つのキーに翻訳するのはやり過ぎです。詳細はこちら:bit.ly/1yBUTru
RGML

2
XCode 9には当てはまりません。新しい言語を追加するときに、plistのローカライズを要求することはありません。
トム

私はXcode 9についてそれを調べる必要があります-新しいXcodeでまだテストする機会がありませんでした。
Matt

11

Info.plistをローカライズする手順:

  1. XcodeでフォルダーResources(ルートに配置されている)を検索します
  2. フォルダリソースを選択します
  3. 次に、メインメニューの[ファイル]-> [新規]-> [ファイル...]をクリックします。
  4. 「リソース」文字列ファイルのセクションで選択し、[次へ]をクリックします
  5. 次に、Save AsフィールドにInfoPlistのみを記述します(「I」の大文字と「P」の大文字)
  6. 次に[作成]を押します
  7. 次に、Resourcesフォルダーに作成されたファイルInfoPlist.stringsを選択し、右側のメニューで[Localize]ボタンを押します。
  8. 次に、プロジェクトナビゲーターからプロジェクトを選択し、プロジェクトリストからプロジェクトを選択します。
  9. 下部の情報タブでは、必要な言語をいくつでも使用できます(ローカリゼーションのセクションにあります)
  10. リソースフォルダで表示できる言語
  11. info.plistファイルの値(「キー」)をローカライズするには、テキストエディターで開き、ローカライズするすべてのキーを取得します。
  12. 上記の例のように、InfoPlist.stringsに例として任意のキーを書き込みます

"NSLocationAlwaysAndWhenInUseUsageDescription" = "blabla";

"NSLocationAlwaysUsageDescription" = "blabla2";

これですべての作業が完了し、info.plistファイルをローカライズすることができます。


4

Xcode 9のようにローカリゼーションを追加しようとしたときにinfo.plistが含まれないという問題が発生した場合。

次に示すように、info.plistをローカライズ可能にして、ファイルインスペクタのローカライズボタンをクリックする必要があります。

その後、新しいローカリゼーションを追加するときに、info.plistがファイルリソースに含まれます。

ここに画像の説明を入力してください


3
問題が発生しましたか?Xcodeのは、そのようなファイルが存在しないため、ファイルのInfo.plistを開くことができませんでした」と言っているので、私は、ローカライズに二つの言語を追加するときにプロジェクトをビルドすることはできません。
mkkrolik

2
@mkkrolik同じ問題が発生しています。解決策を見つけましたか?
トダンリー、

@Todanleyはこのソリューションをスキップします。私にとってはうまくいきません。代わりにInfoPlist.stringsを使用してください。
mkkrolik 2018年

@mkkrolikありがとうございます。また、シミュレーターでテストする場合、ターゲットが機能するために、ターゲットの言語設定ではなく、シミュレーターの言語設定を変更する必要がありました。
Todanley、

3

RGMLが言うように、InfoPlist.stringsを作成し、ローカライズしてから、次のようなキーと値を追加できます。 "NSLocationWhenInUseUsageDescription" = "Help To Locate me!";

指定した言語のキーがinfo.plistに追加されます。


0

私の場合、すべてが正しくセットアップされましたが、それでもInfoPlist.stringsファイルが見つかりませんでした。

実際に機能した唯一のことは、InfoPlist.stringsファイル削除してプロジェクトに再度追加することでした


0

私の場合、ローカリゼーションが機能していません。名前に「-」記号が含まれているためです。例:「aero-Info.plist」およびローカライズされたファイル:「aero-InfoPlist.strings」および「aeroInfoPlist.strings」は機能しませんでした。


0

InfoPlist.stringsファイルを使用する場合(XCodeではInfo.plistファイルの横に配置する必要があります-実際のファイルの場所は、プロジェクト内の任意の場所にすることができます)

XCodeで表示

)キーの短縮名を翻訳に使用するように注意してください。

を使用しようとしましたPrivacy - Camera Usage Descriptionが、機能するキーはNSCameraUsageDescription

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.