2009-06-01 9 views
10

私のiPhoneアプリでen_GBや他の 'en'サブ言語の文字列をローカライズしたいのですが、XCodeとiphoneはこれを可能にしません。 en_GBとen_US(私はハイフンとアンダースコアの両方を試しました)の "Localizable.strings"のローカリゼーションをテスト目的で作成しましたが、認識されません。動作する唯一の言語コードは単に "en"です(XCodeでは "英語"として表示されます)。iPhone en_ * sublanguageローカリゼーション

私はこれが不可能だとは思わないので、どうしたらいいですか?また、文字列がサブ言語で見つからない場合、典型的な「カスケード」動作を得ることを望んでいます。 "en_GB"は可能ならば "en"から取るべきです。助けて?

答えて

6

iPhoneの設定で言語のリストから「英語」を選択すると、実際には「en_US」の言語が意味されます。

リンゴが "英語(イギリス)"のような追加のサブ言語でソフトウェアを更新するまでは、ロケール地域の設定と別の文字列テーブルから手動で文字列を読み込むことになります。

ただし、言語と地域ロケールは、理由により分離されています。英国のスペイン語ユーザーは、地元の習慣に基づいてフォーマットされた日時を使用することができます。地域ロケール(UK)を検出して英国の文字列を表示するのは間違いです。

だから、基本的にこれを行う方法は現在ありません。

+0

良い答え!しかし、これは疑問を提起します:ストリングをローカライズしない場合は、リージョン設定フォーマットは何が良いでしょうか? –

+0

地域の設定は、日付、通貨のフォーマット、数字の小数点を区切る文字の選択などに使用されます。 –

4

あなたがしていることは、ドキュメントに従って動作するはずです。しかし、iPhoneOSの実装はドキュメントとは異なると思われます。 Radar 6158876によれば、en_GB言語、ロケール(日付書式など)のみのサポートはありません。

1

同じ問題が見つかりました。

あなたはiPhoneの設定を見ればところで、 - >一般 - >国際メニュー、それは言語と地域の区別は非常に明確になります:

言語:
- 英語

リージョンのフォーマット:
- 米国
-United王国

ローカリゼーションフレームワークでは、唯一リットルに注意を払うように見えます怒りではなく、地域。

私は、IMOのように、ユーザーが米国にいる間に英国英語(テキスト用)を使用したいと思うのは妥当であるとしています(電話番号米国形式でなければなりません)。

1

別の文字列リソース、たとえばUKLocalization.stringsを作成し、サポートされている言語ごとにローカリゼーションを作成します。 en以外のすべてのローカライズでは、このファイルは空です。 enの場合、ユニークなen_GBスペルを持つ文字列のみが含まれます。

次に、NSLocalizationStringの代わりに、UKLocalizationテーブルを最初にチェックしてから、標準のローカリゼーションテーブルに戻します。

static NSString* _locTable = nil; 
void RTLocalizationInit() 
{ 
    _locTable = nil; 

    NSString* country = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode]; 
    if ([country isEqual:@"GB"]) 
    { 
     _locTable = @"UKLocalization"; 
    } 
} 

NSString* RTLocalizedString(NSString* key, NSString* ignored) 
{ 
    NSString* value = nil; 
    value = [[NSBundle mainBundle] localizedStringForKey:key value:nil table: _locTable]; 
    if (value == key) 
    { 
     value = NSLocalizedString(key, @""); 
    } 
    return value; 
} 
2

これは実際に行うことができます - ここに私の解決策を確認してください - iPhone App Localization - English problems?

+1

これは現在、iOS 8.1では機能しません。 [NSLocale preferredLanguages]はmain()でゼロの結果を返します。 – Mike

1

を、私はそれが導入されたのiOSのバージョンではわからないんだけど、iOSの7は、間違いなく「イギリス英語」言語設定を持っていますen_GB.lprojディレクトリからリソースを取得します。ウェブの周りに浮かぶさまざまなハッキングは、あなたがより特殊な方言をしていない限り、必要ではありません。

*私がそこで何を参照してください;)

+0

これは本当ですか?私はハッキングの1つを使用しました:http://stackoverflow.com/questions/3308519/iphone-app-localization-english-problems。しかし、ios 8.1はそのハックを破った。だから、私はあなたのソリューションを実装しようとしています。私のen_GB.lprojローカリゼーションは選択されていません。 – Mike

+0

問題は、ユーザーが英国にいるが、(合理的に)「英国の英語」ではなく「英語」として言語を選択することです。アプリは、その後、米国英語用にローカライズされます –

関連する問題