8

私は自分のプロジェクトにさらに言語を追加し始め、文字列とグラフィックスを問題なくローカライズしました。

最後の問題が 1 つあります。それは plist ファイルにあります。

この plist ファイルには、アプリの既定のカテゴリ名が保持され、辞書内の英語の文字列で満たされています。

私の質問は: plist ファイルをローカライズする方法はありますか? ローカライズされた文字列を plist に追加することについて考えましたが、その方法がわかりませんでした。

デフォルトの plist ファイルは、最初の使用時にユーザーによって上書きされるため、どの plist ファイルを使用するかをコードで決定する必要はありません。

4

1 に答える 1

24

ローカライズされた Plist ファイル

ここでのより簡単な解決策は、plist 全体をローカライズすることです。そうすることで、サポートされている言語ごとに異なる plist ファイルが作成されます。

プロジェクトで plist ファイルを選択し、[ファイル インスペクター] メニューで [ローカライズ] を選択します。

ファイル ローカリゼーション イメージ

サポートされている各言語の Plist ファイルを含む新しいフォルダーが作成されます。

から:

ダミー.plist

に:

> en.lproj
>  >  dummy.plist
> es.lproj
>  >  dummy.plist
> de.lproj
>  >  dummy.plist

ローカライズされた Plist コンテンツ

別の解決策は、plist 内でローカライズされた文字列を使用NSLocalizedStringし、抽出された文字列を出力する前に単純に呼び出すことです。

次のような Plist があるとします。 元のリスト

ファイルにキーを追加するだけで、文字列をローカライズできLocalizable.stringsます。たとえば、スペイン語では次のようになります。

"My menu title" = "Mi título del menú";
"My menu description" = "Mi descripción del menú";

または、私のお勧めは、母国語の文字列も Plist から文字列ファイルに移動し、Plist 文字列をローカライズ可能なキーに置き換えることです。 ローカライズされた plist コンテンツ

そして、Localizable.strings英語の場合:

"MY_MENU_TITLE" = "My menu title";
"MY_MENU_DESCRIPTION" = "My menu description";

とスペイン語:

"MY_MENU_TITLE" = "Mi título del menú";
"MY_MENU_DESCRIPTION" = "Mi descripción del menú";

必要なすべての文字列が同じファイルにあるため、最新のものは保守が簡単で、新しい言語のローカライズが簡単であることがわかりました。

NSLocalizableString最後に、Plist ファイルから読み取ったプレーン文字列の代わりに使用するようにコードを変更します。たとえば、次のコードがあるとします。

NSDictionary* plistDict = [[NSDictionary alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"menuElements" ofType:@"plist"]];

menuTitleLabel.text = plistDict[@"menuTitle"];
menuDescriptionLabel.text = plistDict[@"menuDescription"];

単純に次のように変更します。

NSDictionary* plistDict = [[NSDictionary alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"menuElements" ofType:@"plist"]];

menuTitleLabel.text = NSLocalizedString(plistDict[@"menuTitle"], nil);
menuDescriptionLabel.text = NSLocalizedString(plistDict[@"menuDescription"], nil);

このような場合は、plist ファイルを完全に削除できます。

menuTitleLabel.text = NSLocalizedString(@"MY_MENU_TITLE", nil);
menuDescriptionLabel.text = NSLocalizedString(@"MY_MENU_DESCRIPTION", nil);
于 2013-03-20T11:11:30.057 に答える