X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/57a6839dcb3bba09e8228b822b290604668416fe..2ca993e82fb37b597a3c73ecd1586a139a6579c5:/icuSources/common/unicode/ualoc.h diff --git a/icuSources/common/unicode/ualoc.h b/icuSources/common/unicode/ualoc.h index f6fc7f34..8260c176 100644 --- a/icuSources/common/unicode/ualoc.h +++ b/icuSources/common/unicode/ualoc.h @@ -1,6 +1,6 @@ /* ***************************************************************************************** -* Copyright (C) 2014 Apple Inc. All Rights Reserved. +* Copyright (C) 2014-2015 Apple Inc. All Rights Reserved. ***************************************************************************************** */ @@ -11,7 +11,7 @@ #ifndef U_HIDE_DRAFT_API -/** +/** * Codes for language status in a country or region. * @draft ICU 54 */ @@ -39,7 +39,7 @@ typedef enum { /** * UALANGDATA_CODELEN is the maximum length of a language code * (language subtag, possible extension, possible script subtag) - * in the UALanguageEntry struct. + * in the UALanguageEntry struct. * @draft ICU 54 */ #define UALANGDATA_CODELEN 23 @@ -114,6 +114,7 @@ ualoc_getLanguagesForRegion(const char *regionID, double minimumFraction, * the next one to the right: * * en_US → en → root; + * en_HK → en_GB → en_001 → en → root; * en_IN → en_GB → en_001 → en → root; * es_ES → es → root; * es_MX → es_419 → es → root; @@ -124,6 +125,7 @@ ualoc_getLanguagesForRegion(const char *regionID, double minimumFraction, * sr_Latn → root; * zh_Hans → zh → zh_CN → root; * zh_Hant_MO → zh_Hant_HK → zh_Hant → zh_TW → root; + * zh_HK → zh_Hant_HK → zh_Hant → zh_TW → root; * root → root; * tlh → root; * @@ -134,7 +136,7 @@ ualoc_getLanguagesForRegion(const char *regionID, double minimumFraction, * @param err Pointer to UErrorCode. If on input it indicates failure, function will return 0. * If on output it indicates an error the contents of parent buffer are undefined. * @return The actual buffer length of the parent localeID. If it is greater than parentCapacity, - * an overflow error will be set and the contents of parent buffer are undefined. + * an overflow error will be set and the contents of parent buffer are undefined. * @draft ICU 53 */ U_DRAFT int32_t U_EXPORT2 @@ -143,5 +145,161 @@ ualoc_getAppleParent(const char* localeID, int32_t parentCapacity, UErrorCode* err); +/** + * ualoc_localizationsToUse - map preferred languages to + * available localizations. + * ========================= + * BEHAVIOR EXAMPLES + * Each block gives up to 6 sets of available lprojs, and then shows how various + * preferred language requests would be mapped into one of the lprojs in each set. + * The en entriy marked * is currently not working as intended (get just "en" + * instead of the indicated values) + * + * -------- + * lproj sets → list1 list2 list3 list4 list5 list6 + * zh_CN zh_CN zh_CN zh_Hans zh_CN zh_CN + * zh_TW zh_TW zh_TW zh_Hant zh_TW zh_TW + * zh_HK zh_HK zh_Hant_HK zh_Hans zh_HK + * zh_MO zh_Hant zh_Hans + * zh_Hant + * zh_Hant_HK + * language ↓ + * zh zh_CN zh_CN zh_CN zh_Hans zh_Hans zh_Hans + * zh-Hans zh_CN zh_CN zh_CN zh_Hans zh_Hans zh_Hans + * zh-Hant zh_TW zh_TW zh_TW zh_Hant zh_Hant zh_Hant + * zh-Hans-CN zh_CN zh_CN zh_CN zh_Hans zh_CN, zh_CN, + * zh_Hans zh_Hans + * zh-Hans-SG zh_CN zh_CN zh_CN zh_Hans zh_Hans zh_Hans + * zh-Hant-TW zh_TW zh_TW zh_TW zh_Hant zh_TW, zh_TW, + * zh_Hant zh_Hant + * zh-Hant-HK zh_TW zh_HK, zh_HK, zh_Hant_HK, zh_Hant zh_Hant_HK, + * zh_TW zh_TW zh_Hant zh_Hant + * zh-Hant-MO zh_TW zh_HK, zh_MO, zh_Hant_HK, zh_Hant zh_Hant_HK, + * zh_TW zh_HK,zh_TW zh_Hant zh_Hant + * zh-Hans-HK zh_CN zh_CN zh_CN zh_Hans zh_Hans zh_Hans + * zh-CN zh_CN zh_CN zh_CN zh_Hans zh_CN, zh_CN, + * zh_Hans zh_Hans + * zh-SG zh_CN zh_CN zh_CN zh_Hans zh_Hans zh_Hans + * zh-TW zh_TW zh_TW zh_TW zh_Hant zh_TW, zh_TW, + * zh_Hant zh_Hant + * zh-HK zh_TW zh_HK zh_HK, zh_Hant_HK, zh_Hant zh_HK, + * zh_TW zh_Hant zh_Hant_HK,zh_Hant + * zh-MO zh_TW zh_HK zh_MO, zh_Hant_HK, zh_Hant zh_Hant_HK, + * zh_HK,zh_TW zh_Hant zh_Hant_HK,zh_Hant + * -------- + * lproj sets → list1 list2 list3 list4 list5 list6 + * English en en en en en + * en_AU en_AU en_AU en_AU en_AU + * en_GB en_GB en_GB en_GB en_GB + * en_CA en_CA en_001 en_001 + * en_IN en_150 + * en_US + * language ↓ + * en English en en en en en + * en-US English en en en_US, en en + * en + * en-AU English en_AU, en_AU, en_AU, en_AU,en_GB, en_AU,en_GB, + * en_GB,en en_GB,en en_GB,en en_001,en en_001,en + * en-CA English en en_CA, en_CA, en_001, en_001, + * en en en en + * en-GB English en_GB, en_GB, en_GB, en_GB, en_GB, + * en en en en_001,en en_001,en + * en-IN English en_GB, en_GB, en_IN, en_GB, en_GB, + * en en en_GB,en en_001,en en_001,en + * en-US English en en en_US, en en + * en + * en-FR English en_GB, en_GB, en_GB, en_GB, en_150,en_GB, + * en en en en_001,en en_001,en + * en-IL English en en en en_001, en_001, + * en en + * en-001 English en en en en_001, en_001, + * en en + * en-150 English en_GB, en_GB, en_GB, en_GB, en_150,en_GB, + * en en en en_001,en en_001,en + * en-Latn English en en en en en + * en-Latn_US English en en en_US,* en en + * en + * -------- + * lproj sets → list1 list2 list3 list4 list5 list6 + * Spanish es es es es es + * es_MX es_419 es_419 es_ES es_ES + * es_MX es_MX es_419 + * es_MX + * language ↓ + * es Spanish es es es es es + * es-ES Spanish es es es es_ES, es_ES, + * es es + * es-419 Spanish es es_419, es_419, es es_419, + * es es es + * es-MX Spanish es_MX, es_419, es_MX, es_MX, es_MX, + * es es es_419,es es es_419,es + * es-AR Spanish es es_419, es_419, es es_419, + * es es es + * -------- + * lproj sets → list1 list2 list3 list4 list5 list6 + * Portuguese pt pt pt + * pt_PT pt_BR pt_BR + * pt_PT + * language ↓ + * pt Portuguese pt pt pt + * pt-BR Portuguese pt pt_BR, pt_BR, + * pt pt + * pt-PT Portuguese pt_PT, pt_PT, pt + * pt pt + * pt-MO Portuguese pt_PT, pt_PT, pt + * pt pt + * ========================= + * + * @param preferredLanguages + * Ordered array of pointers to user's preferred language + * codes (BCP47 style null-terminated ASCII strings), in + * order from most preferred; intended to accept the + * contents of AppleLanguages. Must not be NULL. + * Entries with the following values will be ignored: + * NULL, "", "root", any entry beginning with '-' or '_'. + * @param preferredLanguagesCount + * Count of entries in preferredLanguages. + * @param availableLocalizations + * Unordered array of pointers to identifiers for available + * localizations (lprojs); handles old Apple-style + * identifiers such as "English", as well as currently- + * superseded identifiers such as "no", "tl". Must not be + * NULL. Entries with the following values will be ignored: + * NULL, "", "root", any entry beginning with '-' or '_'. + * @param availableLocalizationsCount + * Count of entries in availableLocalizations. + * @param localizationsToUse + * Caller-provided array to be filled with pointers to + * localizations to use in the availableLocalizations + * array; these are entries from availableLocalizations + * that correspond to the first language in + * preferredLanguages for which there is any entry in + * availableLocalizations that is a reasonable match, + * with the best-matching localization first in + * localizationsToUse, followed by any other possible + * fallback localizations (for example, "en_IN" in + * preferredLanguages might produce { "en_GB, "en" } in + * localizationsToUse). Must not be NULL. This need not + * large enough to accomodate all of the localizations + * that might be returned; it is perfectly reasonable + * (and more efficient) to only provide an array with + * one entry, if that is all that you are planning to use. + * @param localizationsToUseCapacity + * The capacity of localizationsToUse. + * @param status + * A pointer to a UErrorCode to receive any errors. + * @return + * The number of entries filled out in localizationsToUse. + * @draft ICU 55 + */ +U_DRAFT int32_t U_EXPORT2 +ualoc_localizationsToUse( const char* const *preferredLanguages, + int32_t preferredLanguagesCount, + const char* const *availableLocalizations, + int32_t availableLocalizationsCount, + const char* *localizationsToUse, + int32_t localizationsToUseCapacity, + UErrorCode *status ); + #endif /* U_HIDE_DRAFT_API */ #endif /*UALOC_H*/