フォールバック言語 iOS (Localizable.strings ファイルが不完全) 質問する

フォールバック言語 iOS (Localizable.strings ファイルが不完全) 質問する

私は16の言語にローカライズされたiOSプロジェクトを持っています。ローカライズされていない単語はいくつかあります(主にアップデートに含まれる単語で、ローカライズオフィスが間に合わなかったものです)。キーについては、ない英語の表現を使用してください。翻訳者が希望する場合は、これも変更できます。したがって、言語の翻訳がない場合、使用したキーに戻ります。ただし、このキーは「人間が読める」ものではなく、少なくとも「人間が読んで楽しめる」ものではないため、問題があります。

調べてみたのですが、解決策が見つかりませんでした私の正確な問題。私は次のことを感じています。

Localizable.strings in en.lproj
@"Key1" = @"Value 1"
@"Key2" = @"Value 2"

Localizable.strings in de.lproj
@"Key1" = @"Wert 1"
// Note that @"Key2" is missing here in my de.lproj

I would expect that if I make NSLocalizedString(@"Key2", ...)
and am running on a german phone, it falls back to the english
translation for this key as it exists...

なので、今のところは、英語の翻訳を、不足している Localizable.strings ファイルにコピーしただけです。しかし、これは大きなハックです! また、英語の単語をキーとして使用するのも、私にはハックのように思えます!

特定のキーに値がない場合に、フォールバックとして fe english を使用するようにアプリに指示する方法はありますか? 基本ローカリゼーションを追加してみましたが、役に立ちませんでした...

どうもありがとう

ベストアンサー1

私の知る限り、これを実行する「公式」の方法はありませんが、私は以前に次のような機能を実装したことがあります。

NSString * L(NSString * translation_key) {
    NSString * s = NSLocalizedString(translation_key, nil);
    if (![[[NSLocale preferredLanguages] objectAtIndex:0] isEqualToString:@"en"] && [s isEqualToString:translation_key]) {
        NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
        NSBundle * languageBundle = [NSBundle bundleWithPath:path];
        s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil];
    }
    return s;
}

借用元:https://stackoverflow.com/a/8784451/1403046

基本的に、入力文字列を返す NSLocalizedString() の代わりに、このバージョンでは必要に応じて英語にフォールバックします。

おすすめ記事