~alinuxninja/nginx-edge/trunk

« back to all changes in this revision

Viewing changes to debian/modules/ngx_pagespeed/psol/include/third_party/icu/source/common/unicode/locid.h

  • Committer: Vivian
  • Date: 2015-12-04 18:20:11 UTC
  • Revision ID: git-v1:a36f2bc32e884f7473b3a47040e5411306144d7d
* Do not extract psol.tar.gz

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
******************************************************************************
3
 
*
4
 
*   Copyright (C) 1996-2010, International Business Machines
5
 
*   Corporation and others.  All Rights Reserved.
6
 
*
7
 
******************************************************************************
8
 
*
9
 
* File locid.h
10
 
*
11
 
* Created by: Helena Shih
12
 
*
13
 
* Modification History:
14
 
*
15
 
*   Date        Name        Description
16
 
*   02/11/97    aliu        Changed gLocPath to fgLocPath and added methods to
17
 
*                           get and set it.
18
 
*   04/02/97    aliu        Made operator!= inline; fixed return value of getName().
19
 
*   04/15/97    aliu        Cleanup for AIX/Win32.
20
 
*   04/24/97    aliu        Numerous changes per code review.
21
 
*   08/18/98    stephen     Added tokenizeString(),changed getDisplayName()
22
 
*   09/08/98    stephen     Moved definition of kEmptyString for Mac Port
23
 
*   11/09/99    weiv        Added const char * getName() const;
24
 
*   04/12/00    srl         removing unicodestring api's and cached hash code
25
 
*   08/10/01    grhoten     Change the static Locales to accessor functions
26
 
******************************************************************************
27
 
*/
28
 
 
29
 
#ifndef LOCID_H
30
 
#define LOCID_H
31
 
 
32
 
#include "unicode/utypes.h"
33
 
#include "unicode/uobject.h"
34
 
#include "unicode/unistr.h"
35
 
#include "unicode/putil.h"
36
 
#include "unicode/uloc.h"
37
 
#include "unicode/strenum.h"
38
 
 
39
 
/**
40
 
 * \file
41
 
 * \brief C++ API: Locale ID object.
42
 
 */
43
 
 
44
 
