Change the API to force strong type for more methods.
This cascades to a couple of consumers.
* Returns a pair of nullptrs for non-special cases.
*/
static std::pair< QLocale*, QString* >
* Returns a pair of nullptrs for non-special cases.
*/
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" )
{
static QLocale loc( QLocale::Language::Serbian, QLocale::Script::LatinScript, QLocale::Country::Serbia );
if ( localeName == "sr@latin" )
{
static QLocale loc( QLocale::Language::Serbian, QLocale::Script::LatinScript, QLocale::Country::Serbia );
{
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 )
- , m_locale( getLocale( locale ) )
- , m_localeId( locale.isEmpty() ? m_locale.name() : locale )
+ , m_locale( getLocale( localeId ) )
+ , 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)" );
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 ?
m_locale.nativeCountryName()
QString countryName = ( needsCountryName ?
m_locale.nativeCountryName()
-Translation::getLocale( const QString& localeName )
+Translation::getLocale( const Id& localeId )
+ const QString& localeName = localeId.name;
if ( localeName.isEmpty() )
{
return QLocale();
}
if ( localeName.isEmpty() )
{
return QLocale();
}
- auto [ locale, _ ] = specialCase( localeName );
+ auto [ locale, _ ] = specialCase( localeId );
return locale ? *locale : QLocale( localeName );
}
return locale ? *locale : QLocale( localeName );
}
* The @p format determines whether the country name is always present
* in the label (human-readable form) or only if needed for disambiguation.
*/
* The @p format determines whether the country name is always present
* in the label (human-readable form) or only if needed for disambiguation.
*/
- Translation( const QString& localeName,
- LabelFormat format = LabelFormat::IfNeededWithCountry,
- QObject* parent = nullptr );
+ Translation( const Id& localeId, LabelFormat format = LabelFormat::IfNeededWithCountry, QObject* parent = nullptr );
/** @brief Define a sorting order.
/** @brief Define a sorting order.
*
* 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:
QLocale m_locale;
private:
QLocale m_locale;
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 ) );
{
using CalamaresUtils::Locale::Translation;
{
using CalamaresUtils::Locale::Translation;
- Translation lang( s, Translation::LabelFormat::AlwaysWithCountry );
+ Translation lang( { s }, Translation::LabelFormat::AlwaysWithCountry );