diff --git a/kcms/translations/translations.cpp b/kcms/translations/translations.cpp --- a/kcms/translations/translations.cpp +++ b/kcms/translations/translations.cpp @@ -21,15 +21,16 @@ #include "translations.h" #include "translationsmodel.h" -#include "writeexports.h" - #include #include #include #include K_PLUGIN_CLASS_WITH_JSON(Translations, "kcm_translations.json") +static const QString configFile = QStringLiteral("plasma-localerc"); +static const QString lcLanguage = QStringLiteral("LANGUAGE"); + Translations::Translations(QObject *parent, const QVariantList &args) : KQuickAddons::ConfigModule(parent, args) , m_translationsModel(new TranslationsModel(this)) @@ -103,8 +104,6 @@ m_config.writeEntry(lcLanguage, m_configuredLanguages.join(QLatin1Char(':')), KConfig::Persistent); m_config.sync(); - writeExports(); - m_selectedTranslationsModel->setSelectedLanguages(m_configuredLanguages); } diff --git a/kcms/translations/writeexports.h b/kcms/translations/writeexports.h deleted file mode 100644 --- a/kcms/translations/writeexports.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2014 Sebastian Kügler - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - */ - -#ifndef WRITEEXPORTS_H -#define WRITEEXPORTS_H - -#include -#include -#include - -#include - -const static QString configFile = QStringLiteral("plasma-localerc"); -const static QString exportFile = QStringLiteral("plasma-locale-settings.sh"); - -const static QString lcLang = QStringLiteral("LANG"); - -const static QString lcNumeric = QStringLiteral("LC_NUMERIC"); -const static QString lcTime = QStringLiteral("LC_TIME"); -const static QString lcMonetary = QStringLiteral("LC_MONETARY"); -const static QString lcMeasurement = QStringLiteral("LC_MEASUREMENT"); -const static QString lcCollate = QStringLiteral("LC_COLLATE"); -const static QString lcCtype = QStringLiteral("LC_CTYPE"); - -const static QString lcLanguage = QStringLiteral("LANGUAGE"); - - -void writeExports() -{ - const QString configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + exportFile; - - QString script(QStringLiteral("# Generated script, do not edit\n")); - script.append(QLatin1String("# Exports language-format specific env vars from startkde.\n")); - script.append(QLatin1String("# This script has been generated from kcmshell5 formats.\n")); - script.append(QLatin1String("# It will automatically be overwritten from there.\n")); - KConfigGroup formatsConfig = KConfigGroup(KSharedConfig::openConfig(configFile), "Formats"); - KConfigGroup languageConfig = KConfigGroup(KSharedConfig::openConfig(configFile), "Translations"); - - const QString _export = QStringLiteral("export "); - - // Formats, uses LC_* and LANG variables - const QString lang = formatsConfig.readEntry(lcLang, QString()); - if (!lang.isEmpty()) { - script.append(_export + lcLang + QLatin1Char('=') + lang + QLatin1Char('\n')); - } - - const QString numeric = formatsConfig.readEntry(lcNumeric, QString()); - if (!numeric.isEmpty()) { - script.append(_export + lcNumeric + QLatin1Char('=') + numeric + QLatin1Char('\n')); - } - - const QString time = formatsConfig.readEntry(lcTime, QString()); - if (!time.isEmpty()) { - script.append(_export + lcTime + QLatin1Char('=') + time + QLatin1Char('\n')); - } - - const QString monetary = formatsConfig.readEntry(lcMonetary, QString()); - if (!monetary.isEmpty()) { - script.append(_export + lcMonetary + QLatin1Char('=') + monetary + QLatin1Char('\n')); - } - - const QString measurement = formatsConfig.readEntry(lcMeasurement, QString()); - if (!measurement.isEmpty()) { - script.append(_export + lcMeasurement + QLatin1Char('=') + measurement + QLatin1Char('\n')); - } - - const QString collate = formatsConfig.readEntry(lcCollate, QString()); - if (!collate.isEmpty()) { - script.append(_export + lcCollate + QLatin1Char('=') + collate + QLatin1Char('\n')); - } - - const QString ctype = formatsConfig.readEntry(lcCtype, QString()); - if (!ctype.isEmpty()) { - script.append(_export + lcCtype + QLatin1Char('=') + ctype + QLatin1Char('\n')); - } - - // Translations, uses LANGUAGE variable - const QString language = languageConfig.readEntry(lcLanguage, QString()); - if (!language.isEmpty()) { - script.append(_export + lcLanguage + QLatin1Char('=') + language + QLatin1Char('\n')); - } - - - - QFile file(configPath); - file.open(QIODevice::WriteOnly | QIODevice::Text); - QTextStream out(&file); - - qDebug() << "Wrote script: " << configPath << "\n" << script; - out << script; - file.close(); -} - -#endif diff --git a/startkde/startplasma.cpp b/startkde/startplasma.cpp --- a/startkde/startplasma.cpp +++ b/startkde/startplasma.cpp @@ -117,19 +117,31 @@ void runStartupConfig() { - const QString configDir = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation); + //export LC_* variables set by kcmshell5 formats into environment + //so it can be picked up by QLocale and friends. + KConfig config(QStringLiteral("plasma-localerc")); + KConfigGroup formatsConfig = KConfigGroup(&config, "Formats"); + + const auto lcValues = { + "LANG", "LC_NUMERIC", "LC_MONETARY", "LC_MEASUREMENT", "LC_COLLATE", "LC_CTYPE" + }; + for (auto lc : lcValues) { + const QString value = formatsConfig.readEntry(lc, QString()); + if (!value.isEmpty()) { + qputenv(lc, value.toUtf8()); + } + } - const QString localerc(configDir + QLatin1String("/plasma-localerc")); - if (!QFile::exists(localerc)) { - QFile f(localerc); - f.open(QFile::WriteOnly); - f.write("[Formats]\n" - "LANG=" + qgetenv("LANG") + '\n'); + KConfigGroup languageConfig = KConfigGroup(&config, "Translations"); + const QString value = formatsConfig.readEntry("LANGUAGE", QString()); + if (!value.isEmpty()) { + qputenv("LANGUAGE", value.toUtf8()); } - //export LC_* variables set by kcmshell5 formats into environment - //so it can be picked up by QLocale and friends. - sourceFiles({configDir + QStringLiteral("/plasma-locale-settings.sh")}); + if (!formatsConfig.hasKey("LANG") && !qEnvironmentVariableIsEmpty("LANG")) { + formatsConfig.writeEntry("LANG", qgetenv("LANG")); + formatsConfig.sync(); + } } void setupCursor(bool wayland)