1
0
Fork 0
forked from len0rd/rockbox

Rockbox Utility: listen to translation change events.

When changing the language don't require a restart anymore. Instead listen to
the appropriate changeEvent and retranslate the UI. Designer generated UI files
already provide such a function.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30633 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Dominik Riebeling 2011-10-02 14:30:05 +00:00
parent d25341a032
commit 2e3de70401
21 changed files with 151 additions and 12 deletions

View file

@ -39,6 +39,7 @@
#include <tchar.h> #include <tchar.h>
#include <windows.h> #include <windows.h>
#endif #endif
#include "rbutilqt.h"
#define DEFAULT_LANG "English (en)" #define DEFAULT_LANG "English (en)"
#define DEFAULT_LANG_CODE "en" #define DEFAULT_LANG_CODE "en"
@ -147,13 +148,6 @@ void Config::accept()
else proxyType = "manual"; else proxyType = "manual";
RbSettings::setValue(RbSettings::ProxyType, proxyType); RbSettings::setValue(RbSettings::ProxyType, proxyType);
// language
if(RbSettings::value(RbSettings::Language).toString() != language
&& !language.isEmpty()) {
QMessageBox::information(this, tr("Language changed"),
tr("You need to restart the application for the changed language "
"to take effect."));
}
RbSettings::setValue(RbSettings::Language, language); RbSettings::setValue(RbSettings::Language, language);
// mountpoint // mountpoint
@ -563,10 +557,36 @@ QString Config::languageName(const QString &qmFile)
void Config::updateLanguage() void Config::updateLanguage()
{ {
qDebug() << "[Config] update selected language"; qDebug() << "[Config] update selected language";
// remove all old translators
for(int i = 0; i < RbUtilQt::translators.size(); ++i) {
qApp->removeTranslator(RbUtilQt::translators.at(i));
// do not delete old translators, this confuses Qt.
}
RbUtilQt::translators.clear();
QList<QListWidgetItem*> a = ui.listLanguages->selectedItems(); QList<QListWidgetItem*> a = ui.listLanguages->selectedItems();
if(a.size() > 0) if(a.size() > 0)
language = lang.value(a.at(0)->text()); language = lang.value(a.at(0)->text());
qDebug() << "[Config] new language:" << language; qDebug() << "[Config] new language:" << language;
QString applang = QLocale::system().name();
QTranslator *translator = new QTranslator(qApp);
QTranslator *qttrans = new QTranslator(qApp);
QString absolutePath = QCoreApplication::instance()->applicationDirPath();
if(!translator->load("rbutil_" + language, absolutePath))
translator->load("rbutil_" + language, ":/lang");
if(!qttrans->load("qt_" + language,
QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
qttrans->load("qt_" + language, ":/lang");
qApp->installTranslator(translator);
qApp->installTranslator(qttrans);
RbUtilQt::translators.append(translator);
RbUtilQt::translators.append(qttrans);
QLocale::setDefault(language);
} }
@ -878,3 +898,13 @@ void Config::configEnc()
updateEncState(); updateEncState();
} }
void Config::changeEvent(QEvent *e)
{
if(e->type() == QEvent::LanguageChange) {
ui.retranslateUi(this);
} else {
QWidget::changeEvent(e);
}
}

View file

@ -52,6 +52,7 @@ class Config : public QDialog
QUrl proxy; QUrl proxy;
QString mountpoint; QString mountpoint;
void updateCacheInfo(QString); void updateCacheInfo(QString);
void changeEvent(QEvent *event);
private slots: private slots:
void setNoProxy(bool); void setNoProxy(bool);

View file

@ -132,3 +132,13 @@ void CreateVoiceWindow::saveSettings(void)
ui.wavtrimthreshold->value()); ui.wavtrimthreshold->value());
RbSettings::sync(); RbSettings::sync();
} }
void CreateVoiceWindow::changeEvent(QEvent *e)
{
if(e->type() == QEvent::LanguageChange) {
ui.retranslateUi(this);
} else {
QWidget::changeEvent(e);
}
}

View file

