update temporary val="%s" references to standard ftl

This commit is contained in:
Damien Elmes 2020-11-17 21:47:47 +10:00
parent 83f8b23b45
commit 2453e5c488
27 changed files with 108 additions and 116 deletions

View file

@ -131,26 +131,30 @@ class Anki2Importer(Importer):
else: else:
dupesIdentical.append(note) 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: if dupesIgnored:
self.log.append( self.log.append(
self.dst.tr(TR.IMPORTING_NOTES_THAT_COULD_NOT_BE_IMPORTED, val="%s") self.dst.tr(
% len(dupesIgnored) TR.IMPORTING_NOTES_THAT_COULD_NOT_BE_IMPORTED, val=len(dupesIgnored)
)
) )
if update: if update:
self.log.append( self.log.append(
self.dst.tr(TR.IMPORTING_NOTES_UPDATED_AS_FILE_HAD_NEWER, val="%s") self.dst.tr(
% len(update) TR.IMPORTING_NOTES_UPDATED_AS_FILE_HAD_NEWER, val=len(update)
)
) )
if add: if add:
self.log.append( 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: if dupesIdentical:
self.log.append( self.log.append(
self.dst.tr(TR.IMPORTING_NOTES_SKIPPED_AS_THEYRE_ALREADY_IN, val="%s") self.dst.tr(
% len(dupesIdentical) TR.IMPORTING_NOTES_SKIPPED_AS_THEYRE_ALREADY_IN,
val=len(dupesIdentical),
)
) )
self.log.append("") self.log.append("")

View file

@ -55,7 +55,7 @@ class TextImporter(NoteImporter):
note = self.noteFromFields(row) note = self.noteFromFields(row)
notes.append(note) notes.append(note)
except (csv.Error) as e: 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.log = log
self.ignored = ignored self.ignored = ignored
self.close() self.close()

View file

@ -136,10 +136,6 @@ class NoteImporter(Importer):
# loop through the notes # loop through the notes
updates = [] updates = []
updateLog = [] 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 = [] new = []
self._ids: List[int] = [] self._ids: List[int] = []
self._cards: List[Tuple] = [] self._cards: List[Tuple] = []
@ -157,15 +153,14 @@ class NoteImporter(Importer):
# first field must exist # first field must exist
if not fld0: if not fld0:
self.log.append( self.log.append(
self.col.tr(TR.IMPORTING_EMPTY_FIRST_FIELD, val="%s") self.col.tr(TR.IMPORTING_EMPTY_FIRST_FIELD, val=" ".join(n.fields))
% " ".join(n.fields)
) )
continue continue
# earlier in import? # earlier in import?
if fld0 in firsts and self.importMode != ADD_MODE: if fld0 in firsts and self.importMode != ADD_MODE:
# duplicates in source file; log and ignore # duplicates in source file; log and ignore
self.log.append( 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 continue
firsts[fld0] = True firsts[fld0] = True
@ -183,7 +178,11 @@ class NoteImporter(Importer):
data = self.updateData(n, id, sflds) data = self.updateData(n, id, sflds)
if data: if data:
updates.append(data) updates.append(data)
updateLog.append(updateLogTxt % fld0) updateLog.append(
self.col.tr(
TR.IMPORTING_FIRST_FIELD_MATCHED, val=fld0
)
)
dupeCount += 1 dupeCount += 1
found = True found = True
elif self.importMode == IGNORE_MODE: elif self.importMode == IGNORE_MODE:
@ -193,7 +192,12 @@ class NoteImporter(Importer):
if fld0 not in dupes: if fld0 not in dupes:
# only show message once, no matter how many # only show message once, no matter how many
# duplicates are in the collection already # 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) dupes.append(fld0)
found = False found = False
# newly add # newly add

View file

@ -164,8 +164,8 @@ def _save_latex_image(
def _errMsg(col: anki.collection.Collection, type: str, texpath: str) -> Any: def _errMsg(col: anki.collection.Collection, type: str, texpath: str) -> Any:
msg = (col.tr(TR.MEDIA_ERROR_EXECUTING, val="%s") % type) + "<br>" msg = col.tr(TR.MEDIA_ERROR_EXECUTING, val=type) + "<br>"
msg += (col.tr(TR.MEDIA_GENERATED_FILE, val="%s") % texpath) + "<br>" msg += col.tr(TR.MEDIA_GENERATED_FILE, val=texpath) + "<br>"
try: try:
with open(namedtmp("latex_log.txt", rm=False)) as f: with open(namedtmp("latex_log.txt", rm=False)) as f:
log = f.read() log = f.read()

View file

@ -101,13 +101,13 @@ system. It's free and open source."
"Anki is licensed under the AGPL3 license. Please see " "Anki is licensed under the AGPL3 license. Please see "
"the license file in the source distribution for more information." "the license file in the source distribution for more information."
) )
abouttext += "<p>" + tr(TR.ABOUT_VERSION, val="%s") % versionWithBuild() + "<br>" abouttext += "<p>" + tr(TR.ABOUT_VERSION, val=versionWithBuild()) + "<br>"
abouttext += ("Python %s Qt %s PyQt %s<br>") % ( abouttext += ("Python %s Qt %s PyQt %s<br>") % (
platform.python_version(), platform.python_version(),
QT_VERSION_STR, QT_VERSION_STR,
PYQT_VERSION_STR, PYQT_VERSION_STR,
) )
abouttext += (tr(TR.ABOUT_VISIT_WEBSITE, val="%s") % aqt.appWebsite) + "</span>" abouttext += tr(TR.ABOUT_VISIT_WEBSITE, val=aqt.appWebsite) + "</span>"
# automatically sorted; add new lines at the end # automatically sorted; add new lines at the end
allusers = sorted( allusers = sorted(

View file

@ -88,7 +88,7 @@ class AddCards(QDialog):
else: else:
sc = "Ctrl+H" sc = "Ctrl+H"
b.setShortcut(QKeySequence(sc)) 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) qconnect(b.clicked, self.onHistory)
b.setEnabled(False) b.setEnabled(False)
self.historyButton = b self.historyButton = b

View file

@ -422,7 +422,7 @@ and have been disabled: %(found)s"
return True return True
except OSError as e: except OSError as e:
showWarning( 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", textFormat="plain",
) )
return False return False
@ -740,9 +740,7 @@ class AddonsDialog(QDialog):
return name + " " + tr(TR.ADDONS_DISABLED2) return name + " " + tr(TR.ADDONS_DISABLED2)
elif not addon.compatible(): elif not addon.compatible():
return ( return (
name name + " " + tr(TR.ADDONS_REQUIRES, val=self.compatible_string(addon))
+ " "
+ tr(TR.ADDONS_REQUIRES, val="%s") % self.compatible_string(addon)
) )
return name return name
@ -1007,10 +1005,7 @@ def describe_log_entry(id_and_entry: DownloadLogEntry) -> str:
if entry.status_code in (403, 404): if entry.status_code in (403, 404):
buf += tr(TR.ADDONS_INVALID_CODE_OR_ADDON_NOT_AVAILABLE) buf += tr(TR.ADDONS_INVALID_CODE_OR_ADDON_NOT_AVAILABLE)
else: else:
buf += ( buf += tr(TR.QT_MISC_UNEXPECTED_RESPONSE_CODE, val=entry.status_code)
tr(TR.QT_MISC_UNEXPECTED_RESPONSE_CODE, val="%s")
% entry.status_code
)
else: else:
buf += ( buf += (
tr(TR.ADDONS_PLEASE_CHECK_YOUR_INTERNET_CONNECTION) tr(TR.ADDONS_PLEASE_CHECK_YOUR_INTERNET_CONNECTION)

View file

@ -621,7 +621,7 @@ class Browser(QMainWindow):
f = self.form f = self.form
qconnect(f.previewButton.clicked, self.onTogglePreview) qconnect(f.previewButton.clicked, self.onTogglePreview)
f.previewButton.setToolTip( 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") f.previewButton.setShortcut("Ctrl+Shift+P")
@ -1406,9 +1406,7 @@ QTableView {{ gridline-color: {grid} }}
def _onRemoveFilter(self): def _onRemoveFilter(self):
name = self._currentFilterIsSaved() name = self._currentFilterIsSaved()
if not askUser( if not askUser(tr(TR.BROWSING_REMOVE_FROM_YOUR_SAVED_SEARCHES, val=name)):
tr(TR.BROWSING_REMOVE_FROM_YOUR_SAVED_SEARCHES, val="%s") % name
):
return return
del self.col.conf["savedFilters"][name] del self.col.conf["savedFilters"][name]
self.col.setMod() self.col.setMod()
@ -1751,8 +1749,8 @@ where id in %s"""
) )
pmin = pmin or 0 pmin = pmin or 0
pmax = pmax or 0 pmax = pmax or 0
txt = tr(TR.BROWSING_QUEUE_TOP, val="%s") % pmin txt = tr(TR.BROWSING_QUEUE_TOP, val=pmin)
txt += "\n" + tr(TR.BROWSING_QUEUE_BOTTOM, val="%s") % pmax txt += "\n" + tr(TR.BROWSING_QUEUE_BOTTOM, val=pmax)
frm.label.setText(txt) frm.label.setText(txt)
frm.start.selectAll() frm.start.selectAll()
if not d.exec_(): if not d.exec_():
@ -2192,7 +2190,7 @@ class ChangeModel(QDialog):
targets = [x["name"] for x in dst] + [tr(TR.BROWSING_NOTHING)] targets = [x["name"] for x in dst] + [tr(TR.BROWSING_NOTHING)]
indices = {} indices = {}
for i, x in enumerate(src): 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 = QComboBox()
cb.addItems(targets) cb.addItems(targets)
idx = min(i, len(targets) - 1) idx = min(i, len(targets) - 1)

View file

@ -67,7 +67,7 @@ class CardLayout(QDialog):
self.setupButtons() self.setupButtons()
self.setupShortcuts() self.setupShortcuts()
self.setWindowTitle( 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 = QVBoxLayout()
v1.addWidget(self.topArea) v1.addWidget(self.topArea)
@ -244,7 +244,7 @@ class CardLayout(QDialog):
qconnect(widg.returnPressed, self.on_search_next) qconnect(widg.returnPressed, self.on_search_next)
def setup_cloze_number_box(self): 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) self.pform.cloze_number_combo.addItems(names)
try: try:
idx = self.cloze_numbers.index(self.ord + 1) idx = self.cloze_numbers.index(self.ord + 1)
@ -603,7 +603,7 @@ class CardLayout(QDialog):
template = self.current_template() template = self.current_template()
current_pos = self.templates.index(template) + 1 current_pos = self.templates.index(template) + 1
pos = getOnlyText( 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), default=str(current_pos),
) )
if not pos: if not pos:
@ -626,7 +626,7 @@ class CardLayout(QDialog):
def _newCardName(self): def _newCardName(self):
n = len(self.templates) + 1 n = len(self.templates) + 1
while 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]: if name not in [t["name"] for t in self.templates]:
break break
n += 1 n += 1

View file

@ -67,8 +67,8 @@ class CustomStudy(QDialog):
new, self.conf["new"]["perDay"] - self.deck["newToday"][1] new, self.conf["new"]["perDay"] - self.deck["newToday"][1]
) )
newExceeding = min(new, new - newUnderLearning) newExceeding = min(new, new - newUnderLearning)
tit = tr(TR.CUSTOM_STUDY_NEW_CARDS_IN_DECK_OVER_TODAY, val="%s") % plus( tit = tr(
newExceeding TR.CUSTOM_STUDY_NEW_CARDS_IN_DECK_OVER_TODAY, val=plus(newExceeding)
) )
pre = tr(TR.CUSTOM_STUDY_INCREASE_TODAYS_NEW_CARD_LIMIT_BY) pre = tr(TR.CUSTOM_STUDY_INCREASE_TODAYS_NEW_CARD_LIMIT_BY)
sval = min(new, self.deck.get("extendNew", 10)) sval = min(new, self.deck.get("extendNew", 10))
@ -81,8 +81,8 @@ class CustomStudy(QDialog):
rev, self.conf["rev"]["perDay"] - self.deck["revToday"][1] rev, self.conf["rev"]["perDay"] - self.deck["revToday"][1]
) )
revExceeding = min(rev, rev - revUnderLearning) revExceeding = min(rev, rev - revUnderLearning)
tit = tr(TR.CUSTOM_STUDY_REVIEWS_DUE_IN_DECK_OVER_TODAY, val="%s") % plus( tit = tr(
revExceeding TR.CUSTOM_STUDY_REVIEWS_DUE_IN_DECK_OVER_TODAY, val=plus(revExceeding)
) )
pre = tr(TR.CUSTOM_STUDY_INCREASE_TODAYS_REVIEW_LIMIT_BY) pre = tr(TR.CUSTOM_STUDY_INCREASE_TODAYS_REVIEW_LIMIT_BY)
sval = min(rev, self.deck.get("extendRev", 10)) sval = min(rev, self.deck.get("extendRev", 10))

View file

@ -292,7 +292,7 @@ class DeckBrowser:
deck["dyn"] deck["dyn"]
or not extra or not extra
or askUser( 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() self.mw.progress.start()
@ -314,7 +314,7 @@ class DeckBrowser:
drawLinks = deepcopy(self.drawLinks) drawLinks = deepcopy(self.drawLinks)
for b in drawLinks: for b in drawLinks:
if b[0]: 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 += """ buf += """
<button title='%s' onclick='pycmd(\"%s\");'>%s</button>""" % tuple( <button title='%s' onclick='pycmd(\"%s\");'>%s</button>""" % tuple(
b b

View file

@ -45,7 +45,7 @@ class DeckConf(QDialog):
self.form.buttonBox.button(QDialogButtonBox.RestoreDefaults).clicked, self.form.buttonBox.button(QDialogButtonBox.RestoreDefaults).clicked,
self.onRestore, 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 # qt doesn't size properly with altered fonts otherwise
restoreGeom(self, "deckconf", adjustSize=True) restoreGeom(self, "deckconf", adjustSize=True)
gui_hooks.deck_conf_will_show(self) gui_hooks.deck_conf_will_show(self)
@ -156,9 +156,7 @@ class DeckConf(QDialog):
self.loadConfs() self.loadConfs()
def setChildren(self): def setChildren(self):
if not askUser( if not askUser(tr(TR.SCHEDULING_SET_ALL_DECKS_BELOW_TO, val=self.deck["name"])):
tr(TR.SCHEDULING_SET_ALL_DECKS_BELOW_TO, val="%s") % self.deck["name"]
):
return return
for did in self.childDids: for did in self.childDids:
deck = self.mw.col.decks.get(did) deck = self.mw.col.decks.get(did)
@ -195,7 +193,7 @@ class DeckConf(QDialog):
lim = x lim = x
else: else:
lim = min(x, lim) lim = min(x, lim)
return tr(TR.SCHEDULING_PARENT_LIMIT, val="%s") % lim return tr(TR.SCHEDULING_PARENT_LIMIT, val=lim)
def loadConf(self): def loadConf(self):
self.conf = self.mw.col.decks.confForDid(self.deck["id"]) self.conf = self.mw.col.decks.confForDid(self.deck["id"])

View file

@ -25,7 +25,7 @@ class DeckConf(QDialog):
self.mw.checkpoint(tr(TR.ACTIONS_OPTIONS)) self.mw.checkpoint(tr(TR.ACTIONS_OPTIONS))
self.setWindowModality(Qt.WindowModal) self.setWindowModality(Qt.WindowModal)
qconnect(self.form.buttonBox.helpRequested, lambda: openHelp("filtered-decks")) 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") restoreGeom(self, "dyndeckconf")
self.initialSetup() self.initialSetup()
self.loadConf() self.loadConf()

View file

@ -865,15 +865,15 @@ to a cloze type first, via 'Notes>Change Note Type'"""
client.timeout = 30 client.timeout = 30
with client.get(url) as response: with client.get(url) as response:
if response.status_code != 200: if response.status_code != 200:
error_msg = ( error_msg = tr(
tr(TR.QT_MISC_UNEXPECTED_RESPONSE_CODE, val="%s") TR.QT_MISC_UNEXPECTED_RESPONSE_CODE,
% response.status_code val=response.status_code,
) )
return None return None
filecontents = response.content filecontents = response.content
content_type = response.headers.get("content-type") content_type = response.headers.get("content-type")
except (urllib.error.URLError, requests.exceptions.RequestException) as e: 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 return None
finally: finally:
self.mw.progress.finish() self.mw.progress.finish()

View file

@ -142,7 +142,7 @@ class ExportDialog(QDialog):
f = open(file, "wb") f = open(file, "wb")
f.close() f.close()
except (OSError, IOError) as e: 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: else:
os.unlink(file) os.unlink(file)

View file

@ -24,7 +24,7 @@ class FieldDialog(QDialog):
self.change_tracker = ChangeTracker(self.mw) self.change_tracker = ChangeTracker(self.mw)
self.form = aqt.forms.fields.Ui_Dialog() self.form = aqt.forms.fields.Ui_Dialog()
self.form.setupUi(self) 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.Help).setAutoDefault(False)
self.form.buttonBox.button(QDialogButtonBox.Cancel).setAutoDefault(False) self.form.buttonBox.button(QDialogButtonBox.Cancel).setAutoDefault(False)
self.form.buttonBox.button(QDialogButtonBox.Save).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)) return showWarning(tr(TR.FIELDS_NOTES_REQUIRE_AT_LEAST_ONE_FIELD))
count = self.mm.useCount(self.model) count = self.mm.useCount(self.model)
c = ngettext("%d note", "%d notes", count) % count 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 return
if not self.change_tracker.mark_schema(): if not self.change_tracker.mark_schema():
return return
@ -137,9 +137,7 @@ class FieldDialog(QDialog):
def onPosition(self, delta=-1): def onPosition(self, delta=-1):
idx = self.currentIdx idx = self.currentIdx
l = len(self.model["flds"]) l = len(self.model["flds"])
txt = getOnlyText( txt = getOnlyText(tr(TR.FIELDS_NEW_POSITION_1, val=l), default=str(idx + 1))
tr(TR.FIELDS_NEW_POSITION_1, val="%s") % l, default=str(idx + 1)
)
if not txt: if not txt:
return return
try: try:

View file

@ -42,7 +42,7 @@ class ChangeMap(QDialog):
n = 0 n = 0
setCurrent = False setCurrent = False
for field in self.model["flds"]: 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) self.frm.fields.addItem(item)
if current == field["name"]: if current == field["name"]:
setCurrent = True setCurrent = True
@ -166,7 +166,7 @@ you can enter it here. Use \\t to represent tab."""
d = tr(TR.IMPORTING_COLON) d = tr(TR.IMPORTING_COLON)
else: else:
d = repr(d) 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) self.frm.autoDetect.setText(txt)
def accept(self): def accept(self):
@ -247,12 +247,12 @@ you can enter it here. Use \\t to represent tab."""
self.grid.setSpacing(6) self.grid.setSpacing(6)
fields = self.importer.fields() fields = self.importer.fields()
for num in range(len(self.mapping)): 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) self.grid.addWidget(QLabel(text), num, 0)
if self.mapping[num] == "_tags": if self.mapping[num] == "_tags":
text = tr(TR.IMPORTING_MAPPED_TO_TAGS) text = tr(TR.IMPORTING_MAPPED_TO_TAGS)
elif self.mapping[num]: 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: else:
text = tr(TR.IMPORTING_IGNORED) text = tr(TR.IMPORTING_IGNORED)
self.grid.addWidget(QLabel(text), num, 1) self.grid.addWidget(QLabel(text), num, 1)

