aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qmmp/qmmp.cpp25
-rw-r--r--src/qmmp/qmmp.h12
-rw-r--r--src/qmmpui/configdialog.cpp42
-rw-r--r--src/qmmpui/configdialog.h1
-rw-r--r--src/qmmpui/forms/configdialog.ui2
5 files changed, 80 insertions, 2 deletions
diff --git a/src/qmmp/qmmp.cpp b/src/qmmp/qmmp.cpp
index 05987b7f9..69127abad 100644
--- a/src/qmmp/qmmp.cpp
+++ b/src/qmmp/qmmp.cpp
@@ -31,6 +31,7 @@
#include "qmmp.h"
QString Qmmp::m_configFile;
+QString Qmmp::m_langID;
const QString Qmmp::configFile()
{
@@ -78,6 +79,15 @@ const QString Qmmp::pluginsPath()
QString Qmmp::systemLanguageID()
{
+ if(m_langID.isEmpty())
+ {
+ m_langID = uiLanguageID();
+ qDebug("Qmmp: ui language: %s", qPrintable(m_langID));
+ }
+
+ if(m_langID != "auto")
+ return m_langID;
+
#ifdef Q_OS_UNIX
QByteArray v = qgetenv ("LC_ALL");
if (v.isEmpty())
@@ -89,3 +99,18 @@ QString Qmmp::systemLanguageID()
#endif
return QLocale::system().name();
}
+
+QString Qmmp::uiLanguageID()
+{
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ QString langID = settings.value("General/locale", "auto").toString();
+ langID = langID.isEmpty() ? "auto" : langID;
+ return langID;
+}
+
+void Qmmp::setUiLanguageID(const QString &code)
+{
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.setValue("General/locale", code);
+ m_langID.clear();
+}
diff --git a/src/qmmp/qmmp.h b/src/qmmp/qmmp.h
index 7317417b2..4cd81fd94 100644
--- a/src/qmmp/qmmp.h
+++ b/src/qmmp/qmmp.h
@@ -102,12 +102,22 @@ public:
*/
static const QString pluginsPath();
/*!
- * Returns system language
+ * Returns system language if uiLanguageID() is 'auto'. Otherwise returns uiLanguageID().
*/
static QString systemLanguageID();
+ /*!
+ * Returns state of the user interface language option. Code "auto" means autodetection.
+ */
+ static QString uiLanguageID();
+ /*!
+ * Sets user interface language.
+ * @param code Language code; code "auto" means autodetection.
+ */
+ static void setUiLanguageID(const QString &code);
private:
static QString m_configFile;
+ static QString m_langID;
};
diff --git a/src/qmmpui/configdialog.cpp b/src/qmmpui/configdialog.cpp
index 78b62e2cc..f97b9aa06 100644
--- a/src/qmmpui/configdialog.cpp
+++ b/src/qmmpui/configdialog.cpp
@@ -69,6 +69,7 @@ ConfigDialog::ConfigDialog (QWidget *parent) : QDialog (parent)
m_ui->replayGainModeComboBox->addItem (tr("Disabled"), QmmpSettings::REPLAYGAIN_DISABLED);
readSettings();
loadPluginsInfo();
+ loadLanguages();
createMenus();
//setup icons
m_ui->preferencesButton->setIcon(QIcon::fromTheme("configure"));
@@ -297,6 +298,43 @@ void ConfigDialog::createMenus()
connect(menu, SIGNAL(triggered (QAction *)), SLOT(addTitleString(QAction *)));
}
+void ConfigDialog::loadLanguages()
+{
+ QMap<QString, QString> l;
+ l["auto"] = tr("<Autodetect>");
+ l["pt_BR"] = tr("Brazilian Portuguese");
+ l["zh_CN"] = tr("Chinese Simplified");
+ l["zh_TW"] = tr("Chinese Traditional");
+ l["cs"] = tr("Czech");
+ l["nl"] = tr("Dutch");
+ l["en_US"] = tr("English");
+ l["fr"] = tr("French");
+ l["de"] = tr("German");
+ l["hu"] = tr("Hungarian");
+ l["it"] = tr("Italian");
+ l["ja"] = tr("Japanese");
+ l["kk"] = tr("Kazakh");
+ l["lt"] = tr("Lithuanian");
+ l["pl_PL"] = tr("Polish");
+ l["ru_RU"] = tr("Russian");
+ l["sk"] = tr("Slovak");
+ l["es"] = tr("Spanish");
+ l["tr"] = tr("Turkish");
+ l["uk_UA"] = tr("Ukrainian");
+
+ foreach(QString code, l.keys())
+ {
+ QString title = code != "auto" ? l.value(code) + " (" + code + ")" : l.value(code);
+ m_ui->langComboBox->addItem(title, code);
+ }
+
+ QString code = Qmmp::uiLanguageID();
+ int index = m_ui->langComboBox->findData(code);
+ if(index < 0)
+ index = m_ui->langComboBox->findData("auto");
+ m_ui->langComboBox->setCurrentIndex(index);
+}
+
void ConfigDialog::addTitleString(QAction * a)
{
if (m_ui->formatLineEdit->cursorPosition () < 1)
@@ -351,6 +389,10 @@ void ConfigDialog::saveSettings()
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
settings.setValue("ConfigDialog/splitter_sizes", var_sizes);
settings.setValue("ConfigDialog/window_size", size());
+ //User interface language
+ int index = m_ui->langComboBox->currentIndex();
+ if(index >= 0)
+ Qmmp::setUiLanguageID(m_ui->langComboBox->itemData(index).toString());
}
void ConfigDialog::on_treeWidget_itemChanged (QTreeWidgetItem *item, int column)
diff --git a/src/qmmpui/configdialog.h b/src/qmmpui/configdialog.h
index 163df66ad..b039c3529 100644
--- a/src/qmmpui/configdialog.h
+++ b/src/qmmpui/configdialog.h
@@ -72,6 +72,7 @@ private:
void findSkins(const QString &path);
void loadPluginsInfo();
void createMenus();
+ void loadLanguages();
int m_insert_row;
Ui::ConfigDialog *m_ui;
diff --git a/src/qmmpui/forms/configdialog.ui b/src/qmmpui/forms/configdialog.ui
index 95183279a..14ecc4d49 100644
--- a/src/qmmpui/forms/configdialog.ui
+++ b/src/qmmpui/forms/configdialog.ui
@@ -724,7 +724,7 @@
<property name="title">
<string>Audio</string>
</property>
- <layout class="QGridLayout" name="gridLayout">
+ <layout class="QGridLayout" name="gridLayout3">
<item row="0" column="0">
<widget class="QLabel" name="label_20">
<property name="text">