ローカライズされた 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 文字列をローカライズ可能なキーに置き換えることです。
そして、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);