]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/common/unicode/locid.h
ICU-59173.0.1.tar.gz
[apple/icu.git] / icuSources / common / unicode / locid.h
index a3cc23b31fabc45cf22df0ebd1fa74817342c3bf..28412f062c88969ece62fe8ebaec076b5f523f79 100644 (file)
@@ -1,7 +1,9 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************
 *
-*   Copyright (C) 1996-2006, International Business Machines
+*   Copyright (C) 1996-2015, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 ******************************************************************************
 
 #include "unicode/utypes.h"
 #include "unicode/uobject.h"
-#include "unicode/unistr.h"
 #include "unicode/putil.h"
 #include "unicode/uloc.h"
-#include "unicode/strenum.h"
 
 /**
  * \file
  * \brief C++ API: Locale ID object.
  */
 
+#if U_SHOW_CPLUSPLUS_API
+U_NAMESPACE_BEGIN
+
+// Forward Declarations
+void U_CALLCONV locale_available_init(); /**< @internal */
+
+class StringEnumeration;
+class UnicodeString;
+
 /**
  * A <code>Locale</code> object represents a specific geographical, political,
  * or cultural region. An operation that requires a <code>Locale</code> to perform
  * @stable ICU 2.0
  * @see ResourceBundle
  */
-U_NAMESPACE_BEGIN
 class U_COMMON_API Locale : public UObject {
 public:
+    /** Useful constant for the Root locale. @stable ICU 4.4 */
+    static const Locale &U_EXPORT2 getRoot(void);
     /** Useful constant for this language. @stable ICU 2.0 */
     static const Locale &U_EXPORT2 getEnglish(void);
     /** Useful constant for this language. @stable ICU 2.0 */
@@ -319,6 +329,7 @@ public:
      */
     Locale *clone() const;
 
+#ifndef U_HIDE_SYSTEM_API
     /**
      * Common methods of getting the current default Locale. Used for the
      * presentation: menus, dialogs, etc. Generally set once when your applet or
@@ -350,6 +361,7 @@ public:
      */
     static void U_EXPORT2 setDefault(const Locale& newLocale,
                                      UErrorCode&   success);
+#endif  /* U_HIDE_SYSTEM_API */
 
     /**
      * Creates a locale which has had minimal canonicalization
@@ -413,7 +425,7 @@ public:
     inline const char * getName() const;
 
     /**
-     * Returns the programmatic name of the entire locale as getName would return,
+     * Returns the programmatic name of the entire locale as getName() would return,
      * but without keywords.
      * @return      A pointer to "name".
      * @see getName
@@ -425,36 +437,53 @@ public:
     /**
      * Gets the list of keywords for the specified locale.
      *
-     * @return pointer to StringEnumeration class. Client must dispose of it by calling delete.
-     * @param status Returns any error information while performing this operation.
+     * @param status the status code
+     * @return pointer to StringEnumeration class, or NULL if there are no keywords. 
+     * Client must dispose of it by calling delete.
      * @stable ICU 2.8
      */
     StringEnumeration * createKeywords(UErrorCode &status) const;
 
     /**
-     * Get the value for a keyword.
+     * Gets the value for a keyword.
      *
      * @param keywordName name of the keyword for which we want the value. Case insensitive.
-     * @param status Returns any error information while performing this operation.
      * @param buffer The buffer to receive the keyword value.
      * @param bufferCapacity The capacity of receiving buffer
-     * @return the length of keyword value
+     * @param status Returns any error information while performing this operation.
+     * @return the length of the keyword value
      *
      * @stable ICU 2.8
      */
     int32_t getKeywordValue(const char* keywordName, char *buffer, int32_t bufferCapacity, UErrorCode &status) const;
 
+    /**
+     * Sets or removes the value for a keyword.
+     *
+     * For removing all keywords, use getBaseName(),
+     * and construct a new Locale if it differs from getName().
+     *
+     * @param keywordName name of the keyword to be set. Case insensitive.
+     * @param keywordValue value of the keyword to be set. If 0-length or
+     *  NULL, will result in the keyword being removed. No error is given if
+     *  that keyword does not exist.
+     * @param status Returns any error information while performing this operation.
+     *
+     * @stable ICU 49
+     */
+    void setKeywordValue(const char* keywordName, const char* keywordValue, UErrorCode &status);
+
     /**
      * returns the locale's three-letter language code, as specified
      * in ISO draft standard ISO-639-2.
-     * @return      An alias to the code, or NULL
+     * @return      An alias to the code, or an empty string
      * @stable ICU 2.0
      */
     const char * getISO3Language() const;
 
     /**
      * Fills in "name" with the locale's three-letter ISO-3166 country code.
-     * @return      An alias to the code, or NULL
+     * @return      An alias to the code, or an empty string
      * @stable ICU 2.0
      */
     const char * getISO3Country() const;
@@ -468,6 +497,21 @@ public:
      */
     uint32_t        getLCID(void) const;
 
+    /**
+     * Returns whether this locale's script is written right-to-left.
+     * If there is no script subtag, then the likely script is used, see uloc_addLikelySubtags().
+     * If no likely script is known, then FALSE is returned.
+     *
+     * A script is right-to-left according to the CLDR script metadata
+     * which corresponds to whether the script's letters have Bidi_Class=R or AL.
+     *
+     * Returns TRUE for "ar" and "en-Hebr", FALSE for "zh" and "fa-Cyrl".
+     *
+     * @return TRUE if the locale's script is written right-to-left
+     * @stable ICU 54
+     */
+    UBool isRightToLeft() const;
+
     /**
      * Fills in "dispLang" with the name of this locale's language in a format suitable for
      * user display in the default locale.  For example, if the locale's language code is
@@ -633,7 +677,7 @@ public:
     static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
 
     /**
-     * Gets a list of all available 2-letter country codes defined in ISO 639.  This is a
+     * Gets a list of all available 2-letter country codes defined in ISO 3166.  This is a
      * pointer to an array of pointers to arrays of char.  All of these pointers are
      * owned by ICU-- do not delete them, and do not write through them.  The array is
      * terminated with a null pointer.
@@ -667,11 +711,13 @@ public:
     virtual UClassID getDynamicClassID() const;
 
 protected: /* only protected for testing purposes. DO NOT USE. */
+#ifndef U_HIDE_INTERNAL_API
     /**
      * Set this from a single POSIX style locale string.
      * @internal
      */
     void setFromPOSIXID(const char *posixID);
+#endif  /* U_HIDE_INTERNAL_API */
 
 private:
     /**
@@ -679,6 +725,7 @@ private:
      * Was deprecated - used in implementation - moved internal
      *
      * @param cLocaleID The new locale name.
+     * @param canonicalize whether to call uloc_canonicalize on cLocaleID
      */
     Locale& init(const char* cLocaleID, UBool canonicalize);
 
@@ -705,7 +752,7 @@ private:
     char fullNameBuffer[ULOC_FULLNAME_CAPACITY];
     // name without keywords
     char* baseName;
-    char baseNameBuffer[ULOC_FULLNAME_CAPACITY];
+    void initBaseName(UErrorCode& status);
 
     UBool fIsBogus;
 
@@ -715,7 +762,12 @@ private:
      * A friend to allow the default locale to be set by either the C or C++ API.
      * @internal
      */
-    friend void locale_set_default_internal(const char *);
+    friend Locale *locale_set_default_internal(const char *, UErrorCode& status);
+
+    /**
+     * @internal
+     */
+    friend void U_CALLCONV locale_available_init();
 };
 
 inline UBool
@@ -745,7 +797,7 @@ Locale::getScript() const
 inline const char *
 Locale::getVariant() const
 {
-    return &fullName[variantBegin];
+    return &baseName[variantBegin];
 }
 
 inline const char *
@@ -760,6 +812,6 @@ Locale::isBogus(void) const {
 }
 
 U_NAMESPACE_END
+#endif // U_SHOW_CPLUSPLUS_API
 
 #endif
-