intl/icu/source/common/unicode/uloc.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /*
     2 **********************************************************************
     3 *   Copyright (C) 1997-2013, International Business Machines
     4 *   Corporation and others.  All Rights Reserved.
     5 **********************************************************************
     6 *
     7 * File ULOC.H
     8 *
     9 * Modification History:
    10 *
    11 *   Date        Name        Description
    12 *   04/01/97    aliu        Creation.
    13 *   08/22/98    stephen     JDK 1.2 sync.
    14 *   12/08/98    rtg         New C API for Locale
    15 *   03/30/99    damiba      overhaul
    16 *   03/31/99    helena      Javadoc for uloc functions.
    17 *   04/15/99    Madhu       Updated Javadoc
    18 ********************************************************************************
    19 */
    21 #ifndef ULOC_H
    22 #define ULOC_H
    24 #include "unicode/utypes.h"
    25 #include "unicode/uenum.h"
    27 /**    
    28  * \file
    29  * \brief  C API: Locale 
    30  *
    31  * <h2> ULoc C API for Locale </h2>
    32  * A <code>Locale</code> represents a specific geographical, political,
    33  * or cultural region. An operation that requires a <code>Locale</code> to perform
    34  * its task is called <em>locale-sensitive</em> and uses the <code>Locale</code>
    35  * to tailor information for the user. For example, displaying a number
    36  * is a locale-sensitive operation--the number should be formatted
    37  * according to the customs/conventions of the user's native country,
    38  * region, or culture.  In the C APIs, a locales is simply a const char string.
    39  *
    40  * <P>
    41  * You create a <code>Locale</code> with one of the three options listed below.
    42  * Each of the component is separated by '_' in the locale string.
    43  * \htmlonly<blockquote>\endhtmlonly
    44  * <pre>
    45  * \code
    46  *       newLanguage
    47  * 
    48  *       newLanguage + newCountry
    49  * 
    50  *       newLanguage + newCountry + newVariant
    51  * \endcode
    52  * </pre>
    53  * \htmlonly</blockquote>\endhtmlonly
    54  * The first option is a valid <STRONG>ISO
    55  * Language Code.</STRONG> These codes are the lower-case two-letter
    56  * codes as defined by ISO-639.
    57  * You can find a full list of these codes at a number of sites, such as:
    58  * <BR><a href ="http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt">
    59  * http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt</a>
    60  *
    61  * <P>
    62  * The second option includes an additonal <STRONG>ISO Country
    63  * Code.</STRONG> These codes are the upper-case two-letter codes
    64  * as defined by ISO-3166.
    65  * You can find a full list of these codes at a number of sites, such as:
    66  * <BR><a href="http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html">
    67  * http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html</a>
    68  *
    69  * <P>
    70  * The third option requires another additonal information--the 
    71  * <STRONG>Variant.</STRONG>
    72  * The Variant codes are vendor and browser-specific.
    73  * For example, use WIN for Windows, MAC for Macintosh, and POSIX for POSIX.
    74  * Where there are two variants, separate them with an underscore, and
    75  * put the most important one first. For
    76  * example, a Traditional Spanish collation might be referenced, with
    77  * "ES", "ES", "Traditional_WIN".
    78  *
    79  * <P>
    80  * Because a <code>Locale</code> is just an identifier for a region,
    81  * no validity check is performed when you specify a <code>Locale</code>.
    82  * If you want to see whether particular resources are available for the
    83  * <code>Locale</code> you asked for, you must query those resources. For
    84  * example, ask the <code>UNumberFormat</code> for the locales it supports
    85  * using its <code>getAvailable</code> method.
    86  * <BR><STRONG>Note:</STRONG> When you ask for a resource for a particular
    87  * locale, you get back the best available match, not necessarily
    88  * precisely what you asked for. For more information, look at
    89  * <code>UResourceBundle</code>.
    90  *
    91  * <P>
    92  * The <code>Locale</code> provides a number of convenient constants
    93  * that you can use to specify the commonly used
    94  * locales. For example, the following refers to a locale
    95  * for the United States:
    96  * \htmlonly<blockquote>\endhtmlonly
    97  * <pre>
    98  * \code
    99  *       ULOC_US
   100  * \endcode
   101  * </pre>
   102  * \htmlonly</blockquote>\endhtmlonly
   103  *
   104  * <P>
   105  * Once you've specified a locale you can query it for information about
   106  * itself. Use <code>uloc_getCountry</code> to get the ISO Country Code and
   107  * <code>uloc_getLanguage</code> to get the ISO Language Code. You can
   108  * use <code>uloc_getDisplayCountry</code> to get the
   109  * name of the country suitable for displaying to the user. Similarly,
   110  * you can use <code>uloc_getDisplayLanguage</code> to get the name of
   111  * the language suitable for displaying to the user. Interestingly,
   112  * the <code>uloc_getDisplayXXX</code> methods are themselves locale-sensitive
   113  * and have two versions: one that uses the default locale and one
   114  * that takes a locale as an argument and displays the name or country in
   115  * a language appropriate to that locale.
   116  *
   117  * <P>
   118  * The ICU provides a number of services that perform locale-sensitive
   119  * operations. For example, the <code>unum_xxx</code> functions format
   120  * numbers, currency, or percentages in a locale-sensitive manner. 
   121  * </P>
   122  * \htmlonly<blockquote>\endhtmlonly
   123  * <pre>
   124  * \code
   125  *     UErrorCode success = U_ZERO_ERROR;
   126  *     UNumberFormat *nf;
   127  *     const char* myLocale = "fr_FR";
   128  * 
   129  *     nf = unum_open( UNUM_DEFAULT, NULL, success );          
   130  *     unum_close(nf);
   131  *     nf = unum_open( UNUM_CURRENCY, NULL, success );
   132  *     unum_close(nf);
   133  *     nf = unum_open( UNUM_PERCENT, NULL, success );   
   134  *     unum_close(nf);
   135  * \endcode
   136  * </pre>
   137  * \htmlonly</blockquote>\endhtmlonly
   138  * Each of these methods has two variants; one with an explicit locale
   139  * and one without; the latter using the default locale.
   140  * \htmlonly<blockquote>\endhtmlonly
   141  * <pre>
   142  * \code 
   143  * 
   144  *     nf = unum_open( UNUM_DEFAULT, myLocale, success );          
   145  *     unum_close(nf);
   146  *     nf = unum_open( UNUM_CURRENCY, myLocale, success );
   147  *     unum_close(nf);
   148  *     nf = unum_open( UNUM_PERCENT, myLocale, success );   
   149  *     unum_close(nf);
   150  * \endcode
   151  * </pre>
   152  * \htmlonly</blockquote>\endhtmlonly
   153  * A <code>Locale</code> is the mechanism for identifying the kind of services
   154  * (<code>UNumberFormat</code>) that you would like to get. The locale is
   155  * <STRONG>just</STRONG> a mechanism for identifying these services.
   156  *
   157  * <P>
   158  * Each international serivce that performs locale-sensitive operations 
   159  * allows you
   160  * to get all the available objects of that type. You can sift
   161  * through these objects by language, country, or variant,
   162  * and use the display names to present a menu to the user.
   163  * For example, you can create a menu of all the collation objects
   164  * suitable for a given language. Such classes implement these
   165  * three class methods:
   166  * \htmlonly<blockquote>\endhtmlonly
   167  * <pre>
   168  * \code
   169  *       const char* uloc_getAvailable(int32_t index);
   170  *       int32_t uloc_countAvailable();
   171  *       int32_t
   172  *       uloc_getDisplayName(const char* localeID,
   173  *                 const char* inLocaleID, 
   174  *                 UChar* result,
   175  *                 int32_t maxResultSize,
   176  *                  UErrorCode* err);
   177  * 
   178  * \endcode
   179  * </pre>
   180  * \htmlonly</blockquote>\endhtmlonly
   181  * <P>
   182  * Concerning POSIX/RFC1766 Locale IDs, 
   183  *  the getLanguage/getCountry/getVariant/getName functions do understand
   184  * the POSIX type form of  language_COUNTRY.ENCODING\@VARIANT
   185  * and if there is not an ICU-stype variant, uloc_getVariant() for example
   186  * will return the one listed after the \@at sign. As well, the hyphen
   187  * "-" is recognized as a country/variant separator similarly to RFC1766.
   188  * So for example, "en-us" will be interpreted as en_US.  
   189  * As a result, uloc_getName() is far from a no-op, and will have the
   190  * effect of converting POSIX/RFC1766 IDs into ICU form, although it does
   191  * NOT map any of the actual codes (i.e. russian->ru) in any way.
   192  * Applications should call uloc_getName() at the point where a locale ID
   193  * is coming from an external source (user entry, OS, web browser)
   194  * and pass the resulting string to other ICU functions.  For example,
   195  * don't use de-de\@EURO as an argument to resourcebundle.
   196  *
   197  * @see UResourceBundle
   198  */
   200 /** Useful constant for this language. @stable ICU 2.0 */
   201 #define ULOC_CHINESE            "zh"
   202 /** Useful constant for this language. @stable ICU 2.0 */
   203 #define ULOC_ENGLISH            "en"
   204 /** Useful constant for this language. @stable ICU 2.0 */
   205 #define ULOC_FRENCH             "fr"
   206 /** Useful constant for this language. @stable ICU 2.0 */
   207 #define ULOC_GERMAN             "de"
   208 /** Useful constant for this language. @stable ICU 2.0 */
   209 #define ULOC_ITALIAN            "it"
   210 /** Useful constant for this language. @stable ICU 2.0 */
   211 #define ULOC_JAPANESE           "ja"
   212 /** Useful constant for this language. @stable ICU 2.0 */
   213 #define ULOC_KOREAN             "ko"
   214 /** Useful constant for this language. @stable ICU 2.0 */
   215 #define ULOC_SIMPLIFIED_CHINESE "zh_CN"
   216 /** Useful constant for this language. @stable ICU 2.0 */
   217 #define ULOC_TRADITIONAL_CHINESE "zh_TW"
   219 /** Useful constant for this country/region. @stable ICU 2.0 */
   220 #define ULOC_CANADA         "en_CA"
   221 /** Useful constant for this country/region. @stable ICU 2.0 */
   222 #define ULOC_CANADA_FRENCH  "fr_CA"
   223 /** Useful constant for this country/region. @stable ICU 2.0 */
   224 #define ULOC_CHINA          "zh_CN"
   225 /** Useful constant for this country/region. @stable ICU 2.0 */
   226 #define ULOC_PRC            "zh_CN"
   227 /** Useful constant for this country/region. @stable ICU 2.0 */
   228 #define ULOC_FRANCE         "fr_FR"
   229 /** Useful constant for this country/region. @stable ICU 2.0 */
   230 #define ULOC_GERMANY        "de_DE"
   231 /** Useful constant for this country/region. @stable ICU 2.0 */
   232 #define ULOC_ITALY          "it_IT"
   233 /** Useful constant for this country/region. @stable ICU 2.0 */
   234 #define ULOC_JAPAN          "ja_JP"
   235 /** Useful constant for this country/region. @stable ICU 2.0 */
   236 #define ULOC_KOREA          "ko_KR"
   237 /** Useful constant for this country/region. @stable ICU 2.0 */
   238 #define ULOC_TAIWAN         "zh_TW"
   239 /** Useful constant for this country/region. @stable ICU 2.0 */
   240 #define ULOC_UK             "en_GB"
   241 /** Useful constant for this country/region. @stable ICU 2.0 */
   242 #define ULOC_US             "en_US"
   244 /**
   245  * Useful constant for the maximum size of the language part of a locale ID.
   246  * (including the terminating NULL).
   247  * @stable ICU 2.0
   248  */
   249 #define ULOC_LANG_CAPACITY 12
   251 /**
   252  * Useful constant for the maximum size of the country part of a locale ID
   253  * (including the terminating NULL).
   254  * @stable ICU 2.0
   255  */
   256 #define ULOC_COUNTRY_CAPACITY 4
   257 /**
   258  * Useful constant for the maximum size of the whole locale ID
   259  * (including the terminating NULL and all keywords).
   260  * @stable ICU 2.0
   261  */
   262 #define ULOC_FULLNAME_CAPACITY 157
   264 /**
   265  * Useful constant for the maximum size of the script part of a locale ID
   266  * (including the terminating NULL).
   267  * @stable ICU 2.8
   268  */
   269 #define ULOC_SCRIPT_CAPACITY 6
   271 /**
   272  * Useful constant for the maximum size of keywords in a locale
   273  * @stable ICU 2.8
   274  */
   275 #define ULOC_KEYWORDS_CAPACITY 50
   277 /**
   278  * Useful constant for the maximum total size of keywords and their values in a locale
   279  * @stable ICU 2.8
   280  */
   281 #define ULOC_KEYWORD_AND_VALUES_CAPACITY 100
   283 /**
   284  * Invariant character separating keywords from the locale string
   285  * @stable ICU 2.8
   286  */
   287 #define ULOC_KEYWORD_SEPARATOR '@'
   289 /**
   290   * Unicode code point for '@' separating keywords from the locale string.
   291   * @see ULOC_KEYWORD_SEPARATOR
   292   * @stable ICU 4.6
   293   */
   294 #define ULOC_KEYWORD_SEPARATOR_UNICODE 0x40
   296 /**
   297  * Invariant character for assigning value to a keyword
   298  * @stable ICU 2.8
   299  */
   300 #define ULOC_KEYWORD_ASSIGN '='
   302 /**
   303   * Unicode code point for '=' for assigning value to a keyword.
   304   * @see ULOC_KEYWORD_ASSIGN
   305   * @stable ICU 4.6 
   306   */
   307 #define ULOC_KEYWORD_ASSIGN_UNICODE 0x3D
   309 /**
   310  * Invariant character separating keywords
   311  * @stable ICU 2.8
   312  */
   313 #define ULOC_KEYWORD_ITEM_SEPARATOR ';'
   315 /**
   316   * Unicode code point for ';' separating keywords
   317   * @see ULOC_KEYWORD_ITEM_SEPARATOR
   318   * @stable ICU 4.6
   319   */
   320 #define ULOC_KEYWORD_ITEM_SEPARATOR_UNICODE 0x3B
   322 /**
   323  * Constants for *_getLocale()
   324  * Allow user to select whether she wants information on 
   325  * requested, valid or actual locale.
   326  * For example, a collator for "en_US_CALIFORNIA" was
   327  * requested. In the current state of ICU (2.0), 
   328  * the requested locale is "en_US_CALIFORNIA",
   329  * the valid locale is "en_US" (most specific locale supported by ICU)
   330  * and the actual locale is "root" (the collation data comes unmodified 
   331  * from the UCA)
   332  * The locale is considered supported by ICU if there is a core ICU bundle 
   333  * for that locale (although it may be empty).
   334  * @stable ICU 2.1
   335  */
   336 typedef enum {
   337   /** This is locale the data actually comes from 
   338    * @stable ICU 2.1
   339    */
   340   ULOC_ACTUAL_LOCALE    = 0,
   341   /** This is the most specific locale supported by ICU 
   342    * @stable ICU 2.1
   343    */
   344   ULOC_VALID_LOCALE    = 1,
   346 #ifndef U_HIDE_DEPRECATED_API
   347   /** This is the requested locale
   348    *  @deprecated ICU 2.8 
   349    */
   350   ULOC_REQUESTED_LOCALE = 2,
   351 #endif /* U_HIDE_DEPRECATED_API */
   353   ULOC_DATA_LOCALE_TYPE_LIMIT = 3
   354 } ULocDataLocaleType ;
   356 #ifndef U_HIDE_SYSTEM_API
   357 /**
   358  * Gets ICU's default locale.  
   359  * The returned string is a snapshot in time, and will remain valid
   360  *   and unchanged even when uloc_setDefault() is called.
   361  *   The returned storage is owned by ICU, and must not be altered or deleted
   362  *   by the caller.
   363  *  
   364  * @return the ICU default locale
   365  * @system
   366  * @stable ICU 2.0
   367  */
   368 U_STABLE const char* U_EXPORT2
   369 uloc_getDefault(void);
   371 /**
   372  * Sets ICU's default locale.  
   373  *    By default (without calling this function), ICU's default locale will be based
   374  *    on information obtained from the underlying system environment.
   375  *    <p>
   376  *    Changes to ICU's default locale do not propagate back to the
   377  *    system environment.
   378  *    <p>
   379  *    Changes to ICU's default locale to not affect any ICU services that
   380  *    may already be open based on the previous default locale value.
   381  *
   382  * @param localeID the new ICU default locale. A value of NULL will try to get
   383  *                 the system's default locale.
   384  * @param status the error information if the setting of default locale fails
   385  * @system
   386  * @stable ICU 2.0
   387  */
   388 U_STABLE void U_EXPORT2
   389 uloc_setDefault(const char* localeID,
   390         UErrorCode*       status);
   391 #endif  /* U_HIDE_SYSTEM_API */
   393 /**
   394  * Gets the language code for the specified locale.
   395  *
   396  * @param localeID the locale to get the ISO language code with
   397  * @param language the language code for localeID
   398  * @param languageCapacity the size of the language buffer to store the  
   399  * language code with
   400  * @param err error information if retrieving the language code failed
   401  * @return the actual buffer size needed for the language code.  If it's greater 
   402  * than languageCapacity, the returned language code will be truncated.  
   403  * @stable ICU 2.0
   404  */
   405 U_STABLE int32_t U_EXPORT2
   406 uloc_getLanguage(const char*    localeID,
   407          char* language,
   408          int32_t languageCapacity,
   409          UErrorCode* err);
   411 /**
   412  * Gets the script code for the specified locale.
   413  *
   414  * @param localeID the locale to get the ISO language code with
   415  * @param script the language code for localeID
   416  * @param scriptCapacity the size of the language buffer to store the  
   417  * language code with
   418  * @param err error information if retrieving the language code failed
   419  * @return the actual buffer size needed for the language code.  If it's greater 
   420  * than scriptCapacity, the returned language code will be truncated.  
   421  * @stable ICU 2.8
   422  */
   423 U_STABLE int32_t U_EXPORT2
   424 uloc_getScript(const char*    localeID,
   425          char* script,
   426          int32_t scriptCapacity,
   427          UErrorCode* err);
   429 /**
   430  * Gets the  country code for the specified locale.
   431  *
   432  * @param localeID the locale to get the country code with
   433  * @param country the country code for localeID
   434  * @param countryCapacity the size of the country buffer to store the  
   435  * country code with
   436  * @param err error information if retrieving the country code failed
   437  * @return the actual buffer size needed for the country code.  If it's greater 
   438  * than countryCapacity, the returned country code will be truncated.  
   439  * @stable ICU 2.0
   440  */
   441 U_STABLE int32_t U_EXPORT2
   442 uloc_getCountry(const char*    localeID,
   443         char* country,
   444         int32_t countryCapacity,
   445         UErrorCode* err);
   447 /**
   448  * Gets the variant code for the specified locale.
   449  *
   450  * @param localeID the locale to get the variant code with
   451  * @param variant the variant code for localeID
   452  * @param variantCapacity the size of the variant buffer to store the 
   453  * variant code with
   454  * @param err error information if retrieving the variant code failed
   455  * @return the actual buffer size needed for the variant code.  If it's greater 
   456  * than variantCapacity, the returned variant code will be truncated.  
   457  * @stable ICU 2.0
   458  */
   459 U_STABLE int32_t U_EXPORT2
   460 uloc_getVariant(const char*    localeID,
   461         char* variant,
   462         int32_t variantCapacity,
   463         UErrorCode* err);
   466 /**
   467  * Gets the full name for the specified locale.
   468  * Note: This has the effect of 'canonicalizing' the ICU locale ID to
   469  * a certain extent. Upper and lower case are set as needed.
   470  * It does NOT map aliased names in any way.
   471  * See the top of this header file.
   472  * This API supports preflighting.
   473  *
   474  * @param localeID the locale to get the full name with
   475  * @param name fill in buffer for the name without keywords.
   476  * @param nameCapacity capacity of the fill in buffer.
   477  * @param err error information if retrieving the full name failed
   478  * @return the actual buffer size needed for the full name.  If it's greater 
   479  * than nameCapacity, the returned full name will be truncated.  
   480  * @stable ICU 2.0
   481  */
   482 U_STABLE int32_t U_EXPORT2
   483 uloc_getName(const char*    localeID,
   484          char* name,
   485          int32_t nameCapacity,
   486          UErrorCode* err);
   488 /**
   489  * Gets the full name for the specified locale.
   490  * Note: This has the effect of 'canonicalizing' the string to
   491  * a certain extent. Upper and lower case are set as needed,
   492  * and if the components were in 'POSIX' format they are changed to
   493  * ICU format.  It does NOT map aliased names in any way.
   494  * See the top of this header file.
   495  *
   496  * @param localeID the locale to get the full name with
   497  * @param name the full name for localeID
   498  * @param nameCapacity the size of the name buffer to store the 
   499  * full name with
   500  * @param err error information if retrieving the full name failed
   501  * @return the actual buffer size needed for the full name.  If it's greater 
   502  * than nameCapacity, the returned full name will be truncated.  
   503  * @stable ICU 2.8
   504  */
   505 U_STABLE int32_t U_EXPORT2
   506 uloc_canonicalize(const char*    localeID,
   507          char* name,
   508          int32_t nameCapacity,
   509          UErrorCode* err);
   511 /**
   512  * Gets the ISO language code for the specified locale.
   513  *
   514  * @param localeID the locale to get the ISO language code with
   515  * @return language the ISO language code for localeID
   516  * @stable ICU 2.0
   517  */
   518 U_STABLE const char* U_EXPORT2
   519 uloc_getISO3Language(const char* localeID);
   522 /**
   523  * Gets the ISO country code for the specified locale.
   524  *
   525  * @param localeID the locale to get the ISO country code with
   526  * @return country the ISO country code for localeID
   527  * @stable ICU 2.0
   528  */
   529 U_STABLE const char* U_EXPORT2
   530 uloc_getISO3Country(const char* localeID);
   532 /**
   533  * Gets the Win32 LCID value for the specified locale.
   534  * If the ICU locale is not recognized by Windows, 0 will be returned.
   535  *
   536  * @param localeID the locale to get the Win32 LCID value with
   537  * @return country the Win32 LCID for localeID
   538  * @stable ICU 2.0
   539  */
   540 U_STABLE uint32_t U_EXPORT2
   541 uloc_getLCID(const char* localeID);
   543 /**
   544  * Gets the language name suitable for display for the specified locale.
   545  *
   546  * @param locale the locale to get the ISO language code with
   547  * @param displayLocale Specifies the locale to be used to display the name.  In other words,
   548  *                 if the locale's language code is "en", passing Locale::getFrench() for
   549  *                 inLocale would result in "Anglais", while passing Locale::getGerman()
   550  *                 for inLocale would result in "Englisch".
   551  * @param language the displayable language code for localeID
   552  * @param languageCapacity the size of the language buffer to store the  
   553  * displayable language code with
   554  * @param status error information if retrieving the displayable language code failed
   555  * @return the actual buffer size needed for the displayable language code.  If it's greater 
   556  * than languageCapacity, the returned language code will be truncated.  
   557  * @stable ICU 2.0
   558  */
   559 U_STABLE int32_t U_EXPORT2
   560 uloc_getDisplayLanguage(const char* locale,
   561             const char* displayLocale,
   562             UChar* language,
   563             int32_t languageCapacity,
   564             UErrorCode* status);
   566 /**
   567  * Gets the script name suitable for display for the specified locale.
   568  *
   569  * @param locale the locale to get the displayable script code with. NULL may be used to specify the default.
   570  * @param displayLocale Specifies the locale to be used to display the name.  In other words,
   571  *                 if the locale's language code is "en", passing Locale::getFrench() for
   572  *                 inLocale would result in "", while passing Locale::getGerman()
   573  *                 for inLocale would result in "". NULL may be used to specify the default.
   574  * @param script the displayable country code for localeID
   575  * @param scriptCapacity the size of the script buffer to store the  
   576  * displayable script code with
   577  * @param status error information if retrieving the displayable script code failed
   578  * @return the actual buffer size needed for the displayable script code.  If it's greater 
   579  * than scriptCapacity, the returned displayable script code will be truncated.  
   580  * @stable ICU 2.8
   581  */
   582 U_STABLE int32_t U_EXPORT2
   583 uloc_getDisplayScript(const char* locale,
   584             const char* displayLocale,
   585             UChar* script,
   586             int32_t scriptCapacity,
   587             UErrorCode* status);
   589 /**
   590  * Gets the country name suitable for display for the specified locale.
   591  *
   592  * @param locale the locale to get the displayable country code with. NULL may be used to specify the default.
   593  * @param displayLocale Specifies the locale to be used to display the name.  In other words,
   594  *                 if the locale's language code is "en", passing Locale::getFrench() for
   595  *                 inLocale would result in "Anglais", while passing Locale::getGerman()
   596  *                 for inLocale would result in "Englisch". NULL may be used to specify the default.
   597  * @param country the displayable country code for localeID
   598  * @param countryCapacity the size of the country buffer to store the  
   599  * displayable country code with
   600  * @param status error information if retrieving the displayable country code failed
   601  * @return the actual buffer size needed for the displayable country code.  If it's greater 
   602  * than countryCapacity, the returned displayable country code will be truncated.  
   603  * @stable ICU 2.0
   604  */
   605 U_STABLE int32_t U_EXPORT2
   606 uloc_getDisplayCountry(const char* locale,
   607                        const char* displayLocale,
   608                        UChar* country,
   609                        int32_t countryCapacity,
   610                        UErrorCode* status);
   613 /**
   614  * Gets the variant name suitable for display for the specified locale.
   615  *
   616  * @param locale the locale to get the displayable variant code with. NULL may be used to specify the default.
   617  * @param displayLocale Specifies the locale to be used to display the name.  In other words,
   618  *                 if the locale's language code is "en", passing Locale::getFrench() for
   619  *                 inLocale would result in "Anglais", while passing Locale::getGerman()
   620  *                 for inLocale would result in "Englisch". NULL may be used to specify the default.
   621  * @param variant the displayable variant code for localeID
   622  * @param variantCapacity the size of the variant buffer to store the 
   623  * displayable variant code with
   624  * @param status error information if retrieving the displayable variant code failed
   625  * @return the actual buffer size needed for the displayable variant code.  If it's greater 
   626  * than variantCapacity, the returned displayable variant code will be truncated.  
   627  * @stable ICU 2.0
   628  */
   629 U_STABLE int32_t U_EXPORT2
   630 uloc_getDisplayVariant(const char* locale,
   631                        const char* displayLocale,
   632                        UChar* variant,
   633                        int32_t variantCapacity,
   634                        UErrorCode* status);
   636 /**
   637  * Gets the keyword name suitable for display for the specified locale.
   638  * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display 
   639  * string for the keyword collation. 
   640  * Usage:
   641  * <code>
   642  *    UErrorCode status = U_ZERO_ERROR;
   643  *    const char* keyword =NULL;
   644  *    int32_t keywordLen = 0;
   645  *    int32_t keywordCount = 0;
   646  *    UChar displayKeyword[256];
   647  *    int32_t displayKeywordLen = 0;
   648  *    UEnumeration* keywordEnum = uloc_openKeywords("de_DE@collation=PHONEBOOK;calendar=TRADITIONAL", &status);
   649  *    for(keywordCount = uenum_count(keywordEnum, &status); keywordCount > 0 ; keywordCount--){
   650  *          if(U_FAILURE(status)){
   651  *              ...something went wrong so handle the error...
   652  *              break;
   653  *          }
   654  *          // the uenum_next returns NUL terminated string
   655  *          keyword = uenum_next(keywordEnum, &keywordLen, &status);
   656  *          displayKeywordLen = uloc_getDisplayKeyword(keyword, "en_US", displayKeyword, 256);
   657  *          ... do something interesting .....
   658  *    }
   659  *    uenum_close(keywordEnum);
   660  * </code>
   661  * @param keyword           The keyword whose display string needs to be returned.
   662  * @param displayLocale     Specifies the locale to be used to display the name.  In other words,
   663  *                          if the locale's language code is "en", passing Locale::getFrench() for
   664  *                          inLocale would result in "Anglais", while passing Locale::getGerman()
   665  *                          for inLocale would result in "Englisch". NULL may be used to specify the default.
   666  * @param dest              the buffer to which the displayable keyword should be written.
   667  * @param destCapacity      The size of the buffer (number of UChars). If it is 0, then
   668  *                          dest may be NULL and the function will only return the length of the 
   669  *                          result without writing any of the result string (pre-flighting).
   670  * @param status            error information if retrieving the displayable string failed. 
   671  *                          Should not be NULL and should not indicate failure on entry.
   672  * @return the actual buffer size needed for the displayable variant code.  
   673  * @see #uloc_openKeywords
   674  * @stable ICU 2.8
   675  */
   676 U_STABLE int32_t U_EXPORT2
   677 uloc_getDisplayKeyword(const char* keyword,
   678                        const char* displayLocale,
   679                        UChar* dest,
   680                        int32_t destCapacity,
   681                        UErrorCode* status);
   682 /**
   683  * Gets the value of the keyword suitable for display for the specified locale.
   684  * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display 
   685  * string for PHONEBOOK, in the display locale, when "collation" is specified as the keyword.
   686  *
   687  * @param locale            The locale to get the displayable variant code with. NULL may be used to specify the default.
   688  * @param keyword           The keyword for whose value should be used.
   689  * @param displayLocale     Specifies the locale to be used to display the name.  In other words,
   690  *                          if the locale's language code is "en", passing Locale::getFrench() for
   691  *                          inLocale would result in "Anglais", while passing Locale::getGerman()
   692  *                          for inLocale would result in "Englisch". NULL may be used to specify the default.
   693  * @param dest              the buffer to which the displayable keyword should be written.
   694  * @param destCapacity      The size of the buffer (number of UChars). If it is 0, then
   695  *                          dest may be NULL and the function will only return the length of the 
   696  *                          result without writing any of the result string (pre-flighting).
   697  * @param status            error information if retrieving the displayable string failed. 
   698  *                          Should not be NULL and must not indicate failure on entry.
   699  * @return the actual buffer size needed for the displayable variant code.  
   700  * @stable ICU 2.8
   701  */
   702 U_STABLE int32_t U_EXPORT2
   703 uloc_getDisplayKeywordValue(   const char* locale,
   704                                const char* keyword,
   705                                const char* displayLocale,
   706                                UChar* dest,
   707                                int32_t destCapacity,
   708                                UErrorCode* status);
   709 /**
   710  * Gets the full name suitable for display for the specified locale.
   711  *
   712  * @param localeID the locale to get the displayable name with. NULL may be used to specify the default.
   713  * @param inLocaleID Specifies the locale to be used to display the name.  In other words,
   714  *                   if the locale's language code is "en", passing Locale::getFrench() for
   715  *                   inLocale would result in "Anglais", while passing Locale::getGerman()
   716  *                   for inLocale would result in "Englisch". NULL may be used to specify the default.
   717  * @param result the displayable name for localeID
   718  * @param maxResultSize the size of the name buffer to store the 
   719  * displayable full name with
   720  * @param err error information if retrieving the displayable name failed
   721  * @return the actual buffer size needed for the displayable name.  If it's greater 
   722  * than maxResultSize, the returned displayable name will be truncated.  
   723  * @stable ICU 2.0
   724  */
   725 U_STABLE int32_t U_EXPORT2
   726 uloc_getDisplayName(const char* localeID,
   727             const char* inLocaleID,
   728             UChar* result,
   729             int32_t maxResultSize,
   730             UErrorCode* err);
   733 /**
   734  * Gets the specified locale from a list of all available locales.  
   735  * The return value is a pointer to an item of 
   736  * a locale name array.  Both this array and the pointers
   737  * it contains are owned by ICU and should not be deleted or written through
   738  * by the caller.  The locale name is terminated by a null pointer.
   739  * @param n the specific locale name index of the available locale list
   740  * @return a specified locale name of all available locales
   741  * @stable ICU 2.0
   742  */
   743 U_STABLE const char* U_EXPORT2
   744 uloc_getAvailable(int32_t n);
   746 /**
   747  * Gets the size of the all available locale list.
   748  *
   749  * @return the size of the locale list
   750  * @stable ICU 2.0
   751  */
   752 U_STABLE int32_t U_EXPORT2 uloc_countAvailable(void);
   754 /**
   755  *
   756  * Gets a list of all available 2-letter language codes defined in ISO 639,
   757  * plus additional 3-letter codes determined to be useful for locale generation as
   758  * defined by Unicode CLDR. This is a pointer
   759  * to an array of pointers to arrays of char.  All of these pointers are owned
   760  * by ICU-- do not delete them, and do not write through them.  The array is
   761  * terminated with a null pointer.
   762  * @return a list of all available language codes
   763  * @stable ICU 2.0
   764  */
   765 U_STABLE const char* const* U_EXPORT2
   766 uloc_getISOLanguages(void);
   768 /**
   769  *
   770  * Gets a list of all available 2-letter country codes defined in ISO 639.  This is a
   771  * pointer to an array of pointers to arrays of char.  All of these pointers are
   772  * owned by ICU-- do not delete them, and do not write through them.  The array is
   773  * terminated with a null pointer.
   774  * @return a list of all available country codes
   775  * @stable ICU 2.0
   776  */
   777 U_STABLE const char* const* U_EXPORT2
   778 uloc_getISOCountries(void);
   780 /**
   781  * Truncate the locale ID string to get the parent locale ID.
   782  * Copies the part of the string before the last underscore.
   783  * The parent locale ID will be an empty string if there is no
   784  * underscore, or if there is only one underscore at localeID[0].
   785  *
   786  * @param localeID Input locale ID string.
   787  * @param parent   Output string buffer for the parent locale ID.
   788  * @param parentCapacity Size of the output buffer.
   789  * @param err A UErrorCode value.
   790  * @return The length of the parent locale ID.
   791  * @stable ICU 2.0
   792  */
   793 U_STABLE int32_t U_EXPORT2
   794 uloc_getParent(const char*    localeID,
   795                  char* parent,
   796                  int32_t parentCapacity,
   797                  UErrorCode* err);
   802 /**
   803  * Gets the full name for the specified locale, like uloc_getName(),
   804  * but without keywords.
   805  *
   806  * Note: This has the effect of 'canonicalizing' the string to
   807  * a certain extent. Upper and lower case are set as needed,
   808  * and if the components were in 'POSIX' format they are changed to
   809  * ICU format.  It does NOT map aliased names in any way.
   810  * See the top of this header file.
   811  *
   812  * This API strips off the keyword part, so "de_DE\@collation=phonebook" 
   813  * will become "de_DE". 
   814  * This API supports preflighting.
   815  *
   816  * @param localeID the locale to get the full name with
   817  * @param name fill in buffer for the name without keywords.
   818  * @param nameCapacity capacity of the fill in buffer.
   819  * @param err error information if retrieving the full name failed
   820  * @return the actual buffer size needed for the full name.  If it's greater 
   821  * than nameCapacity, the returned full name will be truncated.  
   822  * @stable ICU 2.8
   823  */
   824 U_STABLE int32_t U_EXPORT2
   825 uloc_getBaseName(const char*    localeID,
   826          char* name,
   827          int32_t nameCapacity,
   828          UErrorCode* err);
   830 /**
   831  * Gets an enumeration of keywords for the specified locale. Enumeration
   832  * must get disposed of by the client using uenum_close function.
   833  *
   834  * @param localeID the locale to get the variant code with
   835  * @param status error information if retrieving the keywords failed
   836  * @return enumeration of keywords or NULL if there are no keywords.
   837  * @stable ICU 2.8
   838  */
   839 U_STABLE UEnumeration* U_EXPORT2
   840 uloc_openKeywords(const char* localeID,
   841                         UErrorCode* status);
   843 /**
   844  * Get the value for a keyword. Locale name does not need to be normalized.
   845  * 
   846  * @param localeID locale name containing the keyword ("de_DE@currency=EURO;collation=PHONEBOOK")
   847  * @param keywordName name of the keyword for which we want the value. Case insensitive.
   848  * @param buffer receiving buffer
   849  * @param bufferCapacity capacity of receiving buffer
   850  * @param status containing error code - buffer not big enough.
   851  * @return the length of keyword value
   852  * @stable ICU 2.8
   853  */
   854 U_STABLE int32_t U_EXPORT2
   855 uloc_getKeywordValue(const char* localeID,
   856                      const char* keywordName,
   857                      char* buffer, int32_t bufferCapacity,
   858                      UErrorCode* status);
   861 /**
   862  * Sets or removes the value of the specified keyword.
   863  *
   864  * For removing all keywords, use uloc_getBaseName().
   865  *
   866  * NOTE: Unlike almost every other ICU function which takes a
   867  * buffer, this function will NOT truncate the output text. If a
   868  * BUFFER_OVERFLOW_ERROR is received, it means that the original
   869  * buffer is untouched. This is done to prevent incorrect or possibly
   870  * even malformed locales from being generated and used.
   871  *
   872  * @param keywordName name of the keyword to be set. Case insensitive.
   873  * @param keywordValue value of the keyword to be set. If 0-length or
   874  *  NULL, will result in the keyword being removed. No error is given if 
   875  *  that keyword does not exist.
   876  * @param buffer input buffer containing locale to be modified.
   877  * @param bufferCapacity capacity of receiving buffer
   878  * @param status containing error code - buffer not big enough.
   879  * @return the length needed for the buffer
   880  * @see uloc_getKeywordValue
   881  * @stable ICU 3.2
   882  */
   883 U_STABLE int32_t U_EXPORT2
   884 uloc_setKeywordValue(const char* keywordName,
   885                      const char* keywordValue,
   886                      char* buffer, int32_t bufferCapacity,
   887                      UErrorCode* status);
   889 /**
   890  * enums for the  return value for the character and line orientation
   891  * functions.
   892  * @stable ICU 4.0
   893  */
   894 typedef enum {
   895   ULOC_LAYOUT_LTR   = 0,  /* left-to-right. */
   896   ULOC_LAYOUT_RTL    = 1,  /* right-to-left. */
   897   ULOC_LAYOUT_TTB    = 2,  /* top-to-bottom. */
   898   ULOC_LAYOUT_BTT    = 3,   /* bottom-to-top. */
   899   ULOC_LAYOUT_UNKNOWN
   900 } ULayoutType;
   902 /**
   903  * Get the layout character orientation for the specified locale.
   904  * 
   905  * @param localeId locale name
   906  * @param status Error status
   907  * @return an enum indicating the layout orientation for characters.
   908  * @stable ICU 4.0
   909  */
   910 U_STABLE ULayoutType U_EXPORT2
   911 uloc_getCharacterOrientation(const char* localeId,
   912                              UErrorCode *status);
   914 /**
   915  * Get the layout line orientation for the specified locale.
   916  * 
   917  * @param localeId locale name
   918  * @param status Error status
   919  * @return an enum indicating the layout orientation for lines.
   920  * @stable ICU 4.0
   921  */
   922 U_STABLE ULayoutType U_EXPORT2
   923 uloc_getLineOrientation(const char* localeId,
   924                         UErrorCode *status);
   926 /**
   927  * enums for the 'outResult' parameter return value
   928  * @see uloc_acceptLanguageFromHTTP
   929  * @see uloc_acceptLanguage
   930  * @stable ICU 3.2
   931  */
   932 typedef enum {
   933   ULOC_ACCEPT_FAILED   = 0,  /* No exact match was found. */
   934   ULOC_ACCEPT_VALID    = 1,  /* An exact match was found. */
   935   ULOC_ACCEPT_FALLBACK = 2   /* A fallback was found, for example, 
   936                                 Accept list contained 'ja_JP'
   937                                 which matched available locale 'ja'. */
   938 } UAcceptResult;
   941 /**
   942  * Based on a HTTP header from a web browser and a list of available locales,
   943  * determine an acceptable locale for the user.
   944  * @param result - buffer to accept the result locale
   945  * @param resultAvailable the size of the result buffer.
   946  * @param outResult - An out parameter that contains the fallback status
   947  * @param httpAcceptLanguage - "Accept-Language:" header as per HTTP.
   948  * @param availableLocales - list of available locales to match
   949  * @param status Error status, may be BUFFER_OVERFLOW_ERROR
   950  * @return length needed for the locale.
   951  * @stable ICU 3.2
   952  */
   953 U_STABLE int32_t U_EXPORT2
   954 uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable,
   955                             UAcceptResult *outResult,
   956                             const char *httpAcceptLanguage,
   957                             UEnumeration* availableLocales,
   958                             UErrorCode *status);
   960 /**
   961  * Based on a list of available locales,
   962  * determine an acceptable locale for the user.
   963  * @param result - buffer to accept the result locale
   964  * @param resultAvailable the size of the result buffer.
   965  * @param outResult - An out parameter that contains the fallback status
   966  * @param acceptList - list of acceptable languages
   967  * @param acceptListCount - count of acceptList items
   968  * @param availableLocales - list of available locales to match
   969  * @param status Error status, may be BUFFER_OVERFLOW_ERROR
   970  * @return length needed for the locale.
   971  * @stable ICU 3.2
   972  */
   973 U_STABLE int32_t U_EXPORT2
   974 uloc_acceptLanguage(char *result, int32_t resultAvailable, 
   975                     UAcceptResult *outResult, const char **acceptList,
   976                     int32_t acceptListCount,
   977                     UEnumeration* availableLocales,
   978                     UErrorCode *status);
   981 /**
   982  * Gets the ICU locale ID for the specified Win32 LCID value.
   983  *
   984  * @param hostID the Win32 LCID to translate
   985  * @param locale the output buffer for the ICU locale ID, which will be NUL-terminated
   986  *  if there is room.
   987  * @param localeCapacity the size of the output buffer
   988  * @param status an error is returned if the LCID is unrecognized or the output buffer
   989  *  is too small
   990  * @return actual the actual size of the locale ID, not including NUL-termination 
   991  * @stable ICU 3.8
   992  */
   993 U_STABLE int32_t U_EXPORT2
   994 uloc_getLocaleForLCID(uint32_t hostID, char *locale, int32_t localeCapacity,
   995                     UErrorCode *status);
   998 /**
   999  * Add the likely subtags for a provided locale ID, per the algorithm described
  1000  * in the following CLDR technical report:
  1002  *   http://www.unicode.org/reports/tr35/#Likely_Subtags
  1004  * If localeID is already in the maximal form, or there is no data available
  1005  * for maximization, it will be copied to the output buffer.  For example,
  1006  * "und-Zzzz" cannot be maximized, since there is no reasonable maximization.
  1008  * Examples:
  1010  * "en" maximizes to "en_Latn_US"
  1012  * "de" maximizes to "de_Latn_US"
  1014  * "sr" maximizes to "sr_Cyrl_RS"
  1016  * "sh" maximizes to "sr_Latn_RS" (Note this will not reverse.)
  1018  * "zh_Hani" maximizes to "zh_Hans_CN" (Note this will not reverse.)
  1020  * @param localeID The locale to maximize
  1021  * @param maximizedLocaleID The maximized locale
  1022  * @param maximizedLocaleIDCapacity The capacity of the maximizedLocaleID buffer
  1023  * @param err Error information if maximizing the locale failed.  If the length
  1024  * of the localeID and the null-terminator is greater than the maximum allowed size,
  1025  * or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR.
  1026  * @return The actual buffer size needed for the maximized locale.  If it's
  1027  * greater than maximizedLocaleIDCapacity, the returned ID will be truncated.
  1028  * On error, the return value is -1.
  1029  * @stable ICU 4.0
  1030  */
  1031 U_STABLE int32_t U_EXPORT2
  1032 uloc_addLikelySubtags(const char*    localeID,
  1033          char* maximizedLocaleID,
  1034          int32_t maximizedLocaleIDCapacity,
  1035          UErrorCode* err);
  1038 /**
  1039  * Minimize the subtags for a provided locale ID, per the algorithm described
  1040  * in the following CLDR technical report:
  1042  *   http://www.unicode.org/reports/tr35/#Likely_Subtags
  1044  * If localeID is already in the minimal form, or there is no data available
  1045  * for minimization, it will be copied to the output buffer.  Since the
  1046  * minimization algorithm relies on proper maximization, see the comments
  1047  * for uloc_addLikelySubtags for reasons why there might not be any data.
  1049  * Examples:
  1051  * "en_Latn_US" minimizes to "en"
  1053  * "de_Latn_US" minimizes to "de"
  1055  * "sr_Cyrl_RS" minimizes to "sr"
  1057  * "zh_Hant_TW" minimizes to "zh_TW" (The region is preferred to the
  1058  * script, and minimizing to "zh" would imply "zh_Hans_CN".)
  1060  * @param localeID The locale to minimize
  1061  * @param minimizedLocaleID The minimized locale
  1062  * @param minimizedLocaleIDCapacity The capacity of the minimizedLocaleID buffer
  1063  * @param err Error information if minimizing the locale failed.  If the length
  1064  * of the localeID and the null-terminator is greater than the maximum allowed size,
  1065  * or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR.
  1066  * @return The actual buffer size needed for the minimized locale.  If it's
  1067  * greater than minimizedLocaleIDCapacity, the returned ID will be truncated.
  1068  * On error, the return value is -1.
  1069  * @stable ICU 4.0
  1070  */
  1071 U_STABLE int32_t U_EXPORT2
  1072 uloc_minimizeSubtags(const char*    localeID,
  1073          char* minimizedLocaleID,
  1074          int32_t minimizedLocaleIDCapacity,
  1075          UErrorCode* err);
  1077 /**
  1078  * Returns a locale ID for the specified BCP47 language tag string.
  1079  * If the specified language tag contains any ill-formed subtags,
  1080  * the first such subtag and all following subtags are ignored.
  1081  * <p> 
  1082  * This implements the 'Language-Tag' production of BCP47, and so
  1083  * supports grandfathered (regular and irregular) as well as private
  1084  * use language tags.  Private use tags are represented as 'x-whatever',
  1085  * and grandfathered tags are converted to their canonical replacements
  1086  * where they exist.  Note that a few grandfathered tags have no modern
  1087  * replacement, these will be converted using the fallback described in
  1088  * the first paragraph, so some information might be lost.
  1089  * @param langtag   the input BCP47 language tag.
  1090  * @param localeID  the output buffer receiving a locale ID for the
  1091  *                  specified BCP47 language tag.
  1092  * @param localeIDCapacity  the size of the locale ID output buffer.
  1093  * @param parsedLength  if not NULL, successfully parsed length
  1094  *                      for the input language tag is set.
  1095  * @param err       error information if receiving the locald ID
  1096  *                  failed.
  1097  * @return          the length of the locale ID.
  1098  * @stable ICU 4.2
  1099  */
  1100 U_STABLE int32_t U_EXPORT2
  1101 uloc_forLanguageTag(const char* langtag,
  1102                     char* localeID,
  1103                     int32_t localeIDCapacity,
  1104                     int32_t* parsedLength,
  1105                     UErrorCode* err);
  1107 /**
  1108  * Returns a well-formed language tag for this locale ID. 
  1109  * <p> 
  1110  * <b>Note</b>: When <code>strict</code> is FALSE, any locale
  1111  * fields which do not satisfy the BCP47 syntax requirement will
  1112  * be omitted from the result.  When <code>strict</code> is
  1113  * TRUE, this function sets U_ILLEGAL_ARGUMENT_ERROR to the
  1114  * <code>err</code> if any locale fields do not satisfy the
  1115  * BCP47 syntax requirement.
  1116  * @param localeID  the input locale ID
  1117  * @param langtag   the output buffer receiving BCP47 language
  1118  *                  tag for the locale ID.
  1119  * @param langtagCapacity   the size of the BCP47 language tag
  1120  *                          output buffer.
  1121  * @param strict    boolean value indicating if the function returns
  1122  *                  an error for an ill-formed input locale ID.
  1123  * @param err       error information if receiving the language
  1124  *                  tag failed.
  1125  * @return          The length of the BCP47 language tag.
  1126  * @stable ICU 4.2
  1127  */
  1128 U_STABLE int32_t U_EXPORT2
  1129 uloc_toLanguageTag(const char* localeID,
  1130                    char* langtag,
  1131                    int32_t langtagCapacity,
  1132                    UBool strict,
  1133                    UErrorCode* err);
  1135 #endif /*_ULOC*/

mercurial