/**
45
 
 * A <code>Locale</code> object represents a specific geographical, political,
46
 
 * or cultural region. An operation that requires a <code>Locale</code> to perform
47
 
 * its task is called <em>locale-sensitive</em> and uses the <code>Locale</code>
48
 
 * to tailor information for the user. For example, displaying a number
49
 
 * is a locale-sensitive operation--the number should be formatted
50
 
 * according to the customs/conventions of the user's native country,
51
 
 * region, or culture.
52
 
 *
53
 
 * The Locale class is not suitable for subclassing.
54
 
 *
55
 
 * <P>
56
 
 * You can create a <code>Locale</code> object using the constructor in
57
 
 * this class:
58
 
 * \htmlonly<blockquote>\endhtmlonly
59
 
 * <pre>
60
 
 *       Locale( const   char*  language,
61
 
 *               const   char*  country,
62
 
 *               const   char*  variant);
63
 
 * </pre>
64
 
 * \htmlonly</blockquote>\endhtmlonly
65
 
 * The first argument to the constructors is a valid <STRONG>ISO
66
 
 * Language Code.</STRONG> These codes are the lower-case two-letter
67
 
 * codes as defined by ISO-639.
68
 
 * You can find a full list of these codes at:
69
 
 * <BR><a href ="http://www.loc.gov/standards/iso639-2/">
70
 
 * http://www.loc.gov/standards/iso639-2/</a>
71
 
 *
72
 
 * <P>
73
 
 * The second argument to the constructors is a valid <STRONG>ISO Country
74
 
 * Code.</STRONG> These codes are the upper-case two-letter codes
75
 
 * as defined by ISO-3166.
76
 
 * You can find a full list of these codes at a number of sites, such as:
77
 
 * <BR><a href="http://www.iso.org/iso/en/prods-services/iso3166ma/index.html">
78
 
 * http://www.iso.org/iso/en/prods-services/iso3166ma/index.html</a>
79
 
 *
80
 
 * <P>
81
 
 * The third constructor requires a third argument--the <STRONG>Variant.</STRONG>
82
 
 * The Variant codes are vendor and browser-specific.
83
 
 * For example, use REVISED for a langauge's revised script orthography, and POSIX for POSIX.
84
 
 * Where there are two variants, separate them with an underscore, and
85
 
 * put the most important one first. For
86
 
 * example, a Traditional Spanish collation might be referenced, with
87
 
 * "ES", "ES", "Traditional_POSIX".
88
 
 *
89
 
 * <P>
90
 
 * Because a <code>Locale</code> object is just an identifier for a region,
91
 
 * no validity check is performed when you construct a <code>Locale</code>.
92
 
 * If you want to see whether particular resources are available for the
93
 
 * <code>Locale</code> you construct, you must query those resources. For
94
 
 * example, ask the <code>NumberFormat</code> for the locales it supports
95
 
 * using its <code>getAvailableLocales</code> method.
96
 
 * <BR><STRONG>Note:</STRONG> When you ask for a resource for a particular
97
 
 * locale, you get back the best available match, not necessarily
98
 
 * precisely what you asked for. For more information, look at
99
 
 * <code>ResourceBundle</code>.
100
 
 *
101
 
 * <P>
102
 
 * The <code>Locale</code> class provides a number of convenient constants
103
 
 * that you can use to create <code>Locale</code> objects for commonly used
104
 
 * locales. For example, the following refers to a <code>Locale</code> object
105
 
 * for the United States:
106
 
 * \htmlonly<blockquote>\endhtmlonly
107
 
 * <pre>
108
 
 *       Locale::getUS()
109
 
 * </pre>
110
 
 * \htmlonly</blockquote>\endhtmlonly
111
 
 *
112
 
 * <P>
113
 
 * Once you've created a <code>Locale</code> you can query it for information about
114
 
 * itself. Use <code>getCountry</code> to get the ISO Country Code and
115
 
 * <code>getLanguage</code> to get the ISO Language Code. You can
116
 
 * use <code>getDisplayCountry</code> to get the
117
 
 * name of the country suitable for displaying to the user. Similarly,
118
 
 * you can use <code>getDisplayLanguage</code> to get the name of
119
 
 * the language suitable for displaying to the user. Interestingly,
120
 
 * the <code>getDisplayXXX</code> methods are themselves locale-sensitive
121
 
 * and have two versions: one that uses the default locale and one
122
 
 * that takes a locale as an argument and displays the name or country in
123
 
 * a language appropriate to that locale.
124
 
 *
125
 
 * <P>
126
 
 * ICU provides a number of classes that perform locale-sensitive
127
 
 * operations. For example, the <code>NumberFormat</code> class formats
128
 
 * numbers, currency, or percentages in a locale-sensitive manner. Classes
129
 
 * such as <code>NumberFormat</code> have a number of convenience methods
130
 
 * for creating a default object of that type. For example, the
131
 
 * <code>NumberFormat</code> class provides these three convenience methods
132
 
 * for creating a default <code>NumberFormat</code> object:
133
 
 * \htmlonly<blockquote>\endhtmlonly
134
 
 * <pre>
135
 
 *     UErrorCode success = U_ZERO_ERROR;
136
 
 *     Locale myLocale;
137
 
 *     NumberFormat *nf;
138
 
 *
139
 
 *     nf = NumberFormat::createInstance( success );          delete nf;
140
 
 *     nf = NumberFormat::createCurrencyInstance( success );  delete nf;
141
 
 *     nf = NumberFormat::createPercentInstance( success );   delete nf;
142
 
 * </pre>
143
 
 * \htmlonly</blockquote>\endhtmlonly
144
 
 * Each of these methods has two variants; one with an explicit locale
145
 
 * and one without; the latter using the default locale.
146
 
 * \htmlonly<blockquote>\endhtmlonly
147
 
 * <pre>
148
 
 *     nf = NumberFormat::createInstance( myLocale, success );          delete nf;
149
 
 *     nf = NumberFormat::createCurrencyInstance( myLocale, success );  delete nf;
150
 
 *     nf = NumberFormat::createPercentInstance( myLocale, success );   delete nf;
151
 
 * </pre>
152
 
 * \htmlonly</blockquote>\endhtmlonly
153
 
 * A <code>Locale</code> is the mechanism for identifying the kind of object
154
 
 * (<code>NumberFormat</code>) that you would like to get. The locale is
155
 
 * <STRONG>just</STRONG> a mechanism for identifying objects,
156
 
 * <STRONG>not</STRONG> a container for the objects themselves.
157
 
 *
158
 
 * <P>
159
 
 * Each class that performs locale-sensitive operations 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
 
 *       static Locale* getAvailableLocales(int32_t& numLocales)
169
 
 *       static UnicodeString& getDisplayName(const Locale&  objectLocale,
170
 
 *                                            const Locale&  displayLocale,
171
 
 *                                            UnicodeString& displayName)
172
 
 *       static UnicodeString& getDisplayName(const Locale&  objectLocale,
173
 
 *                                            UnicodeString& displayName)
174
 
 * </pre>
175
 
 * \htmlonly</blockquote>\endhtmlonly
176
 
 *
177
 
 * @stable ICU 2.0
178
 
 * @see ResourceBundle
179
 
 */
