]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/common/unicode/ualoc.h
ICU-551.24.tar.gz
[apple/icu.git] / icuSources / common / unicode / ualoc.h
index f6fc7f344f2aac7f31016bd009e60cc44dcbb666..ee57e546494af0e2235db3aded6340a3ac198d23 100644 (file)
@@ -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,160 @@ 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.
+ * @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*/