Merge "Remove the api version checking" into tizen_2.1
[platform/framework/native/appfw.git] / src / locales / FLclLocale.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
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
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
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.
16 //
17
18 /**
19  * @file            FLclLocale.cpp
20  * @brief           This is the implementation file for Locale class.
21  */
22
23 #include <unique_ptr.h>
24
25 #include <FBaseSysLog.h>
26 #include <FLclLocale.h>
27 #include <FApp_AppInfo.h>
28
29 #include "FBase_StringConverter.h"
30 #include "FLcl_LocaleImpl.h"
31
32 using namespace Tizen::Base;
33
34 namespace Tizen { namespace Locales
35 {
36
37 static const LanguageCode LanguageMaxReserved = static_cast <LanguageCode> (LANGUAGE_INVALID_RESERVED - 1);
38 static const CountryCode CountryMaxReserved = static_cast <CountryCode> (COUNTRY_INVALID_RESERVED - 1);
39
40 static const char* LanguageCodeString3LetterArray[LANGUAGE_MAX+2] =
41 {
42         "aar", /**< Afar */
43         "abk", /**< Abkhazian */
44         "ace", /**< Achinese */
45         "ach", /**< Acoli */
46         "ada", /**< Adangme */
47         "ady", /**< Adyghe; Adygei */
48         "afa", /**< Afro-Asiatic languages */
49         "afh", /**< Afrihili */
50         "afr", /**< Afrikaans */
51         "ain", /**< Ainu */
52         "aka", /**< Akan */
53         "akk", /**< Akkadian */
54         "sqi", /**< Albanian */
55         "ale", /**< Aleut */
56         "alg", /**< Algonquian languages */
57         "alt", /**< Southern Altai */
58         "amh", /**< Amharic */
59         "ang", /**< English, Old (ca.450-1100) */
60         "anp", /**< Angika */
61         "apa", /**< Apache languages */
62         "ara", /**< Arabic */
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 */
69         "arw", /**< Arawak */
70         "asm", /**< Assamese */
71         "ast", /**< Asturian; Bable; Leonese; Asturleonese */
72         "ath", /**< Athapascan languages */
73         "aus", /**< Australian languages */
74         "ava", /**< Avaric */
75         "ave", /**< Avestan */
76         "awa", /**< Awadhi */
77         "aym", /**< Aymara */
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 */
88         "eus", /**< Basque */
89         "bas", /**< Basa */
90         "bat", /**< Baltic languages */
91         "bej", /**< Beja; Bedawiyet */
92         "bel", /**< Belarusian */
93         "bem", /**< Bemba */
94         "ben", /**< Bengali */
95         "ber", /**< Berber languages */
96         "bho", /**< Bhojpuri */
97         "bih", /**< Bihari */
98         "bik", /**< Bikol */
99         "bin", /**< Bini; Edo */
100         "bis", /**< Bislama */
101         "bla", /**< Siksika */
102         "bnt", /**< Bantu (Other) */
103         "bos", /**< Bosnian */
104         "bra", /**< Braj */
105         "bre", /**< Breton */
106         "btk", /**< Batak languages */
107         "bua", /**< Buriat */
108         "bug", /**< Buginese */
109         "bul", /**< Bulgarian */
110         "mya", /**< Burmese */
111         "byn", /**< Blin; Bilin */
112         "cad", /**< Caddo */
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 */
127         "chm", /**< Mari */
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  */
142         "cre", /**< Cree */
143         "crh", /**< Crimean Tatar; Crimean Turkish */
144         "crp", /**< Creoles and pidgins  */
145         "csb", /**< Kashubian */
146         "cus", /**< Cushitic languages */
147         "ces", /**< Czech */
148         "dak", /**< Dakota */
149         "dan", /**< Danish */
150         "dar", /**< Dargwa */
151         "day", /**< Land Dayak languages */
152         "del", /**< Delaware */
153         "den", /**< Slave (Athapascan) */
154         "dgr", /**< Dogrib */
155         "din", /**< Dinka */
156         "div", /**< Divehi; Dhivehi; Maldivian */
157         "doi", /**< Dogri */
158         "dra", /**< Dravidian languages */
159         "dsb", /**< Lower Sorbian */
160         "dua", /**< Duala */
161         "dum", /**< Dutch, Middle (ca.1050-1350) */
162         "nld", /**< Dutch; Flemish */
163         "dyu", /**< Dyula */
164         "dzo", /**< Dzongkha */
165         "efi", /**< Efik */
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 */
173         "ewe", /**< Ewe */
174         "ewo", /**< Ewondo */
175         "fan", /**< Fang */
176         "fao", /**< Faroese */
177         "fat", /**< Fanti */
178         "fij", /**< Fijian */
179         "fil", /**< Filipino; Pilipino */
180         "fin", /**< Finnish */
181         "fiu", /**< Finno-Ugrian languages */
182         "fon", /**< Fon */
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 */
189         "ful", /**< Fulah */
190         "fur", /**< Friulian */
191         "gaa", /**< Ga */
192         "gay", /**< Gayo */
193         "gba", /**< Gbaya */
194         "gem", /**< Germanic languages */
195         "kat", /**< Georgian */
196         "deu", /**< German */
197         "gez", /**< Geez */
198         "gil", /**< Gilbertese */
199         "gla", /**< Gaelic; Scottish Gaelic */
200         "gle", /**< Irish */
201         "glg", /**< Galician */
202         "glv", /**< Manx */
203         "gmh", /**< German, Middle High (ca.1050-1500) */
204         "goh", /**< German, Old High (ca.750-1050) */
205         "gon", /**< Gondi */
206         "gor", /**< Gorontalo */
207         "got", /**< Gothic */
208         "grb", /**< Grebo */
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 */
215         "hai", /**< Haida */
216         "hat", /**< Haitian; Haitian Creole */
217         "hau", /**< Hausa */
218         "hau-latn", /**< Hausa (Latin) */
219         "haw", /**< Hawaiian */
220         "heb", /**< Hebrew */
221         "her", /**< Herero */
222         "hil", /**< Hiligaynon */
223         "him", /**< Himachali */
224         "hin", /**< Hindi */
225         "hit", /**< Hittite */
226         "hmn", /**< Hmong */
227         "hmo", /**< Hiri Motu */
228         "hrv", /**< Croatian */
229         "hsb", /**< Upper Sorbian */
230         "hun", /**< Hungarian */
231         "hup", /**< Hupa */
232         "iba", /**< Iban */
233         "ibo", /**< Igbo */
234         "isl", /**< Icelandic */
235         "ido", /**< Ido */
236         "iii", /**< Sichuan Yi; Nuosu */
237         "ijo", /**< Ijo languages */
238         "iku", /**< Inuktitut */
239         "ile", /**< Interlingue; Occidental */
240         "ilo", /**< Iloko */
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 */
259         "kam", /**< Kamba */
260         "kan", /**< Kannada */
261         "kar", /**< Karen languages */
262         "kas", /**< Kashmiri */
263         "kau", /**< Kanuri */
264         "kaw", /**< Kawi */
265         "kaz", /**< Kazakh */
266         "kaz-cyrl", /**< Kazakh (Cyrillic) */
267         "kbd", /**< Kabardian */
268         "kha", /**< Khasi */
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 */
277         "kom", /**< Komi */
278         "kon", /**< Kongo */
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 */
287         "kum", /**< Kumyk */
288         "kur", /**< Kurdish */
289         "kut", /**< Kutenai */
290         "lad", /**< Ladino */
291         "lah", /**< Lahnda */
292         "lam", /**< Lamba */
293         "lao", /**< Lao */
294         "lat", /**< Latin */
295         "lav", /**< Latvian */
296         "lez", /**< Lezghian */
297         "lim", /**< Limburgan; Limburger; Limburgish */
298         "lin", /**< Lingala */
299         "lit", /**< Lithuanian */
300         "lol", /**< Mongo */
301         "loz", /**< Lozi */
302         "ltz", /**< Luxembourgish; Letzeburgesch */
303         "lua", /**< Luba-Lulua */
304         "lub", /**< Luba-Katanga */
305         "lug", /**< Ganda */
306         "lui", /**< Luiseno */
307         "lun", /**< Lunda */
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 */
318         "mri", /**< Maori */
319         "map", /**< Austronesian languages */
320         "mar", /**< Marathi */
321         "mas", /**< Masai */
322         "msa", /**< Malay */
323         "mdf", /**< Moksha */
324         "mdr", /**< Mandar */
325         "men", /**< Mende */
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 */
338         "mos", /**< Mossi */
339         "mul", /**< Multiple languages */
340         "mun", /**< Munda languages */
341         "mus", /**< Creek */
342         "mwl", /**< Mirandese */
343         "mwr", /**< Marwari */
344         "myn", /**< Mayan languages */
345         "myv", /**< Erzya */
346         "nah", /**< Nahuatl languages */
347         "nai", /**< North American Indian languages */
348         "nap", /**< Neapolitan */
349         "nau", /**< Nauru */
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 */
357         "nia", /**< Nias */
358         "nic", /**< Niger-Kordofanian languages */
359         "niu", /**< Niuean */
360         "nno", /**< Norwegian Nynorsk; Nynorsk, Norwegian */
361         "nob", /**< Bokmal, Norwegian; Norwegian Bokmal */
362         "nog", /**< Nogai */
363         "non", /**< Norse, Old */
364         "nor", /**< Norwegian */
365         "nqo", /**< N'Ko */
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 */
372         "nyo", /**< Nyoro */
373         "nzi", /**< Nzima */
374         "oci", /**< Occitan (post 1500); Provencal */
375         "oji", /**< Ojibwa */
376         "ori", /**< Oriya */
377         "orm", /**< Oromo */
378         "osa", /**< Osage */
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 */
395         "pli", /**< Pali */
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 */
411         "run", /**< Rundi */
412         "rup", /**< Aromanian; Arumanian; Macedo-Romanian */
413         "rus", /**< Russian */
414         "sad", /**< Sandawe */
415         "sag", /**< Sango */
416         "sah", /**< Yakut */
417         "sai", /**< South American Indian (Other) */
418         "sal", /**< Salishan languages */
419         "sam", /**< Samaritan Aramaic */
420         "san", /**< Sanskrit */
421         "sas", /**< Sasak */
422         "sat", /**< Santali */
423         "scn", /**< Sicilian */
424         "sco", /**< Scots */
425         "sel", /**< Selkup */
426         "sem", /**< Semitic languages */
427         "sga", /**< Irish, Old (to 900) */
428         "sgn", /**< Sign Languages */
429         "shn", /**< Shan */
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 */
444         "sna", /**< Shona */
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) */
457         "srr", /**< Serer */
458         "ssa", /**< Nilo-Saharan languages */
459         "ssw", /**< Swati */
460         "suk", /**< Sukuma */
461         "sun", /**< Sundanese */
462         "sus", /**< Susu */
463         "sux", /**< Sumerian */
464         "swa", /**< Swahili */
465         "swe", /**< Swedish */
466         "syc", /**< Classical Syriac */
467         "syr", /**< Syriac */
468         "tah", /**< Tahitian */
469         "tai", /**< Tai languages */
470         "tam", /**< Tamil */
471         "tat", /**< Tatar */
472         "tel", /**< Telugu */
473         "tem", /**< Timne */
474         "ter", /**< Tereno */
475         "tet", /**< Tetum */
476         "tgk", /**< Tajik */
477         "tgl", /**< Tagalog */
478         "tha", /**< Thai */
479         "bod", /**< Tibetan */
480         "tig", /**< Tigre */
481         "tir", /**< Tigrinya */
482         "tiv", /**< Tiv */
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 */
501         "twi", /**< Twi */
502         "tyv", /**< Tuvinian */
503         "udm", /**< Udmurt */
504         "uga", /**< Ugaritic */
505         "uig", /**< Uighur; Uyghur */
506         "ukr", /**< Ukrainian */
507         "umb", /**< Umbundu */
508         "und", /**< Undetermined */
509         "urd", /**< Urdu */
510         "uzb", /**< Uzbek */
511         "uzb-arab", /**< Uzbek (Arabic) */
512         "uzb-cyrl", /**< Uzbek (Cyrillic) */
513         "uzb-latn", /**< Uzbek (Latin) */
514         "vai", /**< Vai */
515         "ven", /**< Venda */
516         "vie", /**< Vietnamese */
517         "vls", /**< Vlaams; Flemish */
518         "vol", /**< Volapuk */
519         "vot", /**< Votic */
520         "wak", /**< Wakashan languages */
521         "wal", /**< Walamo */
522         "war", /**< Waray */
523         "was", /**< Washo */
524         "cym", /**< Welsh */
525         "wen", /**< Sorbian languages */
526         "wln", /**< Walloon */
527         "wol", /**< Wolof */
528         "xal", /**< Kalmyk; Oirat */
529         "xho", /**< Xhosa */
530         "yao", /**< Yao */
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 */
540         "zul", /**< Zulu */
541         "zun", /**< Zuni */
542         "zxx", /**< No linguistic content; Not applicable */
543         "zza", /**< Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki */
544 };
545
546
547 static const char* CountryCodeString2LetterArray[COUNTRY_MAX] =
548 {
549         "AF", /**< AFGHANISTAN  */
550         "AX", /**< ALAND ISLANDS */
551         "AL", /**< ALBANIA */
552         "DZ", /**< ALGERIA */
553         "AS", /**< AMERICAN SAMOA */
554         "AD", /**< ANDORRA */
555         "AO", /**< ANGOLA */
556         "AI", /**< ANGUILLA */
557         "AQ", /**< ANTARCTICA */
558         "AG", /**< ANTIGUA AND BARBUDA */
559         "AR", /**< ARGENTINA */
560         "AM", /**< ARMENIA */
561         "AW", /**< ARUBA */
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 */
571         "BZ", /**< BELIZE */
572         "BJ", /**< BENIN */
573         "BM", /**< BERMUDA */
574         "BT", /**< BHUTAN */
575         "BO", /**< BOLIVIA */
576         "BA", /**< BOSNIA AND HERZEGOVINA */
577         "BW", /**< BOTSWANA */
578         "BV", /**< BOUVET ISLAND */
579         "BR", /**< BRAZIL */
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 */
587         "CA", /**< CANADA */
588         "CV", /**< CAPE VERDE */
589         "KY", /**< CAYMAN ISLANDS */
590         "CF", /**< CENTRAL AFRICAN REPUBLIC */
591         "TD", /**< CHAD */
592         "CL", /**< CHILE */
593         "CN", /**< CHINA */
594         "CX", /**< CHRISTMAS ISLAND */
595         "CC", /**< COCOS (KEELING) ISLANDS */
596         "CO", /**< COLOMBIA */
597         "KM", /**< COMOROS */
598         "CG", /**< CONGO */
599         "CD", /**< CONGO, THE DEMOCRATIC REPUBLIC OF THE */
600         "CK", /**< COOK ISLANDS */
601         "CR", /**< COSTA RICA */
602         "CI", /**< COTE D'IVOIRE */
603         "HR", /**< CROATIA */
604         "CU", /**< CUBA */
605         "CY", /**< CYPRUS */
606         "CZ", /**< CZECH REPUBLIC */
607         "DK", /**< DENMARK */
608         "DJ", /**< DJIBOUTI */
609         "DM", /**< DOMINICA */
610         "DO", /**< DOMINICAN REPUBLIC */
611         "EC", /**< ECUADOR */
612         "EG", /**< EGYPT */
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 */
620         "FJ", /**< FIJI */
621         "FI", /**< FINLAND */
622         "FR", /**< FRANCE */
623         "GF", /**< FRENCH GUIANA */
624         "PF", /**< FRENCH POLYNESIA */
625         "TF", /**< FRENCH SOUTHERN TERRITORIES */
626         "GA", /**< GABON  */
627         "GM", /**< GAMBIA */
628         "GE", /**< GEORGIA */
629         "DE", /**< GERMANY */
630         "GH", /**< GHANA */
631         "GI", /**< GIBRALTAR */
632         "GR", /**< GREECE */
633         "GL", /**< GREENLAND */
634         "GD", /**< GRENADA */
635         "GP", /**< GUADELOUPE */
636         "GU", /**< GUAM */
637         "GT", /**< GUATEMALA */
638         "GN", /**< GUINEA */
639         "GW", /**< GUINEA-BISSAU */
640         "GY", /**< GUYANA */
641         "HT", /**< HAITI */
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 */
648         "IN", /**< INDIA */
649         "ID", /**< INDONESIA */
650         "IR", /**< IRAN, ISLAMIC REPUBLIC OF */
651         "IQ", /**< IRAQ */
652         "IE", /**< IRELAND */
653         "IL", /**< ISRAEL */
654         "IT", /**< ITALY */
655         "JM", /**< JAMAICA */
656         "JP", /**< JAPAN */
657         "JO", /**< JORDAN */
658         "KZ", /**< KAZAKHSTAN */
659         "KE", /**< KENYA */
660         "KI", /**< KIRIBATI */
661         "KP", /**< KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF */
662         "KR", /**< KOREA, REPUBLIC OF */
663         "KW", /**< KUWAIT */
664         "KG", /**< KYRGYZSTAN */
665         "LA", /**< LAO PEOPLE'S DEMOCRATIC REPUBLIC  */
666         "LV", /**< LATVIA */
667         "LB", /**< LEBANON */
668         "LS", /**< LESOTHO */
669         "LR", /**< LIBERIA */
670         "LY", /**< LIBYAN ARAB JAMAHIRIYA */
671         "LI", /**< LIECHTENSTEIN */
672         "LT", /**< LITHUANIA */
673         "LU", /**< LUXEMBOURG */
674         "MO", /**< MACAO */
675         "MK", /**< MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF */
676         "MG", /**< MADAGASCAR */
677         "MW", /**< MALAWI */
678         "MY", /**< MALAYSIA */
679         "MV", /**< MALDIVES */
680         "ML", /**< MALI */
681         "MT", /**< MALTA */
682         "MH", /**< MARSHALL ISLANDS */
683         "MQ", /**< MARTINIQUE */
684         "MR", /**< MAURITANIA */
685         "MU", /**< MAURITIUS */
686         "YT", /**< MAYOTTE */
687         "MX", /**< MEXICO */
688         "FM", /**< MICRONESIA, FEDERATED STATES OF */
689         "MD", /**< MOLDOVA, REPUBLIC OF */
690         "MC", /**< MONACO */
691         "MN", /**< MONGOLIA */
692         "MS", /**< MONTSERRAT */
693         "MA", /**< MOROCCO */
694         "MZ", /**< MOZAMBIQUE */
695         "MM", /**< MYANMAR */
696         "NA", /**< NAMIBIA */
697         "NR", /**< NAURU */
698         "NP", /**< NEPAL */
699         "NL", /**< NETHERLANDS */
700         "AN", /**< NETHERLANDS ANTILLES */
701         "NC", /**< NEW CALEDONIA */
702         "NZ", /**< NEW ZEALAND */
703         "NI", /**< NICARAGUA */
704         "NE", /**< NIGER */
705         "NG", /**< NIGERIA */
706         "NU", /**< NIUE */
707         "NF", /**< NORFOLK ISLAND */
708         "MP", /**< NORTHERN MARIANA ISLANDS */
709         "NO", /**< NORWAY */
710         "OM", /**< OMAN */
711         "PK", /**< PAKISTAN */
712         "PW", /**< PALAU */
713         "PS", /**< PALESTINIAN TERRITORY, OCCUPIED */
714         "PA", /**< PANAMA */
715         "PG", /**< PAPUA NEW GUINEA */
716         "PY", /**< PARAGUAY */
717         "PE", /**< PERU */
718         "PH", /**< PHILIPPINES */
719         "PN", /**< PITCAIRN */
720         "PL", /**< POLAND */
721         "PT", /**< PORTUGAL */
722         "PR", /**< PUERTO RICO */
723         "QA", /**< QATAR */
724         "RE", /**< REUNION */
725         "RO", /**< ROMANIA */
726         "RU", /**< RUSSIAN FEDERATION */
727         "RW", /**< RWANDA */
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 */
733         "WS", /**< SAMOA */
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 */
747         "ES", /**< SPAIN */
748         "LK", /**< SRI LANKA */
749         "SD", /**< SUDAN */
750         "SR", /**< SURINAME */
751         "SJ", /**< SVALBARD AND JAN MAYEN */
752         "SZ", /**< SWAZILAND */
753         "SE", /**< SWEDEN */
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 */
761         "TG", /**< TOGO */
762         "TK", /**< TOKELAU */
763         "TO", /**< TONGA */
764         "TT", /**< TRINIDAD AND TOBAGO */
765         "TN", /**< TUNISIA */
766         "TR", /**< TURKEY */
767         "TM", /**< TURKMENISTAN */
768         "TC", /**< TURKS AND CAICOS ISLANDS */
769         "TV", /**< TUVALU */
770         "UG", /**< UGANDA */
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 */
785         "YE", /**< YEMEN */
786         "ZM", /**< ZAMBIA */
787         "ZW", /**< ZIMBABWE */
788         "RS", /**< SERBIA */
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  */
793 };
794
795
796 /////////////////////////////////////////////////////////////////////////////////////////////////////
797 // Public Method
798
799 Locale::Locale(const Locale& other)
800         : __languageCode(other.__languageCode)
801         , __countryCode(other.__countryCode)
802         , __pLocaleImpl(other.__pLocaleImpl->CloneN())
803 {
804         SysAssert(__pLocaleImpl);
805 }
806
807
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)
812 {
813         if (Tizen::App::_AppInfo::GetApiVersion() < _API_VERSION_2_1)
814         {
815                 // LANGUAGE_INVALID_RESERVED-1 is LANGUAGE_MAX of tizen 2.0
816                 if (__languageCode >= LanguageMaxReserved)
817                 {
818                         __languageCode = LANGUAGE_INVALID;
819                 }
820                 // COUNTRY_INVALID_RESERVED-1 is COUNTRY_MAX of tizen 2.0
821                 if (__countryCode >= CountryMaxReserved)
822                 {
823                         __countryCode = COUNTRY_INVALID;
824                 }
825         }
826         const char* pLanguage = (__languageCode != LANGUAGE_INVALID) ? LanguageCodeString3LetterArray[__languageCode] : null;
827         const char* pCountry = (__countryCode != COUNTRY_INVALID) ? CountryCodeString2LetterArray[__countryCode] : null;
828
829         std::unique_ptr<char[]> pVariantCode (null);
830         if (pVariantCodeString)
831         {
832                 pVariantCode.reset(_StringConverter::CopyToCharArrayN(*pVariantCodeString));
833         }
834
835         __pLocaleImpl = new (std::nothrow) _LocaleImpl(pLanguage, pCountry, pVariantCode.get());
836         SysAssert(__pLocaleImpl);
837 }
838
839
840 Locale&
841 Locale::operator =(const Locale& other)
842 {
843         if (&other != this)
844         {
845                 __languageCode = other.__languageCode;
846                 __countryCode = other.__countryCode;
847
848                 delete __pLocaleImpl;
849                 __pLocaleImpl = other.__pLocaleImpl->CloneN();
850         }
851         return *this;
852 }
853
854
855 Locale::~Locale(void)
856 {
857         delete __pLocaleImpl;
858         __pLocaleImpl = null;
859 }
860
861
862 void
863 Locale::SetVariantCodeString(const String* pVariantCode)
864 {
865         std::unique_ptr<char[]> pVariant (null);
866         if (pVariantCode)
867         {
868                 pVariant.reset(_StringConverter::CopyToCharArrayN(*pVariantCode));
869         }
870         __pLocaleImpl->SetVariantCodeString(pVariant.get());
871 }
872
873
874 // Access
875 LanguageCode
876 Locale::GetLanguageCode(void) const
877 {
878         return __languageCode;
879 }
880
881
882 CountryCode
883 Locale::GetCountryCode(void) const
884 {
885         return __countryCode;
886 }
887
888
889 String
890 Locale::GetLanguageCodeString(void) const
891 {
892         return __pLocaleImpl->GetLanguageCodeString(false);
893 }
894
895
896 String
897 Locale::GetCountryCodeString(void) const
898 {
899         return __pLocaleImpl->Get2LetterCountryCodeString();
900 }
901
902
903 String
904 Locale::GetVariantCodeString(void) const
905 {
906         return __pLocaleImpl->GetVariantCodeString();
907 }
908
909
910 String
911 Locale::GetLocaleCodeString(void) const
912 {
913         String lclCode(__pLocaleImpl->GetLanguageCodeString(false));
914         if (!lclCode.IsEmpty())
915         {
916                 lclCode.Append(L"_");
917                 lclCode.Append(GetCountryCodeString());
918
919                 String varCode(__pLocaleImpl->GetVariantCodeString());
920                 if (!varCode.IsEmpty())
921                 {
922                         lclCode.Append(L"_");
923                         lclCode.Append(varCode);
924                 }
925         }
926         return lclCode;
927 }
928
929
930 result
931 Locale::GetCountryName(String& countryName) const
932 {
933         return __pLocaleImpl->GetCountryName(countryName);
934 }
935
936
937 result
938 Locale::GetCountryName(const Locale& otherLocale, String& countryName) const
939 {
940         return __pLocaleImpl->GetCountryName(*otherLocale.__pLocaleImpl, countryName);
941 }
942
943
944 result
945 Locale::GetLanguageName(String& languageName) const
946 {
947         return __pLocaleImpl->GetLanguageName(languageName);
948 }
949
950
951 result
952 Locale::GetLanguageName(const Locale& otherLocale, String& languageName) const
953 {
954         return __pLocaleImpl->GetLanguageName(*otherLocale.__pLocaleImpl, languageName);
955 }
956
957 bool
958 Locale::operator ==(const Locale& other) const
959 {
960         bool isEqual = ((this->GetCountryCode() == other.GetCountryCode())
961                                         && (this->GetLanguageCode() == other.GetLanguageCode())
962                                         && (this->GetVariantCodeString() == other.GetVariantCodeString()));
963         return isEqual;
964 }
965
966 bool
967 Locale::operator !=(const Locale& other) const
968 {
969         return !(*this == other);
970 }
971
972 bool
973 Locale::Equals(const Object& obj) const
974 {
975         const Locale* pOtherLocale = dynamic_cast< const Locale* >(&obj);
976         if (pOtherLocale)
977         {
978                 return *this == *pOtherLocale;
979         }
980         return false;
981 }
982
983 int
984 Locale::GetHashCode(void) const
985 {
986         return __pLocaleImpl->GetHashCode();
987 }
988
989
990 LanguageCode
991 Locale::StringToLanguageCode(const String& languageCodeString)
992 {
993         LanguageCode invalidLanguageCode = LANGUAGE_INVALID;
994         LanguageCode maxLangageCode = LANGUAGE_MAX;
995
996         if (!languageCodeString.IsEmpty())
997         {
998                 for (int i = 0; i < maxLangageCode; i++)
999                 {
1000                         if (languageCodeString == LanguageCodeString3LetterArray[i])
1001                         {
1002                                 return (LanguageCode) i;
1003                         }
1004                 }
1005         }
1006         else
1007         {
1008                 SysLog(NID_LCL,"languageCodeString is empty string");
1009         }
1010
1011         return invalidLanguageCode;
1012 }
1013
1014
1015 CountryCode
1016 Locale::StringToCountryCode(const String& countryCodeString)
1017 {
1018         CountryCode invalidCountryCode = COUNTRY_INVALID;
1019         CountryCode maxCountryCode = COUNTRY_MAX;
1020
1021         if(!countryCodeString.IsEmpty())
1022         {
1023                 for (int i = 0; i < maxCountryCode; i++)
1024                 {
1025                         if (countryCodeString == CountryCodeString2LetterArray[i])
1026                         {
1027                                 return (CountryCode) i;
1028                         }
1029                 }
1030         }
1031         else
1032         {
1033                 SysLog(NID_LCL,"countryCodeString is empty string");
1034         }
1035
1036         return invalidCountryCode;
1037 }
1038
1039
1040 String
1041 Locale::LanguageCodeToString(LanguageCode languageCode)
1042 {
1043         return ((languageCode > LANGUAGE_INVALID) && (languageCode < LANGUAGE_MAX))
1044                         ? LanguageCodeString3LetterArray[languageCode]
1045                         : String();
1046 }
1047
1048
1049 String
1050 Locale::CountryCodeToString(CountryCode countryCode)
1051 {
1052         return ((countryCode > COUNTRY_INVALID) && (countryCode < COUNTRY_MAX))
1053                    ? CountryCodeString2LetterArray[countryCode]
1054                    : String();
1055 }
1056
1057
1058 String
1059 Locale::LanguageCodeToTwoLetterLanguageCodeString(LanguageCode languageCode)
1060 {
1061     return ((languageCode > LANGUAGE_INVALID) && (languageCode < LANGUAGE_MAX))
1062         ? _LocaleImpl::Get2LetterLanguageCodeString(LanguageCodeString3LetterArray[languageCode])
1063         : String();
1064 }
1065
1066
1067 LanguageCode
1068 Locale::TwoLetterLanguageCodeStringToLanguageCode(const String& languageCodeString)
1069 {
1070         int index = -1;
1071
1072         languageCodeString.IndexOf(L"-", 0, index);
1073
1074         if (languageCodeString.GetLength() == 2 || index == 2)
1075         {
1076                 std::unique_ptr<char[]> pLangStr (_StringConverter::CopyToCharArrayN(languageCodeString));
1077                 return StringToLanguageCode(_LocaleImpl::Get3LetterLanguageCodeString(pLangStr.get()));
1078         }
1079         return LANGUAGE_INVALID;
1080 }
1081
1082
1083 String
1084 Locale::CountryCodeToThreeLetterCountryCodeString(CountryCode countryCode)
1085 {
1086     return ((countryCode > COUNTRY_INVALID) && (countryCode < COUNTRY_MAX))
1087             ? _LocaleImpl::Get3LetterCountryCodeString(CountryCodeString2LetterArray[countryCode])
1088             : String();
1089 }
1090
1091
1092 CountryCode
1093 Locale::ThreeLetterCountryCodeStringToCountryCode(const String& countryCodeString)
1094 {
1095         if (countryCodeString.GetLength() == 3)
1096         {
1097                 CountryCode maxCountryCode = COUNTRY_MAX;
1098
1099                 for (int i = 0; i < maxCountryCode; i++)
1100                 {
1101                         String countryCode(_LocaleImpl::Get3LetterCountryCodeString(CountryCodeString2LetterArray[i]));
1102                         if (countryCodeString.Equals(countryCode, false))
1103                         {
1104                                 return static_cast<CountryCode> (i);
1105                         }
1106                 }
1107         }
1108
1109         return COUNTRY_INVALID;
1110 }
1111
1112
1113 };
1114 };      // Tizen::Locales