180
 
U_NAMESPACE_BEGIN
181
 
class U_COMMON_API Locale : public UObject {
182
 
public:
183
 
    /** Useful constant for the Root locale. @stable ICU 4.4 */
184
 
    static const Locale &U_EXPORT2 getRoot(void);
185
 
    /** Useful constant for this language. @stable ICU 2.0 */
186
 
    static const Locale &U_EXPORT2 getEnglish(void);
187
 
    /** Useful constant for this language. @stable ICU 2.0 */
188
 
    static const Locale &U_EXPORT2 getFrench(void);
189
 
    /** Useful constant for this language. @stable ICU 2.0 */
190
 
    static const Locale &U_EXPORT2 getGerman(void);
191
 
    /** Useful constant for this language. @stable ICU 2.0 */
192
 
    static const Locale &U_EXPORT2 getItalian(void);
193
 
    /** Useful constant for this language. @stable ICU 2.0 */
194
 
    static const Locale &U_EXPORT2 getJapanese(void);
195
 
    /** Useful constant for this language. @stable ICU 2.0 */
196
 
    static const Locale &U_EXPORT2 getKorean(void);
197
 
    /** Useful constant for this language. @stable ICU 2.0 */
198
 
    static const Locale &U_EXPORT2 getChinese(void);
199
 
    /** Useful constant for this language. @stable ICU 2.0 */
200
 
    static const Locale &U_EXPORT2 getSimplifiedChinese(void);
201
 
    /** Useful constant for this language. @stable ICU 2.0 */
202
 
    static const Locale &U_EXPORT2 getTraditionalChinese(void);
203
 
 
204
 
    /** Useful constant for this country/region. @stable ICU 2.0 */
205
 
    static const Locale &U_EXPORT2 getFrance(void);
206
 
    /** Useful constant for this country/region. @stable ICU 2.0 */
207
 
    static const Locale &U_EXPORT2 getGermany(void);
208
 
    /** Useful constant for this country/region. @stable ICU 2.0 */
209
 
    static const Locale &U_EXPORT2 getItaly(void);
210
 
    /** Useful constant for this country/region. @stable ICU 2.0 */
211
 
    static const Locale &U_EXPORT2 getJapan(void);
212
 
    /** Useful constant for this country/region. @stable ICU 2.0 */
213
 
    static const Locale &U_EXPORT2 getKorea(void);
214
 
    /** Useful constant for this country/region. @stable ICU 2.0 */
215
 
    static const Locale &U_EXPORT2 getChina(void);
216
 
    /** Useful constant for this country/region. @stable ICU 2.0 */
217
 
    static const Locale &U_EXPORT2 getPRC(void);
218
 
    /** Useful constant for this country/region. @stable ICU 2.0 */
219
 
    static const Locale &U_EXPORT2 getTaiwan(void);
220
 
    /** Useful constant for this country/region. @stable ICU 2.0 */
221
 
    static const Locale &U_EXPORT2 getUK(void);
222
 
    /** Useful constant for this country/region. @stable ICU 2.0 */
223
 
    static const Locale &U_EXPORT2 getUS(void);
224
 
    /** Useful constant for this country/region. @stable ICU 2.0 */
225
 
    static const Locale &U_EXPORT2 getCanada(void);
226
 
    /** Useful constant for this country/region. @stable ICU 2.0 */
227
 
    static const Locale &U_EXPORT2 getCanadaFrench(void);
228
 
 
229
 
 
230
 
    /**
231
 
     * Construct a default locale object, a Locale for the default locale ID.
232
 
     *
233
 
     * @see getDefault
234
 
     * @see uloc_getDefault
235
 
     * @stable ICU 2.0
236
 
     */
237
 
    Locale();
238
 
 
239
 
