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