Changed indicator bg color.
[platform/framework/native/uifw.git] / src / ui / FUi_BidiUtils.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 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                FUi_BidiUtils.cpp
20  * @brief               This is the implementation file for the _BidiUtils class.
21  */
22
23 #include <fribidi.h>
24 #include <FBaseSysLog.h>
25 #include <FBaseUtil.h>
26 #include <FLclLocaleManager.h>
27 #include <FSysSettingInfo.h>
28 #include "FUi_BidiUtils.h"
29
30 using namespace Tizen::Base;
31 using namespace Tizen::Base::Utility;
32 using namespace Tizen::Locales;
33
34 namespace Tizen { namespace Ui
35 {
36
37 _BidiUtils::_BidiUtils(void)
38 {
39 }
40
41 _BidiUtils::~_BidiUtils(void)
42 {
43 }
44
45 bool
46 _BidiUtils::IsRTL(const Tizen::Base::String& text)
47 {
48         int length = text.GetLength();
49         wchar_t* pString = const_cast<wchar_t*>(text.GetPointer());
50
51         if (pString != null && length > 0)
52         {
53                 for (int i = 0 ; i< length ; i++)
54                 {
55                         if(*pString == null)
56                         {
57                                 break;
58                         }
59                         FriBidiChar bidiText[1] = { *pString };
60                         FriBidiCharType type[1] = { 0 };
61                         fribidi_get_bidi_types(bidiText, 1, type);
62
63                         if ((type[0] & FRIBIDI_MASK_RTL) != 0)
64                         {
65                                 return true;
66                         }
67                         else if (((type[0] & FRIBIDI_MASK_STRONG) != 0) && ((type[0] & FRIBIDI_MASK_LETTER) != 0))
68                         {
69                                 return false;
70                         }
71
72                         pString++;
73                 }
74         }
75
76         if (IsBidiLanguage(GetDisplayLanguage()))
77         {
78                 return true;
79         }
80         return false;
81 }
82
83 bool
84 _BidiUtils::IsBidiLanguage(LanguageCode languageCode)
85 {
86         switch (languageCode)
87         {
88         case LANGUAGE_ARA: // arabic
89         case LANGUAGE_FAS: // farsi (iran)
90         case LANGUAGE_HEB: // hebrew (israel)
91         case LANGUAGE_URD: // urdu (parkistan)
92                 return true;
93         default:
94                 break;
95         }
96
97         return false;
98 }
99
100 LanguageCode
101 _BidiUtils::GetDisplayLanguage(void)
102 {
103         result r = E_SUCCESS;
104         LanguageCode languageCode = LANGUAGE_INVALID;
105         String displayLanguage;
106         String threeLetterLanguageCode;
107         String key(L"http://tizen.org/setting/locale.language");
108
109         r = Tizen::System::SettingInfo::GetValue(key, displayLanguage);
110
111         if (r == E_SUCCESS)
112         {
113                 displayLanguage.SubString(0, 3, threeLetterLanguageCode);
114                 languageCode = Locale::StringToLanguageCode(threeLetterLanguageCode);
115         }
116
117         return languageCode;
118 }
119
120 Locale*
121 _BidiUtils::GetLocaleLanguageN(void)
122 {
123         result r = E_SUCCESS;
124         String localeLanguage;
125         String key(L"http://tizen.org/setting/locale.language");
126
127         r = Tizen::System::SettingInfo::GetValue(key, localeLanguage);
128         SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
129
130         String delim(L"_");
131         StringTokenizer strTok(localeLanguage, delim);
132         int count = strTok.GetTokenCount();     // count == 2
133         SysTryReturn(NID_UI, count == 2, null, E_SYSTEM, "The locale is invalid.");
134
135         String language;
136         String country;
137         LanguageCode languageCode = LANGUAGE_INVALID;
138         CountryCode countryCode = COUNTRY_INVALID;
139         strTok.GetNextToken(language);
140         strTok.GetNextToken(country);
141
142         languageCode = Locale::StringToLanguageCode(language);
143         countryCode = Locale::StringToCountryCode(country);
144
145         Locale* pLocaleLanguage = new (std::nothrow) Locale(languageCode, countryCode);
146         SysTryReturn(NID_UI, pLocaleLanguage, null, E_OUT_OF_MEMORY, "Memory allocation failed.");
147
148     return pLocaleLanguage;
149 }
150
151 String
152 _BidiUtils::ConvertLanguageCountryCodeString(LanguageCode languageCode)
153 {
154 static const char* defaultLauguageCountryCodeArray[LANGUAGE_MAX] =
155 {
156         "", //"aar", /**< "Afar" */
157         "", //"abk", /**< "Abkhazian" */
158         "", //"ace", /**< "Achinese" */
159         "", //"ach", /**< "Acoli" */
160         "", //"ada", /**< "Adangme" */
161         "", //"ady", /**< "Adyghe; Adygei" */
162         "", //"afa", /**< "Afro-Asiatic languages" */
163         "", //"afh", /**< "Afrihili" */
164         "", //"afr", /**< "Afrikaans" */
165         "", //"ain", /**< "Ainu" */
166         "", //"aka", /**< "Akan" */
167         "", //"akk", /**< "Akkadian" */
168         "AL", //"sqi", /**< "Albanian" */
169         "", //"ale", /**< "Aleut" */
170         "", //"alg", /**< "Algonquian languages" */
171         "", //"alt", /**< "Southern Altai" */
172         "", //"amh", /**< "Amharic" */
173         "", //"ang", /**< "English, Old (ca.450-1100)" */
174         "", //"anp", /**< "Angika" */
175         "", //"apa", /**< "Apache languages" */
176         "AE", //"ara", /**< "Arabic" */
177         "", //"arc", /**< "Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE)" */
178         "", //"arg", /**< "Aragonese" */
179         "", //"hye", /**< "Armenian" */
180         "", //"arn", /**< "Mapudungun; Mapuche" */
181         "", //"arp", /**< "Arapaho" */
182         "", //"art", /**< "Artificial languages" */
183         "", //"arw", /**< "Arawak" */
184         "IN", //"asm", /**< "Assamese" */
185         "", //"ast", /**< "Asturian; Bable; Leonese; Asturleonese" */
186         "", //"ath", /**< "Athapascan languages" */
187         "", //"aus", /**< "Australian languages" */
188         "", //"ava", /**< "Avaric" */
189         "", //"ave", /**< "Avestan" */
190         "", //"awa", /**< "Awadhi" */
191         "", //"aym", /**< "Aymara" */
192         "AZ", //"aze", /**< "Azerbaijani" */
193         "AZ", //"aze", /**< Azerbaijani (Arabic) */
194         "AZ", //"aze", /**< Azerbaijani (Cyrillic) */
195         "AZ", //"aze", /**< Azerbaijani (Latin) */
196         "", //"bad", /**< "Banda languages" */
197         "", //"bai", /**< "Bamileke languages" */
198         "", //"bak", /**< "Bashkir" */
199         "", //"bal", /**< "Baluchi" */
200         "", //"bam", /**< "Bambara" */
201         "", //"ban", /**< "Balinese" */
202         "ES", //"eus", /**< "Basque" */
203         "", //"bas", /**< "Basa" */
204         "", //"bat", /**< "Baltic languages" */
205         "", //"bej", /**< "Beja; Bedawiyet" */
206         "", //"bel", /**< "Belarusian" */
207         "", //"bem", /**< "Bemba" */
208         "IN", //"ben", /**< "Bengali" */
209         "", //"ber", /**< "Berber languages" */
210         "", //"bho", /**< "Bhojpuri" */
211         "", //"bih", /**< "Bihari" */
212         "", //"bik", /**< "Bikol" */
213         "", //"bin", /**< "Bini; Edo" */
214         "", //"bis", /**< "Bislama" */
215         "", //"bla", /**< "Siksika" */
216         "", //"bnt", /**< "Bantu (Other)" */
217         "", //"bos", /**< "Bosnian" */
218         "", //"bra", /**< "Braj" */
219         "", //"bre", /**< "Breton" */
220         "", //"btk", /**< "Batak languages" */
221         "", //"bua", /**< "Buriat" */
222         "", //"bug", /**< "Buginese" */
223         "BG", //"bul", /**< "Bulgarian" */
224         "", //"mya", /**< "Burmese" */
225         "", //"byn", /**< "Blin; Bilin" */
226         "", //"cad", /**< "Caddo" */
227         "", //"cai", /**< "Central American Indian languages" */
228         "", //"car", /**< "Galibi Carib" */
229         "ES", //"cat", /**< "Catalan; Valencian" */
230         "", //"cau", /**< "Caucasian languages" */
231         "", //"ceb", /**< "Cebuano" */
232         "", //"cel", /**< "Celtic languages" */
233         "", //"cha", /**< "Chamorro" */
234         "", //"chb", /**< "Chibcha" */
235         "", //"che", /**< "Chechen" */
236         "", //"chg", /**< "Chagatai" */
237         "CN,SG,HK,TW,CN", //"zho", /**< "Chinese" */
238         "SG", //"zho-hans", /**< "Chinese (Simplified)" */
239         "HK,TW,HK", //"zho-hant", /**< "Chinese (Traditional)" */
240         "", //"chk", /**< "Chuukese" */
241         "", //"chm", /**< "Mari" */
242         "", //"chn", /**< "Chinook jargon" */
243         "", //"cho", /**< "Choctaw" */
244         "", //"chp", /**< "Chipewyan; Dene Suline" */
245         "", //"chr", /**< "Cherokee" */
246         "", //"chu", /**< "Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic" */
247         "", //"chv", /**< "Chuvash" */
248         "", //"chy", /**< "Cheyenne" */
249         "", //"cmc", /**< "Chamic languages" */
250         "", //"cop", /**< "Coptic" */
251         "", //"cor", /**< "Cornish" */
252         "", //"cos", /**< "Corsican" */
253         "", //"cpe", /**< "Creoles and pidgins, English based" */
254         "", //"cpf", /**< "Creoles and pidgins, French-based " */
255         "", //"cpp", /**< "Creoles and pidgins, Portuguese-based " */
256         "", //"cre", /**< "Cree" */
257         "TR", //"crh", /**< "Crimean Tatar; Crimean Turkish" */
258         "", //"crp", /**< "Creoles and pidgins " */
259         "", //"csb", /**< "Kashubian" */
260         "", //"cus", /**< "Cushitic languages" */
261         "CZ", //"ces", /**< "Czech" */
262         "", //"dak", /**< "Dakota" */
263         "DK", //"dan", /**< "Danish" */
264         "", //"dar", /**< "Dargwa" */
265         "", //"day", /**< "Land Dayak languages" */
266         "", //"del", /**< "Delaware" */
267         "", //"den", /**< "Slave (Athapascan)" */
268         "", //"dgr", /**< "Dogrib" */
269         "", //"din", /**< "Dinka" */
270         "", //"div", /**< "Divehi; Dhivehi; Maldivian" */
271         "", //"doi", /**< "Dogri" */
272         "", //"dra", /**< "Dravidian languages" */
273         "", //"dsb", /**< "Lower Sorbian" */
274         "", //"dua", /**< "Duala" */
275         "", //"dum", /**< "Dutch, Middle (ca.1050-1350)" */
276         "NL", //"nld", /**< "Dutch; Flemish" */
277         "", //"dyu", /**< "Dyula" */
278         "", //"dzo", /**< "Dzongkha" */
279         "", //"efi", /**< "Efik" */
280         "", //"egy", /**< "Egyptian (Ancient)" */
281         "", //"eka", /**< "Ekajuk" */
282         "", //"elx", /**< "Elamite" */
283         "GB,US,AU,GB", //"eng", /**< "English" */
284         "", //"enm", /**< "English, Middle (1100-1500)" */
285         "", //"epo", /**< "Esperanto" */
286         "EE", //"est", /**< "Estonian" */
287         "", //"ewe", /**< "Ewe" */
288         "", //"ewo", /**< "Ewondo" */
289         "", //"fan", /**< "Fang" */
290         "", //"fao", /**< "Faroese" */
291         "", //"fat", /**< "Fanti" */
292         "", //"fij", /**< "Fijian" */
293         "", //"fil", /**< "Filipino; Pilipino" */
294         "FI", //"fin", /**< "Finnish" */
295         "", //"fiu", /**< "Finno-Ugrian languages" */
296         "", //"fon", /**< "Fon" */
297         "FR,CA,FR", //"fra", /**< "French" */
298         "FR", //"frm", /**< "French, Middle (ca.1400-1600)" */
299         "FR", //"fro", /**< "French, Old (842-ca.1400)" */
300         "", //"frr", /**< "Northern Frisian" */
301         "", //"frs", /**< "Eastern Frisian" */
302         "", //"fry", /**< "Western Frisian" */
303         "", //"ful", /**< "Fulah" */
304         "", //"fur", /**< "Friulian" */
305         "", //"gaa", /**< "Ga" */
306         "", //"gay", /**< "Gayo" */
307         "", //"gba", /**< "Gbaya" */
308         "DE", //"gem", /**< "Germanic languages" */
309         "GE", //"kat", /**< "Georgian" */
310         "DE", //"deu", /**< "German" */
311         "", //"gez", /**< "Geez" */
312         "", //"gil", /**< "Gilbertese" */
313         "", //"gla", /**< "Gaelic; Scottish Gaelic" */
314         "IE", //"gle", /**< "Irish" */
315         "ES", //"glg", /**< "Galician" */
316         "", //"glv", /**< "Manx" */
317         "DE", //"gmh", /**< "German, Middle High (ca.1050-1500)" */
318         "DE", //"goh", /**< "German, Old High (ca.750-1050)" */
319         "", //"gon", /**< "Gondi" */
320         "", //"gor", /**< "Gorontalo" */
321         "", //"got", /**< "Gothic" */
322         "", //"grb", /**< "Grebo" */
323         "GR", //"grc", /**< "Greek, Ancient (to 1453)" */
324         "GR", //"ell", /**< "Greek, Modern (1453-)" */
325         "", //"grn", /**< "Guarani" */
326         "CH", //"gsw", /**< "Swiss German; Alemannic; Alsatian" */
327         "IN", //"guj", /**< "Gujarati" */
328         "", //"gwi", /**< "Gwich'in" */
329         "", //"hai", /**< "Haida" */
330         "", //"hat", /**< "Haitian; Haitian Creole" */
331         "", //"hau", /**< "Hausa" */
332         "", //"hau-latn", /**< "Hausa (Latin)" */
333         "US", //"haw", /**< "Hawaiian" */
334         "IL", //"heb", /**< "Hebrew" */
335         "", //"her", /**< "Herero" */
336         "", //"hil", /**< "Hiligaynon" */
337         "", //"him", /**< "Himachali" */
338         "IN", //"hin", /**< "Hindi" */
339         "", //"hit", /**< "Hittite" */
340         "", //"hmn", /**< "Hmong" */
341         "", //"hmo", /**< "Hiri Motu" */
342         "HR", //"hrv", /**< "Croatian" */
343         "", //"hsb", /**< "Upper Sorbian" */
344         "HU", //"hun", /**< "Hungarian" */
345         "", //"hup", /**< "Hupa" */
346         "", //"iba", /**< "Iban" */
347         "", //"ibo", /**< "Igbo" */
348         "IS", //"isl", /**< "Icelandic" */
349         "", //"ido", /**< "Ido" */
350         "", //"iii", /**< "Sichuan Yi; Nuosu" */
351         "", //"ijo", /**< "Ijo languages" */
352         "", //"iku", /**< "Inuktitut" */
353         "", //"ile", /**< "Interlingue; Occidental" */
354         "", //"ilo", /**< "Iloko" */
355         "", //"ina", /**< "Interlingua (International Auxiliary Language Association)" */
356         "", //"inc", /**< "Indic languages" */
357         "ID", //"ind", /**< "Indonesian" */
358         "", //"ine", /**< "Indo-European languages" */
359         "", //"inh", /**< "Ingush" */
360         "", //"ipk", /**< "Inupiaq" */
361         "", //"ira", /**< "Iranian languages" */
362         "", //"iro", /**< "Iroquoian languages" */
363         "IT", //"ita", /**< "Italian" */
364         "", //"jav", /**< "Javanese" */
365         "", //"jbo", /**< "Lojban" */
366         "JP", //"jpn", /**< "Japanese" */
367         "", //"jpr", /**< "Judeo-Persian" */
368         "", //"jrb", /**< "Judeo-Arabic" */
369         "", //"kaa", /**< "Kara-Kalpak" */
370         "", //"kab", /**< "Kabyle" */
371         "", //"kac", /**< "Kachin; Jingpho" */
372         "", //"kal", /**< "Kalaallisut; Greenlandic" */
373         "", //"kam", /**< "Kamba" */
374         "IN", //"kan", /**< "Kannada" */
375         "", //"kar", /**< "Karen languages" */
376         "", //"kas", /**< "Kashmiri" */
377         "", //"kau", /**< "Kanuri" */
378         "", //"kaw", /**< "Kawi" */
379         "KZ", //"kaz", /**< "Kazakh" */
380         "KZ", //"kaz-cyrl", /**< "Kazakh (Cyrillic)" */
381         "", //"kbd", /**< "Kabardian" */
382         "", //"kha", /**< "Khasi" */
383         "", //"khi", /**< "Khoisan languages" */
384         "", //"khm", /**< "Central Khmer" */
385         "", //"kho", /**< "Khotanese; Sakan" */
386         "", //"kik", /**< "Kikuyu; Gikuyu" */
387         "", //"kin", /**< "Kinyarwanda" */
388         "", //"kir", /**< "Kirghiz; Kyrgyz" */
389         "", //"kmb", /**< "Kimbundu" */
390         "", //"kok", /**< "Konkani" */
391         "", //"kom", /**< "Komi" */
392         "", //"kon", /**< "Kongo" */
393         "KR", //"kor", /**< "Korean" */
394         "", //"kos", /**< "Kosraean" */
395         "", //"kpe", /**< "Kpelle" */
396         "", //"krc", /**< "Karachay-Balkar" */
397         "", //"krl", /**< "Karelian" */
398         "", //"kro", /**< "Kru languages" */
399         "", //"kru", /**< "Kurukh" */
400         "", //"kua", /**< "Kuanyama; Kwanyama" */
401         "", //"kum", /**< "Kumyk" */
402         "", //"kur", /**< "Kurdish" */
403         "", //"kut", /**< "Kutenai" */
404         "", //"lad", /**< "Ladino" */
405         "", //"lah", /**< "Lahnda" */
406         "", //"lam", /**< "Lamba" */
407         "", //"lao", /**< "Lao" */
408         "", //"lat", /**< "Latin" */
409         "LV", //"lav", /**< "Latvian" */
410         "", //"lez", /**< "Lezghian" */
411         "", //"lim", /**< "Limburgan; Limburger; Limburgish" */
412         "", //"lin", /**< "Lingala" */
413         "LT", //"lit", /**< "Lithuanian" */
414         "", //"lol", /**< "Mongo" */
415         "", //"loz", /**< "Lozi" */
416         "", //"ltz", /**< "Luxembourgish; Letzeburgesch" */
417         "", //"lua", /**< "Luba-Lulua" */
418         "", //"lub", /**< "Luba-Katanga" */
419         "", //"lug", /**< "Ganda" */
420         "", //"lui", /**< "Luiseno" */
421         "", //"lun", /**< "Lunda" */
422         "", //"luo", /**< "Luo (Kenya and Tanzania)" */
423         "", //"lus", /**< "Lushai" */
424         "MK", //"mkd", /**< "Macedonian" */
425         "", //"mad", /**< "Madurese" */
426         "", //"mag", /**< "Magahi" */
427         "", //"mah", /**< "Marshallese" */
428         "", //"mai", /**< "Maithili" */
429         "", //"mak", /**< "Makasar" */
430         "IN", //"mal", /**< "Malayalam" */
431         "", //"man", /**< "Mandingo" */
432         "", //"mri", /**< "Maori" */
433         "", //"map", /**< "Austronesian languages" */
434         "IN", //"mar", /**< "Marathi" */
435         "", //"mas", /**< "Masai" */
436         "MY", //"msa", /**< "Malay" */
437         "", //"mdf", /**< "Moksha" */
438         "", //"mdr", /**< "Mandar" */
439         "", //"men", /**< "Mende" */
440         "IE", //"mga", /**< "Irish, Middle (900-1200)" */
441         "", //"mic", /**< "Mi'kmaq; Micmac" */
442         "", //"min", /**< "Minangkabau" */
443         "", //"mis", /**< "Uncoded languages" */
444         "", //"mkh", /**< "Mon-Khmer languages" */
445         "", //"mlg", /**< "Malagasy" */
446         "", //"mlt", /**< "Maltese" */
447         "", //"mnc", /**< "Manchu" */
448         "", //"mni", /**< "Manipuri" */
449         "", //"mno", /**< "Manobo languages" */
450         "", //"moh", /**< "Mohawk" */
451         "", //"mon", /**< "Mongolian" */
452         "", //"mos", /**< "Mossi" */
453         "", //"mul", /**< "Multiple languages" */
454         "", //"mun", /**< "Munda languages" */
455         "", //"mus", /**< "Creek" */
456         "", //"mwl", /**< "Mirandese" */
457         "", //"mwr", /**< "Marwari" */
458         "", //"myn", /**< "Mayan languages" */
459         "", //"myv", /**< "Erzya" */
460         "", //"nah", /**< "Nahuatl languages" */
461         "US", //"nai", /**< "North American Indian languages" */
462         "", //"nap", /**< "Neapolitan" */
463         "", //"nau", /**< "Nauru" */
464         "", //"nav", /**< "Navajo; Navaho" */
465         "", //"nbl", /**< "Ndebele, South; South Ndebele" */
466         "", //"nde", /**< "Ndebele, North; North Ndebele" */
467         "", //"ndo", /**< "Ndonga" */
468         "DE", //"nds", /**< "Low German; Low Saxon; German, Low; Saxon, Low" */
469         "IN", //"nep", /**< "Nepali" */
470         "", //"new", /**< "Nepal Bhasa; Newari" */
471         "", //"nia", /**< "Nias" */
472         "", //"nic", /**< "Niger-Kordofanian languages" */
473         "", //"niu", /**< "Niuean" */
474         "", //"nno", /**< "Norwegian Nynorsk; Nynorsk, Norwegian" */
475         "", //"nob", /**< "Bokmal, Norwegian; Norwegian Bokmal" */
476         "", //"nog", /**< "Nogai" */
477         "", //"non", /**< "Norse, Old" */
478         "NO", //"nor", /**< "Norwegian" */
479         "", //"nqo", /**< "N'Ko" */
480         "", //"nso", /**< "Pedi; Sepedi; Northern Sotho" */
481         "", //"nub", /**< "Nubian languages" */
482         "", //"nwc", /**< "Classical Newari; Old Newari; Classical Nepal Bhasa" */
483         "", //"nya", /**< "Chichewa; Chewa; Nyanja" */
484         "", //"nym", /**< "Nyamwezi" */
485         "", //"nyn", /**< "Nyankole" */
486         "", //"nyo", /**< "Nyoro" */
487         "", //"nzi", /**< "Nzima" */
488         "", //"oci", /**< "Occitan (post 1500); Provencal" */
489         "", //"oji", /**< "Ojibwa" */
490         "IN", //"ori", /**< "Oriya" */
491         "", //"orm", /**< "Oromo" */
492         "", //"osa", /**< "Osage" */
493         "", //"oss", /**< "Ossetian; Ossetic" */
494         "TR", //"ota", /**< "Turkish, Ottoman (1500-1928)" */
495         "", //"oto", /**< "Otomian languages" */
496         "", //"paa", /**< "Papuan languages" */
497         "", //"pag", /**< "Pangasinan" */
498         "", //"pal", /**< "Pahlavi" */
499         "", //"pam", /**< "Pampanga; Kapampangan" */
500         "IN", //"pan", /**< "Panjabi; Punjabi" */
501         "IN", //"pan-arab", /**< "Panjabi; Punjabi (Arabic)" */
502         "IN", //"pan-guru", /**< "Panjabi; Punjabi (Gurmukhi)" */
503         "", //"pap", /**< "Papiamento" */
504         "", //"pau", /**< "Palauan" */
505         "IR", //"peo", /**< "Persian, Old (ca.600-400 B.C.)" */
506         "IR", //"fas", /**< "Persian" */
507         "PH", //"phi", /**< "Philippine languages" */
508         "", //"phn", /**< "Phoenician" */
509         "", //"pli", /**< "Pali" */
510         "PL", //"pol", /**< "Polish" */
511         "", //"pon", /**< "Pohnpeian" */
512         "PT,BR,PT", //"por", /**< "Portuguese" */
513         "", //"pra", /**< "Prakrit languages" */
514         "", //"pro", /**< "Provencal, Old (to 1500)" */
515         "", //"pus", /**< "Pushto; Pashto" */
516         "", //"qaa-qtz", /**< "Reserved for local use" */
517         "", //"que", /**< "Quechua" */
518         "", //"raj", /**< "Rajasthani" */
519         "", //"rap", /**< "Rapanui" */
520         "", //"rar", /**< "Rarotongan; Cook Islands Maori" */
521         "", //"roa", /**< "Romance languages" */
522         "", //"roh", /**< "Romansh" */
523         "", //"rom", /**< "Romany" */
524         "RO", //"ron", /**< "Romanian; Moldavian; Moldovan" */
525         "", //"run", /**< "Rundi" */
526         "", //"rup", /**< "Aromanian; Arumanian; Macedo-Romanian" */
527         "RU", //"rus", /**< "Russian" */
528         "", //"sad", /**< "Sandawe" */
529         "", //"sag", /**< "Sango" */
530         "", //"sah", /**< "Yakut" */
531         "", //"sai", /**< "South American Indian (Other)" */
532         "", //"sal", /**< "Salishan languages" */
533         "", //"sam", /**< "Samaritan Aramaic" */
534         "", //"san", /**< "Sanskrit" */
535         "", //"sas", /**< "Sasak" */
536         "", //"sat", /**< "Santali" */
537         "", //"scn", /**< "Sicilian" */
538         "", //"sco", /**< "Scots" */
539         "", //"sel", /**< "Selkup" */
540         "", //"sem", /**< "Semitic languages" */
541         "IE", //"sga", /**< "Irish, Old (to 900)" */
542         "", //"sgn", /**< "Sign Languages" */
543         "", //"shn", /**< "Shan" */
544         "", //"sid", /**< "Sidamo" */
545         "LK", //"sin", /**< "Sinhala; Sinhalese" */
546         "", //"sio", /**< "Siouan languages" */
547         "", //"sit", /**< "Sino-Tibetan languages" */
548         "", //"sla", /**< "Slavic languages" */
549         "SK", //"slk", /**< "Slovak" */
550         "SI", //"slv", /**< "Slovenian" */
551         "", //"sma", /**< "Southern Sami" */
552         "", //"sme", /**< "Northern Sami" */
553         "", //"smi", /**< "Sami languages" */
554         "", //"smj", /**< "Lule Sami" */
555         "", //"smn", /**< "Inari Sami" */
556         "", //"smo", /**< "Samoan" */
557         "", //"sms", /**< "Skolt Sami" */
558         "", //"sna", /**< "Shona" */
559         "", //"snd", /**< "Sindhi" */
560         "", //"snk", /**< "Soninke" */
561         "", //"sog", /**< "Sogdian" */
562         "", //"som", /**< "Somali" */
563         "", //"son", /**< "Songhai languages" */
564         "", //"sot", /**< "Sotho, Southern" */
565         "ES,US,ES", //"spa", /**< "Spanish; Castilian" */
566         "", //"srd", /**< "Sardinian" */
567         "", //"srn", /**< "Sranan Tongo" */
568         "RS", //"srp", /**< "Serbian" */
569         "RS", //"srp-cyrl", /**< "Serbian (Cyrillic)" */
570         "RS", //"srp-latn", /**< "Serbian (Latin)" */
571         "", //"srr", /**< "Serer" */
572         "", //"ssa", /**< "Nilo-Saharan languages" */
573         "", //"ssw", /**< "Swati" */
574         "", //"suk", /**< "Sukuma" */
575         "", //"sun", /**< "Sundanese" */
576         "", //"sus", /**< "Susu" */
577         "", //"sux", /**< "Sumerian" */
578         "", //"swa", /**< "Swahili" */
579         "SE", //"swe", /**< "Swedish" */
580         "", //"syc", /**< "Classical Syriac" */
581         "", //"syr", /**< "Syriac" */
582         "", //"tah", /**< "Tahitian" */
583         "", //"tai", /**< "Tai languages" */
584         "IN", //"tam", /**< "Tamil" */
585         "", //"tat", /**< "Tatar" */
586         "IN", //"tel", /**< "Telugu" */
587         "", //"tem", /**< "Timne" */
588         "", //"ter", /**< "Tereno" */
589         "", //"tet", /**< "Tetum" */
590         "", //"tgk", /**< "Tajik" */
591         "IN", //"tgl", /**< "Tagalog" */
592         "TH", //"tha", /**< "Thai" */
593         "", //"bod", /**< "Tibetan" */
594         "", //"tig", /**< "Tigre" */
595         "", //"tir", /**< "Tigrinya" */
596         "", //"tiv", /**< "Tiv" */
597         "", //"tkl", /**< "Tokelau" */
598         "", //"tlh", /**< "Klingon; tlhIngan-Hol" */
599         "", //"tli", /**< "Tlingit" */
600         "", //"tmh", /**< "Tamashek" */
601         "", //"tog", /**< "Tonga (Nyasa)" */
602         "", //"ton", /**< "Tonga (Tonga Islands)" */
603         "", //"tpi", /**< "Tok Pisin" */
604         "", //"tsi", /**< "Tsimshian" */
605         "", //"tsn", /**< "Tswana" */
606         "", //"tso", /**< "Tsonga" */
607         "", //"tuk", /**< "Turkmen" */
608         "", //"tuk-cyrl", /**< "Turkmen (Cyrillic)" */
609         "", //"tuk-latn", /**< "Turkmen (Latin)" */
610         "", //"tum", /**< "Tumbuka" */
611         "", //"tup", /**< "Tupi languages" */
612         "TR", //"tur", /**< "Turkish" */
613         "", //"tut", /**< "Altaic languages" */
614         "", //"tvl", /**< "Tuvalu" */
615         "", //"twi", /**< "Twi" */
616         "", //"tyv", /**< "Tuvinian" */
617         "", //"udm", /**< "Udmurt" */
618         "", //"uga", /**< "Ugaritic" */
619         "", //"uig", /**< "Uighur; Uyghur" */
620         "UA", //"ukr", /**< "Ukrainian" */
621         "", //"umb", /**< "Umbundu" */
622         "", //"und", /**< "Undetermined" */
623         "PK", //"urd", /**< "Urdu" */
624         "UZ", //"uzb", /**< "Uzbek" */
625         "UZ", //"uzb-arabic", /**< Uzbek (Arabic)  */
626         "UZ", //"uzb-cyrl", /**< "Uzbek (Cyrillic)" */
627         "UZ", //"uzb-latn", /**< "Uzbek (Latin)" */
628         "", //"vai", /**< "Vai" */
629         "", //"ven", /**< "Venda" */
630         "VN", //"vie", /**< "Vietnamese" */
631         "", //"vls", /**< "Vlaams; Flemish" */
632         "", //"vol", /**< "Volapuk" */
633         "", //"vot", /**< "Votic" */
634         "", //"wak", /**< "Wakashan languages" */
635         "", //"wal", /**< "Walamo" */
636         "", //"war", /**< "Waray" */
637         "", //"was", /**< "Washo" */
638         "GB", //"cym", /**< "Welsh" */
639         "", //"wen", /**< "Sorbian languages" */
640         "", //"wln", /**< "Walloon" */
641         "", //"wol", /**< "Wolof" */
642         "", //"xal", /**< "Kalmyk; Oirat" */
643         "", //"xho", /**< "Xhosa" */
644         "", //"yao", /**< "Yao" */
645         "", //"yap", /**< "Yapese" */
646         "", //"yid", /**< "Yiddish" */
647         "", //"yor", /**< "Yoruba" */
648         "", //"ypk", /**< "Yupik languages" */
649         "", //"zap", /**< "Zapotec" */
650         "", //"zbl", /**< "Blissymbols; Blissymbolics; Bliss" */
651         "", //"zen", /**< "Zenaga" */
652         "", //"zha", /**< "Zhuang; Chuang" */
653         "", //"znd", /**< "Zande languages" */
654         "", //"zul", /**< "Zulu" */
655         "", //"zun", /**< "Zuni" */
656         "", //"zxx", /**< "No linguistic content; Not applicable" */
657         "", //"zza", /**< "Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki" */
658 };
659
660         String languageCodeString(L"lang=");
661         String countryCodeString;
662
663         languageCodeString.Append(Locale::LanguageCodeToTwoLetterLanguageCodeString(languageCode));
664         const char* pCountryCode = (languageCode < LANGUAGE_MAX) ? defaultLauguageCountryCodeArray[languageCode] : "";
665
666         int len = strlen(pCountryCode);
667         if (len == 0)
668         {
669                 return String(L"");
670         }
671         if (len == 2)
672         {
673                 languageCodeString.Append(L"_");
674                 StringUtil::Utf8ToString(defaultLauguageCountryCodeArray[languageCode], countryCodeString);
675                 languageCodeString.Append(countryCodeString);
676         }
677         else
678         {
679                 Locale* pLocaleLanguage = GetLocaleLanguageN();
680
681                 if (!pLocaleLanguage)
682                 {
683                         return String(L"");
684                 }
685
686                 const String displayCountry = pLocaleLanguage->GetCountryCodeString();
687                 String delim(L",");
688                 String countries;
689                 StringUtil::Utf8ToString(defaultLauguageCountryCodeArray[languageCode], countries);
690                 StringTokenizer strTok(countries, delim);
691
692                 while (strTok.HasMoreTokens())
693                 {
694                         strTok.GetNextToken(countryCodeString);
695                         if (countryCodeString == displayCountry)
696                         {
697                             break;
698                         }
699                 }
700                 delete pLocaleLanguage;
701                 languageCodeString.Append(L"_");
702                 languageCodeString.Append(countryCodeString);
703         }
704
705         return languageCodeString;
706 }
707
708 }} // Tizen::Ui