    /**
240
 
     * Construct a locale from language, country, variant.
241
 
     * If an error occurs, then the constructed object will be "bogus"
242
 
     * (isBogus() will return TRUE).
243
 
     *
244
 
     * @param language Lowercase two-letter or three-letter ISO-639 code.
245
 
     *  This parameter can instead be an ICU style C locale (e.g. "en_US"),
246
 
     *  but the other parameters must not be used.
247
 
     *  This parameter can be NULL; if so,
248
 
     *  the locale is initialized to match the current default locale.
249
 
     *  (This is the same as using the default constructor.)
250
 
     *  Please note: The Java Locale class does NOT accept the form
251
 
     *  'new Locale("en_US")' but only 'new Locale("en","US")'
252
 
     *
253
 
     * @param country  Uppercase two-letter ISO-3166 code. (optional)
254
 
     * @param variant  Uppercase vendor and browser specific code. See class
255
 
     *                 description. (optional)
256
 
     * @param keywordsAndValues A string consisting of keyword/values pairs, such as
257
 
     *                 "collation=phonebook;currency=euro"
258
 
     *
259
 
     * @see getDefault
260
 
     * @see uloc_getDefault
261
 
     * @stable ICU 2.0
262
 
     */
263
 
    Locale( const   char * language,
264
 
            const   char * country  = 0,
265
 
            const   char * variant  = 0,
266
 
            const   char * keywordsAndValues = 0);
267
 
 
268
 
    /**
269
 
     * Initializes a Locale object from another Locale object.
270
 
     *
271
 
     * @param other The Locale object being copied in.
272
 
     * @stable ICU 2.0
273
 
     */
274
 
    Locale(const    Locale& other);
275
 
 
276
 
 
277
 
    /**
278
 
     * Destructor
279
 
     * @stable ICU 2.0
280
 
     */
281
 
    virtual ~Locale() ;
282
 
 
283
 
    /**
284
 
     * Replaces the entire contents of *this with the specified value.
285
 
     *
286
 
     * @param other The Locale object being copied in.
287
 
     * @return      *this
288
 
     * @stable ICU 2.0
289
 
     */
290
 
    Locale& operator=(const Locale& other);
291
 
 
292
 
    /**
293
 
     * Checks if two locale keys are the same.
294
 
     *
295
 
     * @param other The locale key object to be compared with this.
296
 
     * @return      True if the two locale keys are the same, false otherwise.
297
 
     * @stable ICU 2.0
298
 
     */
299
 
    UBool   operator==(const    Locale&     other) const;
300
 
 
301
 
    /**
302
 
     * Checks if two locale keys are not the same.
303
 
     *
304
 
     * @param other The locale key object to be compared with this.
305
 
     * @return      True if the two locale keys are not the same, false
306
 
     *              otherwise.
307
 
     * @stable ICU 2.0
308
 
     */
309
 
    UBool   operator!=(const    Locale&     other) const;
310
 
 
311
 
    /**
312
 
     * Clone this object.
313
 
     * Clones can be used concurrently in multiple threads.
314
 
     * If an error occurs, then NULL is returned.
315
 
     * The caller must delete the clone.
316
 
     *
317
 
     * @return a clone of this object
318
 
     *
319
 
     * @see getDynamicClassID
320
 
     * @stable ICU 2.8
321
 
     */
322
 
    Locale *clone() const;
323
 
 
324
 
    /**
325
 
     * Common methods of getting the current default Locale. Used for the
326
 
     * presentation: menus, dialogs, etc. Generally set once when your applet or
327
 
     * application is initialized, then never reset. (If you do reset the
328
 
     * default locale, you probably want to reload your GUI, so that the change
329
 
     * is reflected in your interface.)
330
 
     *
331
 
     * More advanced programs will allow users to use different locales for
332
 
     * different fields, e.g. in a spreadsheet.
333
 
     *
334
 
     * Note that the initial setting will match the host system.
335
 
     * @return a reference to the Locale object for the default locale ID
336
 
     * @system
337
 
     * @stable ICU 2.0
338
 
     */
339
 
    static const Locale& U_EXPORT2 getDefault(void);
340
 
 
341
 
    /**
342
 
     * Sets the default. Normally set once at the beginning of a process,
343
 
     * then never reset.
344
 
     * setDefault() only changes ICU's default locale ID, <strong>not</strong>
345
 
     * the default locale ID of the runtime environment.
346
 
     *
347
 
     * @param newLocale Locale to set to.  If NULL, set to the value obtained
348
 
     *                  from the runtime environement.
349
 
     * @param success The error code.
350
 
     * @system
351
 
     * @stable ICU 2.0
352
 
     */
353
 
    static void U_EXPORT2 setDefault(const Locale& newLocale,
354
 
                                     UErrorCode&   success);
355
 
 
356
 
    /**
357
 
     * Creates a locale which has had minimal canonicalization
358
 
     * as per uloc_getName().
359
 
     * @param name The name to create from.  If name is null,
360
 
     *  the default Locale is used.
361
 
     * @return new locale object
362
 
     * @stable ICU 2.0
363
 
     * @see uloc_getName
364
 
     */
365
 
    static Locale U_EXPORT2 createFromName(const char *name);
366
 
 
367
 
