summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdriaan de Groot <groot@kde.org>2019-05-10 13:46:35 +0200
committerAdriaan de Groot <groot@kde.org>2019-05-10 13:46:35 +0200
commitb51e22b520226eb54cf8dcbef3baeec5fc7805a9 (patch)
tree34c18090b371f439a2566b5045916b73751961f5
parent0dfef341602dc35fb5c479075626287bdf922a19 (diff)
[libcalamares] Implement locale lookups for 2-character codes
-rw-r--r--src/libcalamares/locale/Lookup.cpp57
1 files changed, 48 insertions, 9 deletions
diff --git a/src/libcalamares/locale/Lookup.cpp b/src/libcalamares/locale/Lookup.cpp
index 849668742..d38d417d4 100644
--- a/src/libcalamares/locale/Lookup.cpp
+++ b/src/libcalamares/locale/Lookup.cpp
@@ -22,30 +22,69 @@
namespace Calamares
{
+
+struct TwoChar
+{
+ TwoChar( const QString& code )
+ : cc1(0)
+ , cc2(0)
+ {
+ if ( code.length() == 2 )
+ {
+ cc1 = code[0].toLatin1();
+ cc2 = code[1].toLatin1();
+ }
+ }
+
+ char cc1;
+ char cc2;
+};
+
+static const CountryData* lookup( TwoChar c )
+{
+ if ( !c.cc1 )
+ return nullptr;
+
+ const CountryData* p = std::find_if(country_data_table, country_data_table + country_data_size,
+ [c=c]( const CountryData& d ){ return (d.cc1 == c.cc1) && (d.cc2 == c.cc2); }
+ );
+ if ( p == country_data_table + country_data_size )
+ return nullptr;
+ return p;
+}
QLocale::Country countryForCode(const QString& code)
{
- return QLocale::Country::AnyCountry;
+ const CountryData* p = lookup( TwoChar( code ) );
+ return p ? p->c : QLocale::Country::AnyCountry;
}
-QLocale countryLocale(const QString& code)
+QLocale::Language languageForCountry(const QString& code)
{
- return QLocale();
+ const CountryData* p = lookup( TwoChar( code ) );
+ return p ? p->l : QLocale::Language::AnyLanguage;
}
-QLocale::Language languageForCountry(const QString& code)
+QPair<QLocale::Country, QLocale::Language> countryData(const QString& code)
{
- return QLocale::Language::AnyLanguage;
+ const CountryData* p = lookup( TwoChar( code ) );
+ return p ? qMakePair( p->c, p->l ) : qMakePair( QLocale::Country::AnyCountry, QLocale::Language::AnyLanguage );
}
-QLocale::Language languageForCountry(QLocale::Country country)
+QLocale countryLocale(const QString& code)
{
- return QLocale::Language::AnyLanguage;
+ auto p = countryData( code );
+ return QLocale( p.second, p.first );
}
-QPair<QLocale::Country, QLocale::Language> countryData(const QString& code)
+QLocale::Language languageForCountry(QLocale::Country country)
{
- return qMakePair( QLocale::Country::AnyCountry, QLocale::Language::AnyLanguage );
+ const CountryData* p = std::find_if(country_data_table, country_data_table + country_data_size,
+ [c=country]( const CountryData& d ){ return d.c == c; }
+ );
+ if ( p == country_data_table + country_data_size )
+ return QLocale::Language::AnyLanguage;
+ return p->l;
}
} // namespace