2 // Open Service Platform
3 // Copyright (c) 2012-2013 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 FUi_BidiUtils.cpp
20 * @brief This is the implementation file for the _BidiUtils class.
24 #include <FBaseSysLog.h>
25 #include <FBaseUtil.h>
26 #include <FLclLocaleManager.h>
27 #include <FSysSettingInfo.h>
28 #include "FUi_BidiUtils.h"
30 using namespace Tizen::Base;
31 using namespace Tizen::Base::Utility;
32 using namespace Tizen::Locales;
34 namespace Tizen { namespace Ui
37 _BidiUtils::_BidiUtils(void)
41 _BidiUtils::~_BidiUtils(void)
46 _BidiUtils::IsRTL(const Tizen::Base::String& text)
48 int length = text.GetLength();
49 wchar_t* pString = const_cast<wchar_t*>(text.GetPointer());
51 if (pString != null && length > 0)
53 for (int i = 0 ; i< length ; i++)
59 FriBidiChar bidiText[1] = { *pString };
60 FriBidiCharType type[1] = { 0 };
61 fribidi_get_bidi_types(bidiText, 1, type);
63 if ((type[0] & FRIBIDI_MASK_RTL) != 0)
67 else if (((type[0] & FRIBIDI_MASK_STRONG) != 0) && ((type[0] & FRIBIDI_MASK_LETTER) != 0))
76 if (IsBidiLanguage(GetDisplayLanguage()))
84 _BidiUtils::IsBidiLanguage(LanguageCode languageCode)
88 case LANGUAGE_ARA: // arabic
89 case LANGUAGE_FAS: // farsi (iran)
90 case LANGUAGE_HEB: // hebrew (israel)
91 case LANGUAGE_URD: // urdu (parkistan)
101 _BidiUtils::GetDisplayLanguage(void)
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");
109 r = Tizen::System::SettingInfo::GetValue(key, displayLanguage);
113 displayLanguage.SubString(0, 3, threeLetterLanguageCode);
114 languageCode = Locale::StringToLanguageCode(threeLetterLanguageCode);
121 _BidiUtils::GetLocaleLanguageN(void)
123 result r = E_SUCCESS;
124 String localeLanguage;
125 String key(L"http://tizen.org/setting/locale.language");
127 r = Tizen::System::SettingInfo::GetValue(key, localeLanguage);
128 SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
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.");
137 LanguageCode languageCode = LANGUAGE_INVALID;
138 CountryCode countryCode = COUNTRY_INVALID;
139 strTok.GetNextToken(language);
140 strTok.GetNextToken(country);
142 languageCode = Locale::StringToLanguageCode(language);
143 countryCode = Locale::StringToCountryCode(country);
145 Locale* pLocaleLanguage = new (std::nothrow) Locale(languageCode, countryCode);
146 SysTryReturn(NID_UI, pLocaleLanguage, null, E_OUT_OF_MEMORY, "Memory allocation failed.");
148 return pLocaleLanguage;
152 _BidiUtils::ConvertLanguageCountryCodeString(LanguageCode languageCode)
154 static const char* defaultLauguageCountryCodeArray[LANGUAGE_MAX] =
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" */
660 String languageCodeString(L"lang=");
661 String countryCodeString;
663 languageCodeString.Append(Locale::LanguageCodeToTwoLetterLanguageCodeString(languageCode));
664 const char* pCountryCode = (languageCode < LANGUAGE_MAX) ? defaultLauguageCountryCodeArray[languageCode] : "";
666 int len = strlen(pCountryCode);
673 languageCodeString.Append(L"_");
674 StringUtil::Utf8ToString(defaultLauguageCountryCodeArray[languageCode], countryCodeString);
675 languageCodeString.Append(countryCodeString);
679 Locale* pLocaleLanguage = GetLocaleLanguageN();
681 if (!pLocaleLanguage)
686 const String displayCountry = pLocaleLanguage->GetCountryCodeString();
689 StringUtil::Utf8ToString(defaultLauguageCountryCodeArray[languageCode], countries);
690 StringTokenizer strTok(countries, delim);
692 while (strTok.HasMoreTokens())
694 strTok.GetNextToken(countryCodeString);
695 if (countryCodeString == displayCountry)
700 delete pLocaleLanguage;
701 languageCodeString.Append(L"_");
702 languageCodeString.Append(countryCodeString);
705 return languageCodeString;