2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 * @file FLclLocale.cpp
19 * @brief This is the implementation file for Locale class.
22 #include <unique_ptr.h>
24 #include <FBaseSysLog.h>
25 #include <FLclLocale.h>
26 #include <FApp_AppInfo.h>
28 #include "FBase_StringConverter.h"
29 #include "FLcl_LocaleImpl.h"
31 using namespace Tizen::Base;
33 namespace Tizen { namespace Locales
36 static const LanguageCode LanguageMaxReserved = static_cast <LanguageCode> (LANGUAGE_INVALID_RESERVED - 1);
37 static const CountryCode CountryMaxReserved = static_cast <CountryCode> (COUNTRY_INVALID_RESERVED - 1);
39 static const char* LanguageCodeString3LetterArray[LANGUAGE_MAX+2] =
42 "abk", /**< Abkhazian */
43 "ace", /**< Achinese */
45 "ada", /**< Adangme */
46 "ady", /**< Adyghe; Adygei */
47 "afa", /**< Afro-Asiatic languages */
48 "afh", /**< Afrihili */
49 "afr", /**< Afrikaans */
52 "akk", /**< Akkadian */
53 "sqi", /**< Albanian */
55 "alg", /**< Algonquian languages */
56 "alt", /**< Southern Altai */
57 "amh", /**< Amharic */
58 "ang", /**< English, Old (ca.450-1100) */
60 "apa", /**< Apache languages */
62 "arc", /**< Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE) */
63 "arg", /**< Aragonese */
64 "hye", /**< Armenian */
65 "arn", /**< Mapudungun; Mapuche */
66 "arp", /**< Arapaho */
67 "art", /**< Artificial languages */
69 "asm", /**< Assamese */
70 "ast", /**< Asturian; Bable; Leonese; Asturleonese */
71 "ath", /**< Athapascan languages */
72 "aus", /**< Australian languages */
74 "ave", /**< Avestan */
77 "aze", /**< Azerbaijani */
78 "aze-arab", /**< Azerbaijani (Arabic) */
79 "aze-cyrl", /**< Azerbaijani (Cyrillic) */
80 "aze-latn", /**< Azerbaijani (Latin) */
81 "bad", /**< Banda languages */
82 "bai", /**< Bamileke languages */
83 "bak", /**< Bashkir */
84 "bal", /**< Baluchi */
85 "bam", /**< Bambara */
86 "ban", /**< Balinese */
89 "bat", /**< Baltic languages */
90 "bej", /**< Beja; Bedawiyet */
91 "bel", /**< Belarusian */
93 "ben", /**< Bengali */
94 "ber", /**< Berber languages */
95 "bho", /**< Bhojpuri */
98 "bin", /**< Bini; Edo */
99 "bis", /**< Bislama */
100 "bla", /**< Siksika */
101 "bnt", /**< Bantu (Other) */
102 "bos", /**< Bosnian */
104 "bre", /**< Breton */
105 "btk", /**< Batak languages */
106 "bua", /**< Buriat */
107 "bug", /**< Buginese */
108 "bul", /**< Bulgarian */
109 "mya", /**< Burmese */
110 "byn", /**< Blin; Bilin */
112 "cai", /**< Central American Indian languages */
113 "car", /**< Galibi Carib */
114 "cat", /**< Catalan; Valencian */
115 "cau", /**< Caucasian languages */
116 "ceb", /**< Cebuano */
117 "cel", /**< Celtic languages */
118 "cha", /**< Chamorro */
119 "chb", /**< Chibcha */
120 "che", /**< Chechen */
121 "chg", /**< Chagatai */
122 "zho", /**< Chinese */
123 "zho-hans", /**< Chinese (Simplified) */
124 "zho-hant", /**< Chinese (Traditional) */
125 "chk", /**< Chuukese */
127 "chn", /**< Chinook jargon */
128 "cho", /**< Choctaw */
129 "chp", /**< Chipewyan; Dene Suline */
130 "chr", /**< Cherokee */
131 "chu", /**< Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic */
132 "chv", /**< Chuvash */
133 "chy", /**< Cheyenne */
134 "cmc", /**< Chamic languages */
135 "cop", /**< Coptic */
136 "cor", /**< Cornish */
137 "cos", /**< Corsican */
138 "cpe", /**< Creoles and pidgins, English based */
139 "cpf", /**< Creoles and pidgins, French-based */
140 "cpp", /**< Creoles and pidgins, Portuguese-based */
142 "crh", /**< Crimean Tatar; Crimean Turkish */
143 "crp", /**< Creoles and pidgins */
144 "csb", /**< Kashubian */
145 "cus", /**< Cushitic languages */
147 "dak", /**< Dakota */
148 "dan", /**< Danish */
149 "dar", /**< Dargwa */
150 "day", /**< Land Dayak languages */
151 "del", /**< Delaware */
152 "den", /**< Slave (Athapascan) */
153 "dgr", /**< Dogrib */
155 "div", /**< Divehi; Dhivehi; Maldivian */
157 "dra", /**< Dravidian languages */
158 "dsb", /**< Lower Sorbian */
160 "dum", /**< Dutch, Middle (ca.1050-1350) */
161 "nld", /**< Dutch; Flemish */
163 "dzo", /**< Dzongkha */
165 "egy", /**< Egyptian (Ancient) */
166 "eka", /**< Ekajuk */
167 "elx", /**< Elamite */
168 "eng", /**< English */
169 "enm", /**< English, Middle (1100-1500) */
170 "epo", /**< Esperanto */
171 "est", /**< Estonian */
173 "ewo", /**< Ewondo */
175 "fao", /**< Faroese */
177 "fij", /**< Fijian */
178 "fil", /**< Filipino; Pilipino */
179 "fin", /**< Finnish */
180 "fiu", /**< Finno-Ugrian languages */
182 "fra", /**< French */
183 "frm", /**< French, Middle (ca.1400-1600) */
184 "fro", /**< French, Old (842-ca.1400) */
185 "frr", /**< Northern Frisian */
186 "frs", /**< Eastern Frisian */
187 "fry", /**< Western Frisian */
189 "fur", /**< Friulian */
193 "gem", /**< Germanic languages */
194 "kat", /**< Georgian */
195 "deu", /**< German */
197 "gil", /**< Gilbertese */
198 "gla", /**< Gaelic; Scottish Gaelic */
200 "glg", /**< Galician */
202 "gmh", /**< German, Middle High (ca.1050-1500) */
203 "goh", /**< German, Old High (ca.750-1050) */
205 "gor", /**< Gorontalo */
206 "got", /**< Gothic */
208 "grc", /**< Greek, Ancient (to 1453) */
209 "ell", /**< Greek, Modern (1453-) */
210 "grn", /**< Guarani */
211 "gsw", /**< Swiss German; Alemannic; Alsatian */
212 "guj", /**< Gujarati */
213 "gwi", /**< Gwich'in */
215 "hat", /**< Haitian; Haitian Creole */
217 "hau-latn", /**< Hausa (Latin) */
218 "haw", /**< Hawaiian */
219 "heb", /**< Hebrew */
220 "her", /**< Herero */
221 "hil", /**< Hiligaynon */
222 "him", /**< Himachali */
224 "hit", /**< Hittite */
226 "hmo", /**< Hiri Motu */
227 "hrv", /**< Croatian */
228 "hsb", /**< Upper Sorbian */
229 "hun", /**< Hungarian */
233 "isl", /**< Icelandic */
235 "iii", /**< Sichuan Yi; Nuosu */
236 "ijo", /**< Ijo languages */
237 "iku", /**< Inuktitut */
238 "ile", /**< Interlingue; Occidental */
240 "ina", /**< Interlingua (International Auxiliary Language Association) */
241 "inc", /**< Indic languages */
242 "ind", /**< Indonesian */
243 "ine", /**< Indo-European languages */
244 "inh", /**< Ingush */
245 "ipk", /**< Inupiaq */
246 "ira", /**< Iranian languages */
247 "iro", /**< Iroquoian languages */
248 "ita", /**< Italian */
249 "jav", /**< Javanese */
250 "jbo", /**< Lojban */
251 "jpn", /**< Japanese */
252 "jpr", /**< Judeo-Persian */
253 "jrb", /**< Judeo-Arabic */
254 "kaa", /**< Kara-Kalpak */
255 "kab", /**< Kabyle */
256 "kac", /**< Kachin; Jingpho */
257 "kal", /**< Kalaallisut; Greenlandic */
259 "kan", /**< Kannada */
260 "kar", /**< Karen languages */
261 "kas", /**< Kashmiri */
262 "kau", /**< Kanuri */
264 "kaz", /**< Kazakh */
265 "kaz-cyrl", /**< Kazakh (Cyrillic) */
266 "kbd", /**< Kabardian */
268 "khi", /**< Khoisan languages */
269 "khm", /**< Central Khmer */
270 "kho", /**< Khotanese; Sakan */
271 "kik", /**< Kikuyu; Gikuyu */
272 "kin", /**< Kinyarwanda */
273 "kir", /**< Kirghiz; Kyrgyz */
274 "kmb", /**< Kimbundu */
275 "kok", /**< Konkani */
278 "kor", /**< Korean */
279 "kos", /**< Kosraean */
280 "kpe", /**< Kpelle */
281 "krc", /**< Karachay-Balkar */
282 "krl", /**< Karelian */
283 "kro", /**< Kru languages */
284 "kru", /**< Kurukh */
285 "kua", /**< Kuanyama; Kwanyama */
287 "kur", /**< Kurdish */
288 "kut", /**< Kutenai */
289 "lad", /**< Ladino */
290 "lah", /**< Lahnda */
294 "lav", /**< Latvian */
295 "lez", /**< Lezghian */
296 "lim", /**< Limburgan; Limburger; Limburgish */
297 "lin", /**< Lingala */
298 "lit", /**< Lithuanian */
301 "ltz", /**< Luxembourgish; Letzeburgesch */
302 "lua", /**< Luba-Lulua */
303 "lub", /**< Luba-Katanga */
305 "lui", /**< Luiseno */
307 "luo", /**< Luo (Kenya and Tanzania) */
308 "lus", /**< Lushai */
309 "mkd", /**< Macedonian */
310 "mad", /**< Madurese */
311 "mag", /**< Magahi */
312 "mah", /**< Marshallese */
313 "mai", /**< Maithili */
314 "mak", /**< Makasar */
315 "mal", /**< Malayalam */
316 "man", /**< Mandingo */
318 "map", /**< Austronesian languages */
319 "mar", /**< Marathi */
322 "mdf", /**< Moksha */
323 "mdr", /**< Mandar */
325 "mga", /**< Irish, Middle (900-1200) */
326 "mic", /**< Mi'kmaq; Micmac */
327 "min", /**< Minangkabau */
328 "mis", /**< Uncoded languages */
329 "mkh", /**< Mon-Khmer languages */
330 "mlg", /**< Malagasy */
331 "mlt", /**< Maltese */
332 "mnc", /**< Manchu */
333 "mni", /**< Manipuri */
334 "mno", /**< Manobo languages */
335 "moh", /**< Mohawk */
336 "mon", /**< Mongolian */
338 "mul", /**< Multiple languages */
339 "mun", /**< Munda languages */
341 "mwl", /**< Mirandese */
342 "mwr", /**< Marwari */
343 "myn", /**< Mayan languages */
345 "nah", /**< Nahuatl languages */
346 "nai", /**< North American Indian languages */
347 "nap", /**< Neapolitan */
349 "nav", /**< Navajo; Navaho */
350 "nbl", /**< Ndebele, South; South Ndebele */
351 "nde", /**< Ndebele, North; North Ndebele */
352 "ndo", /**< Ndonga */
353 "nds", /**< Low German; Low Saxon; German, Low; Saxon, Low */
354 "nep", /**< Nepali */
355 "new", /**< Nepal Bhasa; Newari */
357 "nic", /**< Niger-Kordofanian languages */
358 "niu", /**< Niuean */
359 "nno", /**< Norwegian Nynorsk; Nynorsk, Norwegian */
360 "nob", /**< Bokmal, Norwegian; Norwegian Bokmal */
362 "non", /**< Norse, Old */
363 "nor", /**< Norwegian */
365 "nso", /**< Pedi; Sepedi; Northern Sotho */
366 "nub", /**< Nubian languages */
367 "nwc", /**< Classical Newari; Old Newari; Classical Nepal Bhasa */
368 "nya", /**< Chichewa; Chewa; Nyanja */
369 "nym", /**< Nyamwezi */
370 "nyn", /**< Nyankole */
373 "oci", /**< Occitan (post 1500); Provencal */
374 "oji", /**< Ojibwa */
378 "oss", /**< Ossetian; Ossetic */
379 "ota", /**< Turkish, Ottoman (1500-1928) */
380 "oto", /**< Otomian languages */
381 "paa", /**< Papuan languages */
382 "pag", /**< Pangasinan */
383 "pal", /**< Pahlavi */
384 "pam", /**< Pampanga; Kapampangan */
385 "pan", /**< Panjabi; Punjabi */
386 "pan-arab", /**< Panjabi; Punjabi (Arabic) */
387 "pan-guru", /**< Panjabi; Punjabi (Gurmukhi) */
388 "pap", /**< Papiamento */
389 "pau", /**< Palauan */
390 "peo", /**< Persian, Old (ca.600-400 B.C.) */
391 "fas", /**< Persian */
392 "phi", /**< Philippine languages */
393 "phn", /**< Phoenician */
395 "pol", /**< Polish */
396 "pon", /**< Pohnpeian */
397 "por", /**< Portuguese */
398 "pra", /**< Prakrit languages */
399 "pro", /**< Provencal, Old (to 1500) */
400 "pus", /**< Pushto; Pashto */
401 "qaa-qtz", /**< Reserved for local use */
402 "que", /**< Quechua */
403 "raj", /**< Rajasthani */
404 "rap", /**< Rapanui */
405 "rar", /**< Rarotongan; Cook Islands Maori */
406 "roa", /**< Romance languages */
407 "roh", /**< Romansh */
408 "rom", /**< Romany */
409 "ron", /**< Romanian; Moldavian; Moldovan */
411 "rup", /**< Aromanian; Arumanian; Macedo-Romanian */
412 "rus", /**< Russian */
413 "sad", /**< Sandawe */
416 "sai", /**< South American Indian (Other) */
417 "sal", /**< Salishan languages */
418 "sam", /**< Samaritan Aramaic */
419 "san", /**< Sanskrit */
421 "sat", /**< Santali */
422 "scn", /**< Sicilian */
424 "sel", /**< Selkup */
425 "sem", /**< Semitic languages */
426 "sga", /**< Irish, Old (to 900) */
427 "sgn", /**< Sign Languages */
429 "sid", /**< Sidamo */
430 "sin", /**< Sinhala; Sinhalese */
431 "sio", /**< Siouan languages */
432 "sit", /**< Sino-Tibetan languages */
433 "sla", /**< Slavic languages */
434 "slk", /**< Slovak */
435 "slv", /**< Slovenian */
436 "sma", /**< Southern Sami */
437 "sme", /**< Northern Sami */
438 "smi", /**< Sami languages */
439 "smj", /**< Lule Sami */
440 "smn", /**< Inari Sami */
441 "smo", /**< Samoan */
442 "sms", /**< Skolt Sami */
444 "snd", /**< Sindhi */
445 "snk", /**< Soninke */
446 "sog", /**< Sogdian */
447 "som", /**< Somali */
448 "son", /**< Songhai languages */
449 "sot", /**< Sotho, Southern */
450 "spa", /**< Spanish; Castilian */
451 "srd", /**< Sardinian */
452 "srn", /**< Sranan Tongo */
453 "srp", /**< Serbian */
454 "srp-cyrl", /**< Serbian (Cyrillic) */
455 "srp-latn", /**< Serbian (Latin) */
457 "ssa", /**< Nilo-Saharan languages */
459 "suk", /**< Sukuma */
460 "sun", /**< Sundanese */
462 "sux", /**< Sumerian */
463 "swa", /**< Swahili */
464 "swe", /**< Swedish */
465 "syc", /**< Classical Syriac */
466 "syr", /**< Syriac */
467 "tah", /**< Tahitian */
468 "tai", /**< Tai languages */
471 "tel", /**< Telugu */
473 "ter", /**< Tereno */
476 "tgl", /**< Tagalog */
478 "bod", /**< Tibetan */
480 "tir", /**< Tigrinya */
482 "tkl", /**< Tokelau */
483 "tlh", /**< Klingon; tlhIngan-Hol */
484 "tli", /**< Tlingit */
485 "tmh", /**< Tamashek */
486 "tog", /**< Tonga (Nyasa) */
487 "ton", /**< Tonga (Tonga Islands) */
488 "tpi", /**< Tok Pisin */
489 "tsi", /**< Tsimshian */
490 "tsn", /**< Tswana */
491 "tso", /**< Tsonga */
492 "tuk", /**< Turkmen */
493 "tuk-cyrl", /**< Turkmen (Cyrillic) */
494 "tuk-latn", /**< Turkmen (Latin) */
495 "tum", /**< Tumbuka */
496 "tup", /**< Tupi languages */
497 "tur", /**< Turkish */
498 "tut", /**< Altaic languages */
499 "tvl", /**< Tuvalu */
501 "tyv", /**< Tuvinian */
502 "udm", /**< Udmurt */
503 "uga", /**< Ugaritic */
504 "uig", /**< Uighur; Uyghur */
505 "ukr", /**< Ukrainian */
506 "umb", /**< Umbundu */
507 "und", /**< Undetermined */
510 "uzb-arab", /**< Uzbek (Arabic) */
511 "uzb-cyrl", /**< Uzbek (Cyrillic) */
512 "uzb-latn", /**< Uzbek (Latin) */
515 "vie", /**< Vietnamese */
516 "vls", /**< Vlaams; Flemish */
517 "vol", /**< Volapuk */
519 "wak", /**< Wakashan languages */
520 "wal", /**< Walamo */
524 "wen", /**< Sorbian languages */
525 "wln", /**< Walloon */
527 "xal", /**< Kalmyk; Oirat */
530 "yap", /**< Yapese */
531 "yid", /**< Yiddish */
532 "yor", /**< Yoruba */
533 "ypk", /**< Yupik languages */
534 "zap", /**< Zapotec */
535 "zbl", /**< Blissymbols; Blissymbolics; Bliss */
536 "zen", /**< Zenaga */
537 "zha", /**< Zhuang; Chuang */
538 "znd", /**< Zande languages */
541 "zxx", /**< No linguistic content; Not applicable */
542 "zza", /**< Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki */
546 static const char* CountryCodeString2LetterArray[COUNTRY_MAX] =
548 "AF", /**< AFGHANISTAN */
549 "AX", /**< ALAND ISLANDS */
550 "AL", /**< ALBANIA */
551 "DZ", /**< ALGERIA */
552 "AS", /**< AMERICAN SAMOA */
553 "AD", /**< ANDORRA */
555 "AI", /**< ANGUILLA */
556 "AQ", /**< ANTARCTICA */
557 "AG", /**< ANTIGUA AND BARBUDA */
558 "AR", /**< ARGENTINA */
559 "AM", /**< ARMENIA */
561 "AU", /**< AUSTRALIA */
562 "AT", /**< AUSTRIA */
563 "AZ", /**< AZERBAIJAN */
564 "BS", /**< BAHAMAS */
565 "BH", /**< BAHRAIN */
566 "BD", /**< BANGLADESH */
567 "BB", /**< BARBADOS */
568 "BY", /**< BELARUS */
569 "BE", /**< BELGIUM */
572 "BM", /**< BERMUDA */
574 "BO", /**< BOLIVIA */
575 "BA", /**< BOSNIA AND HERZEGOVINA */
576 "BW", /**< BOTSWANA */
577 "BV", /**< BOUVET ISLAND */
579 "IO", /**< BRITISH INDIAN OCEAN TERRITORY */
580 "BN", /**< BRUNEI DARUSSALAM */
581 "BG", /**< BULGARIA */
582 "BF", /**< BURKINA FASO */
583 "BI", /**< BURUNDI */
584 "KH", /**< CAMBODIA */
585 "CM", /**< CAMEROON */
587 "CV", /**< CAPE VERDE */
588 "KY", /**< CAYMAN ISLANDS */
589 "CF", /**< CENTRAL AFRICAN REPUBLIC */
593 "CX", /**< CHRISTMAS ISLAND */
594 "CC", /**< COCOS (KEELING) ISLANDS */
595 "CO", /**< COLOMBIA */
596 "KM", /**< COMOROS */
598 "CD", /**< CONGO, THE DEMOCRATIC REPUBLIC OF THE */
599 "CK", /**< COOK ISLANDS */
600 "CR", /**< COSTA RICA */
601 "CI", /**< COTE D'IVOIRE */
602 "HR", /**< CROATIA */
605 "CZ", /**< CZECH REPUBLIC */
606 "DK", /**< DENMARK */
607 "DJ", /**< DJIBOUTI */
608 "DM", /**< DOMINICA */
609 "DO", /**< DOMINICAN REPUBLIC */
610 "EC", /**< ECUADOR */
612 "SV", /**< EL SALVADOR */
613 "GQ", /**< EQUATORIAL GUINEA */
614 "ER", /**< ERITREA */
615 "EE", /**< ESTONIA */
616 "ET", /**< ETHIOPIA */
617 "FK", /**< FALKLAND ISLANDS (MALVINAS) */
618 "FO", /**< FAROE ISLANDS */
620 "FI", /**< FINLAND */
622 "GF", /**< FRENCH GUIANA */
623 "PF", /**< FRENCH POLYNESIA */
624 "TF", /**< FRENCH SOUTHERN TERRITORIES */
627 "GE", /**< GEORGIA */
628 "DE", /**< GERMANY */
630 "GI", /**< GIBRALTAR */
632 "GL", /**< GREENLAND */
633 "GD", /**< GRENADA */
634 "GP", /**< GUADELOUPE */
636 "GT", /**< GUATEMALA */
638 "GW", /**< GUINEA-BISSAU */
641 "HM", /**< HEARD ISLAND AND MCDONALD ISLANDS */
642 "VA", /**< HOLY SEE (VATICAN CITY STATE) */
643 "HN", /**< HONDURAS */
644 "HK", /**< HONG KONG */
645 "HU", /**< HUNGARY */
646 "IS", /**< ICELAND */
648 "ID", /**< INDONESIA */
649 "IR", /**< IRAN, ISLAMIC REPUBLIC OF */
651 "IE", /**< IRELAND */
654 "JM", /**< JAMAICA */
657 "KZ", /**< KAZAKHSTAN */
659 "KI", /**< KIRIBATI */
660 "KP", /**< KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF */
661 "KR", /**< KOREA, REPUBLIC OF */
663 "KG", /**< KYRGYZSTAN */
664 "LA", /**< LAO PEOPLE'S DEMOCRATIC REPUBLIC */
666 "LB", /**< LEBANON */
667 "LS", /**< LESOTHO */
668 "LR", /**< LIBERIA */
669 "LY", /**< LIBYAN ARAB JAMAHIRIYA */
670 "LI", /**< LIECHTENSTEIN */
671 "LT", /**< LITHUANIA */
672 "LU", /**< LUXEMBOURG */
674 "MK", /**< MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF */
675 "MG", /**< MADAGASCAR */
677 "MY", /**< MALAYSIA */
678 "MV", /**< MALDIVES */
681 "MH", /**< MARSHALL ISLANDS */
682 "MQ", /**< MARTINIQUE */
683 "MR", /**< MAURITANIA */
684 "MU", /**< MAURITIUS */
685 "YT", /**< MAYOTTE */
687 "FM", /**< MICRONESIA, FEDERATED STATES OF */
688 "MD", /**< MOLDOVA, REPUBLIC OF */
690 "MN", /**< MONGOLIA */
691 "MS", /**< MONTSERRAT */
692 "MA", /**< MOROCCO */
693 "MZ", /**< MOZAMBIQUE */
694 "MM", /**< MYANMAR */
695 "NA", /**< NAMIBIA */
698 "NL", /**< NETHERLANDS */
699 "AN", /**< NETHERLANDS ANTILLES */
700 "NC", /**< NEW CALEDONIA */
701 "NZ", /**< NEW ZEALAND */
702 "NI", /**< NICARAGUA */
704 "NG", /**< NIGERIA */
706 "NF", /**< NORFOLK ISLAND */
707 "MP", /**< NORTHERN MARIANA ISLANDS */
710 "PK", /**< PAKISTAN */
712 "PS", /**< PALESTINIAN TERRITORY, OCCUPIED */
714 "PG", /**< PAPUA NEW GUINEA */
715 "PY", /**< PARAGUAY */
717 "PH", /**< PHILIPPINES */
718 "PN", /**< PITCAIRN */
720 "PT", /**< PORTUGAL */
721 "PR", /**< PUERTO RICO */
723 "RE", /**< REUNION */
724 "RO", /**< ROMANIA */
725 "RU", /**< RUSSIAN FEDERATION */
727 "SH", /**< SAINT HELENA */
728 "KN", /**< SAINT KITTS AND NEVIS */
729 "LC", /**< SAINT LUCIA */
730 "PM", /**< SAINT PIERRE AND MIQUELON */
731 "VC", /**< SAINT VINCENT AND THE GRENADINES */
733 "SM", /**< SAN MARINO */
734 "ST", /**< SAO TOME AND PRINCIPE */
735 "SA", /**< SAUDI ARABIA */
736 "SN", /**< SENEGAL */
737 "SC", /**< SEYCHELLES */
738 "SL", /**< SIERRA LEONE */
739 "SG", /**< SINGAPORE */
740 "SK", /**< SLOVAKIA */
741 "SI", /**< SLOVENIA */
742 "SB", /**< SOLOMON ISLANDS */
743 "SO", /**< SOMALIA */
744 "ZA", /**< SOUTH AFRICA */
745 "GS", /**< SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS */
747 "LK", /**< SRI LANKA */
749 "SR", /**< SURINAME */
750 "SJ", /**< SVALBARD AND JAN MAYEN */
751 "SZ", /**< SWAZILAND */
753 "CH", /**< SWITZERLAND */
754 "SY", /**< SYRIAN ARAB REPUBLIC */
755 "TW", /**< TAIWAN, PROVINCE OF CHINA */
756 "TJ", /**< TAJIKISTAN */
757 "TZ", /**< TANZANIA, UNITED REPUBLIC OF */
758 "TH", /**< THAILAND */
759 "TL", /**< TIMOR-LESTE */
761 "TK", /**< TOKELAU */
763 "TT", /**< TRINIDAD AND TOBAGO */
764 "TN", /**< TUNISIA */
766 "TM", /**< TURKMENISTAN */
767 "TC", /**< TURKS AND CAICOS ISLANDS */
770 "UA", /**< UKRAINE */
771 "AE", /**< UNITED ARAB EMIRATES */
772 "GB", /**< UNITED KINGDOM */
773 "US", /**< UNITED STATES */
774 "UM", /**< UNITED STATES MINOR OUTLYING ISLANDS */
775 "UY", /**< URUGUAY */
776 "UZ", /**< UZBEKISTAN */
777 "VU", /**< VANUATU */
778 "VE", /**< VENEZUELA */
779 "VN", /**< VIET NAM */
780 "VG", /**< VIRGIN ISLANDS, BRITISH */
781 "VI", /**< VIRGIN ISLANDS, U.S. */
782 "WF", /**< WALLIS AND FUTUNA */
783 "EH", /**< WESTERN SAHARA */
786 "ZW", /**< ZIMBABWE */
788 "ME", /**< MONTENEGRO */
789 "BL", /**< SAINT BARTHELEMY @b Since: @b 2.1 */
790 "MF", /**< SAINT MARTIN (FRENCH PART) @b Since: @b 2.1 */
791 "419" /**< Latin America and the Caribbean @b Since: @b 2.1 */
795 /////////////////////////////////////////////////////////////////////////////////////////////////////
798 Locale::Locale(const Locale& other)
799 : __languageCode(other.__languageCode)
800 , __countryCode(other.__countryCode)
801 , __pLocaleImpl(other.__pLocaleImpl->CloneN())
803 SysAssert(__pLocaleImpl);
807 Locale::Locale(LanguageCode languageCode, CountryCode countryCode, const String* pVariantCodeString)
808 : __languageCode((languageCode < LANGUAGE_MAX && languageCode >= LANGUAGE_AAR) ? languageCode : LANGUAGE_INVALID)
809 , __countryCode((countryCode < COUNTRY_MAX && countryCode >= COUNTRY_AF) ? countryCode : COUNTRY_INVALID)
810 , __pLocaleImpl(null)
812 if (Tizen::App::_AppInfo::GetApiVersion() < _API_VERSION_2_1)
814 // LANGUAGE_INVALID_RESERVED-1 is LANGUAGE_MAX of tizen 2.0
815 if (__languageCode >= LanguageMaxReserved)
817 __languageCode = LANGUAGE_INVALID;
819 // COUNTRY_INVALID_RESERVED-1 is COUNTRY_MAX of tizen 2.0
820 if (__countryCode >= CountryMaxReserved)
822 __countryCode = COUNTRY_INVALID;
825 const char* pLanguage = (__languageCode != LANGUAGE_INVALID) ? LanguageCodeString3LetterArray[__languageCode] : null;
826 const char* pCountry = (__countryCode != COUNTRY_INVALID) ? CountryCodeString2LetterArray[__countryCode] : null;
828 std::unique_ptr<char[]> pVariantCode (null);
829 if (pVariantCodeString)
831 pVariantCode.reset(_StringConverter::CopyToCharArrayN(*pVariantCodeString));
834 __pLocaleImpl = new (std::nothrow) _LocaleImpl(pLanguage, pCountry, pVariantCode.get());
835 SysAssert(__pLocaleImpl);
840 Locale::operator =(const Locale& other)
844 __languageCode = other.__languageCode;
845 __countryCode = other.__countryCode;
847 delete __pLocaleImpl;
848 __pLocaleImpl = other.__pLocaleImpl->CloneN();
854 Locale::~Locale(void)
856 delete __pLocaleImpl;
857 __pLocaleImpl = null;
862 Locale::SetVariantCodeString(const String* pVariantCode)
864 std::unique_ptr<char[]> pVariant (null);
867 pVariant.reset(_StringConverter::CopyToCharArrayN(*pVariantCode));
869 __pLocaleImpl->SetVariantCodeString(pVariant.get());
875 Locale::GetLanguageCode(void) const
877 return __languageCode;
882 Locale::GetCountryCode(void) const
884 return __countryCode;
889 Locale::GetLanguageCodeString(void) const
891 return __pLocaleImpl->GetLanguageCodeString(false);
896 Locale::GetCountryCodeString(void) const
898 return __pLocaleImpl->Get2LetterCountryCodeString();
903 Locale::GetVariantCodeString(void) const
905 return __pLocaleImpl->GetVariantCodeString();
910 Locale::GetLocaleCodeString(void) const
912 String lclCode(__pLocaleImpl->GetLanguageCodeString(false));
913 if (!lclCode.IsEmpty())
915 lclCode.Append(L"_");
916 lclCode.Append(GetCountryCodeString());
918 String varCode(__pLocaleImpl->GetVariantCodeString());
919 if (!varCode.IsEmpty())
921 lclCode.Append(L"_");
922 lclCode.Append(varCode);
930 Locale::GetCountryName(String& countryName) const
932 return __pLocaleImpl->GetCountryName(countryName);
937 Locale::GetCountryName(const Locale& otherLocale, String& countryName) const
939 return __pLocaleImpl->GetCountryName(*otherLocale.__pLocaleImpl, countryName);
944 Locale::GetLanguageName(String& languageName) const
946 return __pLocaleImpl->GetLanguageName(languageName);
951 Locale::GetLanguageName(const Locale& otherLocale, String& languageName) const
953 return __pLocaleImpl->GetLanguageName(*otherLocale.__pLocaleImpl, languageName);
957 Locale::operator ==(const Locale& other) const
959 bool isEqual = ((this->GetCountryCode() == other.GetCountryCode())
960 && (this->GetLanguageCode() == other.GetLanguageCode())
961 && (this->GetVariantCodeString() == other.GetVariantCodeString()));
966 Locale::operator !=(const Locale& other) const
968 return !(*this == other);
972 Locale::Equals(const Object& obj) const
974 const Locale* pOtherLocale = dynamic_cast< const Locale* >(&obj);
977 return *this == *pOtherLocale;
983 Locale::GetHashCode(void) const
985 return __pLocaleImpl->GetHashCode();
990 Locale::StringToLanguageCode(const String& languageCodeString)
992 LanguageCode invalidLanguageCode = LANGUAGE_INVALID;
993 LanguageCode maxLangageCode = LANGUAGE_MAX;
995 if (!languageCodeString.IsEmpty())
997 for (int i = 0; i < maxLangageCode; i++)
999 if (languageCodeString == LanguageCodeString3LetterArray[i])
1001 return (LanguageCode) i;
1007 SysLog(NID_LCL,"languageCodeString is empty string");
1010 return invalidLanguageCode;
1015 Locale::StringToCountryCode(const String& countryCodeString)
1017 CountryCode invalidCountryCode = COUNTRY_INVALID;
1018 CountryCode maxCountryCode = COUNTRY_MAX;
1020 if(!countryCodeString.IsEmpty())
1022 for (int i = 0; i < maxCountryCode; i++)
1024 if (countryCodeString == CountryCodeString2LetterArray[i])
1026 return (CountryCode) i;
1032 SysLog(NID_LCL,"countryCodeString is empty string");
1035 return invalidCountryCode;
1040 Locale::LanguageCodeToString(LanguageCode languageCode)
1042 return ((languageCode > LANGUAGE_INVALID) && (languageCode < LANGUAGE_MAX))
1043 ? LanguageCodeString3LetterArray[languageCode]
1049 Locale::CountryCodeToString(CountryCode countryCode)
1051 return ((countryCode > COUNTRY_INVALID) && (countryCode < COUNTRY_MAX))
1052 ? CountryCodeString2LetterArray[countryCode]
1058 Locale::LanguageCodeToTwoLetterLanguageCodeString(LanguageCode languageCode)
1060 return ((languageCode > LANGUAGE_INVALID) && (languageCode < LANGUAGE_MAX))
1061 ? _LocaleImpl::Get2LetterLanguageCodeString(LanguageCodeString3LetterArray[languageCode])
1067 Locale::TwoLetterLanguageCodeStringToLanguageCode(const String& languageCodeString)
1071 languageCodeString.IndexOf(L"-", 0, index);
1073 if (languageCodeString.GetLength() == 2 || index == 2)
1075 std::unique_ptr<char[]> pLangStr (_StringConverter::CopyToCharArrayN(languageCodeString));
1076 return StringToLanguageCode(_LocaleImpl::Get3LetterLanguageCodeString(pLangStr.get()));
1078 return LANGUAGE_INVALID;
1083 Locale::CountryCodeToThreeLetterCountryCodeString(CountryCode countryCode)
1085 return ((countryCode > COUNTRY_INVALID) && (countryCode < COUNTRY_MAX))
1086 ? _LocaleImpl::Get3LetterCountryCodeString(CountryCodeString2LetterArray[countryCode])
1092 Locale::ThreeLetterCountryCodeStringToCountryCode(const String& countryCodeString)
1094 if (countryCodeString.GetLength() == 3)
1096 CountryCode maxCountryCode = COUNTRY_MAX;
1098 for (int i = 0; i < maxCountryCode; i++)
1100 String countryCode(_LocaleImpl::Get3LetterCountryCodeString(CountryCodeString2LetterArray[i]));
1101 if (countryCodeString.Equals(countryCode, false))
1103 return static_cast<CountryCode> (i);
1108 return COUNTRY_INVALID;
1113 }; // Tizen::Locales