Технические вопросы и ответы QA1391

Как я могу определить порядок языков, установленных пользователем на вкладке Language Международной предпочтительной области?

Q: Как я могу определить порядок языков, установленных пользователем на вкладке Language Международной предпочтительной области?

A: Как я могу определить порядок языков, установленных пользователем на вкладке Language Международной предпочтительной области?

Как задокументировано в Темах Программирования Интернационализации: Получение Текущего языка и Локали, большинство разработчиков не должно иметь дело с порядком языков, поскольку надлежащая локализация будет выбрана системой автоматически, и для более прекрасного управления, разработчики могут использовать связанный с локализацией APIs CFBundle.

Но могут быть ситуации, где Вы хотите получить список языков непосредственно от пользовательских настроек.

Получение языков в Какао

Документация объясняет, как получить этот список с примером Какао:

Перечисление 1  , Получающее языки в (коротком) Какао.

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; NSArray * languages = [defaults objectForKey:@"AppleLanguages"]; NSLog(@"%@\n", languages);

который возвратил бы следующую распечатку:

  Распечатка Языков перечисления 2.

(en, fr, de, es, it, nl, sv, nb, ja, "zh-Hans", da, fi, pt, "zh-Hant", ko, hu)

Может стоить отметить, что код, возможно, также был записан как:

Перечисление 3  , Получающее языки в Какао, (расширилось).

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
NSDictionary * globalDomain = [defaults persistentDomainForName:@"NSGlobalDomain"];
NSArray * languages = [globalDomain objectForKey:@"AppleLanguages"];
NSLog(@"%@\n", languages);

Так как ключ AppleLanguages находится в глобальном домене пользовательских значений по умолчанию.

Так как Вы не можете рассчитывать на данные, чтобы быть в канонической форме, обязательно, чтобы Вы использовали APIs CFLocale для преобразования записей словаря AppleLanguages в канонических формах.

При создании кода для Mac OS X v10.4 и позже можно использовать CFLocaleCreateCanonicalLanguageIdentifierFromString API.

При создании кода для Mac OS X v10.3 (Пантера) и позже можно использовать CFLocaleCreateCanonicalLocaleIdentifierFromString API.

При создании кода для Mac OS X v10.2 (Jaguar) или ранее необходимо будет использовать собственную таблицу, отображающую неканонические формы на канонические формы.

Получение языков в Терминале

В Терминале Вы могли получить ту же самую распечатку с:

Перечисление 4  , Получающее языки в Терминале, (расширилось).

defaults read NSGlobalDomain AppleLanguages

или

Перечисление 5  , Получающее языки в (коротком) Терминале.

defaults read -g AppleLanguages

Получение языков в Углероде

Для получения этого порядка языков в Углероде, Вы используете:

Перечисление 6  , Получающее языки в Углероде.

CFArrayRef languages = CFPreferencesCopyValue(
         CFSTR("AppleLanguages"),
         kCFPreferencesAnyApplication,
         kCFPreferencesCurrentUser,
         kCFPreferencesAnyHost);
CFShow(languages);

который был бы распечатка:

  Распечатка Языков Углерода перечисления 7.

<CFArray 0x30a5d0 [0xa07ba150]>{type = immutable, count = 16, values = (
    0 : <CFString 0x309b10 [0xa07ba150]>{contents = "en"}
    1 : <CFString 0x30a4c0 [0xa07ba150]>{contents = "fr"}
    2 : <CFString 0x30a4d0 [0xa07ba150]>{contents = "de"}
    3 : <CFString 0x30a4e0 [0xa07ba150]>{contents = "es"}
    4 : <CFString 0x30a4f0 [0xa07ba150]>{contents = "it"}
    5 : <CFString 0x30a500 [0xa07ba150]>{contents = "nl"}
    6 : <CFString 0x30a510 [0xa07ba150]>{contents = "sv"}
    7 : <CFString 0x30a520 [0xa07ba150]>{contents = "nb"}
    8 : <CFString 0x30a530 [0xa07ba150]>{contents = "ja"}
    9 : <CFString 0x30a540 [0xa07ba150]>{contents = "zh-Hans"}
    10 : <CFString 0x30a560 [0xa07ba150]>{contents = "da"}
    11 : <CFString 0x30a570 [0xa07ba150]>{contents = "fi"}
    12 : <CFString 0x30a580 [0xa07ba150]>{contents = "pt"}
    13 : <CFString 0x30a590 [0xa07ba150]>{contents = "zh-Hant"}
    14 : <CFString 0x30a5b0 [0xa07ba150]>{contents = "ko"}
    15 : <CFString 0x30a5c0 [0xa07ba150]>{contents = "hu"}
)}


История версии документа


ДатаПримечания
19.12.2006

Новый документ, что получение порядка языков, установленных Международным предпочтением, разделяет на области в Какао, Углероде и Терминале.