    /**
368
 
     * Creates a locale from the given string after canonicalizing
369
 
     * the string by calling uloc_canonicalize().
370
 
     * @param name the locale ID to create from.  Must not be NULL.
371
 
     * @return a new locale object corresponding to the given name
372
 
     * @stable ICU 3.0
373
 
     * @see uloc_canonicalize
374
 
     */
375
 
    static Locale U_EXPORT2 createCanonical(const char* name);
376
 
 
377
 
    /**
378
 
     * Returns the locale's ISO-639 language code.
379
 
     * @return      An alias to the code
380
 
     * @stable ICU 2.0
381
 
     */
382
 
    inline const char *  getLanguage( ) const;
383
 
 
384
 
    /**
385
 
     * Returns the locale's ISO-15924 abbreviation script code.
386
 
     * @return      An alias to the code
387
 
     * @see uscript_getShortName
388
 
     * @see uscript_getCode
389
 
     * @stable ICU 2.8
390
 
     */
391
 
    inline const char *  getScript( ) const;
392
 
 
393
 
    /**
394
 
     * Returns the locale's ISO-3166 country code.
395
 
     * @return      An alias to the code
396
 
     * @stable ICU 2.0
397
 
     */
398
 
    inline const char *  getCountry( ) const;
399
 
 
400
 
    /**
401
 
     * Returns the locale's variant code.
402
 
     * @return      An alias to the code
403
 
     * @stable ICU 2.0
404
 
     */
405
 
    inline const char *  getVariant( ) const;
406
 
 
407
 
    /**
408
 
     * Returns the programmatic name of the entire locale, with the language,
409
 
     * country and variant separated by underbars. If a field is missing, up
410
 
     * to two leading underbars will occur. Example: "en", "de_DE", "en_US_WIN",
411
 
     * "de__POSIX", "fr__MAC", "__MAC", "_MT", "_FR_EURO"
412
 
     * @return      A pointer to "name".
413
 
     * @stable ICU 2.0
414
 
     */
415
 
    inline const char * getName() const;
416
 
 
417
 
    /**
418
 
     * Returns the programmatic name of the entire locale as getName would return,
419
 
     * but without keywords.
420
 
     * @return      A pointer to "name".
421
 
     * @see getName
422
 
     * @stable ICU 2.8
423
 
     */
424
 
    const char * getBaseName() const;
425
 
 
426
 
 
427
 
    /**
428
 
     * Gets the list of keywords for the specified locale.
429
 
     *
430
 
     * @param status the status code
431
 
     * @return pointer to StringEnumeration class, or NULL if there are no keywords. 
432
 
     * Client must dispose of it by calling delete.
433
 
     * @stable ICU 2.8
434
 
     */
435
 
    StringEnumeration * createKeywords(UErrorCode &status) const;
436
 
 
437
 
    /**
438
 
     * Get the value for a keyword.
439
 
     *
440
 
     * @param keywordName name of the keyword for which we want the value. Case insensitive.
441
 
     * @param buffer The buffer to receive the keyword value.
442
 
     * @param bufferCapacity The capacity of receiving buffer
443
 
     * @param status Returns any error information while performing this operation.
444
 
     * @return the length of the keyword value
445
 
     *
446
 
     * @stable ICU 2.8
447
 
     */
448
 
    int32_t getKeywordValue(const char* keywordName, char *buffer, int32_t bufferCapacity, UErrorCode &status) const;
449
 
 
450
 
    /**
451
 
     * Set the value for a keyword.
452
 
     *
453
 
     * @param keywordName name of the keyword to be set. Case insensitive.
454
 
     * @param keywordValue value of the keyword to be set. If 0-length or
455
 
     *  NULL, will result in the keyword being removed. No error is given if
456
 
     *  that keyword does not exist.
457
 
     * @param status Returns any error information while performing this operation.
458
 
     *
459
 
     * @internal 
460
 
     */
461
 
    void setKeywordValue(const char* keywordName, const char* keywordValue, UErrorCode &status);
462
 
 
463
 
    /**
464
 
     * returns the locale's three-letter language code, as specified
465
 
     * in ISO draft standard ISO-639-2.
466
 
     * @return      An alias to the code, or NULL
467
 
     * @stable ICU 2.0
468
 
     */
469
 
    const char * getISO3Language() const;
470
 
 
471
 
    /**
472
 
     * Fills in "name" with the locale's three-letter ISO-3166 country code.
473
 
     * @return      An alias to the code, or NULL
474
 
     * @stable ICU 2.0
475
 
     */
476
 
