4

iPhoneアプリでいくつかの文字列をローカライズしたいのですが、これまでのところ、選択した5つの言語で機能します。ただし、問題が1つあります。特定の言語のキーを定義していない場合は、すべての文字列を確実に英語で定義していることがわかっているため、フォールバックとして英語を選択する必要があります。重要なのは、たとえばiPhoneがスペイン語に設定されている場合でも、英語を表示しても問題がない理由として、すべてのキーを翻訳することはそれほど重要ではないということです。

例:

en:

"HELLO" = "hello" ;
"PERSON" = "my friend" ;

es:

"HELLO" = "hola" ;

期待される結果:

iPhoneが英語に設定されている場合、私はそれを言いたいです:hello, my friendそして、languangeがスペイン語に設定されている場合、私はそれを言いたいですhola, my friend。現在、アプリはを出力しますhola, PERSON。(私はNSLocalizedStringメソッドを使用します)。

おそらく本当に簡単な解決策がありますが、私は良いものを見つけることができませんでした。助けてくれてありがとう、

マティアス

4

3 に答える 3

7

他の答えは間違いなく正しかったのですが、それは私が望んでいたものではありませんでした。代わりに、別の方法を見つけて、自分の環境で完全に機能する静的メソッドを作成しました。他の誰かが同じことを達成したい場合は、ここに追加したいと思います。

+ (NSString *)localizedStringForKey:(NSString *)key table:(NSString *)table
{
    NSString *str = [[NSBundle mainBundle] localizedStringForKey:key value:@"NA" table:table];
    if ([str isEqualToString:@"NA"])
    {
        NSString *enPath = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
        return [[NSBundle bundleWithPath:enPath] localizedStringForKey:key value:@"NA" table:table];
    }

    return str;
}
于 2013-03-24T12:53:34.060 に答える
4

関数のドキュメントNSLocalizedStringには次のように書かれています。

戻り値

メインバンドルとnilテーブルでlocalizedStringForKey:value:table:を呼び出した結果。

そしてlocalizedStringForKey:value:table: 言うために:

戻り値

テーブルtableNameのkeyで指定された文字列のローカライズされたバージョン。値がnilまたは空の文字列であり、ローカライズされた文字列がテーブルに見つからない場合、キーを返します。キーと値の両方がの場合nil、空の文字列を返します。

したがって、すべての言語の文字列をローカライズするか、key使用している値を変更します

于 2013-03-24T11:38:22.917 に答える
1

簡単な解決策は、英語のテキストをキーとして使用することです。例えば:

[NSString stringWithFormat:NSLocalizedString(@"%@, %@", "format for greeting"),
                           NSLocalizedString(@"Hello", "salutation"),
                           NSLocalizedString(@"my friend", "person")]

文字列のローカライズされたバージョンがない場合は、英語のキーが使用されます。

于 2013-03-24T11:55:23.563 に答える