[locale] Improve regional variant lookup
This commit is contained in:
parent
40d8e1e0f6
commit
18626901d3
@ -48,6 +48,13 @@ LocaleConfiguration::fromLanguageAndLocation( const QString& languageLocale,
|
|||||||
{
|
{
|
||||||
cDebug() << "Mapping" << languageLocale << "in" << countryCode << "to locale.";
|
cDebug() << "Mapping" << languageLocale << "in" << countryCode << "to locale.";
|
||||||
QString language = languageLocale.split( '_' ).first();
|
QString language = languageLocale.split( '_' ).first();
|
||||||
|
QString region;
|
||||||
|
if ( language.contains( '@' ) )
|
||||||
|
{
|
||||||
|
auto r = language.split( '@' );
|
||||||
|
language = r.first();
|
||||||
|
region = r[ 1 ]; // second()
|
||||||
|
}
|
||||||
|
|
||||||
// Either an exact match, or the whole language part matches
|
// Either an exact match, or the whole language part matches
|
||||||
// (followed by .<encoding> or _<country>
|
// (followed by .<encoding> or _<country>
|
||||||
@ -75,16 +82,33 @@ LocaleConfiguration::fromLanguageAndLocation( const QString& languageLocale,
|
|||||||
# locale categories reflect the selected location. */
|
# locale categories reflect the selected location. */
|
||||||
if ( language == "pt" || language == "zh" )
|
if ( language == "pt" || language == "zh" )
|
||||||
{
|
{
|
||||||
|
cDebug() << Logger::SubEntry << "Special-case Portuguese and Chinese";
|
||||||
QString proposedLocale = QString( "%1_%2" ).arg( language ).arg( countryCode );
|
QString proposedLocale = QString( "%1_%2" ).arg( language ).arg( countryCode );
|
||||||
for ( const QString& line : linesForLanguage )
|
for ( const QString& line : linesForLanguage )
|
||||||
{
|
{
|
||||||
if ( line.contains( proposedLocale ) )
|
if ( line.contains( proposedLocale ) )
|
||||||
{
|
{
|
||||||
|
cDebug() << Logger::SubEntry << "Country-variant" << line << "chosen.";
|
||||||
lang = line;
|
lang = line;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ( lang.isEmpty() && !region.isEmpty() )
|
||||||
|
{
|
||||||
|
cDebug() << Logger::SubEntry << "Special-case region @" << region;
|
||||||
|
QString proposedRegion = QString( "@%1" ).arg( region );
|
||||||
|
for ( const QString& line : linesForLanguage )
|
||||||
|
{
|
||||||
|
if ( line.startsWith( language ) && line.contains( proposedRegion ) )
|
||||||
|
{
|
||||||
|
cDebug() << Logger::SubEntry << "Region-variant" << line << "chosen.";
|
||||||
|
lang = line;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// If we found no good way to set a default lang, do a search with the whole
|
// If we found no good way to set a default lang, do a search with the whole
|
||||||
// language locale and pick the first result, if any.
|
// language locale and pick the first result, if any.
|
||||||
|
Loading…
Reference in New Issue
Block a user