1

プロジェクトの 1 つの言語を削除した後、プロジェクト内の他の既存のローカライズ可能なファイルが正しく読み込まれません。ファイルはバンドル リソースに含まれていますが、正しく読み込まれません。load メソッドは、localizable.strings ファイルに含まれる文字列キーの値を返しません。

ここに画像の説明を入力

ロード方法は次のとおりです。

-(NSString*) languageSelectedStringForKey:(NSString*) key
{

    NSString *path;

    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
    NSArray *languages = [currentDefaults objectForKey:@"AppleLanguages"];
    NSString *selectedLanguage = [languages objectAtIndex:0];

    if([selectedLanguage isEqualToString:@"es"])
        path = [[NSBundle mainBundle] pathForResource:@"es" ofType:@"lproj"];
    else if([selectedLanguage isEqualToString:@"en"])
        path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];

    NSBundle* languageBundle = [NSBundle bundleWithPath:path];
    NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil];

    path=nil;

    languages=nil;

    selectedLanguage=nil;

    languages=nil;

    languageBundle=nil;

    return str;

}

助けてくれて本当にありがとうございます。

4

1 に答える 1

3

ほとんどの場合、NSLocalizedString文字列の翻訳を検索するために使用できます。例えば:

myLabel.text = NSLocalizedString(@"The String Key", @"Comment for translators");

これらの文字列を検索する際の問題を調べるために、2 つの提案があります。

  • iPhone/シミュレーターが表示したい言語に設定されていることを再確認してください。ええ、それは明らかなはずですが、安全を確保しましょう。
  • シミュレーターでアプリを実行し、次のパスをログに記録します。

    NSLog(@"Bundle path is: %@", [[NSBundle mainBundle] bundlePath]);

そこから、アプリが言語固有のルックアップを行うために使用しているファイル ツリーを調べることができます (そのディレクトリにあるファイルを確認するには、Finder またはターミナルを使用します)。{ios-language-code}.lproj のような上記のパスに直接あるディレクトリが表示され、これらの各ディレクトリに Localizable.strings というファイルが存在するはずです (デフォルトの翻訳設定を使用していると仮定します)。 )。たとえば、en.lproj英語の場合とfr.lprojフランス語の場合です。

そこから、これらのファイルが正しい形式であることを確認することをお勧めします。これについては、こちらで説明しています。ここで説明されている、これらのファイルを操作するためのツールについて知っておくとよいでしょう。

ファイル構造が期待どおりでない場合、1 つの可能性として、Xcode でターゲットのビルド フェーズを確認しLocalization.strings、「バンドル リソースのコピー」セクションにリストされていることを確認します。

バンドルに正しい .lproj ディレクトリがあり、正しい.stringsファイルがそれらのディレクトリにある場合NSLocalizedStringは、期待どおりに動作するはずです。したがって、上記の提案で問題が完全に解決されない場合でも、メインバンドルのファイル構造を修正することで問題を軽減できます。

于 2012-10-04T16:57:57.060 に答える