Как я могу определить порядок языков, установленных пользователем на вкладке 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 | Новый документ, что получение порядка языков, установленных Международным предпочтением, разделяет на области в Какао, Углероде и Терминале. |