11

en_USまたはes_ESiOSのような文字列を取得する必要があります。

明らかな方法は[NSLocale currentLocale]、そこから言語情報を使用して取得することです。ただし、実際のデバイス言語ではなく「地域形式」が表示されます。つまり、デバイス言語が英語で地域形式が「スペイン」の場合、誤ってes_ES.

デバイスの言語が必要な場合は、代わりに次のようにする必要があります。 [[NSLocale preferredLanguages] objectAtIndex:0]

ただし、それは言語のみを提供するため、最後に国コードなしでenまたはのようなものが得られます。es

Safari のように国コードを正しく取得するにはどうすればよいですか?

4

7 に答える 7

3

このコードで試してください:

NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSRange startRange = [locale rangeOfString:@"_"];
NSString *result = [locale stringByReplacingCharactersInRange:NSMakeRange(0, startRange.length+1) withString:[[NSLocale preferredLanguages] objectAtIndex:0]];
DebugLog(@"current locale: %@", result);
于 2013-09-09T13:44:40.837 に答える
2

わかりました、iOS から正しい情報を取得することはおそらく不可能です。これはハックなソリューションですが、必要な出力が得られます。完全ではなく、場合によっては (アラビア語のように) 正確な出力が得られませんが、これまでで最高の結果が得られました。

const string lang = [[[NSLocale preferredLanguages] objectAtIndex:0] UTF8String];

// Search the language with country code in the langs map
static std::map<string, string> langMap;
static bool initialized = false;
if(!initialized) {
    #define LANG(l, c) langMap.insert(std::make_pair(#l, #c))

    LANG(en, en-us); LANG(es, es-es); LANG(fr, fr-fr); LANG(de, de-de);
    LANG(ja, ja-jp); LANG(nl, nl-nl); LANG(it, it-it); LANG(pt, pt-br);
    LANG(da, da-dk); LANG(fi, fi-fi); LANG(nb, nb-no); LANG(sv, sv-se);
    LANG(ko, ko-kr); LANG(ru, ru-ru); LANG(pl, pl-pl); LANG(tr, tr-tr);
    LANG(uk, uk-ua); LANG(hr, hr-hr); LANG(cs, cs-cz); LANG(el, el-gr);
    LANG(he, he-il); LANG(ro, ro-ro); LANG(sk, sk-sk); LANG(th, th-th);
    LANG(ca, ca-es); LANG(hu, hu-hu); LANG(vi, vi-vn);
    LANG(zh-Hans, zh-cn); LANG(pt-PT, pt-pt); LANG(id, id); LANG(ms, ms);
    LANG(zh-Hant, zh-tw); LANG(en-GB, en-gb); LANG(ar, ar);

    #undef LANG
    initialized = true;
}

map<string,string>::iterator it = langMap.find(lang);
if( it != langMap.end() ){
    return it->second;
}

// Didn't find a country code, default to the lang name
return lang;
于 2013-09-10T16:32:31.250 に答える
1

以下のコードを確認してください。

NSArray *langs = [NSLocale preferredLanguages];
for (NSString *lang in langs) {
     NSLog(@"%@: %@ %@",lang, [NSLocale canonicalLanguageIdentifierFromString:lang],    [[[NSLocale alloc] initWithLocaleIdentifier:lang] displayNameForKey:NSLocaleIdentifier value:lang]);
}
于 2013-09-09T13:57:44.743 に答える
1

迅速

NSLocale.preferredLanguages()[0] as String

出力は次のようになります

en-GB

ソース

于 2016-02-01T06:31:10.697 に答える
0

これを行うだけです:

NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *locale = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode];

NSString *formattedStr = [NSString stringWithFormat:@"%@_%@",language, locale];
NSLog(@"%@", formattedStr); // Display en_US for example
于 2015-01-09T11:16:08.240 に答える