From 2453e5c4883ba7a9e2c17bc8c4e18e2698d88447 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Tue, 17 Nov 2020 21:47:47 +1000 Subject: [PATCH] update temporary val="%s" references to standard ftl --- pylib/anki/importing/anki2.py | 20 ++++++++++------- pylib/anki/importing/csvfile.py | 2 +- pylib/anki/importing/noteimp.py | 22 ++++++++++-------- pylib/anki/latex.py | 4 ++-- qt/aqt/about.py | 4 ++-- qt/aqt/addcards.py | 2 +- qt/aqt/addons.py | 11 +++------ qt/aqt/browser.py | 12 +++++----- qt/aqt/clayout.py | 8 +++---- qt/aqt/customstudy.py | 8 +++---- qt/aqt/deckbrowser.py | 4 ++-- qt/aqt/deckconf.py | 8 +++---- qt/aqt/dyndeckconf.py | 2 +- qt/aqt/editor.py | 8 +++---- qt/aqt/exporting.py | 2 +- qt/aqt/fields.py | 8 +++---- qt/aqt/importing.py | 8 +++---- qt/aqt/main.py | 16 +++++-------- qt/aqt/models.py | 6 ++--- qt/aqt/overview.py | 2 +- qt/aqt/profiles.py | 3 +-- qt/aqt/reviewer.py | 8 +++---- qt/aqt/sound.py | 2 +- qt/aqt/toolbar.py | 10 ++++----- qt/aqt/update.py | 2 +- qt/aqt/utils.py | 2 +- repos.bzl | 40 ++++++++++++++++----------------- 27 files changed, 108 insertions(+), 116 deletions(-) diff --git a/pylib/anki/importing/anki2.py b/pylib/anki/importing/anki2.py index da62412a6..6eb6a9c59 100644 --- a/pylib/anki/importing/anki2.py +++ b/pylib/anki/importing/anki2.py @@ -131,26 +131,30 @@ class Anki2Importer(Importer): else: dupesIdentical.append(note) - self.log.append(self.dst.tr(TR.IMPORTING_NOTES_FOUND_IN_FILE, val="%s") % total) + self.log.append(self.dst.tr(TR.IMPORTING_NOTES_FOUND_IN_FILE, val=total)) if dupesIgnored: self.log.append( - self.dst.tr(TR.IMPORTING_NOTES_THAT_COULD_NOT_BE_IMPORTED, val="%s") - % len(dupesIgnored) + self.dst.tr( + TR.IMPORTING_NOTES_THAT_COULD_NOT_BE_IMPORTED, val=len(dupesIgnored) + ) ) if update: self.log.append( - self.dst.tr(TR.IMPORTING_NOTES_UPDATED_AS_FILE_HAD_NEWER, val="%s") - % len(update) + self.dst.tr( + TR.IMPORTING_NOTES_UPDATED_AS_FILE_HAD_NEWER, val=len(update) + ) ) if add: self.log.append( - self.dst.tr(TR.IMPORTING_NOTES_ADDED_FROM_FILE, val="%s") % len(add) + self.dst.tr(TR.IMPORTING_NOTES_ADDED_FROM_FILE, val=len(add)) ) if dupesIdentical: self.log.append( - self.dst.tr(TR.IMPORTING_NOTES_SKIPPED_AS_THEYRE_ALREADY_IN, val="%s") - % len(dupesIdentical) + self.dst.tr( + TR.IMPORTING_NOTES_SKIPPED_AS_THEYRE_ALREADY_IN, + val=len(dupesIdentical), + ) ) self.log.append("") diff --git a/pylib/anki/importing/csvfile.py b/pylib/anki/importing/csvfile.py index 4fa6decd8..c76a15295 100644 --- a/pylib/anki/importing/csvfile.py +++ b/pylib/anki/importing/csvfile.py @@ -55,7 +55,7 @@ class TextImporter(NoteImporter): note = self.noteFromFields(row) notes.append(note) except (csv.Error) as e: - log.append(self.col.tr(TR.IMPORTING_ABORTED, val="%s") % str(e)) + log.append(self.col.tr(TR.IMPORTING_ABORTED, val=str(e))) self.log = log self.ignored = ignored self.close() diff --git a/pylib/anki/importing/noteimp.py b/pylib/anki/importing/noteimp.py index 70eed0698..e4a380c06 100644 --- a/pylib/anki/importing/noteimp.py +++ b/pylib/anki/importing/noteimp.py @@ -136,10 +136,6 @@ class NoteImporter(Importer): # loop through the notes updates = [] updateLog = [] - updateLogTxt = self.col.tr(TR.IMPORTING_FIRST_FIELD_MATCHED, val="%s") - dupeLogTxt = self.col.tr( - TR.IMPORTING_ADDED_DUPLICATE_WITH_FIRST_FIELD, val="%s" - ) new = [] self._ids: List[int] = [] self._cards: List[Tuple] = [] @@ -157,15 +153,14 @@ class NoteImporter(Importer): # first field must exist if not fld0: self.log.append( - self.col.tr(TR.IMPORTING_EMPTY_FIRST_FIELD, val="%s") - % " ".join(n.fields) + self.col.tr(TR.IMPORTING_EMPTY_FIRST_FIELD, val=" ".join(n.fields)) ) continue # earlier in import? if fld0 in firsts and self.importMode != ADD_MODE: # duplicates in source file; log and ignore self.log.append( - self.col.tr(TR.IMPORTING_APPEARED_TWICE_IN_FILE, val="%s") % fld0 + self.col.tr(TR.IMPORTING_APPEARED_TWICE_IN_FILE, val=fld0) ) continue firsts[fld0] = True @@ -183,7 +178,11 @@ class NoteImporter(Importer): data = self.updateData(n, id, sflds) if data: updates.append(data) - updateLog.append(updateLogTxt % fld0) + updateLog.append( + self.col.tr( + TR.IMPORTING_FIRST_FIELD_MATCHED, val=fld0 + ) + ) dupeCount += 1 found = True elif self.importMode == IGNORE_MODE: @@ -193,7 +192,12 @@ class NoteImporter(Importer): if fld0 not in dupes: # only show message once, no matter how many # duplicates are in the collection already - updateLog.append(dupeLogTxt % fld0) + updateLog.append( + self.col.tr( + TR.IMPORTING_ADDED_DUPLICATE_WITH_FIRST_FIELD, + val=fld0, + ) + ) dupes.append(fld0) found = False # newly add diff --git a/pylib/anki/latex.py b/pylib/anki/latex.py index 35d4043fc..782502eb9 100644 --- a/pylib/anki/latex.py +++ b/pylib/anki/latex.py @@ -164,8 +164,8 @@ def _save_latex_image( def _errMsg(col: anki.collection.Collection, type: str, texpath: str) -> Any: - msg = (col.tr(TR.MEDIA_ERROR_EXECUTING, val="%s") % type) + "
" - msg += (col.tr(TR.MEDIA_GENERATED_FILE, val="%s") % texpath) + "
" + msg = col.tr(TR.MEDIA_ERROR_EXECUTING, val=type) + "
" + msg += col.tr(TR.MEDIA_GENERATED_FILE, val=texpath) + "
" try: with open(namedtmp("latex_log.txt", rm=False)) as f: log = f.read() diff --git a/qt/aqt/about.py b/qt/aqt/about.py index 5fa4ded54..79fee400e 100644 --- a/qt/aqt/about.py +++ b/qt/aqt/about.py @@ -101,13 +101,13 @@ system. It's free and open source." "Anki is licensed under the AGPL3 license. Please see " "the license file in the source distribution for more information." ) - abouttext += "