    const char * getISO3Country() const;
477
 
 
478
 
    /**
479
 
     * Returns the Windows LCID value corresponding to this locale.
480
 
     * This value is stored in the resource data for the locale as a one-to-four-digit
481
 
     * hexadecimal number.  If the resource is missing, in the wrong format, or
482
 
     * there is no Windows LCID value that corresponds to this locale, returns 0.
483
 
     * @stable ICU 2.0
484
 
     */
485
 
    uint32_t        getLCID(void) const;
486
 
 
487
 
    /**
488
 
     * Fills in "dispLang" with the name of this locale's language in a format suitable for
489
 
     * user display in the default locale.  For example, if the locale's language code is
490
 
     * "fr" and the default locale's language code is "en", this function would set
491
 
     * dispLang to "French".
492
 
     * @param dispLang  Receives the language's display name.
493
 
     * @return          A reference to "dispLang".
494
 
     * @stable ICU 2.0
495
 
     */
496
 
    UnicodeString&  getDisplayLanguage(UnicodeString&   dispLang) const;
497
 
 
498
 
    /**
499
 
     * Fills in "dispLang" with the name of this locale's language in a format suitable for
500
 
     * user display in the locale specified by "displayLocale".  For example, if the locale's
501
 
     * language code is "en" and displayLocale's language code is "fr", this function would set
502
 
     * dispLang to "Anglais".
503
 
     * @param displayLocale  Specifies the locale to be used to display the name.  In other words,
504
 
     *                  if the locale's language code is "en", passing Locale::getFrench() for
505
 
     *                  displayLocale would result in "Anglais", while passing Locale::getGerman()
506
 
     *                  for displayLocale would result in "Englisch".
507
 
     * @param dispLang  Receives the language's display name.
508
 
     * @return          A reference to "dispLang".
509
 
     * @stable ICU 2.0
510
 
     */
511
 
    UnicodeString&  getDisplayLanguage( const   Locale&         displayLocale,
512
 
                                                UnicodeString&  dispLang) const;
513
 
 
514
 
    /**
515
 
     * Fills in "dispScript" with the name of this locale's script in a format suitable
516
 
     * for user display in the default locale.  For example, if the locale's script code
517
 
     * is "LATN" and the default locale's language code is "en", this function would set
518
 
     * dispScript to "Latin".
519
 
     * @param dispScript    Receives the scripts's display name.
520
 
     * @return              A reference to "dispScript".
521
 
     * @stable ICU 2.8
522
 
     */
523
 
    UnicodeString&  getDisplayScript(          UnicodeString& dispScript) const;
524
 
 
525
 
    /**
526
 
     * Fills in "dispScript" with the name of this locale's country in a format suitable
527
 
     * for user display in the locale specified by "displayLocale".  For example, if the locale's
528
 
     * script code is "LATN" and displayLocale's language code is "en", this function would set
529
 
     * dispScript to "Latin".
530
 
     * @param displayLocale      Specifies the locale to be used to display the name.  In other
531
 
     *                      words, if the locale's script code is "LATN", passing
532
 
     *                      Locale::getFrench() for displayLocale would result in "", while
533
 
     *                      passing Locale::getGerman() for displayLocale would result in
534
 
     *                      "".
535
 
     * @param dispScript    Receives the scripts's display name.
536
 
     * @return              A reference to "dispScript".
537
 
     * @stable ICU 2.8
538
 
     */
539
 
    UnicodeString&  getDisplayScript(  const   Locale&         displayLocale,
540
 
                                               UnicodeString&  dispScript) const;
541
 
 
542
 
    /**
543
 
     * Fills in "dispCountry" with the name of this locale's country in a format suitable
544
 
     * for user display in the default locale.  For example, if the locale's country code
545
 
     * is "FR" and the default locale's language code is "en", this function would set
546
 
     * dispCountry to "France".
547
 
     * @param dispCountry   Receives the country's display name.
548
 
     * @return              A reference to "dispCountry".
549
 
     * @stable ICU 2.0
550
 
     */
551
 
    UnicodeString&  getDisplayCountry(          UnicodeString& dispCountry) const;
552
 
 
553
 
    /**
554
 
     * Fills in "dispCountry" with the name of this locale's country in a format suitable
555
 
     * for user display in the locale specified by "displayLocale".  For example, if the locale's
556
 
     * country code is "US" and displayLocale's language code is "fr", this function would set
557
 
     * dispCountry to "&Eacute;tats-Unis".
558
 
     * @param displayLocale      Specifies the locale to be used to display the name.  In other
559
 
     *                      words, if the locale's country code is "US", passing
560
 
     *                      Locale::getFrench() for displayLocale would result in "&Eacute;tats-Unis", while
561
 
     *                      passing Locale::getGerman() for displayLocale would result in
562
 
     *                      "Vereinigte Staaten".
563
 
     * @param dispCountry   Receives the country's display name.
564
 
     * @return              A reference to "dispCountry".
565
 
     * @stable ICU 2.0
566
 
     */
567
 
