From 864a9135dcede1da38616ea9c4764670132382cf Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Tue, 5 Apr 2016 11:02:01 +1000 Subject: [PATCH] allow language changing in prefs avoided adding this in the past as on a multi user system it allows one profile user to annoys others by changing the interface language, but it comes at the expense of easily changing the language for users who choose the wrong one on first startup --- aqt/preferences.py | 24 ++++++++++++++++++++++++ aqt/profiles.py | 12 ++++++++---- designer/preferences.ui | 26 +++++++++++++++++++++++++- 3 files changed, 57 insertions(+), 5 deletions(-) diff --git a/aqt/preferences.py b/aqt/preferences.py index 68e62f741..379b82937 100644 --- a/aqt/preferences.py +++ b/aqt/preferences.py @@ -4,6 +4,7 @@ import datetime, time from aqt.qt import * +import anki.lang from aqt.utils import openFolder, showWarning, getText, openHelp, showInfo import aqt @@ -22,6 +23,7 @@ class Preferences(QDialog): self.form.buttonBox.button(QDialogButtonBox.Close).setAutoDefault(False) self.connect(self.form.buttonBox, SIGNAL("helpRequested()"), lambda: openHelp("profileprefs")) + self.setupLang() self.setupCollection() self.setupNetwork() self.setupBackup() @@ -43,6 +45,28 @@ class Preferences(QDialog): def reject(self): self.accept() + # Language + ###################################################################### + + def setupLang(self): + f = self.form + f.lang.addItems([x[0] for x in anki.lang.langs]) + f.lang.setCurrentIndex(self.langIdx()) + self.connect(f.lang, SIGNAL("currentIndexChanged(int)"), + self.onLangIdxChanged) + + def langIdx(self): + codes = [x[1] for x in anki.lang.langs] + try: + return codes.index(anki.lang.getLang()) + except: + return codes.index("en") + + def onLangIdxChanged(self, idx): + code = anki.lang.langs[idx][1] + self.mw.pm.setLang(code) + showInfo(_("Please restart Anki to complete language change."), parent=self) + # Collection options ###################################################################### diff --git a/aqt/profiles.py b/aqt/profiles.py index 7301e1e4e..66ae1ddc5 100644 --- a/aqt/profiles.py +++ b/aqt/profiles.py @@ -15,7 +15,7 @@ import re from aqt.qt import * from anki.db import DB from anki.utils import isMac, isWin, intTime, checksum -from anki.lang import langs +import anki.lang from aqt.utils import showWarning from aqt import appHelpSite import aqt.forms @@ -322,7 +322,7 @@ please see: # find index idx = None en = None - for c, (name, code) in enumerate(langs): + for c, (name, code) in enumerate(anki.lang.langs): if code == "en": en = c if code == lang: @@ -331,13 +331,13 @@ please see: if idx is None: idx = en # update list - f.lang.addItems([x[0] for x in langs]) + f.lang.addItems([x[0] for x in anki.lang.langs]) f.lang.setCurrentRow(idx) d.exec_() def _onLangSelected(self): f = self.langForm - obj = langs[f.lang.currentRow()] + obj = anki.lang.langs[f.lang.currentRow()] code = obj[1] name = obj[0] en = "Are you sure you wish to display Anki's interface in %s?" @@ -346,7 +346,11 @@ please see: QMessageBox.No) if r != QMessageBox.Yes: return self._setDefaultLang() + self.setLang(code) + + def setLang(self, code): self.meta['defaultLang'] = code sql = "update profiles set data = ? where name = ?" self.db.execute(sql, cPickle.dumps(self.meta), "_global") self.db.commit() + anki.lang.setLang(code, local=False) diff --git a/designer/preferences.ui b/designer/preferences.ui index 186314b9a..2fac561b4 100644 --- a/designer/preferences.ui +++ b/designer/preferences.ui @@ -7,7 +7,7 @@ 0 0 405 - 450 + 455 @@ -30,6 +30,27 @@ 12 + + + + + + Interface language: + + + + + + + + 0 + 0 + + + + + + @@ -413,6 +434,7 @@ + lang showEstimates showProgress stripHTML @@ -429,6 +451,8 @@ numBackups buttonBox tabWidget + fullSync + compressBackups