package LocaleSelector; use strict; use warnings; use QtCore4; use QtGui4; use QtCore4::isa qw( Qt::ComboBox ); use QtCore4::signals localeSelected => ['const QLocale &']; use QtCore4::slots emitLocaleSelected => ['int']; my @SUPPORTED_LOCALES = ( { lang => 1, country => 0 }, # C/AnyCountry { lang => 3, country => 69 }, # Afan/Ethiopia { lang => 3, country => 111 }, # Afan/Kenya { lang => 4, country => 59 }, # Afar/Djibouti { lang => 4, country => 67 }, # Afar/Eritrea { lang => 4, country => 69 }, # Afar/Ethiopia { lang => 5, country => 195 }, # Afrikaans/SouthAfrica { lang => 5, country => 148 }, # Afrikaans/Namibia { lang => 6, country => 2 }, # Albanian/Albania { lang => 7, country => 69 }, # Amharic/Ethiopia { lang => 8, country => 186 }, # Arabic/SaudiArabia { lang => 8, country => 3 }, # Arabic/Algeria { lang => 8, country => 17 }, # Arabic/Bahrain { lang => 8, country => 64 }, # Arabic/Egypt { lang => 8, country => 103 }, # Arabic/Iraq { lang => 8, country => 109 }, # Arabic/Jordan { lang => 8, country => 115 }, # Arabic/Kuwait { lang => 8, country => 119 }, # Arabic/Lebanon { lang => 8, country => 122 }, # Arabic/LibyanArabJamahiriya { lang => 8, country => 145 }, # Arabic/Morocco { lang => 8, country => 162 }, # Arabic/Oman { lang => 8, country => 175 }, # Arabic/Qatar { lang => 8, country => 201 }, # Arabic/Sudan { lang => 8, country => 207 }, # Arabic/SyrianArabRepublic { lang => 8, country => 216 }, # Arabic/Tunisia { lang => 8, country => 223 }, # Arabic/UnitedArabEmirates { lang => 8, country => 237 }, # Arabic/Yemen { lang => 9, country => 11 }, # Armenian/Armenia { lang => 10, country => 100 }, # Assamese/India { lang => 12, country => 15 }, # Azerbaijani/Azerbaijan { lang => 14, country => 197 }, # Basque/Spain { lang => 15, country => 18 }, # Bengali/Bangladesh { lang => 15, country => 100 }, # Bengali/India { lang => 16, country => 25 }, # Bhutani/Bhutan { lang => 20, country => 33 }, # Bulgarian/Bulgaria { lang => 22, country => 20 }, # Byelorussian/Belarus { lang => 23, country => 36 }, # Cambodian/Cambodia { lang => 24, country => 197 }, # Catalan/Spain { lang => 25, country => 44 }, # Chinese/China { lang => 25, country => 97 }, # Chinese/HongKong { lang => 25, country => 126 }, # Chinese/Macau { lang => 25, country => 190 }, # Chinese/Singapore { lang => 25, country => 208 }, # Chinese/Taiwan { lang => 27, country => 54 }, # Croatian/Croatia { lang => 28, country => 57 }, # Czech/CzechRepublic { lang => 29, country => 58 }, # Danish/Denmark { lang => 30, country => 151 }, # Dutch/Netherlands { lang => 30, country => 21 }, # Dutch/Belgium { lang => 31, country => 225 }, # English/UnitedStates { lang => 31, country => 4 }, # English/AmericanSamoa { lang => 31, country => 13 }, # English/Australia { lang => 31, country => 21 }, # English/Belgium { lang => 31, country => 22 }, # English/Belize { lang => 31, country => 28 }, # English/Botswana { lang => 31, country => 38 }, # English/Canada { lang => 31, country => 89 }, # English/Guam { lang => 31, country => 97 }, # English/HongKong { lang => 31, country => 100 }, # English/India { lang => 31, country => 104 }, # English/Ireland { lang => 31, country => 107 }, # English/Jamaica { lang => 31, country => 133 }, # English/Malta { lang => 31, country => 134 }, # English/MarshallIslands { lang => 31, country => 148 }, # English/Namibia { lang => 31, country => 154 }, # English/NewZealand { lang => 31, country => 160 }, # English/NorthernMarianaIslands { lang => 31, country => 163 }, # English/Pakistan { lang => 31, country => 170 }, # English/Philippines { lang => 31, country => 190 }, # English/Singapore { lang => 31, country => 195 }, # English/SouthAfrica { lang => 31, country => 215 }, # English/TrinidadAndTobago { lang => 31, country => 224 }, # English/UnitedKingdom { lang => 31, country => 226 }, # English/UnitedStatesMinorOutlyingIslands { lang => 31, country => 234 }, # English/USVirginIslands { lang => 31, country => 240 }, # English/Zimbabwe { lang => 33, country => 68 }, # Estonian/Estonia { lang => 34, country => 71 }, # Faroese/FaroeIslands { lang => 36, country => 73 }, # Finnish/Finland { lang => 37, country => 74 }, # French/France { lang => 37, country => 21 }, # French/Belgium { lang => 37, country => 38 }, # French/Canada { lang => 37, country => 125 }, # French/Luxembourg { lang => 37, country => 142 }, # French/Monaco { lang => 37, country => 206 }, # French/Switzerland { lang => 40, country => 197 }, # Galician/Spain { lang => 41, country => 81 }, # Georgian/Georgia { lang => 42, country => 82 }, # German/Germany { lang => 42, country => 14 }, # German/Austria { lang => 42, country => 21 }, # German/Belgium { lang => 42, country => 123 }, # German/Liechtenstein { lang => 42, country => 125 }, # German/Luxembourg { lang => 42, country => 206 }, # German/Switzerland { lang => 43, country => 85 }, # Greek/Greece { lang => 43, country => 56 }, # Greek/Cyprus { lang => 44, country => 86 }, # Greenlandic/Greenland { lang => 46, country => 100 }, # Gujarati/India { lang => 47, country => 83 }, # Hausa/Ghana { lang => 47, country => 156 }, # Hausa/Niger { lang => 47, country => 157 }, # Hausa/Nigeria { lang => 48, country => 105 }, # Hebrew/Israel { lang => 49, country => 100 }, # Hindi/India { lang => 50, country => 98 }, # Hungarian/Hungary { lang => 51, country => 99 }, # Icelandic/Iceland { lang => 52, country => 101 }, # Indonesian/Indonesia { lang => 57, country => 104 }, # Irish/Ireland { lang => 58, country => 106 }, # Italian/Italy { lang => 58, country => 206 }, # Italian/Switzerland { lang => 59, country => 108 }, # Japanese/Japan { lang => 61, country => 100 }, # Kannada/India { lang => 63, country => 110 }, # Kazakh/Kazakhstan { lang => 64, country => 179 }, # Kinyarwanda/Rwanda { lang => 65, country => 116 }, # Kirghiz/Kyrgyzstan { lang => 66, country => 114 }, # Korean/RepublicOfKorea { lang => 67, country => 102 }, # Kurdish/Iran { lang => 67, country => 103 }, # Kurdish/Iraq { lang => 67, country => 207 }, # Kurdish/SyrianArabRepublic { lang => 67, country => 217 }, # Kurdish/Turkey { lang => 69, country => 117 }, # Laothian/Lao { lang => 71, country => 118 }, # Latvian/Latvia { lang => 72, country => 49 }, # Lingala/DemocraticRepublicOfCongo { lang => 72, country => 50 }, # Lingala/PeoplesRepublicOfCongo { lang => 73, country => 124 }, # Lithuanian/Lithuania { lang => 74, country => 127 }, # Macedonian/Macedonia { lang => 76, country => 130 }, # Malay/Malaysia { lang => 76, country => 32 }, # Malay/BruneiDarussalam { lang => 77, country => 100 }, # Malayalam/India { lang => 78, country => 133 }, # Maltese/Malta { lang => 80, country => 100 }, # Marathi/India { lang => 82, country => 143 }, # Mongolian/Mongolia { lang => 84, country => 150 }, # Nepali/Nepal { lang => 85, country => 161 }, # Norwegian/Norway { lang => 87, country => 100 }, # Oriya/India { lang => 88, country => 1 }, # Pashto/Afghanistan { lang => 89, country => 102 }, # Persian/Iran { lang => 89, country => 1 }, # Persian/Afghanistan { lang => 90, country => 172 }, # Polish/Poland { lang => 91, country => 173 }, # Portuguese/Portugal { lang => 91, country => 30 }, # Portuguese/Brazil { lang => 92, country => 100 }, # Punjabi/India { lang => 92, country => 163 }, # Punjabi/Pakistan { lang => 95, country => 177 }, # Romanian/Romania { lang => 96, country => 178 }, # Russian/RussianFederation { lang => 96, country => 222 }, # Russian/Ukraine { lang => 99, country => 100 }, # Sanskrit/India { lang => 100, country => 241 }, # Serbian/SerbiaAndMontenegro { lang => 100, country => 27 }, # Serbian/BosniaAndHerzegowina { lang => 100, country => 238 }, # Serbian/Yugoslavia { lang => 101, country => 241 }, # SerboCroatian/SerbiaAndMontenegro { lang => 101, country => 27 }, # SerboCroatian/BosniaAndHerzegowina { lang => 101, country => 238 }, # SerboCroatian/Yugoslavia { lang => 102, country => 195 }, # Sesotho/SouthAfrica { lang => 103, country => 195 }, # Setswana/SouthAfrica { lang => 107, country => 195 }, # Siswati/SouthAfrica { lang => 108, country => 191 }, # Slovak/Slovakia { lang => 109, country => 192 }, # Slovenian/Slovenia { lang => 110, country => 194 }, # Somali/Somalia { lang => 110, country => 59 }, # Somali/Djibouti { lang => 110, country => 69 }, # Somali/Ethiopia { lang => 110, country => 111 }, # Somali/Kenya { lang => 111, country => 197 }, # Spanish/Spain { lang => 111, country => 10 }, # Spanish/Argentina { lang => 111, country => 26 }, # Spanish/Bolivia { lang => 111, country => 43 }, # Spanish/Chile { lang => 111, country => 47 }, # Spanish/Colombia { lang => 111, country => 52 }, # Spanish/CostaRica { lang => 111, country => 61 }, # Spanish/DominicanRepublic { lang => 111, country => 63 }, # Spanish/Ecuador { lang => 111, country => 65 }, # Spanish/ElSalvador { lang => 111, country => 90 }, # Spanish/Guatemala { lang => 111, country => 96 }, # Spanish/Honduras { lang => 111, country => 139 }, # Spanish/Mexico { lang => 111, country => 155 }, # Spanish/Nicaragua { lang => 111, country => 166 }, # Spanish/Panama { lang => 111, country => 168 }, # Spanish/Paraguay { lang => 111, country => 169 }, # Spanish/Peru { lang => 111, country => 174 }, # Spanish/PuertoRico { lang => 111, country => 225 }, # Spanish/UnitedStates { lang => 111, country => 227 }, # Spanish/Uruguay { lang => 111, country => 231 }, # Spanish/Venezuela { lang => 113, country => 111 }, # Swahili/Kenya { lang => 113, country => 210 }, # Swahili/Tanzania { lang => 114, country => 205 }, # Swedish/Sweden { lang => 114, country => 73 }, # Swedish/Finland { lang => 116, country => 209 }, # Tajik/Tajikistan { lang => 117, country => 100 }, # Tamil/India { lang => 118, country => 178 }, # Tatar/RussianFederation { lang => 119, country => 100 }, # Telugu/India { lang => 120, country => 211 }, # Thai/Thailand { lang => 122, country => 67 }, # Tigrinya/Eritrea { lang => 122, country => 69 }, # Tigrinya/Ethiopia { lang => 124, country => 195 }, # Tsonga/SouthAfrica { lang => 125, country => 217 }, # Turkish/Turkey { lang => 129, country => 222 }, # Ukrainian/Ukraine { lang => 130, country => 100 }, # Urdu/India { lang => 130, country => 163 }, # Urdu/Pakistan { lang => 131, country => 228 }, # Uzbek/Uzbekistan { lang => 131, country => 1 }, # Uzbek/Afghanistan { lang => 132, country => 232 }, # Vietnamese/VietNam { lang => 134, country => 224 }, # Welsh/UnitedKingdom { lang => 136, country => 195 }, # Xhosa/SouthAfrica { lang => 138, country => 157 }, # Yoruba/Nigeria { lang => 140, country => 195 }, # Zulu/SouthAfrica { lang => 141, country => 161 }, # Nynorsk/Norway { lang => 142, country => 27 }, # Bosnian/BosniaAndHerzegowina { lang => 143, country => 131 }, # Divehi/Maldives { lang => 144, country => 224 }, # Manx/UnitedKingdom { lang => 145, country => 224 }, # Cornish/UnitedKingdom { lang => 146, country => 83 }, # Akan/Ghana { lang => 147, country => 100 }, # Konkani/India { lang => 148, country => 83 }, # Ga/Ghana { lang => 149, country => 157 }, # Igbo/Nigeria { lang => 150, country => 111 }, # Kamba/Kenya { lang => 151, country => 207 }, # Syriac/SyrianArabRepublic { lang => 152, country => 67 }, # Blin/Eritrea { lang => 153, country => 67 }, # Geez/Eritrea { lang => 153, country => 69 }, # Geez/Ethiopia { lang => 154, country => 157 }, # Koro/Nigeria { lang => 155, country => 69 }, # Sidamo/Ethiopia { lang => 156, country => 157 }, # Atsam/Nigeria { lang => 157, country => 67 }, # Tigre/Eritrea { lang => 158, country => 157 }, # Jju/Nigeria { lang => 159, country => 106 }, # Friulian/Italy { lang => 160, country => 195 }, # Venda/SouthAfrica { lang => 161, country => 83 }, # Ewe/Ghana { lang => 161, country => 212 }, # Ewe/Togo { lang => 163, country => 225 }, # Hawaiian/UnitedStates { lang => 164, country => 157 }, # Tyap/Nigeria { lang => 165, country => 129 } # Chewa/Malawi ); my $SUPPORTED_LOCALES_COUNT = scalar @SUPPORTED_LOCALES; sub NEW { my ( $class, $parent ) = @_; $class->SUPER::NEW( $parent ); my $curIndex = -1; my $curLocale = Qt::Locale(); foreach my $i (0..$SUPPORTED_LOCALES_COUNT-1) { my $l = $SUPPORTED_LOCALES[$i]; if ($l->{lang} == $curLocale->language() && $l->{country} == $curLocale->country()) { $curIndex = $i; } my $text = Qt::Locale::languageToString($l->{lang}) . '/' . Qt::Locale::countryToString($l->{country}); this->addItem($text, Qt::qVariantFromValue($l)); } this->setCurrentIndex($curIndex); this->connect(this, SIGNAL 'activated(int)', this, SLOT 'emitLocaleSelected(int)'); } sub emitLocaleSelected { my ($index) = @_; my $v = this->itemData($index); if (!$v->isValid()) { return; } my $l = Qt::qVariantValue($v); emit localeSelected(Qt::Locale($l->{lang}, $l->{country})); } 1;