View file

@ -119,9 +119,7 @@ class AnkiQt(QMainWindow):
self.setupAddons(args) self.setupAddons(args)
self.finish_ui_setup() self.finish_ui_setup()
except: except:
showInfo( showInfo(tr(TR.QT_MISC_ERROR_DURING_STARTUP, val=traceback.format_exc()))
tr(TR.QT_MISC_ERROR_DURING_STARTUP, val="%s") % traceback.format_exc()
)
sys.exit(1) sys.exit(1)
# must call this after ui set up # must call this after ui set up
if self.safeMode: if self.safeMode:
@ -759,7 +757,7 @@ from the profile screen."
) -> str: ) -> str:
class_ = "but " + class_ class_ = "but " + class_
if key: if key:
key = tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % key key = tr(TR.ACTIONS_SHORTCUT_KEY, val=key)
else: else:
key = "" key = ""
return """ return """
@ -1030,15 +1028,13 @@ title="%s" %s>%s</button>""" % (
gui_hooks.review_did_undo(cid) gui_hooks.review_did_undo(cid)
else: else:
self.reset() 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) gui_hooks.state_did_revert(n)
self.maybeEnableUndo() self.maybeEnableUndo()
def maybeEnableUndo(self) -> None: def maybeEnableUndo(self) -> None:
if self.col and self.col.undoName(): if self.col and self.col.undoName():
self.form.actionUndo.setText( self.form.actionUndo.setText(tr(TR.QT_MISC_UNDO2, val=self.col.undoName()))
tr(TR.QT_MISC_UNDO2, val="%s") % self.col.undoName()
)
self.form.actionUndo.setEnabled(True) self.form.actionUndo.setEnabled(True)
gui_hooks.undo_state_did_change(True) gui_hooks.undo_state_did_change(True)
else: else:
@ -1160,9 +1156,9 @@ title="%s" %s>%s</button>""" % (
if not search: if not search:
if not deck["dyn"]: if not deck["dyn"]:
search = 'deck:"%s" ' % deck["name"] 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 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) did = self.col.decks.new_filtered(name)
diag = aqt.dyndeckconf.DeckConf(self, first=True, search=search) diag = aqt.dyndeckconf.DeckConf(self, first=True, search=search)
if not diag.ok: if not diag.ok:

