void KCMRegionAndLang::save()
{
- if (!settings()->isDefaultSetting(SettingType::Lang)) {
- settings()->setLC_Vars(settings()->lang());
- }
-
if (settings()->isSaveNeeded()) {
// assemble full locales in use
QStringList locales;
return;
case SettingType::Lang:
entry = "LANG";
- settings()->setLang(settings()->defaultLangValue());
+ settings()->setLang(QString());
break;
case SettingType::Numeric:
entry = "LC_NUMERIC";
#ifdef GLIBC_LOCALE
std::unordered_map<QString, QString> KCMRegionAndLang::constructGlibcLocaleMap()
{
- std::unordered_map<QString, QString> localeMap;
+ std::unordered_map<QString, QString> localeMap = {{QStringLiteral("C"), QStringLiteral("C")}};
QDir glibcLocaleDir(localeFileDirPath());
auto availableLocales = glibcLocaleDir.entryList(QDir::Files);
return;
}
if (m_selectedLanguages.empty()) {
- m_settings->setLang(m_settings->defaultLangValue());
+ m_settings->setLang(m_settings->langWithFallback());
m_settings->config()->group(QStringLiteral("Formats")).deleteEntry("lang");
m_settings->config()->group(QStringLiteral("Translations")).deleteEntry("language");
} else {
Q_ASSERT(false); // shouldn't happen
return {};
case Lang:
- if (m_settings->defaultLangValue().isEmpty() && m_settings->isDefaultSetting(SettingType::Lang)) {
- // no Lang configured, no $LANG in env
- return i18nc("@info:title, the current setting is system default", "System Default");
- } else if (!m_settings->lang().isEmpty() && m_settings->lang() != m_settings->defaultLangValue()) {
- // Lang configured and not empty
- return getNativeName(m_settings->lang());
- } else {
- // Lang configured but empty, try to read from $LANGUAGE first.
- if (const QString languages = m_settings->defaultLanguageValue(); !languages.isEmpty()) {
- // If the first language is invalid, just fall through to $LANG
- const QStringList languageList = languages.split(QLatin1Char(':'));
- if (const QString firstLanguage = getNativeName(languageList[0]); !firstLanguage.isEmpty()) {
- return firstLanguage;
- }
- }
-
- // Lang configured but empty, try to read from $LANG, shouldn't happen on a valid config file
- return getNativeName(m_settings->defaultLangValue());
- }
+ return getNativeName(m_settings->langWithFallback());
case Numeric:
if (m_settings->isDefaultSetting(SettingType::Numeric)) {
return getNativeName(m_settings->numeric());
if (!m_settings->lang().isEmpty()) {
locale = getNativeName(m_settings->lang());
- } else if (!m_settings->defaultLangValue().isEmpty()) {
- locale = getNativeName(m_settings->defaultLangValue());
+ } else if (!m_settings->langWithFallback().isEmpty()) {
+ locale = getNativeName(m_settings->langWithFallback());
} else {
locale = i18nc("@info:title, the current setting is system default", "System Default");
}
using KCM_RegionAndLang::SettingType;
+RegionAndLangSettings::RegionAndLangSettings(QObject *parent)
+ : RegionAndLangSettingsBase(parent)
+{
+ connect(this, &RegionAndLangSettings::langChanged, this, [this] {
+ this->setLC_Vars(this->lang());
+ });
+}
+
bool RegionAndLangSettings::isDefaultSetting(SettingType setting) const
{
switch (setting) {
case SettingType::Lang:
- return lang() == defaultLangValue();
+ return lang().isEmpty();
case SettingType::Language:
return language() == defaultLanguageValue();
case SettingType::Numeric:
QString RegionAndLangSettings::langWithFallback() const
{
QString lang = RegionAndLangSettings::lang();
- if (!(isDefaultSetting(SettingType::Lang) && lang.isEmpty())) {
- if (QString envLang = qEnvironmentVariable("LANG"); !envLang.isEmpty()) {
- envLang.replace(QStringLiteral("utf8"), QStringLiteral("UTF-8"));
- return envLang;
- }
- return QLocale::system().name();
+ if (!lang.isEmpty()) {
+ return lang;
+ }
+ if (QString envLang = qEnvironmentVariable("LANG"); !envLang.isEmpty()) {
+ envLang.replace(QStringLiteral("utf8"), QStringLiteral("UTF-8"));
+ return envLang;
}
- return lang;
+ return QLocale::system().name();
}
QString RegionAndLangSettings::LC_LocaleWithLang(SettingType setting) const
{
Q_OBJECT
public:
- using RegionAndLangSettingsBase::RegionAndLangSettingsBase;
+ RegionAndLangSettings(QObject *parent = nullptr);
bool isDefaultSetting(KCM_RegionAndLang::SettingType setting) const;
QString langWithFallback() const;
QString LC_LocaleWithLang(KCM_RegionAndLang::SettingType setting) const;
<kcfgfile name="plasma-localerc" />
<group name="Formats">
<entry key="LANG" name="lang" type="String">
- <code>
- QString lang = QString::fromLocal8Bit(qgetenv("LANG"));
- </code>
- <default code="true">lang</default>
</entry>
<entry key="LC_NUMERIC" name="numeric" type="String">
<default code="true">i18n("Inherit Language")</default>