" + tr(TR.ABOUT_VERSION, val="%s") % versionWithBuild() + "
" + abouttext += "

" + tr(TR.ABOUT_VERSION, val=versionWithBuild()) + "
" abouttext += ("Python %s Qt %s PyQt %s
") % ( platform.python_version(), QT_VERSION_STR, PYQT_VERSION_STR, ) - abouttext += (tr(TR.ABOUT_VISIT_WEBSITE, val="%s") % aqt.appWebsite) + "" + abouttext += tr(TR.ABOUT_VISIT_WEBSITE, val=aqt.appWebsite) + "" # automatically sorted; add new lines at the end allusers = sorted( diff --git a/qt/aqt/addcards.py b/qt/aqt/addcards.py index b4a67cfa9..757c08f8a 100644 --- a/qt/aqt/addcards.py +++ b/qt/aqt/addcards.py @@ -88,7 +88,7 @@ class AddCards(QDialog): else: sc = "Ctrl+H" b.setShortcut(QKeySequence(sc)) - b.setToolTip(tr(TR.ADDING_SHORTCUT, val="%s") % shortcut(sc)) + b.setToolTip(tr(TR.ADDING_SHORTCUT, val=shortcut(sc))) qconnect(b.clicked, self.onHistory) b.setEnabled(False) self.historyButton = b diff --git a/qt/aqt/addons.py b/qt/aqt/addons.py index e6c8adae9..4bd8c1ad5 100644 --- a/qt/aqt/addons.py +++ b/qt/aqt/addons.py @@ -422,7 +422,7 @@ and have been disabled: %(found)s" return True except OSError as e: showWarning( - tr(TR.ADDONS_UNABLE_TO_UPDATE_OR_DELETE_ADDON, val="%s") % e, + tr(TR.ADDONS_UNABLE_TO_UPDATE_OR_DELETE_ADDON, val=str(e)), textFormat="plain", ) return False @@ -740,9 +740,7 @@ class AddonsDialog(QDialog): return name + " " + tr(TR.ADDONS_DISABLED2) elif not addon.compatible(): return ( - name - + " " - + tr(TR.ADDONS_REQUIRES, val="%s") % self.compatible_string(addon) + name + " " + tr(TR.ADDONS_REQUIRES, val=self.compatible_string(addon)) ) return name @@ -1007,10 +1005,7 @@ def describe_log_entry(id_and_entry: DownloadLogEntry) -> str: if entry.status_code in (403, 404): buf += tr(TR.ADDONS_INVALID_CODE_OR_ADDON_NOT_AVAILABLE) else: - buf += ( - tr(TR.QT_MISC_UNEXPECTED_RESPONSE_CODE, val="%s") - % entry.status_code - ) + buf += tr(TR.QT_MISC_UNEXPECTED_RESPONSE_CODE, val=entry.status_code) else: buf += ( tr(TR.ADDONS_PLEASE_CHECK_YOUR_INTERNET_CONNECTION) diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index 8f328e4a6..d76558d3e 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -621,7 +621,7 @@ class Browser(QMainWindow): f = self.form qconnect(f.previewButton.clicked, self.onTogglePreview) f.previewButton.setToolTip( - tr(TR.BROWSING_PREVIEW_SELECTED_CARD, val="%s") % shortcut("Ctrl+Shift+P") + tr(TR.BROWSING_PREVIEW_SELECTED_CARD, val=shortcut("Ctrl+Shift+P")) ) f.previewButton.setShortcut("Ctrl+Shift+P") @@ -1406,9 +1406,7 @@ QTableView {{ gridline-color: {grid} }} def _onRemoveFilter(self): name = self._currentFilterIsSaved() - if not askUser( - tr(TR.BROWSING_REMOVE_FROM_YOUR_SAVED_SEARCHES, val="%s") % name - ): + if not askUser(tr(TR.BROWSING_REMOVE_FROM_YOUR_SAVED_SEARCHES, val=name)): return del self.col.conf["savedFilters"][name] self.col.setMod() @@ -1751,8 +1749,8 @@ where id in %s""" ) pmin = pmin or 0 pmax = pmax or 0 - txt = tr(TR.BROWSING_QUEUE_TOP, val="%s") % pmin - txt += "\n" + tr(TR.BROWSING_QUEUE_BOTTOM, val="%s") % pmax + txt = tr(TR.BROWSING_QUEUE_TOP, val=pmin) + txt += "\n" + tr(TR.BROWSING_QUEUE_BOTTOM, val=pmax) frm.label.setText(txt) frm.start.selectAll() if not d.exec_(): @@ -2192,7 +2190,7 @@ class ChangeModel(QDialog): targets = [x["name"] for x in dst] + [tr(TR.BROWSING_NOTHING)] indices = {} for i, x in enumerate(src): - l.addWidget(QLabel(tr(TR.BROWSING_CHANGE_TO, val="%s") % x["name"]), i, 0) + l.addWidget(QLabel(tr(TR.BROWSING_CHANGE_TO, val=x["name"])), i, 0) cb = QComboBox() cb.addItems(targets) idx = min(i, len(targets) - 1) diff --git a/qt/aqt/clayout.py b/qt/aqt/clayout.py index 8594f3300..be2648c90 100644 --- a/qt/aqt/clayout.py +++ b/qt/aqt/clayout.py @@ -67,7 +67,7 @@ class CardLayout(QDialog): self.setupButtons() self.setupShortcuts() self.setWindowTitle( - tr(TR.CARD_TEMPLATES_CARD_TYPES_FOR, val="%s") % self.model["name"] + tr(TR.CARD_TEMPLATES_CARD_TYPES_FOR, val=self.model["name"]) ) v1 = QVBoxLayout() v1.addWidget(self.topArea) @@ -244,7 +244,7 @@ class CardLayout(QDialog): qconnect(widg.returnPressed, self.on_search_next) def setup_cloze_number_box(self): - names = (tr(TR.CARD_TEMPLATES_CLOZE, val="%s") % n for n in self.cloze_numbers) + names = (tr(TR.CARD_TEMPLATES_CLOZE, val=n) for n in self.cloze_numbers) self.pform.cloze_number_combo.addItems(names) try: idx = self.cloze_numbers.index(self.ord + 1) @@ -603,7 +603,7 @@ class CardLayout(QDialog): template = self.current_template() current_pos = self.templates.index(template) + 1 pos = getOnlyText( - tr(TR.CARD_TEMPLATES_ENTER_NEW_CARD_POSITION_1, val="%s") % n, + tr(TR.CARD_TEMPLATES_ENTER_NEW_CARD_POSITION_1, val=n), default=str(current_pos), ) if not pos: @@ -626,7 +626,7 @@ class CardLayout(QDialog): def _newCardName(self): n = len(self.templates) + 1 while 1: - name = tr(TR.CARD_TEMPLATES_CARD, val="%s") % n + name = tr(TR.CARD_TEMPLATES_CARD, val=n) if name not in [t["name"] for t in self.templates]: break n += 1 diff --git a/qt/aqt/customstudy.py b/qt/aqt/customstudy.py index dc8415603..11424ab24 100644 --- a/qt/aqt/customstudy.py +++ b/qt/aqt/customstudy.py @@ -67,8 +67,8 @@ class CustomStudy(QDialog): new, self.conf["new"]["perDay"] - self.deck["newToday"][1] ) newExceeding = min(new, new - newUnderLearning) - tit = tr(TR.CUSTOM_STUDY_NEW_CARDS_IN_DECK_OVER_TODAY, val="%s") % plus( - newExceeding + tit = tr( + TR.CUSTOM_STUDY_NEW_CARDS_IN_DECK_OVER_TODAY, val=plus(newExceeding) ) pre = tr(TR.CUSTOM_STUDY_INCREASE_TODAYS_NEW_CARD_LIMIT_BY) sval = min(new, self.deck.get("extendNew", 10)) @@ -81,8 +81,8 @@ class CustomStudy(QDialog): rev, self.conf["rev"]["perDay"] - self.deck["revToday"][1] ) revExceeding = min(rev, rev - revUnderLearning) - tit = tr(TR.CUSTOM_STUDY_REVIEWS_DUE_IN_DECK_OVER_TODAY, val="%s") % plus( - revExceeding + tit = tr( + TR.CUSTOM_STUDY_REVIEWS_DUE_IN_DECK_OVER_TODAY, val=plus(revExceeding) ) pre = tr(TR.CUSTOM_STUDY_INCREASE_TODAYS_REVIEW_LIMIT_BY) sval = min(rev, self.deck.get("extendRev", 10)) diff --git a/qt/aqt/deckbrowser.py b/qt/aqt/deckbrowser.py index 34a833ffb..dbc01c5da 100644 --- a/qt/aqt/deckbrowser.py +++ b/qt/aqt/deckbrowser.py @@ -292,7 +292,7 @@ class DeckBrowser: deck["dyn"] or not extra or askUser( - (tr(TR.DECKS_ARE_YOU_SURE_YOU_WISH_TO, val="%s") % deck["name"]) + extra + (tr(TR.DECKS_ARE_YOU_SURE_YOU_WISH_TO, val=deck["name"])) + extra ) ): self.mw.progress.start() @@ -314,7 +314,7 @@ class DeckBrowser: drawLinks = deepcopy(self.drawLinks) for b in drawLinks: if b[0]: - b[0] = tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % shortcut(b[0]) + b[0] = tr(TR.ACTIONS_SHORTCUT_KEY, val=shortcut(b[0])) buf += """ """ % tuple( b diff --git a/qt/aqt/deckconf.py b/qt/aqt/deckconf.py index 714c16be4..3c73d712a 100644 --- a/qt/aqt/deckconf.py +++ b/qt/aqt/deckconf.py @@ -45,7 +45,7 @@ class DeckConf(QDialog): self.form.buttonBox.button(QDialogButtonBox.RestoreDefaults).clicked, self.onRestore, ) - self.setWindowTitle(tr(TR.ACTIONS_OPTIONS_FOR, val="%s") % self.deck["name"]) + self.setWindowTitle(tr(TR.ACTIONS_OPTIONS_FOR, val=self.deck["name"])) # qt doesn't size properly with altered fonts otherwise restoreGeom(self, "deckconf", adjustSize=True) gui_hooks.deck_conf_will_show(self) @@ -156,9 +156,7 @@ class DeckConf(QDialog): self.loadConfs() def setChildren(self): - if not askUser( - tr(TR.SCHEDULING_SET_ALL_DECKS_BELOW_TO, val="%s") % self.deck["name"] - ): + if not askUser(tr(TR.SCHEDULING_SET_ALL_DECKS_BELOW_TO, val=self.deck["name"])): return for did in self.childDids: deck = self.mw.col.decks.get(did) @@ -195,7 +193,7 @@ class DeckConf(QDialog): lim = x else: lim = min(x, lim) - return tr(TR.SCHEDULING_PARENT_LIMIT, val="%s") % lim + return tr(TR.SCHEDULING_PARENT_LIMIT, val=lim) def loadConf(self): self.conf = self.mw.col.decks.confForDid(self.deck["id"]) diff --git a/qt/aqt/dyndeckconf.py b/qt/aqt/dyndeckconf.py index a1e4f9f24..43b134be9 100644 --- a/qt/aqt/dyndeckconf.py +++ b/qt/aqt/dyndeckconf.py @@ -25,7 +25,7 @@ class DeckConf(QDialog): self.mw.checkpoint(tr(TR.ACTIONS_OPTIONS)) self.setWindowModality(Qt.WindowModal) qconnect(self.form.buttonBox.helpRequested, lambda: openHelp("filtered-decks")) - self.setWindowTitle(tr(TR.ACTIONS_OPTIONS_FOR, val="%s") % self.deck["name"]) + self.setWindowTitle(tr(TR.ACTIONS_OPTIONS_FOR, val=self.deck["name"])) restoreGeom(self, "dyndeckconf") self.initialSetup() self.loadConf() diff --git a/qt/aqt/editor.py b/qt/aqt/editor.py index 913573a55..4b221c1bd 100644 --- a/qt/aqt/editor.py +++ b/qt/aqt/editor.py @@ -865,15 +865,15 @@ to a cloze type first, via 'Notes>Change Note Type'""" client.timeout = 30 with client.get(url) as response: if response.status_code != 200: - error_msg = ( - tr(TR.QT_MISC_UNEXPECTED_RESPONSE_CODE, val="%s") - % response.status_code + error_msg = tr( + TR.QT_MISC_UNEXPECTED_RESPONSE_CODE, + val=response.status_code, ) return None filecontents = response.content content_type = response.headers.get("content-type") except (urllib.error.URLError, requests.exceptions.RequestException) as e: - error_msg = tr(TR.EDITING_AN_ERROR_OCCURRED_WHILE_OPENING, val="%s") % e + error_msg = tr(TR.EDITING_AN_ERROR_OCCURRED_WHILE_OPENING, val=str(e)) return None finally: self.mw.progress.finish() diff --git a/qt/aqt/exporting.py b/qt/aqt/exporting.py index 5691ca476..78714b5d3 100644 --- a/qt/aqt/exporting.py +++ b/qt/aqt/exporting.py @@ -142,7 +142,7 @@ class ExportDialog(QDialog): f = open(file, "wb") f.close() except (OSError, IOError) as e: - showWarning(tr(TR.EXPORTING_COULDNT_SAVE_FILE, val="%s") % str(e)) + showWarning(tr(TR.EXPORTING_COULDNT_SAVE_FILE, val=str(e))) else: os.unlink(file) diff --git a/qt/aqt/fields.py b/qt/aqt/fields.py index 9aa98a3d7..22e09a64f 100644 --- a/qt/aqt/fields.py +++ b/qt/aqt/fields.py @@ -24,7 +24,7 @@ class FieldDialog(QDialog): self.change_tracker = ChangeTracker(self.mw) self.form = aqt.forms.fields.Ui_Dialog() self.form.setupUi(self) - self.setWindowTitle(tr(TR.FIELDS_FIELDS_FOR, val="%s") % self.model["name"]) + self.setWindowTitle(tr(TR.FIELDS_FIELDS_FOR, val=self.model["name"])) self.form.buttonBox.button(QDialogButtonBox.Help).setAutoDefault(False) self.form.buttonBox.button(QDialogButtonBox.Cancel).setAutoDefault(False) self.form.buttonBox.button(QDialogButtonBox.Save).setAutoDefault(False) @@ -123,7 +123,7 @@ class FieldDialog(QDialog): return showWarning(tr(TR.FIELDS_NOTES_REQUIRE_AT_LEAST_ONE_FIELD)) count = self.mm.useCount(self.model) c = ngettext("%d note", "%d notes", count) % count - if not askUser(tr(TR.FIELDS_DELETE_FIELD_FROM, val="%s") % c): + if not askUser(tr(TR.FIELDS_DELETE_FIELD_FROM, val=c)): return if not self.change_tracker.mark_schema(): return @@ -137,9 +137,7 @@ class FieldDialog(QDialog): def onPosition(self, delta=-1): idx = self.currentIdx l = len(self.model["flds"]) - txt = getOnlyText( - tr(TR.FIELDS_NEW_POSITION_1, val="%s") % l, default=str(idx + 1) - ) + txt = getOnlyText(tr(TR.FIELDS_NEW_POSITION_1, val=l), default=str(idx + 1)) if not txt: return try: diff --git a/qt/aqt/importing.py b/qt/aqt/importing.py index 58dde845c..5abaa43a4 100644 --- a/qt/aqt/importing.py +++ b/qt/aqt/importing.py @@ -42,7 +42,7 @@ class ChangeMap(QDialog): n = 0 setCurrent = False for field in self.model["flds"]: - item = QListWidgetItem(tr(TR.IMPORTING_MAP_TO, val="%s") % field["name"]) + item = QListWidgetItem(tr(TR.IMPORTING_MAP_TO, val=field["name"])) self.frm.fields.addItem(item) if current == field["name"]: setCurrent = True @@ -166,7 +166,7 @@ you can enter it here. Use \\t to represent tab.""" d = tr(TR.IMPORTING_COLON) else: d = repr(d) - txt = tr(TR.IMPORTING_FIELDS_SEPARATED_BY, val="%s") % d + txt = tr(TR.IMPORTING_FIELDS_SEPARATED_BY, val=d) self.frm.autoDetect.setText(txt) def accept(self): @@ -247,12 +247,12 @@ you can enter it here. Use \\t to represent tab.""" self.grid.setSpacing(6) fields = self.importer.fields() for num in range(len(self.mapping)): - text = tr(TR.IMPORTING_FIELD_OF_FILE_IS, val="%s") % (num + 1) + text = tr(TR.IMPORTING_FIELD_OF_FILE_IS, val=num + 1) self.grid.addWidget(QLabel(text), num, 0) if self.mapping[num] == "_tags": text = tr(TR.IMPORTING_MAPPED_TO_TAGS) elif self.mapping[num]: - text = tr(TR.IMPORTING_MAPPED_TO, val="%s") % self.mapping[num] + text = tr(TR.IMPORTING_MAPPED_TO, val=self.mapping[num]) else: text = tr(TR.IMPORTING_IGNORED) self.grid.addWidget(QLabel(text), num, 1) diff --git a/qt/aqt/main.py b/qt/aqt/main.py index 0a7ace8d5..0f06783b0 100644 --- a/qt/aqt/main.py +++ b/qt/aqt/main.py @@ -119,9 +119,7 @@ class AnkiQt(QMainWindow): self.setupAddons(args) self.finish_ui_setup() except: - showInfo( - tr(TR.QT_MISC_ERROR_DURING_STARTUP, val="%s") % traceback.format_exc() - ) + showInfo(tr(TR.QT_MISC_ERROR_DURING_STARTUP, val=traceback.format_exc())) sys.exit(1) # must call this after ui set up if self.safeMode: @@ -759,7 +757,7 @@ from the profile screen." ) -> str: class_ = "but " + class_ if key: - key = tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % key + key = tr(TR.ACTIONS_SHORTCUT_KEY, val=key) else: key = "" return """ @@ -1030,15 +1028,13 @@ title="%s" %s>%s""" % ( gui_hooks.review_did_undo(cid) else: self.reset() - tooltip(tr(TR.QT_MISC_REVERTED_TO_STATE_PRIOR_TO, val="%s") % n.lower()) + tooltip(tr(TR.QT_MISC_REVERTED_TO_STATE_PRIOR_TO, val=n.lower())) gui_hooks.state_did_revert(n) self.maybeEnableUndo() def maybeEnableUndo(self) -> None: if self.col and self.col.undoName(): - self.form.actionUndo.setText( - tr(TR.QT_MISC_UNDO2, val="%s") % self.col.undoName() - ) + self.form.actionUndo.setText(tr(TR.QT_MISC_UNDO2, val=self.col.undoName())) self.form.actionUndo.setEnabled(True) gui_hooks.undo_state_did_change(True) else: @@ -1160,9 +1156,9 @@ title="%s" %s>%s""" % ( if not search: if not deck["dyn"]: search = 'deck:"%s" ' % deck["name"] - while self.col.decks.id_for_name(tr(TR.QT_MISC_FILTERED_DECK, val="%s") % n): + while self.col.decks.id_for_name(tr(TR.QT_MISC_FILTERED_DECK, val=n)): n += 1 - name = tr(TR.QT_MISC_FILTERED_DECK, val="%s") % n + name = tr(TR.QT_MISC_FILTERED_DECK, val=n) did = self.col.decks.new_filtered(name) diag = aqt.dyndeckconf.DeckConf(self, first=True, search=search) if not diag.ok: diff --git a/qt/aqt/models.py b/qt/aqt/models.py index 402299756..eaf8347dd 100644 --- a/qt/aqt/models.py +++ b/qt/aqt/models.py @@ -160,7 +160,7 @@ class Models(QDialog): frm.latexsvg.setChecked(nt.get("latexsvg", False)) frm.latexHeader.setText(nt["latexPre"]) frm.latexFooter.setText(nt["latexPost"]) - d.setWindowTitle(tr(TR.ACTIONS_OPTIONS_FOR, val="%s") % nt["name"]) + d.setWindowTitle(tr(TR.ACTIONS_OPTIONS_FOR, val=nt["name"])) qconnect(frm.buttonBox.helpRequested, lambda: openHelp("math?id=latex")) restoreGeom(d, "modelopts") gui_hooks.models_advanced_will_show(d) @@ -211,12 +211,12 @@ class AddModel(QDialog): # standard models self.models = [] for (name, func) in stdmodels.get_stock_notetypes(self.col): - item = QListWidgetItem(tr(TR.NOTETYPES_ADD, val="%s") % name) + item = QListWidgetItem(tr(TR.NOTETYPES_ADD, val=name)) self.dialog.models.addItem(item) self.models.append((True, func)) # add copies for m in sorted(self.col.models.all(), key=itemgetter("name")): - item = QListWidgetItem(tr(TR.NOTETYPES_CLONE, val="%s") % m["name"]) + item = QListWidgetItem(tr(TR.NOTETYPES_CLONE, val=m["name"])) self.dialog.models.addItem(item) self.models.append((False, m)) # type: ignore self.dialog.models.setCurrentRow(0) diff --git a/qt/aqt/overview.py b/qt/aqt/overview.py index c53a4798a..b11cddf53 100644 --- a/qt/aqt/overview.py +++ b/qt/aqt/overview.py @@ -261,7 +261,7 @@ to their original deck.""" buf = "" for b in links: if b[0]: - b[0] = tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % shortcut(b[0]) + b[0] = tr(TR.ACTIONS_SHORTCUT_KEY, val=shortcut(b[0])) buf += """ """ % tuple( b diff --git a/qt/aqt/profiles.py b/qt/aqt/profiles.py index 1617d7be7..e9e87d152 100644 --- a/qt/aqt/profiles.py +++ b/qt/aqt/profiles.py @@ -305,8 +305,7 @@ details have been forgotten.""" oldFolder = midFolder else: showWarning( - tr(TR.PROFILES_PLEASE_REMOVE_THE_FOLDER_AND, val="%s") - % midFolder + tr(TR.PROFILES_PLEASE_REMOVE_THE_FOLDER_AND, val=midFolder) ) self.name = oldName return diff --git a/qt/aqt/reviewer.py b/qt/aqt/reviewer.py index c4593183f..c5115ad0c 100644 --- a/qt/aqt/reviewer.py +++ b/qt/aqt/reviewer.py @@ -396,7 +396,7 @@ class Reviewer: Please run Tools>Empty Cards""" ) else: - warn = tr(TR.STUDYING_TYPE_ANSWER_UNKNOWN_FIELD, val="%s") % fld + warn = tr(TR.STUDYING_TYPE_ANSWER_UNKNOWN_FIELD, val=fld) return re.sub(self.typeAnsPat, warn, buf) else: # empty field, remove type answer pattern @@ -578,7 +578,7 @@ time = %(time)d; """ % dict( rem=self._remaining(), edit=tr(TR.STUDYING_EDIT), - editkey=tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % "E", + editkey=tr(TR.ACTIONS_SHORTCUT_KEY, val="E"), more=tr(TR.STUDYING_MORE), downArrow=downArrow(), time=self.card.timeTaken() // 1000, @@ -589,7 +589,7 @@ time = %(time)d; %s
""" % ( self._remaining(), - tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % tr(TR.STUDYING_SPACE), + tr(TR.ACTIONS_SHORTCUT_KEY, val=tr(TR.STUDYING_SPACE)), tr(TR.STUDYING_SHOW_ANSWER), ) # wrap it in a table so it has the same top margin as the ease buttons @@ -669,7 +669,7 @@ time = %(time)d; %s""" % ( due, extra, - tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % i, + tr(TR.ACTIONS_SHORTCUT_KEY, val=i), i, i, label, diff --git a/qt/aqt/sound.py b/qt/aqt/sound.py index 83a0a9fcb..212f86e95 100644 --- a/qt/aqt/sound.py +++ b/qt/aqt/sound.py @@ -495,7 +495,7 @@ class _Recorder: finally: self.cleanup() if ret: - raise Exception(tr(TR.MEDIA_ERROR_RUNNING, val="%s") % " ".join(cmd)) + raise Exception(tr(TR.MEDIA_ERROR_RUNNING, val=" ").join(cmd)) def cleanup(self) -> None: if os.path.exists(processingSrc): diff --git a/qt/aqt/toolbar.py b/qt/aqt/toolbar.py index 54fc60894..af4746452 100644 --- a/qt/aqt/toolbar.py +++ b/qt/aqt/toolbar.py @@ -104,28 +104,28 @@ class Toolbar: "decks", tr(TR.ACTIONS_DECKS), self._deckLinkHandler, - tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % "D", + tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="D"), id="decks", ), self.create_link( "add", tr(TR.ACTIONS_ADD), self._addLinkHandler, - tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % "A", + tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="A"), id="add", ), self.create_link( "browse", tr(TR.QT_MISC_BROWSE), self._browseLinkHandler, - tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % "B", + tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="B"), id="browse", ), self.create_link( "stats", tr(TR.QT_MISC_STATS), self._statsLinkHandler, - tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % "T", + tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="T"), id="stats", ), ] @@ -141,7 +141,7 @@ class Toolbar: def _create_sync_link(self) -> str: name = tr(TR.QT_MISC_SYNC) - title = tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % "Y" + title = tr(TR.ACTIONS_SHORTCUT_KEY, val="Y") label = "sync" self.link_handlers[label] = self._syncLinkHandler diff --git a/qt/aqt/update.py b/qt/aqt/update.py index 51eb57668..3018fd4b6 100644 --- a/qt/aqt/update.py +++ b/qt/aqt/update.py @@ -56,7 +56,7 @@ class LatestVersionFinder(QThread): def askAndUpdate(mw, ver): - baseStr = tr(TR.QT_MISC_ANKI_UPDATEDANKI_HAS_BEEN_RELEASED, val="%s") % ver + baseStr = tr(TR.QT_MISC_ANKI_UPDATEDANKI_HAS_BEEN_RELEASED, val=ver) msg = QMessageBox(mw) msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No) # type: ignore msg.setIcon(QMessageBox.Information) diff --git a/qt/aqt/utils.py b/qt/aqt/utils.py index d7679f173..63b1de775 100644 --- a/qt/aqt/utils.py +++ b/qt/aqt/utils.py @@ -653,7 +653,7 @@ def closeTooltip(): def checkInvalidFilename(str, dirsep=True): bad = invalidFilename(str, dirsep) if bad: - showWarning(tr(TR.QT_MISC_THE_FOLLOWING_CHARACTER_CAN_NOT_BE, val="%s") % bad) + showWarning(tr(TR.QT_MISC_THE_FOLLOWING_CHARACTER_CAN_NOT_BE, val=bad)) return True return False diff --git a/repos.bzl b/repos.bzl index c80e7ea98..43aeb96c0 100644 --- a/repos.bzl +++ b/repos.bzl @@ -138,35 +138,35 @@ filegroup( exports_files(["l10n.toml"]) """ - native.new_local_repository( - name = "rslib_ftl", - path = "../anki-i18n/core", - build_file_content = i18n_build_content, - ) - - # new_git_repository( + # native.new_local_repository( # name = "rslib_ftl", + # path = "../anki-i18n/core", # build_file_content = i18n_build_content, - # commit = core_i18n_commit, - # shallow_since = core_i18n_shallow_since, - # remote = "https://github.com/ankitects/anki-core-i18n", # ) - if not native.existing_rule("extra_ftl"): - native.new_local_repository( - name = "extra_ftl", - path = "../anki-i18n/qtftl", - build_file_content = i18n_build_content, - ) + new_git_repository( + name = "rslib_ftl", + build_file_content = i18n_build_content, + commit = core_i18n_commit, + shallow_since = core_i18n_shallow_since, + remote = "https://github.com/ankitects/anki-core-i18n", + ) - # new_git_repository( + if not native.existing_rule("extra_ftl"): + # native.new_local_repository( # name = "extra_ftl", + # path = "../anki-i18n/qtftl", # build_file_content = i18n_build_content, - # commit = qtftl_i18n_commit, - # shallow_since = qtftl_i18n_shallow_since, - # remote = "https://github.com/ankitects/anki-desktop-ftl", # ) + new_git_repository( + name = "extra_ftl", + build_file_content = i18n_build_content, + commit = qtftl_i18n_commit, + shallow_since = qtftl_i18n_shallow_since, + remote = "https://github.com/ankitects/anki-desktop-ftl", + ) + new_git_repository( name = "aqt_po", build_file_content = """