diff --git a/src/modules/locale/LocaleConfiguration.cpp b/src/modules/locale/LocaleConfiguration.cpp index ca0a707ad..2e0689090 100644 --- a/src/modules/locale/LocaleConfiguration.cpp +++ b/src/modules/locale/LocaleConfiguration.cpp @@ -27,16 +27,17 @@ LocaleConfiguration::LocaleConfiguration() } -LocaleConfiguration::LocaleConfiguration( const QString& localeName ) +LocaleConfiguration::LocaleConfiguration( const QString& localeName, const QString& formatsName ) : LocaleConfiguration() { lc_numeric = lc_time = lc_monetary = lc_paper = lc_name = lc_address = lc_telephone = lc_measurement - = lc_identification = localeName; + = lc_identification = formatsName; (void) setLanguage( localeName ); } + QString LocaleConfiguration::setLanguage(const QString& localeName ) { @@ -51,8 +52,7 @@ LocaleConfiguration::fromLanguageAndLocation( const QString& languageLocale, const QStringList& availableLocales, const QString& countryCode ) { - LocaleConfiguration lc; - QString language = lc.setLanguage( languageLocale ); + QString language = languageLocale.split( '_' ).first(); QStringList linesForLanguage; for ( const QString &line : availableLocales ) @@ -269,12 +269,7 @@ LocaleConfiguration::fromLanguageAndLocation( const QString& languageLocale, if ( lc_formats.isEmpty() ) lc_formats = lang; - lc.lang = lang; - lc.lc_address = lc.lc_identification = lc.lc_measurement = lc.lc_monetary - = lc.lc_name = lc.lc_numeric = lc.lc_paper = lc.lc_telephone - = lc.lc_time = lc_formats; - - return lc; + return LocaleConfiguration( lang, lc_formats ); } diff --git a/src/modules/locale/LocaleConfiguration.h b/src/modules/locale/LocaleConfiguration.h index 95dadd5c3..0bd310d9d 100644 --- a/src/modules/locale/LocaleConfiguration.h +++ b/src/modules/locale/LocaleConfiguration.h @@ -29,7 +29,10 @@ public: /// @brief Create an empty locale, with nothing set explicit LocaleConfiguration(); /// @brief Create a locale with everything set to the given @p localeName - explicit LocaleConfiguration( const QString& localeName /* "en_US.UTF-8" */ ); + explicit LocaleConfiguration( const QString& localeName /* "en_US.UTF-8" */ ) + : LocaleConfiguration( localeName, localeName ) { }; + /// @brief Create a locale with language and formats separate + explicit LocaleConfiguration( const QString& localeName, const QString& formatsName ); static LocaleConfiguration fromLanguageAndLocation( const QString& language, const QStringList& availableLocales, diff --git a/src/modules/locale/LocalePage.cpp b/src/modules/locale/LocalePage.cpp index 45397b1ab..c456ef940 100644 --- a/src/modules/locale/LocalePage.cpp +++ b/src/modules/locale/LocalePage.cpp @@ -452,22 +452,7 @@ LocalePage::onActivate() LocaleConfiguration LocalePage::guessLocaleConfiguration() const { - static QString defaultLocale = QStringLiteral( "en_US.UTF-8" ); - - QLocale myLocale; // User-selected language - - // If we cannot say anything about available locales - if ( m_localeGenLines.isEmpty() ) - { - cWarning() << "guessLocaleConfiguration can't guess from an empty list."; - return LocaleConfiguration( defaultLocale ); - } - - QString myLanguageLocale = myLocale.name(); - if ( myLanguageLocale.isEmpty() ) - return LocaleConfiguration( defaultLocale ); - - return LocaleConfiguration::fromLanguageAndLocation( myLanguageLocale, + return LocaleConfiguration::fromLanguageAndLocation( QLocale().name(), m_localeGenLines, m_tzWidget->getCurrentLocation().country ); } diff --git a/src/modules/locale/Tests.cpp b/src/modules/locale/Tests.cpp index 6cad2ef74..91fea42b8 100644 --- a/src/modules/locale/Tests.cpp +++ b/src/modules/locale/Tests.cpp @@ -50,4 +50,27 @@ void LocaleTests::testDefaultLocaleConfiguration() LocaleConfiguration lc( "en_US.UTF-8" ); QVERIFY( !lc.isEmpty() ); QCOMPARE( lc.toBcp47(), "en" ); + + LocaleConfiguration lc2( "de_DE.UTF-8" ); + QVERIFY( !lc2.isEmpty() ); + QCOMPARE( lc2.toBcp47(), "de" ); +} + +void LocaleTests::testSplitLocaleConfiguration() +{ + LocaleConfiguration lc( "en_US.UTF-8", "de_DE.UTF-8" ); + QVERIFY( !lc.isEmpty() ); + QCOMPARE( lc.toBcp47(), "en" ); + QCOMPARE( lc.lc_numeric, QStringLiteral( "de_DE.UTF-8" ) ); + + LocaleConfiguration lc2( "de_DE.UTF-8", "da_DK.UTF-8" ); + QVERIFY( !lc2.isEmpty() ); + QCOMPARE( lc2.toBcp47(), "de" ); + QCOMPARE( lc2.lc_numeric, "da_DK.UTF-8" ); + + LocaleConfiguration lc3( "da_DK.UTF-8", "de_DE.UTF-8" ); + QVERIFY( !lc3.isEmpty() ); + QCOMPARE( lc3.toBcp47(), "da" ); + QCOMPARE( lc3.lc_numeric, "de_DE.UTF-8" ); + } diff --git a/src/modules/locale/Tests.h b/src/modules/locale/Tests.h index acb3ab309..299eac61d 100644 --- a/src/modules/locale/Tests.h +++ b/src/modules/locale/Tests.h @@ -34,6 +34,7 @@ private Q_SLOTS: // Check the sample config file is processed correctly void testEmptyLocaleConfiguration(); void testDefaultLocaleConfiguration(); + void testSplitLocaleConfiguration(); }; #endif