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