View file

@ -160,7 +160,7 @@ class Models(QDialog):
frm.latexsvg.setChecked(nt.get("latexsvg", False)) frm.latexsvg.setChecked(nt.get("latexsvg", False))
frm.latexHeader.setText(nt["latexPre"]) frm.latexHeader.setText(nt["latexPre"])
frm.latexFooter.setText(nt["latexPost"]) 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")) qconnect(frm.buttonBox.helpRequested, lambda: openHelp("math?id=latex"))
restoreGeom(d, "modelopts") restoreGeom(d, "modelopts")
gui_hooks.models_advanced_will_show(d) gui_hooks.models_advanced_will_show(d)
@ -211,12 +211,12 @@ class AddModel(QDialog):
# standard models # standard models
self.models = [] self.models = []
for (name, func) in stdmodels.get_stock_notetypes(self.col): 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.dialog.models.addItem(item)
self.models.append((True, func)) self.models.append((True, func))
# add copies # add copies
for m in sorted(self.col.models.all(), key=itemgetter("name")): 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.dialog.models.addItem(item)
self.models.append((False, m)) # type: ignore self.models.append((False, m)) # type: ignore
self.dialog.models.setCurrentRow(0) self.dialog.models.setCurrentRow(0)

View file

@ -261,7 +261,7 @@ to their original deck."""
buf = "" buf = ""
for b in links: for b in links:
if b[0]: 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 += """ buf += """
<button title="%s" onclick='pycmd("%s")'>%s</button>""" % tuple( <button title="%s" onclick='pycmd("%s")'>%s</button>""" % tuple(
b b

View file

@ -305,8 +305,7 @@ details have been forgotten."""
oldFolder = midFolder oldFolder = midFolder
else: else:
showWarning( showWarning(
tr(TR.PROFILES_PLEASE_REMOVE_THE_FOLDER_AND, val="%s") tr(TR.PROFILES_PLEASE_REMOVE_THE_FOLDER_AND, val=midFolder)
% midFolder
) )
self.name = oldName self.name = oldName
return return

View file

@ -396,7 +396,7 @@ class Reviewer:
Please run Tools>Empty Cards""" Please run Tools>Empty Cards"""
) )
else: 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) return re.sub(self.typeAnsPat, warn, buf)
else: else:
# empty field, remove type answer pattern # empty field, remove type answer pattern
@ -578,7 +578,7 @@ time = %(time)d;
""" % dict( """ % dict(
rem=self._remaining(), rem=self._remaining(),
edit=tr(TR.STUDYING_EDIT), 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), more=tr(TR.STUDYING_MORE),
downArrow=downArrow(), downArrow=downArrow(),
time=self.card.timeTaken() // 1000, time=self.card.timeTaken() // 1000,
@ -589,7 +589,7 @@ time = %(time)d;
<span class=stattxt>%s</span><br> <span class=stattxt>%s</span><br>
<button title="%s" id="ansbut" class="focus" onclick='pycmd("ans");'>%s</button>""" % ( <button title="%s" id="ansbut" class="focus" onclick='pycmd("ans");'>%s</button>""" % (
self._remaining(), 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), tr(TR.STUDYING_SHOW_ANSWER),
) )
# wrap it in a table so it has the same top margin as the ease buttons # wrap it in a table so it has the same top margin as the ease buttons
@ -669,7 +669,7 @@ time = %(time)d;
%s</button></td>""" % ( %s</button></td>""" % (
due, due,
extra, extra,
tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % i, tr(TR.ACTIONS_SHORTCUT_KEY, val=i),
i, i,
i, i,
label, label,

View file

@ -495,7 +495,7 @@ class _Recorder:
finally: finally:
self.cleanup() self.cleanup()
if ret: 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: def cleanup(self) -> None:
if os.path.exists(processingSrc): if os.path.exists(processingSrc):

View file

@ -104,28 +104,28 @@ class Toolbar:
"decks", "decks",
tr(TR.ACTIONS_DECKS), tr(TR.ACTIONS_DECKS),
self._deckLinkHandler, self._deckLinkHandler,
tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % "D", tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="D"),
id="decks", id="decks",
), ),
self.create_link( self.create_link(
"add", "add",
tr(TR.ACTIONS_ADD), tr(TR.ACTIONS_ADD),
self._addLinkHandler, self._addLinkHandler,
tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % "A", tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="A"),
id="add", id="add",
), ),
self.create_link( self.create_link(
"browse", "browse",
tr(TR.QT_MISC_BROWSE), tr(TR.QT_MISC_BROWSE),
self._browseLinkHandler, self._browseLinkHandler,
tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % "B", tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="B"),
id="browse", id="browse",
), ),
self.create_link( self.create_link(
"stats", "stats",
tr(TR.QT_MISC_STATS), tr(TR.QT_MISC_STATS),
self._statsLinkHandler, self._statsLinkHandler,
tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="%s") % "T", tip=tr(TR.ACTIONS_SHORTCUT_KEY, val="T"),
id="stats", id="stats",
), ),
] ]
@ -141,7 +141,7 @@ class Toolbar:
def _create_sync_link(self) -> str: def _create_sync_link(self) -> str:
name = tr(TR.QT_MISC_SYNC) 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" label = "sync"
self.link_handlers[label] = self._syncLinkHandler self.link_handlers[label] = self._syncLinkHandler

