Vidalia
0.2.17
|
00001 /* 00002 ** This file is part of Vidalia, and is subject to the license terms in the 00003 ** LICENSE file, found in the top level directory of this distribution. If you 00004 ** did not receive the LICENSE file with this file, you may obtain it from the 00005 ** Vidalia source package distributed by the Vidalia Project at 00006 ** http://www.torproject.org/projects/vidalia.html. No part of Vidalia, 00007 ** including this file, may be copied, modified, propagated, or distributed 00008 ** except according to the terms described in the LICENSE file. 00009 */ 00010 00011 /* 00012 ** \file CountryInfo.cpp 00013 ** \brief Provides a method to look up a localized country name given its 00014 ** ISO 3166 2-letter country code. 00015 */ 00016 00017 #include "CountryInfo.h" 00018 #include "Vidalia.h" 00019 00020 #include <QMap> 00021 #include <QHash> 00022 #include <QFile> 00023 #include <QStringList> 00024 00025 #define COUNTRY_LOCATION_FILE ":/geoip/country-coordinates.csv" 00026 00027 00028 CountryInfo::CountryInfo(QObject *parent) 00029 : QObject(parent) 00030 { 00031 } 00032 00033 QString 00034 CountryInfo::countryName(const QString &countryCode) 00035 { 00036 static QMap<QString,QString> db; 00037 if (db.isEmpty()) { 00038 db.insert("af", QT_TR_NOOP("Afghanistan")); 00039 db.insert("al", QT_TR_NOOP("Albania ")); 00040 db.insert("dz", QT_TR_NOOP("Algeria ")); 00041 db.insert("ad", QT_TR_NOOP("Andorra")); 00042 db.insert("ao", QT_TR_NOOP("Angola")); 00043 db.insert("ag", QT_TR_NOOP("Antigua & Barbuda")); 00044 db.insert("ar", QT_TR_NOOP("Argentina")); 00045 db.insert("am", QT_TR_NOOP("Armenia")); 00046 db.insert("au", QT_TR_NOOP("Australia")); 00047 db.insert("at", QT_TR_NOOP("Austria ")); 00048 db.insert("az", QT_TR_NOOP("Azerbaijan")); 00049 db.insert("bs", QT_TR_NOOP("Bahamas")); 00050 db.insert("bh", QT_TR_NOOP("Bahrain ")); 00051 db.insert("bd", QT_TR_NOOP("Bangladesh")); 00052 db.insert("bb", QT_TR_NOOP("Barbados")); 00053 db.insert("by", QT_TR_NOOP("Belarus")); 00054 db.insert("be", QT_TR_NOOP("Belgium")); 00055 db.insert("bz", QT_TR_NOOP("Belize")); 00056 db.insert("bj", QT_TR_NOOP("Benin ")); 00057 db.insert("bt", QT_TR_NOOP("Bhutan")); 00058 db.insert("bo", QT_TR_NOOP("Bolivia")); 00059 db.insert("ba", QT_TR_NOOP("Bosnia & Herzegovina")); 00060 db.insert("bw", QT_TR_NOOP("Botswana")); 00061 db.insert("br", QT_TR_NOOP("Brazil")); 00062 db.insert("bn", QT_TR_NOOP("Brunei Darussalam")); 00063 db.insert("bg", QT_TR_NOOP("Bulgaria")); 00064 db.insert("bf", QT_TR_NOOP("Burkina Faso")); 00065 db.insert("bi", QT_TR_NOOP("Burundi")); 00066 db.insert("kh", QT_TR_NOOP("Cambodia")); 00067 db.insert("cm", QT_TR_NOOP("Cameroon")); 00068 db.insert("ca", QT_TR_NOOP("Canada")); 00069 db.insert("cv", QT_TR_NOOP("Cape Verde")); 00070 db.insert("cf", QT_TR_NOOP("Central African Republic")); 00071 db.insert("td", QT_TR_NOOP("Chad")); 00072 db.insert("cl", QT_TR_NOOP("Chile")); 00073 db.insert("cn", QT_TR_NOOP("China")); 00074 db.insert("co", QT_TR_NOOP("Colombia")); 00075 db.insert("km", QT_TR_NOOP("Comoros")); 00076 db.insert("cd", QT_TR_NOOP("Congo, The Democratic Republic of the")); 00077 db.insert("cg", QT_TR_NOOP("Congo")); 00078 db.insert("cr", QT_TR_NOOP("Costa Rica")); 00079 db.insert("ci", QT_TR_NOOP("Cote d’Ivoire")); 00080 db.insert("hr", QT_TR_NOOP("Croatia")); 00081 db.insert("cu", QT_TR_NOOP("Cuba")); 00082 db.insert("cy", QT_TR_NOOP("Cyprus")); 00083 db.insert("cz", QT_TR_NOOP("Czech Republic")); 00084 db.insert("dk", QT_TR_NOOP("Denmark")); 00085 db.insert("dj", QT_TR_NOOP("Djibouti")); 00086 db.insert("dm", QT_TR_NOOP("Dominica")); 00087 db.insert("do", QT_TR_NOOP("Dominican Republic")); 00088 db.insert("ec", QT_TR_NOOP("Ecuador")); 00089 db.insert("eg", QT_TR_NOOP("Egypt")); 00090 db.insert("sv", QT_TR_NOOP("El Salvador")); 00091 db.insert("gq", QT_TR_NOOP("Equatorial Guinea")); 00092 db.insert("er", QT_TR_NOOP("Eritrea")); 00093 db.insert("ee", QT_TR_NOOP("Estonia")); 00094 db.insert("et", QT_TR_NOOP("Ethiopia ")); 00095 db.insert("fj", QT_TR_NOOP("Fiji ")); 00096 db.insert("fi", QT_TR_NOOP("Finland ")); 00097 db.insert("fr", QT_TR_NOOP("France")); 00098 db.insert("ga", QT_TR_NOOP("Gabon")); 00099 db.insert("gm", QT_TR_NOOP("Gambia")); 00100 db.insert("ge", QT_TR_NOOP("Georgia")); 00101 db.insert("de", QT_TR_NOOP("Germany")); 00102 db.insert("gh", QT_TR_NOOP("Ghana")); 00103 db.insert("gr", QT_TR_NOOP("Greece ")); 00104 db.insert("gd", QT_TR_NOOP("Grenada")); 00105 db.insert("gt", QT_TR_NOOP("Guatemala")); 00106 db.insert("gu", QT_TR_NOOP("Guam ")); 00107 db.insert("gn", QT_TR_NOOP("Guinea")); 00108 db.insert("gw", QT_TR_NOOP("Guinea-Bissau")); 00109 db.insert("gy", QT_TR_NOOP("Guyana")); 00110 db.insert("hk", QT_TR_NOOP("Hong Kong")); 00111 db.insert("ht", QT_TR_NOOP("Haiti")); 00112 db.insert("hn", QT_TR_NOOP("Honduras")); 00113 db.insert("hu", QT_TR_NOOP("Hungary ")); 00114 db.insert("is", QT_TR_NOOP("Iceland ")); 00115 db.insert("in", QT_TR_NOOP("India ")); 00116 db.insert("id", QT_TR_NOOP("Indonesia ")); 00117 db.insert("ir", QT_TR_NOOP("Iran ")); 00118 db.insert("iq", QT_TR_NOOP("Iraq ")); 00119 db.insert("ie", QT_TR_NOOP("Ireland ")); 00120 db.insert("il", QT_TR_NOOP("Israel")); 00121 db.insert("it", QT_TR_NOOP("Italy")); 00122 db.insert("jm", QT_TR_NOOP("Jamaica")); 00123 db.insert("jp", QT_TR_NOOP("Japan")); 00124 db.insert("jo", QT_TR_NOOP("Jordan")); 00125 db.insert("kz", QT_TR_NOOP("Kazakhstan")); 00126 db.insert("ke", QT_TR_NOOP("Kenya")); 00127 db.insert("ki", QT_TR_NOOP("Kiribati")); 00128 db.insert("kp", QT_TR_NOOP("Korea, North ")); 00129 db.insert("kr", QT_TR_NOOP("Korea, South ")); 00130 db.insert("kw", QT_TR_NOOP("Kuwait")); 00131 db.insert("kg", QT_TR_NOOP("Kyrgyzstan")); 00132 db.insert("la", QT_TR_NOOP("Laos")); 00133 db.insert("lv", QT_TR_NOOP("Latvia")); 00134 db.insert("lb", QT_TR_NOOP("Lebanon")); 00135 db.insert("ls", QT_TR_NOOP("Lesotho")); 00136 db.insert("lr", QT_TR_NOOP("Liberia")); 00137 db.insert("ly", QT_TR_NOOP("Libya ")); 00138 db.insert("li", QT_TR_NOOP("Liechtenstein")); 00139 db.insert("lt", QT_TR_NOOP("Lithuania")); 00140 db.insert("lu", QT_TR_NOOP("Luxembourg")); 00141 db.insert("mk", QT_TR_NOOP("Macedonia")); 00142 db.insert("mg", QT_TR_NOOP("Madagascar")); 00143 db.insert("mw", QT_TR_NOOP("Malawi")); 00144 db.insert("my", QT_TR_NOOP("Malaysia")); 00145 db.insert("mv", QT_TR_NOOP("Maldives ")); 00146 db.insert("ml", QT_TR_NOOP("Mali")); 00147 db.insert("mt", QT_TR_NOOP("Malta")); 00148 db.insert("mh", QT_TR_NOOP("Marshall Islands")); 00149 db.insert("mr", QT_TR_NOOP("Mauritania")); 00150 db.insert("mu", QT_TR_NOOP("Mauritius")); 00151 db.insert("mx", QT_TR_NOOP("Mexico ")); 00152 db.insert("fm", QT_TR_NOOP("Micronesia")); 00153 db.insert("md", QT_TR_NOOP("Moldova")); 00154 db.insert("mc", QT_TR_NOOP("Monaco")); 00155 db.insert("mn", QT_TR_NOOP("Mongolia")); 00156 db.insert("me", QT_TR_NOOP("Montenegro")); 00157 db.insert("ma", QT_TR_NOOP("Morocco")); 00158 db.insert("mz", QT_TR_NOOP("Mozambique")); 00159 db.insert("mm", QT_TR_NOOP("Myanmar ")); 00160 db.insert("na", QT_TR_NOOP("Namibia")); 00161 db.insert("nr", QT_TR_NOOP("Nauru")); 00162 db.insert("np", QT_TR_NOOP("Nepal")); 00163 db.insert("nl", QT_TR_NOOP("Netherlands")); 00164 db.insert("nz", QT_TR_NOOP("New Zealand")); 00165 db.insert("ni", QT_TR_NOOP("Nicaragua")); 00166 db.insert("ne", QT_TR_NOOP("Niger")); 00167 db.insert("ng", QT_TR_NOOP("Nigeria")); 00168 db.insert("no", QT_TR_NOOP("Norway")); 00169 db.insert("om", QT_TR_NOOP("Oman")); 00170 db.insert("pk", QT_TR_NOOP("Pakistan")); 00171 db.insert("pw", QT_TR_NOOP("Palau")); 00172 db.insert("ps", QT_TR_NOOP("Palestine")); 00173 db.insert("pa", QT_TR_NOOP("Panama")); 00174 db.insert("pg", QT_TR_NOOP("Papua New Guinea")); 00175 db.insert("py", QT_TR_NOOP("Paraguay")); 00176 db.insert("pe", QT_TR_NOOP("Peru")); 00177 db.insert("ph", QT_TR_NOOP("Philippines")); 00178 db.insert("pl", QT_TR_NOOP("Poland")); 00179 db.insert("pt", QT_TR_NOOP("Portugal")); 00180 db.insert("qa", QT_TR_NOOP("Qatar")); 00181 db.insert("ro", QT_TR_NOOP("Romania")); 00182 db.insert("ru", QT_TR_NOOP("Russia")); 00183 db.insert("rw", QT_TR_NOOP("Rwanda")); 00184 db.insert("kn", QT_TR_NOOP("Saint Kitts & Nevis")); 00185 db.insert("lc", QT_TR_NOOP("Saint Lucia")); 00186 db.insert("vc", QT_TR_NOOP("Saint Vincent & the Grenadines")); 00187 db.insert("ws", QT_TR_NOOP("Samoa")); 00188 db.insert("sm", QT_TR_NOOP("San Marino")); 00189 db.insert("st", QT_TR_NOOP("Sao Tome & Principe")); 00190 db.insert("sa", QT_TR_NOOP("Saudi Arabia")); 00191 db.insert("sn", QT_TR_NOOP("Senegal")); 00192 db.insert("rs", QT_TR_NOOP("Serbia")); 00193 db.insert("sc", QT_TR_NOOP("Seychelles")); 00194 db.insert("sl", QT_TR_NOOP("Sierra Leone")); 00195 db.insert("sg", QT_TR_NOOP("Singapore")); 00196 db.insert("sk", QT_TR_NOOP("Slovakia")); 00197 db.insert("si", QT_TR_NOOP("Slovenia")); 00198 db.insert("sb", QT_TR_NOOP("Solomon Islands")); 00199 db.insert("so", QT_TR_NOOP("Somalia")); 00200 db.insert("za", QT_TR_NOOP("South Africa")); 00201 db.insert("es", QT_TR_NOOP("Spain")); 00202 db.insert("lk", QT_TR_NOOP("Sri Lanka")); 00203 db.insert("sd", QT_TR_NOOP("Sudan")); 00204 db.insert("sr", QT_TR_NOOP("Suriname")); 00205 db.insert("sz", QT_TR_NOOP("Swaziland")); 00206 db.insert("se", QT_TR_NOOP("Sweden")); 00207 db.insert("ch", QT_TR_NOOP("Switzerland")); 00208 db.insert("sy", QT_TR_NOOP("Syria")); 00209 db.insert("tw", QT_TR_NOOP("Taiwan ")); 00210 db.insert("tj", QT_TR_NOOP("Tajikistan")); 00211 db.insert("tz", QT_TR_NOOP("Tanzania")); 00212 db.insert("th", QT_TR_NOOP("Thailand")); 00213 db.insert("tl", QT_TR_NOOP("Timor-Leste (East Timor)")); 00214 db.insert("tg", QT_TR_NOOP("Togo")); 00215 db.insert("to", QT_TR_NOOP("Tonga")); 00216 db.insert("tt", QT_TR_NOOP("Trinidad & Tobago")); 00217 db.insert("tn", QT_TR_NOOP("Tunisia")); 00218 db.insert("tr", QT_TR_NOOP("Turkey")); 00219 db.insert("tm", QT_TR_NOOP("Turkmenistan")); 00220 db.insert("tv", QT_TR_NOOP("Tuvalu")); 00221 db.insert("ug", QT_TR_NOOP("Uganda")); 00222 db.insert("ua", QT_TR_NOOP("Ukraine")); 00223 db.insert("ae", QT_TR_NOOP("United Arab Emirates")); 00224 db.insert("gb", QT_TR_NOOP("United Kingdom")); 00225 db.insert("us", QT_TR_NOOP("United States")); 00226 db.insert("uy", QT_TR_NOOP("Uruguay")); 00227 db.insert("uz", QT_TR_NOOP("Uzbekistan")); 00228 db.insert("vu", QT_TR_NOOP("Vanuatu")); 00229 db.insert("va", QT_TR_NOOP("Vatican")); 00230 db.insert("ve", QT_TR_NOOP("Venezuela")); 00231 db.insert("vn", QT_TR_NOOP("Vietnam")); 00232 db.insert("eh", QT_TR_NOOP("Western Sahara")); 00233 db.insert("ye", QT_TR_NOOP("Yemen")); 00234 db.insert("zr", QT_TR_NOOP("Zaire")); 00235 db.insert("zm", QT_TR_NOOP("Zambia")); 00236 db.insert("zw", QT_TR_NOOP("Zimbabwe")); 00237 } 00238 00239 QString cc = countryCode.toLower(); 00240 if (db.contains(cc)) 00241 return tr(db.value(cc).toLocal8Bit().data()); 00242 return QString(); 00243 } 00244 00245 QPair<float,float> 00246 CountryInfo::countryLocation(const QString &countryCode) 00247 { 00248 static QHash<QString,QPair<float,float> > db; 00249 if (db.isEmpty()) { 00250 /* Load the country coordinates database */ 00251 QFile infile(COUNTRY_LOCATION_FILE); 00252 if (! infile.open(QIODevice::ReadOnly | QIODevice::Text)) 00253 return QPair<float,float>(-180.0, -180.0); 00254 00255 while (! infile.atEnd()) { 00256 /* Read and parse a single line from the input file */ 00257 bool ok; 00258 QString line = infile.readLine().trimmed(); 00259 vInfo(line); 00260 QStringList parts = line.split(","); 00261 if (parts.size() >= 3) { 00262 float latitude = parts[1].toFloat(&ok); 00263 if (! ok) 00264 continue; 00265 float longitude = parts[2].toFloat(&ok); 00266 if (! ok) 00267 continue; 00268 db.insert(parts[0], QPair<float,float>(latitude, longitude)); 00269 } 00270 } 00271 vInfo("Loaded %1 country location entries from built-in database.").arg(db.size()); 00272 infile.close(); 00273 } 00274 00275 QString cc = countryCode.toLower(); 00276 if (db.contains(cc)) 00277 return db.value(cc); 00278 return QPair<float,float>(-180.0, -180.0); 00279 } 00280