    UnicodeString&  getDisplayCountry(  const   Locale&         displayLocale,
568
 
                                                UnicodeString&  dispCountry) const;
569
 
 
570
 
    /**
571
 
     * Fills in "dispVar" with the name of this locale's variant code in a format suitable
572
 
     * for user display in the default locale.
573
 
     * @param dispVar   Receives the variant's name.
574
 
     * @return          A reference to "dispVar".
575
 
     * @stable ICU 2.0
576
 
     */
577
 
    UnicodeString&  getDisplayVariant(      UnicodeString& dispVar) const;
578
 
 
579
 
    /**
580
 
     * Fills in "dispVar" with the name of this locale's variant code in a format
581
 
     * suitable for user display in the locale specified by "displayLocale".
582
 
     * @param displayLocale  Specifies the locale to be used to display the name.
583
 
     * @param dispVar   Receives the variant's display name.
584
 
     * @return          A reference to "dispVar".
585
 
     * @stable ICU 2.0
586
 
     */
587
 
    UnicodeString&  getDisplayVariant(  const   Locale&         displayLocale,
588
 
                                                UnicodeString&  dispVar) const;
589
 
 
590
 
    /**
591
 
     * Fills in "name" with the name of this locale in a format suitable for user display
592
 
     * in the default locale.  This function uses getDisplayLanguage(), getDisplayCountry(),
593
 
     * and getDisplayVariant() to do its work, and outputs the display name in the format
594
 
     * "language (country[,variant])".  For example, if the default locale is en_US, then
595
 
     * fr_FR's display name would be "French (France)", and es_MX_Traditional's display name
596
 
     * would be "Spanish (Mexico,Traditional)".
597
 
     * @param name  Receives the locale's display name.
598
 
     * @return      A reference to "name".
599
 
     * @stable ICU 2.0
600
 
     */
601
 
    UnicodeString&  getDisplayName(         UnicodeString&  name) const;
602
 
 
603
 
    /**
604
 
     * Fills in "name" with the name of this locale in a format suitable for user display
605
 
     * in the locale specfied by "displayLocale".  This function uses getDisplayLanguage(),
606
 
     * getDisplayCountry(), and getDisplayVariant() to do its work, and outputs the display
607
 
     * name in the format "language (country[,variant])".  For example, if displayLocale is
608
 
     * fr_FR, then en_US's display name would be "Anglais (&Eacute;tats-Unis)", and no_NO_NY's
609
 
     * display name would be "norv&eacute;gien (Norv&egrave;ge,NY)".
610
 
     * @param displayLocale  Specifies the locale to be used to display the name.
611
 
     * @param name      Receives the locale's display name.
612
 
     * @return          A reference to "name".
613
 
     * @stable ICU 2.0
614
 
     */
615
 
    UnicodeString&  getDisplayName( const   Locale&         displayLocale,
616
 
                                            UnicodeString&  name) const;
617
 
 
618
 
    /**
619
 
     * Generates a hash code for the locale.
620
 
     * @stable ICU 2.0
621
 
     */
622
 
    int32_t         hashCode(void) const;
623
 
 
624
 
    /**
625
 
     * Sets the locale to bogus
626
 
     * A bogus locale represents a non-existing locale associated
627
 
     * with services that can be instantiated from non-locale data
628
 
     * in addition to locale (for example, collation can be
629
 
     * instantiated from a locale and from a rule set).
630
 
     * @stable ICU 2.1
631
 
     */
632
 
    void setToBogus();
633
 
 
634
 
    /**
635
 
     * Gets the bogus state. Locale object can be bogus if it doesn't exist
636
 
     * @return FALSE if it is a real locale, TRUE if it is a bogus locale
637
 
     * @stable ICU 2.1
638
 
     */
639
 
    UBool isBogus(void) const;
640
 
 
641
 
    /**
642
 
     * Returns a list of all installed locales.
643
 
     * @param count Receives the number of locales in the list.
644
 
     * @return      A pointer to an array of Locale objects.  This array is the list
645
 
     *              of all locales with installed resource files.  The called does NOT
646
 
     *              get ownership of this list, and must NOT delete it.
647
 
     * @stable ICU 2.0
648
 
     */
649
 
