/*
*****************************************************************************************
-* Copyright (C) 2014 Apple Inc. All Rights Reserved.
+* Copyright (C) 2014-2015 Apple Inc. All Rights Reserved.
*****************************************************************************************
*/
#ifndef U_HIDE_DRAFT_API
-/**
+/**
* Codes for language status in a country or region.
* @draft ICU 54
*/
/**
* 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
* 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;
* 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;
*
* @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
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.
+ * @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*/