View file

@ -56,7 +56,7 @@ class LatestVersionFinder(QThread):
def askAndUpdate(mw, ver): 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 = QMessageBox(mw)
msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No) # type: ignore msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No) # type: ignore
msg.setIcon(QMessageBox.Information) msg.setIcon(QMessageBox.Information)

View file

@ -653,7 +653,7 @@ def closeTooltip():
def checkInvalidFilename(str, dirsep=True): def checkInvalidFilename(str, dirsep=True):
bad = invalidFilename(str, dirsep) bad = invalidFilename(str, dirsep)
if bad: 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 True
return False return False

View file

@ -138,35 +138,35 @@ filegroup(
exports_files(["l10n.toml"]) exports_files(["l10n.toml"])
""" """
native.new_local_repository( # native.new_local_repository(
name = "rslib_ftl",
path = "../anki-i18n/core",
build_file_content = i18n_build_content,
)
# new_git_repository(
# name = "rslib_ftl", # name = "rslib_ftl",
# path = "../anki-i18n/core",
# build_file_content = i18n_build_content, # 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"): new_git_repository(
native.new_local_repository( name = "rslib_ftl",
name = "extra_ftl", build_file_content = i18n_build_content,
path = "../anki-i18n/qtftl", commit = core_i18n_commit,
build_file_content = i18n_build_content, 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", # name = "extra_ftl",
# path = "../anki-i18n/qtftl",
# build_file_content = i18n_build_content, # 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( new_git_repository(
name = "aqt_po", name = "aqt_po",
build_file_content = """ build_file_content = """