on 48b3df7 help sign in
unity8/plugins/Wizard/LocalePlugin.cpp
349 lines 20 kB history raw
1/*
2 * Copyright (C) 2015 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
17#include <QLocale>
18#include <QStringList>
20#include <libintl.h>
22#include "LocalePlugin.h"
25class LocalePrivate {
26public:
27 LocalePrivate() {
28 m_countryNames = QHash<QLocale::Country, QString>(
29 {{QLocale::IvoryCoast, gettext("Ivory Coast")},
30 {QLocale::Ghana, gettext("Ghana")},
31 {QLocale::Ethiopia, gettext("Ethiopia")},
32 {QLocale::Algeria, gettext("Algeria")},
33 {QLocale::Eritrea, gettext("Eritrea")},
34 {QLocale::Mali, gettext("Mali")},
35 {QLocale::CentralAfricanRepublic, gettext("Central African Republic")},
36 {QLocale::Gambia, gettext("Gambia")},
37 {QLocale::GuineaBissau, gettext("Guinea Bissau")},
38 {QLocale::Malawi, gettext("Malawi")},
39 {QLocale::CongoBrazzaville, gettext("Congo Brazzaville")},
40 {QLocale::Burundi, gettext("Burundi")},
41 {QLocale::Egypt, gettext("Egypt")},
42 {QLocale::Morocco, gettext("Morocco")},
43 {QLocale::Spain, gettext("Spain")},
44 {QLocale::Guinea, gettext("Guinea")},
45 {QLocale::Senegal, gettext("Senegal")},
46 {QLocale::Tanzania, gettext("Tanzania")},
47 {QLocale::Djibouti, gettext("Djibouti")},
48 {QLocale::Cameroon, gettext("Cameroon")},
49 {QLocale::WesternSahara, gettext("Western Sahara")},
50 {QLocale::SierraLeone, gettext("Sierra Leone")},
51 {QLocale::Botswana, gettext("Botswana")},
52 {QLocale::Zimbabwe, gettext("Zimbabwe")},
53 {QLocale::SouthAfrica, gettext("South Africa")},
54 {QLocale::SouthSudan, gettext("South Sudan")},
55 {QLocale::Uganda, gettext("Uganda")},
56 {QLocale::Sudan, gettext("Sudan")},
57 {QLocale::Rwanda, gettext("Rwanda")},
58 {QLocale::CongoKinshasa, gettext("Congo (Kinshasa)")},
59 {QLocale::Nigeria, gettext("Nigeria")},
60 {QLocale::Gabon, gettext("Gabon")},
61 {QLocale::Togo, gettext("Togo")},
62 {QLocale::Angola, gettext("Angola")},
63 {QLocale::Zambia, gettext("Zambia")},
64 {QLocale::EquatorialGuinea, gettext("Equatorial Guinea")},
65 {QLocale::Mozambique, gettext("Mozambique")},
66 {QLocale::Lesotho, gettext("Lesotho")},
67 {QLocale::Swaziland, gettext("Swaziland")},
68 {QLocale::Somalia, gettext("Somalia")},
69 {QLocale::Liberia, gettext("Liberia")},
70 {QLocale::Kenya, gettext("Kenya")},
71 {QLocale::Chad, gettext("Chad")},
72 {QLocale::Niger, gettext("Niger")},
73 {QLocale::Mauritania, gettext("Mauritania")},
74 {QLocale::BurkinaFaso, gettext("Burkina Faso")},
75 {QLocale::Benin, gettext("Benin")},
76 {QLocale::SaoTomeAndPrincipe, gettext("Sao Tome And Principe")},
77 {QLocale::Libya, gettext("Libya")},
78 {QLocale::Tunisia, gettext("Tunisia")},
79 {QLocale::Namibia, gettext("Namibia")},
80 {QLocale::UnitedStates, gettext("United States")},
81 {QLocale::Anguilla, gettext("Anguilla")},
82 {QLocale::AntiguaAndBarbuda, gettext("Antigua And Barbuda")},
83 {QLocale::Brazil, gettext("Brazil")},
84 {QLocale::Argentina, gettext("Argentina")},
85 {QLocale::Aruba, gettext("Aruba")},
86 {QLocale::Paraguay, gettext("Paraguay")},
87 {QLocale::Canada, gettext("Canada")},
88 {QLocale::Mexico, gettext("Mexico")},
89 {QLocale::Barbados, gettext("Barbados")},
90 {QLocale::Belize, gettext("Belize")},
91 {QLocale::Colombia, gettext("Colombia")},
92 {QLocale::Venezuela, gettext("Venezuela")},
93 {QLocale::FrenchGuiana, gettext("French Guiana")},
94 {QLocale::CaymanIslands, gettext("Cayman Islands")},
95 {QLocale::CostaRica, gettext("Costa Rica")},
96 {QLocale::CuraSao, gettext("Cura Sao")},
97 {QLocale::Greenland, gettext("Greenland")},
98 {QLocale::Dominica, gettext("Dominica")},
99 {QLocale::ElSalvador, gettext("El Salvador")},
100 {QLocale::TurksAndCaicosIslands, gettext("Turks And Caicos Islands")},
101 {QLocale::Grenada, gettext("Grenada")},
102 {QLocale::Guadeloupe, gettext("Guadeloupe")},
103 {QLocale::Guatemala, gettext("Guatemala")},
104 {QLocale::Ecuador, gettext("Ecuador")},
105 {QLocale::Guyana, gettext("Guyana")},
106 {QLocale::Cuba, gettext("Cuba")},
107 {QLocale::Jamaica, gettext("Jamaica")},
108 {QLocale::Bonaire, gettext("Bonaire")},
109 {QLocale::Bolivia, gettext("Bolivia")},
110 {QLocale::Peru, gettext("Peru")},
111 {QLocale::SintMaarten, gettext("Sint Maarten")},
112 {QLocale::Nicaragua, gettext("Nicaragua")},
113 {QLocale::SaintMartin, gettext("Saint Martin")},
114 {QLocale::Martinique, gettext("Martinique")},
115 {QLocale::SaintPierreAndMiquelon, gettext("Saint Pierre And Miquelon")},
116 {QLocale::Uruguay, gettext("Uruguay")},
117 {QLocale::Montserrat, gettext("Montserrat")},
118 {QLocale::Bahamas, gettext("Bahamas")},
119 {QLocale::Panama, gettext("Panama")},
120 {QLocale::Suriname, gettext("Suriname")},
121 {QLocale::Haiti, gettext("Haiti")},
122 {QLocale::TrinidadAndTobago, gettext("Trinidad And Tobago")},
123 {QLocale::PuertoRico, gettext("Puerto Rico")},
124 {QLocale::Chile, gettext("Chile")},
125 {QLocale::DominicanRepublic, gettext("Dominican Republic")},
126 {QLocale::SaintBarthelemy, gettext("Saint Barthelemy")},
127 {QLocale::SaintKittsAndNevis, gettext("Saint Kitts And Nevis")},
128 {QLocale::SaintLucia, gettext("Saint Lucia")},
129 {QLocale::UnitedStatesVirginIslands, gettext("United States Virgin Islands")},
130 {QLocale::SaintVincentAndTheGrenadines, gettext("Saint Vincent And The Grenadines")},
131 {QLocale::Honduras, gettext("Honduras")},
132 {QLocale::BritishVirginIslands, gettext("British Virgin Islands")},
133 {QLocale::Antarctica, gettext("Antarctica")},
134 {QLocale::Australia, gettext("Australia")},
135 {QLocale::SvalbardAndJanMayenIslands, gettext("Svalbard And Jan Mayen Islands")},
136 {QLocale::Yemen, gettext("Yemen")},
137 {QLocale::Kazakhstan, gettext("Kazakhstan")},
138 {QLocale::Jordan, gettext("Jordan")},
139 {QLocale::Russia, gettext("Russia")},
140 {QLocale::Turkmenistan, gettext("Turkmenistan")},
141 {QLocale::Iraq, gettext("Iraq")},
142 {QLocale::Bahrain, gettext("Bahrain")},
143 {QLocale::Azerbaijan, gettext("Azerbaijan")},
144 {QLocale::Thailand, gettext("Thailand")},
145 {QLocale::Lebanon, gettext("Lebanon")},
146 {QLocale::Kyrgyzstan, gettext("Kyrgyzstan")},
147 {QLocale::Brunei, gettext("Brunei")},
148 {QLocale::Mongolia, gettext("Mongolia")},
149 {QLocale::China, gettext("China")},
150 {QLocale::SriLanka, gettext("Sri Lanka")},
151 {QLocale::Syria, gettext("Syria")},
152 {QLocale::Bangladesh, gettext("Bangladesh")},
153 {QLocale::EastTimor, gettext("East Timor")},
154 {QLocale::UnitedArabEmirates, gettext("United Arab Emirates")},
155 {QLocale::Tajikistan, gettext("Tajikistan")},
156 {QLocale::PalestinianTerritories, gettext("Palestinian Territories")},
157 {QLocale::Vietnam, gettext("Vietnam")},
158 {QLocale::HongKong, gettext("Hong Kong")},
159 {QLocale::Indonesia, gettext("Indonesia")},
160 {QLocale::Israel, gettext("Israel")},
161 {QLocale::Afghanistan, gettext("Afghanistan")},
162 {QLocale::Pakistan, gettext("Pakistan")},
163 {QLocale::Nepal, gettext("Nepal")},
164 {QLocale::India, gettext("India")},
165 {QLocale::Malaysia, gettext("Malaysia")},
166 {QLocale::Kuwait, gettext("Kuwait")},
167 {QLocale::Macau, gettext("Macau")},
168 {QLocale::Philippines, gettext("Philippines")},
169 {QLocale::Oman, gettext("Oman")},
170 {QLocale::Cyprus, gettext("Cyprus")},
171 {QLocale::Cambodia, gettext("Cambodia")},
172 {QLocale::NorthKorea, gettext("North Korea")},
173 {QLocale::Qatar, gettext("Qatar")},
174 {QLocale::Myanmar, gettext("Myanmar")},
175 {QLocale::SaudiArabia, gettext("Saudi Arabia")},
176 {QLocale::Uzbekistan, gettext("Uzbekistan")},
177 {QLocale::SouthKorea, gettext("South Korea")},
178 {QLocale::Singapore, gettext("Singapore")},
179 {QLocale::Taiwan, gettext("Taiwan")},
180 {QLocale::Georgia, gettext("Georgia")},
181 {QLocale::Iran, gettext("Iran")},
182 {QLocale::Bhutan, gettext("Bhutan")},
183 {QLocale::Japan, gettext("Japan")},
184 {QLocale::Laos, gettext("Laos")},
185 {QLocale::Armenia, gettext("Armenia")},
186 {QLocale::Portugal, gettext("Portugal")},
187 {QLocale::Bermuda, gettext("Bermuda")},
188 {QLocale::CapeVerde, gettext("Cape Verde")},
189 {QLocale::FaroeIslands, gettext("Faroe Islands")},
190 {QLocale::Iceland, gettext("Iceland")},
191 {QLocale::SouthGeorgiaAndTheSouthSandwichIslands, gettext("South Georgia And The South Sandwich Islands")},
192 {QLocale::SaintHelena, gettext("Saint Helena")},
193 {QLocale::FalklandIslands, gettext("Falkland Islands")},
194 {QLocale::Netherlands, gettext("Netherlands")},
195 {QLocale::Andorra, gettext("Andorra")},
196 {QLocale::Greece, gettext("Greece")},
197 {QLocale::Serbia, gettext("Serbia")},
198 {QLocale::Germany, gettext("Germany")},
199 {QLocale::Slovakia, gettext("Slovakia")},
200 {QLocale::Belgium, gettext("Belgium")},
201 {QLocale::Romania, gettext("Romania")},
202 {QLocale::Hungary, gettext("Hungary")},
203 {QLocale::Moldova, gettext("Moldova")},
204 {QLocale::Denmark, gettext("Denmark")},
205 {QLocale::Ireland, gettext("Ireland")},
206 {QLocale::Gibraltar, gettext("Gibraltar")},
207 {QLocale::Guernsey, gettext("Guernsey")},
208 {QLocale::Finland, gettext("Finland")},
209 {QLocale::IsleOfMan, gettext("Isle Of Man")},
210 {QLocale::Turkey, gettext("Turkey")},
211 {QLocale::Jersey, gettext("Jersey")},
212 {QLocale::Ukraine, gettext("Ukraine")},
213 {QLocale::Slovenia, gettext("Slovenia")},
214 {QLocale::UnitedKingdom, gettext("United Kingdom")},
215 {QLocale::Luxembourg, gettext("Luxembourg")},
216 {QLocale::Malta, gettext("Malta")},
217 {QLocale::AlandIslands, gettext("Aland Islands")},
218 {QLocale::Belarus, gettext("Belarus")},
219 {QLocale::Monaco, gettext("Monaco")},
220 {QLocale::Norway, gettext("Norway")},
221 {QLocale::France, gettext("France")},
222 {QLocale::Montenegro, gettext("Montenegro")},
223 {QLocale::CzechRepublic, gettext("Czech Republic")},
224 {QLocale::Latvia, gettext("Latvia")},
225 {QLocale::Italy, gettext("Italy")},
226 {QLocale::SanMarino, gettext("San Marino")},
227 {QLocale::BosniaAndHerzegowina, gettext("Bosnia And Herzegowina")},
228 {QLocale::Macedonia, gettext("Macedonia")},
229 {QLocale::Bulgaria, gettext("Bulgaria")},
230 {QLocale::Sweden, gettext("Sweden")},
231 {QLocale::Estonia, gettext("Estonia")},
232 {QLocale::Albania, gettext("Albania")},
233 {QLocale::Liechtenstein, gettext("Liechtenstein")},
234 {QLocale::VaticanCityState, gettext("Vatican City State")},
235 {QLocale::Austria, gettext("Austria")},
236 {QLocale::Lithuania, gettext("Lithuania")},
237 {QLocale::Poland, gettext("Poland")},
238 {QLocale::Croatia, gettext("Croatia")},
239 {QLocale::Switzerland, gettext("Switzerland")},
240 {QLocale::Madagascar, gettext("Madagascar")},
241 {QLocale::BritishIndianOceanTerritory, gettext("British Indian Ocean Territory")},
242 {QLocale::ChristmasIsland, gettext("ChristmasIsland")},
243 {QLocale::CocosIslands, gettext("CocosIslands")},
244 {QLocale::Comoros, gettext("Comoros")},
245 {QLocale::FrenchSouthernTerritories, gettext("French Southern Territories")},
246 {QLocale::Seychelles, gettext("Seychelles")},
247 {QLocale::Maldives, gettext("Maldives")},
248 {QLocale::Mauritius, gettext("Mauritius")},
249 {QLocale::Mayotte, gettext("Mayotte")},
250 {QLocale::Reunion, gettext("Reunion")},
251 {QLocale::Samoa, gettext("Samoa")},
252 {QLocale::NewZealand, gettext("New Zealand")},
253 {QLocale::Micronesia, gettext("Micronesia")},
254 {QLocale::Vanuatu, gettext("Vanuatu")},
255 {QLocale::Kiribati, gettext("Kiribati")},
256 {QLocale::Tokelau, gettext("Tokelau")},
257 {QLocale::Fiji, gettext("Fiji")},
258 {QLocale::Tuvalu, gettext("Tuvalu")},
259 {QLocale::FrenchPolynesia, gettext("French Polynesia")},
260 {QLocale::SolomonIslands, gettext("Solomon Islands")},
261 {QLocale::Guam, gettext("Guam")},
262 {QLocale::UnitedStatesMinorOutlyingIslands, gettext("United States Minor Outlying Islands")},
263 {QLocale::MarshallIslands, gettext("Marshall Islands")},
264 {QLocale::NauruCountry, gettext("Nauru")},
265 {QLocale::Niue, gettext("Niue")},
266 {QLocale::NorfolkIsland, gettext("Norfolk Island")},
267 {QLocale::NewCaledonia, gettext("New Caledonia")},
268 {QLocale::AmericanSamoa, gettext("American Samoa")},
269 {QLocale::Palau, gettext("Palau")},
270 {QLocale::Pitcairn, gettext("Pitcairn")},
271 {QLocale::PapuaNewGuinea, gettext("Papua New Guinea")},
272 {QLocale::CookIslands, gettext("Cook Islands")},
273 {QLocale::NorthernMarianaIslands, gettext("Northern Mariana Islands")},
274 {QLocale::Tonga, gettext("Tonga")},
275 {QLocale::Kosovo, gettext("Kosovo")},
276 {QLocale::WallisAndFutunaIslands, gettext("Wallis And Futuna Islands")} });
277 }
279 QString countryToString(QLocale::Country c) {
280 return m_countryNames.value(c);
281 }
283private:
284 QHash<QLocale::Country, QString> m_countryNames;
285};
287Q_GLOBAL_STATIC(LocalePrivate, d)
289LocaleAttached::LocaleAttached(QObject* parent)
290 : QObject(parent)
294QJsonObject LocaleAttached::languages() const
296 QJsonObject result;
297 for (int i = QLocale::C + 1; i < QLocale::LastLanguage; ++i) {
298 QLocale loc(static_cast<QLocale::Language>(i));
299 result.insert(loc.name().split('_').first(), QLocale::languageToString(loc.language()));
300 }
302 return result;
305QJsonObject LocaleAttached::countriesForLanguage(const QString &code) const
307 QLocale tmp(code);
308 const QList<QLocale> allLocales = QLocale::matchingLocales(tmp.language(), QLocale::AnyScript, QLocale::AnyCountry);
309 QJsonObject result;
310 Q_FOREACH(const QLocale &loc, allLocales) {
311 const QString countryCode = loc.name().section('_', 1, 1);
312 //qDebug() << "Matching country:" << countryCode;
313 if (!countryCode.isEmpty()) {
314 result.insert(countryCode, d->countryToString(loc.country()));
315 }
316 }
317 return result;
320QJsonObject LocaleAttached::countries() const
322 const QList<QLocale> allLocales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry);
323 QJsonObject result;
325 Q_FOREACH(const QLocale &loc, allLocales) {
326 const QString countryCode = loc.name().section('_', 1, 1);
327 if (countryCode.length() == 2) {
328 result.insert(countryCode, d->countryToString(loc.country()));
329 }
330 }
332 return result;
335QString LocaleAttached::countryToString(QLocale::Country c)
337 return d->countryToString(c);
341LocalePlugin::LocalePlugin(QObject* parent)
342 : QObject(parent)
346LocaleAttached* LocalePlugin::qmlAttachedProperties(QObject* parent)
348 return new LocaleAttached(parent);