@ -248,82 +248,22 @@ void ConfigureUi::RetranslateUI() {
}
void ConfigureUi : : InitializeLanguageComboBox ( ) {
// This is a list of lexicographically sorted languages, only the available translations are
// shown to the user.
static const struct {
const QString name ;
const char * id ;
} languages [ ] = {
// clang-format off
{ QStringLiteral ( u " Bahasa Indonesia " ) , " id " } , // Indonesian
{ QStringLiteral ( u " Bahasa Melayu " ) , " ms " } , // Malay
{ QStringLiteral ( u " Catal \u00E0 " ) , " ca " } , // Catalan
{ QStringLiteral ( u " \u010C e \u0161 tina " ) , " cs " } , // Czech
{ QStringLiteral ( u " Dansk " ) , " da " } , // Danish
{ QStringLiteral ( u " Deutsch " ) , " de " } , // German
{ QStringLiteral ( u " English " ) , " en " } , // English
{ QStringLiteral ( u " Espa \u00F1 ol " ) , " es " } , // Spanish
{ QStringLiteral ( u " Fran \u00E7 ais " ) , " fr " } , // French
{ QStringLiteral ( u " Hrvatski " ) , " hr " } , // Croatian
{ QStringLiteral ( u " Italiano " ) , " it " } , // Italian
{ QStringLiteral ( u " Magyar " ) , " hu " } , // Hungarian
{ QStringLiteral ( u " Nederlands " ) , " nl " } , // Dutch
{ QStringLiteral ( u " Norsk bokm \u00E5 l " ) , " nb " } , // Norwegian
{ QStringLiteral ( u " Polski " ) , " pl " } , // Polish
{ QStringLiteral ( u " Portugu \u00EA s " ) , " pt_PT " } , // Portuguese
{ QStringLiteral ( u " Portugu \u00EA s (Brasil) " ) , " pt_BR " } , // Portuguese (Brazil)
{ QStringLiteral ( u " Rom \u00E2 n \u0103 " ) , " ro " } , // Romanian
{ QStringLiteral ( u " Srpski " ) , " sr " } , // Serbian
{ QStringLiteral ( u " Suomi " ) , " fi " } , // Finnish
{ QStringLiteral ( u " Svenska " ) , " sv " } , // Swedish
{ QStringLiteral ( u " Ti \u1EBF ng Vi \u1EC7 t " ) , " vi " } , // Vietnamese
{ QStringLiteral ( u " Ti \u1EBF ng Vi \u1EC7 t (Vi \u1EC7 t Nam) " ) , " vi_VN " } , // Vietnamese
{ QStringLiteral ( u " T \u00FC rk \u00E7 e " ) , " tr_TR " } , // Turkish
{ QStringLiteral ( u " \u0395 \u03BB \u03BB \u03B7 \u03BD \u03B9 \u03BA \u03AC " ) , " el " } , // Greek
{ QStringLiteral ( u " \u0420 \u0443 \u0441 \u0441 \u043A \u0438 \u0439 " ) , " ru_RU " } , // Russian
{ QStringLiteral ( u " \u0423 \u043A \u0440 \u0430 \u0457 \u043D \u0441 \u044C \u043A \u0430 " ) ,
" uk " } , // Ukrainian
{ QStringLiteral ( u " \u0627 \u0644 \u0639 \u0631 \u0628 \u064A \u0629 " ) , " ar " } , // Arabic
{ QStringLiteral ( u " \u0641 \u0627 \u0631 \u0633 \u06CC " ) , " fa " } , // Farsi
{ QStringLiteral ( u " \uD55C \uAD6D \uC5B4 " ) , " ko_KR " } , // Korean
{ QStringLiteral ( u " \u65E5 \u672C \u8A9E " ) , " ja_JP " } , // Japanese
{ QStringLiteral ( u " \u7B80 \u4F53 \u4E2D \u6587 " ) , " zh_CN " } , // Simplified Chinese
{ QStringLiteral ( u " \u7E41 \u9AD4 \u4E2D \u6587 " ) , " zh_TW " } , // Traditional Chinese
// clang-format on
} ;
ui - > language_combobox - > addItem ( tr ( " <System> " ) , QString { } ) ;
QDir languages_dir { QStringLiteral ( " :/languages " ) } ;
QStringList language_files = languages_dir . entryList ( ) ;
for ( const auto & lang : languages ) {
if ( QString : : fromLatin1 ( lang . id ) = = QStringLiteral ( " en " ) ) {
ui - > language_combobox - > addItem ( lang . name , QStringLiteral ( " en " ) ) ;
language_files . removeOne ( QStringLiteral ( " en.qm " ) ) ;
continue ;
}
for ( int i = 0 ; i < language_files . size ( ) ; + + i ) {
QString locale = language_files [ i ] ;
locale . truncate ( locale . lastIndexOf ( QLatin1Char { ' . ' } ) ) ;
if ( QString : : fromLatin1 ( lang . id ) = = locale ) {
ui - > language_combobox - > addItem ( lang . name , locale ) ;
language_files . removeAt ( i ) ;
break ;
}
}
}
// Anything remaining will be at the bottom
for ( const QString & file : language_files ) {
LOG_CRITICAL ( Frontend , " Unexpected Language File: {} " , file . toStdString ( ) ) ;
QString locale = file ;
ui - > language_combobox - > addItem ( tr ( " English " ) , QStringLiteral ( " en " ) ) ;
QDirIterator it ( QStringLiteral ( " :/languages " ) , QDirIterator : : NoIteratorFlags ) ;
while ( it . hasNext ( ) ) {
QString locale = it . next ( ) ;
locale . truncate ( locale . lastIndexOf ( QLatin1Char { ' . ' } ) ) ;
const QString language_name = QLocale : : languageToString ( QLocale ( locale ) . language ( ) ) ;
const QString lang = QStringLiteral ( " %1 [%2] " ) . arg ( language_name , locale ) ;
ui - > language_combobox - > addItem ( lang , locale ) ;
locale . remove ( 0 , locale . lastIndexOf ( QLatin1Char { ' / ' } ) + 1 ) ;
const QString lang = QLocale : : languageToString ( QLocale ( locale ) . language ( ) ) ;
const QString country = QLocale : : countryToString ( QLocale ( locale ) . country ( ) ) ;
ui - > language_combobox - > addItem ( QStringLiteral ( " %1 (%2) " ) . arg ( lang , country ) , locale ) ;
}
// Unlike other configuration changes, interface language changes need to be reflected on the
// interface immediately. This is done by passing a signal to the main window, and then
// retranslating when passing back.
connect ( ui - > language_combobox , QOverload< int > : : of ( & QComboBox : : currentIndexChanged ) , this ,
connect ( ui - > language_combobox , qOverload < int > ( & QComboBox : : currentIndexChanged ) , this ,
& ConfigureUi : : OnLanguageChanged ) ;
}