    static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
650
 
 
651
 
    /**
652
 
     * Gets a list of all available 2-letter country codes defined in ISO 3166.  This is a
653
 
     * pointer to an array of pointers to arrays of char.  All of these pointers are
654
 
     * owned by ICU-- do not delete them, and do not write through them.  The array is
655
 
     * terminated with a null pointer.
656
 
     * @return a list of all available country codes
657
 
     * @stable ICU 2.0
658
 
     */
659
 
    static const char* const* U_EXPORT2 getISOCountries();
660
 
 
661
 
    /**
662
 
     * Gets a list of all available language codes defined in ISO 639.  This is a pointer
663
 
     * to an array of pointers to arrays of char.  All of these pointers are owned
664
 
     * by ICU-- do not delete them, and do not write through them.  The array is
665
 
     * terminated with a null pointer.
666
 
     * @return a list of all available language codes
667
 
     * @stable ICU 2.0
668
 
     */
669
 
    static const char* const* U_EXPORT2 getISOLanguages();
670
 
 
671
 
    /**
672
 
     * ICU "poor man's RTTI", returns a UClassID for this class.
673
 
     *
674
 
     * @stable ICU 2.2
675
 
     */
676
 
    static UClassID U_EXPORT2 getStaticClassID();
677
 
 
678
 
    /**
679
 
     * ICU "poor man's RTTI", returns a UClassID for the actual class.
680
 
     *
681
 
     * @stable ICU 2.2
682
 
     */
683
 
    virtual UClassID getDynamicClassID() const;
684
 
 
685
 
protected: /* only protected for testing purposes. DO NOT USE. */
686
 
    /**
687
 
     * Set this from a single POSIX style locale string.
688
 
     * @internal
689
 
     */
690
 
    void setFromPOSIXID(const char *posixID);
691
 
 
692
 
private:
693
 
    /**
694
 
     * Initialize the locale object with a new name.
695
 
     * Was deprecated - used in implementation - moved internal
696
 
     *
697
 
     * @param cLocaleID The new locale name.
698
 
     */
699
 
    Locale& init(const char* cLocaleID, UBool canonicalize);
700
 
 
701
 
    /*
702
 
     * Internal constructor to allow construction of a locale object with
703
 
     *   NO side effects.   (Default constructor tries to get
704
 
     *   the default locale.)
705
 
     */
706
 
    enum ELocaleType {
707
 
        eBOGUS
708
 
    };
709
 
    Locale(ELocaleType);
710
 
 
711
 
    /**
712
 
     * Initialize the locale cache for commonly used locales
713
 
     */
714
 
    static Locale *getLocaleCache(void);
715
 
 
716
 
    char language[ULOC_LANG_CAPACITY];
717
 
    char script[ULOC_SCRIPT_CAPACITY];
718
 
    char country[ULOC_COUNTRY_CAPACITY];
719
 
    int32_t variantBegin;
720
 
    char* fullName;
721
 
    char fullNameBuffer[ULOC_FULLNAME_CAPACITY];
722
 
    // name without keywords
723
 
    char* baseName;
724
 
    char baseNameBuffer[ULOC_FULLNAME_CAPACITY];
725
 
 
726
 
    UBool fIsBogus;
727
 
 
728
 
    static const Locale &getLocale(int locid);
729
 
 
730
 
    /**
731
 
     * A friend to allow the default locale to be set by either the C or C++ API.
732
 
     * @internal
733
 
     */
734
 
    friend void locale_set_default_internal(const char *);
735
 
};
736
 
 
737
 
inline UBool
738
 
Locale::operator!=(const    Locale&     other) const
739
 
{
740
 
    return !operator==(other);
741
 
}
742
 
 
743
 
inline const char *
744
 
Locale::getCountry() const
745
 
{
746
 
    return country;
747
 
}
748
 
 
749
 
inline const char *
750
 
Locale::getLanguage() const
751
 
{
752
 
    return language;
753
 
}
754
 
 
755
 
inline const char *
756
 
Locale::getScript() const
757
 
{
758
 
    return script;
759
 
}
760
 
 
761
 
inline const char *
762
 
Locale::getVariant() const
763
 
{
764
 
    getBaseName(); // lazy init
765
 
    return &baseName[variantBegin];
766
 
}
767
 
 
768
 
inline const char *
769
 
Locale::getName() const
770
 
{
771
 
    return fullName;
772
 
}
773
 
 
774
 
inline UBool
775
 
Locale::isBogus(void) const {
776
 
    return fIsBogus;
777
 
}
778
 
 
779
 
U_NAMESPACE_END
780
 
 
781
 
#endif