0

コンテンツを英語で表示する言語に関係なく、すべてのコンテンツを含むアプリがあります。アプリの製品セクションでは、plist に基づいて製品コンテンツが表示されます。購入可能な製品は場所に基づいており、すべての製品がすべての市場で入手できるわけではありません。

シミュレーターの設定で、言語を英語に設定し、地域形式をシンガポールに設定しました。

ローカライズされた plist をロードした後、最初にログを作成して、実際に SG (シンガポール) が自分の地域として表示されていることを確認します。

NSString *locale = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode];
NSLog(@"LOCALE: %@", locale);
if([locale isEqualToString:@"SG"]){
    NSLog(@"singapore do something?");
    productCategory = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] 
                                    pathForResource:@"Products" ofType:@"plist"]];  
}

現在の結果は、私のログ ステートメント logging LOCALE: SG を示していますが、これは予想どおりですが、シンガポール固有のコンテンツが読み込まれていません。

プロジェクトのクリーニングとシミュレーターからのアプリの削除の両方を試みました。

これは、プロジェクト ナビゲーターでの plist ファイルの表示方法です。 Products.plist 画像

ローカライズされた plist が表示されない原因は何ですか?

4

2 に答える 2

4

ローカリゼーション (アプリケーション バンドル内の関連する言語フォルダーから翻訳されたリソースを読み込むプロセス) は、言語設定のみに基づいています。そのため、pathForResource は言語設定のみを考慮し、地域形式の設定は無視します。

領域形式の設定は、文字列とロケール依存のデータ型の間の変換に影響します (両方向: 入力の解析と出力の書式設定)。たとえば、NSDate を表示用の文字列に変換すると、地域の書式設定に応じて、日の前の月 (米国の場合) またはその逆 (英国の場合) を取得する場合があります。

[NSLocale currentLocale] はリージョン形式を参照しているため、デバッグで間違ったものを見ているだけです。

これに関する詳細情報はこちらにあります: https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPInternational/BPInternational.html#//apple_ref/doc/uid/10000171i

編集 以下のコメントを参照してください。これはより複雑なようです。言語がニュートラル言語 (「en-US」ではなく「en」など) に設定されている場合、地域はローカライズに影響するようです。

于 2012-06-26T21:42:12.340 に答える
0

私はかつて同じ問題を抱えていましたが、どういうわけかローカライズされていないファイルが見つかりました。私のために働いたのは使用することでした:

[[NSBundle mainBundle] pathForResource:@"Products" ofType:@"plist" inDirectory:nil]

これにより、ローカライズされたすべてのファイルが常に検索され、ユーザー設定に基づいて正しいファイルが返されます。

于 2012-06-26T19:08:54.227 に答える