@ -46,6 +46,7 @@ class CreateVoiceWindow : public QDialog
void settingsUpdated(void); void settingsUpdated(void);
private: private:
void changeEvent(QEvent *event);
VoiceFileCreator* voicecreator; VoiceFileCreator* voicecreator;
Ui::CreateVoiceFrm ui; Ui::CreateVoiceFrm ui;
ProgressLoggerGui* logger; ProgressLoggerGui* logger;

View file

@ -145,3 +145,13 @@ void InstallTalkWindow::updateSettings(void)
emit settingsUpdated(); emit settingsUpdated();
} }
void InstallTalkWindow::changeEvent(QEvent *e)
{
if(e->type() == QEvent::LanguageChange) {
ui.retranslateUi(this);
} else {
QWidget::changeEvent(e);
}
}

View file

@ -46,6 +46,7 @@ class InstallTalkWindow : public QDialog
void settingsUpdated(void); void settingsUpdated(void);
private: private:
void changeEvent(QEvent *event);
TalkFileCreator* talkcreator; TalkFileCreator* talkcreator;
Ui::InstallTalkFrm ui; Ui::InstallTalkFrm ui;
ProgressLoggerGui* logger; ProgressLoggerGui* logger;

View file

@ -317,4 +317,12 @@ void InstallWindow::setDetailsArchived(bool show)
} }
void InstallWindow::changeEvent(QEvent *e)
{
if(e->type() == QEvent::LanguageChange) {
ui.retranslateUi(this);
} else {
QWidget::changeEvent(e);
}
}

View file

@ -46,6 +46,7 @@ class InstallWindow : public QDialog
ZipInstaller* installer; ZipInstaller* installer;
QString m_backupName; QString m_backupName;
void resizeEvent(QResizeEvent*); void resizeEvent(QResizeEvent*);
void changeEvent(QEvent *event);
void changeBackupPath(QString); void changeBackupPath(QString);
void updateBackupLocation(void); void updateBackupLocation(void);

View file

@ -71,7 +71,13 @@ int main( int argc, char ** argv ) {
if(QObject::tr("LTR") == "RTL") if(QObject::tr("LTR") == "RTL")
app.setLayoutDirection(Qt::RightToLeft); app.setLayoutDirection(Qt::RightToLeft);
// keep a list of installed translators. Needed to be able uninstalling them
// later again (in case of translation changes)
QList<QTranslator*> translators;
translators.append(&translator);
translators.append(&qttrans);
RbUtilQt window(0); RbUtilQt window(0);
RbUtilQt::translators = translators;
window.show(); window.show();
// app.connect( &app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()) ); // app.connect( &app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()) );

View file

@ -54,6 +54,16 @@ void PreviewDlg::leaveEvent(QEvent * event)
this->close(); this->close();
} }
void PreviewDlg::changeEvent(QEvent *e)
{
if(e->type() == QEvent::LanguageChange) {
ui.retranslateUi(this);
} else {
QWidget::changeEvent(e);
}
}
PreviewLabel::PreviewLabel(QWidget * parent, Qt::WindowFlags f) PreviewLabel::PreviewLabel(QWidget * parent, Qt::WindowFlags f)
:QLabel(parent,f) :QLabel(parent,f)
{ {

View file

@ -36,6 +36,7 @@ public:
void setText(QString text); void setText(QString text);
private slots: private slots:
void changeEvent(QEvent *event);
void mouseMoveEvent(QMouseEvent * event); void mouseMoveEvent(QMouseEvent * event);
void leaveEvent(QEvent * event); void leaveEvent(QEvent * event);

View file

@ -57,6 +57,8 @@
#include <windows.h> #include <windows.h>
#endif #endif
QList<QTranslator*> RbUtilQt::translators;
RbUtilQt::RbUtilQt(QWidget *parent) : QMainWindow(parent) RbUtilQt::RbUtilQt(QWidget *parent) : QMainWindow(parent)
{ {
// startup log // startup log
@ -1380,3 +1382,13 @@ void RbUtilQt::downloadUpdateDone(bool error)
} }
} }
void RbUtilQt::changeEvent(QEvent *e)
{
if(e->type() == QEvent::LanguageChange) {
ui.retranslateUi(this);
} else {
QMainWindow::changeEvent(e);
}
}

