Change the selected language on reload, and ensure Spanish translations work.
This commit is contained in:
parent
d25b3c1f2f
commit
732b5e95ce
@ -369,6 +369,33 @@ void InstallerPrompt::refreshNetworkList() {
|
|||||||
ui->connectWiFiButton->setVisible(!networks.isEmpty());
|
ui->connectWiFiButton->setVisible(!networks.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString InstallerPrompt::getDisplayNameForLocale(const QLocale &locale) {
|
||||||
|
auto sanitize = [](QString s) -> QString {
|
||||||
|
s.replace("St.", "Saint", Qt::CaseInsensitive);
|
||||||
|
s.replace("&", "and", Qt::CaseInsensitive);
|
||||||
|
return s;
|
||||||
|
};
|
||||||
|
|
||||||
|
QString nativeName = locale.nativeLanguageName();
|
||||||
|
QString nativeCountryName = sanitize(locale.nativeCountryName());
|
||||||
|
QString englishLanguageName = QLocale::languageToString(locale.language());
|
||||||
|
QString englishCountryName = sanitize(QLocale::countryToString(locale.country()));
|
||||||
|
|
||||||
|
// Rename "American English" to "English"
|
||||||
|
if (locale.language() == QLocale::English) {
|
||||||
|
nativeName = "English";
|
||||||
|
englishLanguageName = "English";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString displayName = nativeName + " (" + nativeCountryName + ")";
|
||||||
|
if (nativeName.compare(englishLanguageName, Qt::CaseInsensitive) != 0 &&
|
||||||
|
nativeCountryName.compare(englishCountryName, Qt::CaseInsensitive) != 0) {
|
||||||
|
displayName += " - " + englishLanguageName + " (" + englishCountryName + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
void InstallerPrompt::initLanguageComboBox() {
|
void InstallerPrompt::initLanguageComboBox() {
|
||||||
languageLocaleMap.clear();
|
languageLocaleMap.clear();
|
||||||
QStringList languages = getAvailableLanguages();
|
QStringList languages = getAvailableLanguages();
|
||||||
@ -376,43 +403,30 @@ void InstallerPrompt::initLanguageComboBox() {
|
|||||||
ui->languageComboBox->addItem(language);
|
ui->languageComboBox->addItem(language);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString defaultLanguage = "English (United States)";
|
QLocale currentLocale = QLocale::system();
|
||||||
int defaultIndex = ui->languageComboBox->findText(defaultLanguage);
|
QString currentLocaleDisplayName = getDisplayNameForLocale(currentLocale);
|
||||||
|
|
||||||
|
int defaultIndex = ui->languageComboBox->findText(currentLocaleDisplayName);
|
||||||
if (defaultIndex != -1) {
|
if (defaultIndex != -1) {
|
||||||
ui->languageComboBox->setCurrentIndex(defaultIndex);
|
ui->languageComboBox->setCurrentIndex(defaultIndex);
|
||||||
|
} else {
|
||||||
|
// Fallback to English (United States) if current locale is not in the list
|
||||||
|
defaultIndex = ui->languageComboBox->findText("English (United States)");
|
||||||
|
if (defaultIndex != -1) {
|
||||||
|
ui->languageComboBox->setCurrentIndex(defaultIndex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList InstallerPrompt::getAvailableLanguages() {
|
QStringList InstallerPrompt::getAvailableLanguages() {
|
||||||
QMap<QString, QString> languageMap; // Default sorting by QString is case-sensitive
|
QMap<QString, QString> languageMap; // Default sorting by QString is case-sensitive
|
||||||
|
|
||||||
auto sanitize = [](QString s) -> QString {
|
|
||||||
s.replace("St.", "Saint", Qt::CaseInsensitive);
|
|
||||||
s.replace("&", "and", Qt::CaseInsensitive);
|
|
||||||
return s;
|
|
||||||
};
|
|
||||||
|
|
||||||
for (int language = QLocale::C; language <= QLocale::LastLanguage; ++language) {
|
for (int language = QLocale::C; language <= QLocale::LastLanguage; ++language) {
|
||||||
foreach (int country, QLocale::countriesForLanguage(static_cast<QLocale::Language>(language))) {
|
foreach (int country, QLocale::countriesForLanguage(static_cast<QLocale::Language>(language))) {
|
||||||
QLocale locale(static_cast<QLocale::Language>(language), static_cast<QLocale::Country>(country));
|
QLocale locale(static_cast<QLocale::Language>(language), static_cast<QLocale::Country>(country));
|
||||||
QString nativeName = locale.nativeLanguageName();
|
|
||||||
if (nativeName.isEmpty()) continue;
|
|
||||||
|
|
||||||
QString nativeCountryName = sanitize(locale.nativeCountryName());
|
QString displayName = getDisplayNameForLocale(locale);
|
||||||
QString englishLanguageName = QLocale::languageToString(locale.language());
|
if (displayName.isEmpty()) continue;
|
||||||
QString englishCountryName = sanitize(QLocale::countryToString(locale.country()));
|
|
||||||
|
|
||||||
// Rename "American English" to "English"
|
|
||||||
if (locale.language() == QLocale::English) {
|
|
||||||
nativeName = "English";
|
|
||||||
englishLanguageName = "English";
|
|
||||||
}
|
|
||||||
|
|
||||||
QString displayName = nativeName + " (" + nativeCountryName + ")";
|
|
||||||
if (nativeName.compare(englishLanguageName, Qt::CaseInsensitive) != 0 &&
|
|
||||||
nativeCountryName.compare(englishCountryName, Qt::CaseInsensitive) != 0) {
|
|
||||||
displayName += " - " + englishLanguageName + " (" + englishCountryName + ")";
|
|
||||||
}
|
|
||||||
|
|
||||||
languageMap.insert(displayName, locale.name());
|
languageMap.insert(displayName, locale.name());
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ private:
|
|||||||
QMap<QString, QString> languageLocaleMap;
|
QMap<QString, QString> languageLocaleMap;
|
||||||
QString selectedLanguage = "English (United States)";
|
QString selectedLanguage = "English (United States)";
|
||||||
QString localeName = "en_US";
|
QString localeName = "en_US";
|
||||||
|
QString getDisplayNameForLocale(const QLocale &locale);
|
||||||
|
|
||||||
void handleWifiConnection(const QString &ssid, bool recoverFromWrongPassword = false);
|
void handleWifiConnection(const QString &ssid, bool recoverFromWrongPassword = false);
|
||||||
QString promptForWifiPassword(const QString &ssid, bool isWrongPassword = false);
|
QString promptForWifiPassword(const QString &ssid, bool isWrongPassword = false);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user