[dali_2.3.25] Merge branch 'devel/master'
[platform/core/uifw/dali-adaptor.git] / dali / internal / system / common / locale-utils.cpp
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 // CLASS HEADER
19 #include <dali/internal/system/common/locale-utils.h>
20
21 namespace Dali
22 {
23 namespace Internal
24 {
25 namespace Adaptor
26 {
27 namespace Locale
28 {
29 namespace
30 {
31 struct LocaleDirectionInfo
32 {
33   const char*       locale;
34   const char*       name;
35   Locale::Direction direction;
36 };
37
38 // clang-format off
39 const LocaleDirectionInfo LOCALE_DIRECTION_LOOKUP_TABLE[] =
40 {
41   { "af", "Afrikaans",          Locale::LEFT_TO_RIGHT },
42   { "am", "Amharic",            Locale::LEFT_TO_RIGHT },
43   { "ar", "Arabic",             Locale::RIGHT_TO_LEFT },
44   { "as", "Assamese",           Locale::LEFT_TO_RIGHT },
45   { "az", "Azerbaijani",        Locale::LEFT_TO_RIGHT },
46   { "be", "Belarusian",         Locale::LEFT_TO_RIGHT },
47   { "bg", "Bulgarian",          Locale::LEFT_TO_RIGHT },
48   { "bn", "Bengali",            Locale::LEFT_TO_RIGHT },
49   { "bo", "Tibetan",            Locale::LEFT_TO_RIGHT },
50   { "bs", "Bosnian",            Locale::LEFT_TO_RIGHT },
51   { "ca", "Catalan",            Locale::LEFT_TO_RIGHT },
52   { "ck", "Iraq",               Locale::RIGHT_TO_LEFT },
53   { "cs", "Czech",              Locale::LEFT_TO_RIGHT },
54   { "cy", "Welsh",              Locale::LEFT_TO_RIGHT },
55   { "da", "Danish",             Locale::LEFT_TO_RIGHT },
56   { "de", "German",             Locale::LEFT_TO_RIGHT },
57   { "dv", "Divehi",             Locale::RIGHT_TO_LEFT },
58   { "el", "Greek",              Locale::LEFT_TO_RIGHT },
59   { "en", "English",            Locale::LEFT_TO_RIGHT },
60   { "es", "Spanish",            Locale::LEFT_TO_RIGHT },
61   { "et", "Estonian",           Locale::LEFT_TO_RIGHT },
62   { "eu", "Basque",             Locale::LEFT_TO_RIGHT },
63   { "fa", "Farsi",              Locale::RIGHT_TO_LEFT },
64   { "fi", "Finnish",            Locale::LEFT_TO_RIGHT },
65   { "fo", "Faroese",            Locale::LEFT_TO_RIGHT },
66   { "fr", "French",             Locale::LEFT_TO_RIGHT },
67   { "gd", "Gaelic",             Locale::LEFT_TO_RIGHT },
68   { "gl", "Galician",           Locale::LEFT_TO_RIGHT },
69   { "gn", "Guarani",            Locale::LEFT_TO_RIGHT },
70   { "gu", "Gujarati",           Locale::LEFT_TO_RIGHT },
71   { "ha", "Hausa",              Locale::LEFT_TO_RIGHT },
72   { "he", "Hebrew",             Locale::RIGHT_TO_LEFT },
73   { "hi", "Hindi",              Locale::LEFT_TO_RIGHT },
74   { "hr", "Croatian",           Locale::LEFT_TO_RIGHT },
75   { "hu", "Hungarian",          Locale::LEFT_TO_RIGHT },
76   { "hy", "Armenian",           Locale::LEFT_TO_RIGHT },
77   { "id", "Indonesian",         Locale::LEFT_TO_RIGHT },
78   { "is", "Icelandic",          Locale::LEFT_TO_RIGHT },
79   { "it", "Italian",            Locale::LEFT_TO_RIGHT },
80   { "ja", "Japanese",           Locale::LEFT_TO_RIGHT },
81   { "ka", "Georgian",           Locale::LEFT_TO_RIGHT },
82   { "kk", "Kazakh",             Locale::LEFT_TO_RIGHT },
83   { "km", "Khmer",              Locale::LEFT_TO_RIGHT },
84   { "kn", "Kannada",            Locale::LEFT_TO_RIGHT },
85   { "ko", "Korean",             Locale::LEFT_TO_RIGHT },
86   { "ks", "Kashmiri",           Locale::LEFT_TO_RIGHT },
87   { "la", "Latin",              Locale::LEFT_TO_RIGHT },
88   { "lo", "Lao",                Locale::LEFT_TO_RIGHT },
89   { "lt", "Lithuanian",         Locale::LEFT_TO_RIGHT },
90   { "lv", "Latvian",            Locale::LEFT_TO_RIGHT },
91   { "mi", "Maori",              Locale::LEFT_TO_RIGHT },
92   { "mk", "FYRO Macedonia",     Locale::LEFT_TO_RIGHT },
93   { "ml", "Malayalam",          Locale::LEFT_TO_RIGHT },
94   { "mn", "Mongolian",          Locale::LEFT_TO_RIGHT },
95   { "mr", "Marathi",            Locale::LEFT_TO_RIGHT },
96   { "ms", "Malay",              Locale::LEFT_TO_RIGHT },
97   { "mt", "Maltese",            Locale::LEFT_TO_RIGHT },
98   { "my", "Burmese",            Locale::LEFT_TO_RIGHT },
99   { "nb", "Norwegian: Bokml",   Locale::LEFT_TO_RIGHT },
100   { "ne", "Nepali",             Locale::LEFT_TO_RIGHT },
101   { "nl", "Dutch",              Locale::LEFT_TO_RIGHT },
102   { "nn", "Norwegian: Nynorsk", Locale::LEFT_TO_RIGHT },
103   { "or", "Oriya",              Locale::LEFT_TO_RIGHT },
104   { "pa", "Punjabi",            Locale::LEFT_TO_RIGHT },
105   { "pl", "Polish",             Locale::LEFT_TO_RIGHT },
106   { "pt", "Portuguese",         Locale::LEFT_TO_RIGHT },
107   { "rm", "Raeto-Romance",      Locale::LEFT_TO_RIGHT },
108   { "ro", "Romanian",           Locale::LEFT_TO_RIGHT },
109   { "ru", "Russian",            Locale::LEFT_TO_RIGHT },
110   { "sa", "Sanskrit",           Locale::LEFT_TO_RIGHT },
111   { "sb", "Sorbian",            Locale::LEFT_TO_RIGHT },
112   { "sd", "Sindhi",             Locale::LEFT_TO_RIGHT },
113   { "si", "Sinhala",            Locale::LEFT_TO_RIGHT },
114   { "sk", "Slovak",             Locale::LEFT_TO_RIGHT },
115   { "sl", "Slovenian",          Locale::LEFT_TO_RIGHT },
116   { "so", "Somali",             Locale::LEFT_TO_RIGHT },
117   { "sq", "Albanian",           Locale::LEFT_TO_RIGHT },
118   { "sr", "Serbian",            Locale::LEFT_TO_RIGHT },
119   { "sv", "Swedish",            Locale::LEFT_TO_RIGHT },
120   { "sw", "Swahili",            Locale::LEFT_TO_RIGHT },
121   { "ta", "Tamil",              Locale::LEFT_TO_RIGHT },
122   { "te", "Telugu",             Locale::LEFT_TO_RIGHT },
123   { "tg", "Tajik",              Locale::LEFT_TO_RIGHT },
124   { "th", "Thai",               Locale::LEFT_TO_RIGHT },
125   { "tk", "Turkmen",            Locale::LEFT_TO_RIGHT },
126   { "tn", "Setsuana",           Locale::LEFT_TO_RIGHT },
127   { "tr", "Turkish",            Locale::LEFT_TO_RIGHT },
128   { "ts", "Tsonga",             Locale::LEFT_TO_RIGHT },
129   { "tt", "Tatar",              Locale::LEFT_TO_RIGHT },
130   { "uk", "Ukrainian",          Locale::LEFT_TO_RIGHT },
131   { "ur", "Urdu",               Locale::RIGHT_TO_LEFT },
132   { "uz", "Uzbek",              Locale::LEFT_TO_RIGHT },
133   { "vi", "Vietnamese",         Locale::LEFT_TO_RIGHT },
134   { "xh", "Xhosa",              Locale::LEFT_TO_RIGHT },
135   { "yi", "Yiddish",            Locale::RIGHT_TO_LEFT },
136   { "zh", "Chinese",            Locale::LEFT_TO_RIGHT },
137   { "zu", "Zulu",               Locale::LEFT_TO_RIGHT },
138
139   { NULL, NULL, Locale::LEFT_TO_RIGHT }
140 };
141 // clang-format on
142
143 } // unnamed namespace
144
145 Locale::Direction GetDirection(const std::string& locale)
146 {
147   Locale::Direction direction(Locale::LEFT_TO_RIGHT);
148
149   if(!locale.empty() && locale.size() > 2)
150   {
151     for(const LocaleDirectionInfo* iter = &LOCALE_DIRECTION_LOOKUP_TABLE[0]; iter->locale; ++iter)
152     {
153       if(!locale.compare(0, 2, iter->locale))
154       {
155         direction = iter->direction;
156         break;
157       }
158     }
159   }
160
161   return direction;
162 }
163
164 } // namespace Locale
165
166 } // namespace Adaptor
167
168 } // namespace Internal
169
170 } // namespace Dali