View file

@ -25,6 +25,8 @@
#include <QSettings> #include <QSettings>
#include <QTemporaryFile> #include <QTemporaryFile>
#include <QList>
#include <QTranslator>
#include "ui_rbutilqtfrm.h" #include "ui_rbutilqtfrm.h"
#include "httpget.h" #include "httpget.h"
@ -38,10 +40,12 @@ class RbUtilQt : public QMainWindow
public: public:
RbUtilQt(QWidget *parent = 0); RbUtilQt(QWidget *parent = 0);
static QList<QTranslator*> translators;
private: private:
Ui::RbUtilQtFrm ui; Ui::RbUtilQtFrm ui;
void changeEvent(QEvent *e);
void initDeviceNames(void); void initDeviceNames(void);
QString deviceName(QString); QString deviceName(QString);
QString platform; QString platform;

View file

@ -81,3 +81,12 @@ QString Sysinfo::getInfo()
} }
void Sysinfo::changeEvent(QEvent *e)
{
if(e->type() == QEvent::LanguageChange) {
ui.retranslateUi(this);
} else {
QWidget::changeEvent(e);
}
}

View file

@ -34,10 +34,11 @@ class Sysinfo : public QDialog
static QString getInfo(); static QString getInfo();
private: private:
void changeEvent(QEvent *event);
Ui::SysinfoFrm ui; Ui::SysinfoFrm ui;
private slots: private slots:
void updateSysinfo(void); void updateSysinfo(void);
}; };

View file

@ -121,3 +121,13 @@ void SysTrace::flush(void)
} }
} }
void SysTrace::changeEvent(QEvent *e)
{
if(e->type() == QEvent::LanguageChange) {
ui.retranslateUi(this);
} else {
QWidget::changeEvent(e);
}
}

View file

@ -35,6 +35,7 @@ class SysTrace : public QDialog
static void save(QString filename = ""); static void save(QString filename = "");
private: private:
static void flush(void); static void flush(void);
void changeEvent(QEvent *event);
Ui::SysTraceFrm ui; Ui::SysTraceFrm ui;
static QString debugbuffer; static QString debugbuffer;
static QString lastmessage; static QString lastmessage;

View file

@ -359,3 +359,13 @@ void ThemesInstallWindow::accept()
} }
void ThemesInstallWindow::changeEvent(QEvent *e)
{
if(e->type() == QEvent::LanguageChange) {
ui.retranslateUi(this);
} else {
QWidget::changeEvent(e);
}
}

View file

@ -49,6 +49,7 @@ class ThemesInstallWindow : public QDialog
HttpGet igetter; HttpGet igetter;
QTemporaryFile themesInfo; QTemporaryFile themesInfo;
void resizeEvent(QResizeEvent*); void resizeEvent(QResizeEvent*);
void changeEvent(QEvent *event);
QByteArray imgData; QByteArray imgData;
ProgressLoggerGui *logger; ProgressLoggerGui *logger;
ZipInstaller *installer; ZipInstaller *installer;

View file

@ -89,3 +89,13 @@ void UninstallWindow::UninstallMethodChanged(bool complete)
ui.smartGroupBox->setEnabled(true); ui.smartGroupBox->setEnabled(true);
} }
void UninstallWindow::changeEvent(QEvent *e)
{
if(e->type() == QEvent::LanguageChange) {
ui.retranslateUi(this);
} else {
QWidget::changeEvent(e);
}
}

View file

@ -40,7 +40,9 @@ class UninstallWindow : public QDialog
private slots: private slots:
void selectionChanged(); void selectionChanged();
void UninstallMethodChanged(bool complete); void UninstallMethodChanged(bool complete);
private: private:
void changeEvent(QEvent *event);
Uninstaller* uninstaller; Uninstaller* uninstaller;
Ui::UninstallFrm ui; Ui::UninstallFrm ui;
ProgressLoggerGui* logger; ProgressLoggerGui* logger;