[libcalamares] Use strong types for locale Ids
Change the API to force strong type for more methods. This cascades to a couple of consumers.
This commit is contained in:
parent
3ff5896dc6
commit
4e60f8af13
@ -25,8 +25,9 @@
|
|||||||
* Returns a pair of nullptrs for non-special cases.
|
* Returns a pair of nullptrs for non-special cases.
|
||||||
*/
|
*/
|
||||||
static std::pair< QLocale*, QString* >
|
static std::pair< QLocale*, QString* >
|
||||||
specialCase( const QString& localeName )
|
specialCase( const CalamaresUtils::Locale::Translation::Id& locale )
|
||||||
{
|
{
|
||||||
|
const QString localeName = locale.name;
|
||||||
if ( localeName == "sr@latin" )
|
if ( localeName == "sr@latin" )
|
||||||
{
|
{
|
||||||
static QLocale loc( QLocale::Language::Serbian, QLocale::Script::LatinScript, QLocale::Country::Serbia );
|
static QLocale loc( QLocale::Language::Serbian, QLocale::Script::LatinScript, QLocale::Country::Serbia );
|
||||||
@ -47,16 +48,16 @@ namespace Locale
|
|||||||
{
|
{
|
||||||
|
|
||||||
Translation::Translation( QObject* parent )
|
Translation::Translation( QObject* parent )
|
||||||
: Translation( QString(), LabelFormat::IfNeededWithCountry, parent )
|
: Translation( { QString() }, LabelFormat::IfNeededWithCountry, parent )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Translation::Translation( const QString& locale, LabelFormat format, QObject* parent )
|
Translation::Translation( const Id& localeId, LabelFormat format, QObject* parent )
|
||||||
: QObject( parent )
|
: QObject( parent )
|
||||||
, m_locale( getLocale( locale ) )
|
, m_locale( getLocale( localeId ) )
|
||||||
, m_localeId( locale.isEmpty() ? m_locale.name() : locale )
|
, m_localeId( localeId.name.isEmpty() ? m_locale.name() : localeId.name )
|
||||||
{
|
{
|
||||||
auto [ _, name ] = specialCase( locale );
|
auto [ _, name ] = specialCase( localeId );
|
||||||
|
|
||||||
QString longFormat = QObject::tr( "%1 (%2)" );
|
QString longFormat = QObject::tr( "%1 (%2)" );
|
||||||
|
|
||||||
@ -65,11 +66,11 @@ Translation::Translation( const QString& locale, LabelFormat format, QObject* pa
|
|||||||
|
|
||||||
if ( languageName.isEmpty() )
|
if ( languageName.isEmpty() )
|
||||||
{
|
{
|
||||||
languageName = QString( "* %1 (%2)" ).arg( locale, englishName );
|
languageName = QString( "* %1 (%2)" ).arg( localeId.name, englishName );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool needsCountryName = ( format == LabelFormat::AlwaysWithCountry )
|
bool needsCountryName = ( format == LabelFormat::AlwaysWithCountry )
|
||||||
|| ( locale.contains( '_' ) && QLocale::countriesForLanguage( m_locale.language() ).count() > 1 );
|
|| ( localeId.name.contains( '_' ) && QLocale::countriesForLanguage( m_locale.language() ).count() > 1 );
|
||||||
QString countryName = ( needsCountryName ?
|
QString countryName = ( needsCountryName ?
|
||||||
|
|
||||||
m_locale.nativeCountryName()
|
m_locale.nativeCountryName()
|
||||||
@ -80,14 +81,15 @@ Translation::Translation( const QString& locale, LabelFormat format, QObject* pa
|
|||||||
}
|
}
|
||||||
|
|
||||||
QLocale
|
QLocale
|
||||||
Translation::getLocale( const QString& localeName )
|
Translation::getLocale( const Id& localeId )
|
||||||
{
|
{
|
||||||
|
const QString& localeName = localeId.name;
|
||||||
if ( localeName.isEmpty() )
|
if ( localeName.isEmpty() )
|
||||||
{
|
{
|
||||||
return QLocale();
|
return QLocale();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto [ locale, _ ] = specialCase( localeName );
|
auto [ locale, _ ] = specialCase( localeId );
|
||||||
return locale ? *locale : QLocale( localeName );
|
return locale ? *locale : QLocale( localeName );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,9 +60,7 @@ public:
|
|||||||
* The @p format determines whether the country name is always present
|
* The @p format determines whether the country name is always present
|
||||||
* in the label (human-readable form) or only if needed for disambiguation.
|
* in the label (human-readable form) or only if needed for disambiguation.
|
||||||
*/
|
*/
|
||||||
Translation( const QString& localeName,
|
Translation( const Id& localeId, LabelFormat format = LabelFormat::IfNeededWithCountry, QObject* parent = nullptr );
|
||||||
LabelFormat format = LabelFormat::IfNeededWithCountry,
|
|
||||||
QObject* parent = nullptr );
|
|
||||||
|
|
||||||
|
|
||||||
/** @brief Define a sorting order.
|
/** @brief Define a sorting order.
|
||||||
@ -103,7 +101,7 @@ public:
|
|||||||
*
|
*
|
||||||
* This obeys special cases as described in the class documentation.
|
* This obeys special cases as described in the class documentation.
|
||||||
*/
|
*/
|
||||||
static QLocale getLocale( const QString& localeName );
|
static QLocale getLocale( const Id& localeId );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QLocale m_locale;
|
QLocale m_locale;
|
||||||
|
@ -29,7 +29,7 @@ TranslationsModel::TranslationsModel( const QStringList& locales, QObject* paren
|
|||||||
|
|
||||||
for ( const auto& l : locales )
|
for ( const auto& l : locales )
|
||||||
{
|
{
|
||||||
m_locales.push_back( new Translation( l, Translation::LabelFormat::IfNeededWithCountry, this ) );
|
m_locales.push_back( new Translation( { l }, Translation::LabelFormat::IfNeededWithCountry, this ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,7 +370,7 @@ localeLabel( const QString& s )
|
|||||||
{
|
{
|
||||||
using CalamaresUtils::Locale::Translation;
|
using CalamaresUtils::Locale::Translation;
|
||||||
|
|
||||||
Translation lang( s, Translation::LabelFormat::AlwaysWithCountry );
|
Translation lang( { s }, Translation::LabelFormat::AlwaysWithCountry );
|
||||||
return lang.label();
|
return lang.label();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user