add translation todos

This commit is contained in:
Jann Stute
2024-12-23 17:56:45 +01:00
parent bf5d18a422
commit a38847cb7a
24 changed files with 189 additions and 176 deletions

View File

@@ -196,21 +196,21 @@ class Ui_MainWindow(QMainWindow):
"MainWindow", u"MainWindow", None))
# Navigation buttons
self.backButton.setText(
QCoreApplication.translate("MainWindow", u"<", None))
QCoreApplication.translate("MainWindow", u"<", None)) #TODO translate
self.forwardButton.setText(
QCoreApplication.translate("MainWindow", u">", None))
QCoreApplication.translate("MainWindow", u">", None)) #TODO translate
# Search field
self.searchField.setPlaceholderText(
QCoreApplication.translate("MainWindow", u"Search Entries", None))
QCoreApplication.translate("MainWindow", u"Search Entries", None)) #TODO translate
self.searchButton.setText(
QCoreApplication.translate("MainWindow", u"Search", None))
QCoreApplication.translate("MainWindow", u"Search", None)) #TODO translate
self.thumb_size_combobox.setCurrentText("")
# Thumbnail size selector
self.thumb_size_combobox.setPlaceholderText(
QCoreApplication.translate("MainWindow", u"Thumbnail Size", None))
QCoreApplication.translate("MainWindow", u"Thumbnail Size", None)) #TODO translate
# retranslateUi
def moveEvent(self, event) -> None:

View File

@@ -26,7 +26,7 @@ class AddFieldModal(QWidget):
super().__init__()
self.is_connected = False
self.lib = library
self.setWindowTitle("Add Field")
self.setWindowTitle("Add Field") # TODO translate
self.setWindowModality(Qt.WindowModality.ApplicationModal)
self.setMinimumSize(400, 300)
self.root_layout = QVBoxLayout(self)
@@ -40,7 +40,7 @@ class AddFieldModal(QWidget):
# 'text-align:center;'
"font-weight:bold;" "font-size:14px;" "padding-top: 6px" ""
)
self.title_widget.setText("Add Field")
self.title_widget.setText("Add Field") # TODO translate
self.title_widget.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.list_widget = QListWidget()
@@ -54,13 +54,13 @@ class AddFieldModal(QWidget):
# self.cancel_button.setText('Cancel')
self.cancel_button = QPushButton()
self.cancel_button.setText("Cancel")
self.cancel_button.setText("Cancel") # TODO translate
self.cancel_button.clicked.connect(self.hide)
# self.cancel_button.clicked.connect(widget.reset)
self.button_layout.addWidget(self.cancel_button)
self.save_button = QPushButton()
self.save_button.setText("Add")
self.save_button.setText("Add") # TODO translate
# self.save_button.setAutoDefault(True)
self.save_button.setDefault(True)
self.save_button.clicked.connect(self.hide)

View File

@@ -59,7 +59,7 @@ class BuildTagPanel(PanelWidget):
self.name_field = QLineEdit()
self.name_field.setFixedHeight(24)
self.name_field.textChanged.connect(self.on_name_changed)
self.name_field.setPlaceholderText("Tag Name (Required)")
self.name_field.setPlaceholderText("Tag Name (Required)") # TODO translate
self.name_layout.addWidget(self.name_field)
# Shorthand ------------------------------------------------------------
@@ -70,7 +70,7 @@ class BuildTagPanel(PanelWidget):
self.shorthand_layout.setSpacing(0)
self.shorthand_layout.setAlignment(Qt.AlignmentFlag.AlignLeft)
self.shorthand_title = QLabel()
self.shorthand_title.setText("Shorthand")
self.shorthand_title.setText("Shorthand") # TODO translate
self.shorthand_layout.addWidget(self.shorthand_title)
self.shorthand_field = QLineEdit()
self.shorthand_layout.addWidget(self.shorthand_field)
@@ -83,7 +83,7 @@ class BuildTagPanel(PanelWidget):
self.aliases_layout.setSpacing(0)
self.aliases_layout.setAlignment(Qt.AlignmentFlag.AlignLeft)
self.aliases_title = QLabel()
self.aliases_title.setText("Aliases")
self.aliases_title.setText("Aliases") # TODO translate
self.aliases_layout.addWidget(self.aliases_title)
self.aliases_flow_widget = QWidget()
@@ -134,7 +134,7 @@ class BuildTagPanel(PanelWidget):
self.subtags_layout.setAlignment(Qt.AlignmentFlag.AlignLeft)
self.subtags_title = QLabel()
self.subtags_title.setText("Parent Tags")
self.subtags_title.setText("Parent Tags") # TODO translate
self.subtags_layout.addWidget(self.subtags_title)
self.subtag_flow_widget = QWidget()
@@ -180,7 +180,7 @@ class BuildTagPanel(PanelWidget):
tsp = TagSearchPanel(self.lib, exclude_ids)
tsp.tag_chosen.connect(lambda x: self.add_subtag_callback(x))
self.add_tag_modal = PanelModal(tsp, "Add Parent Tags", "Add Parent Tags")
self.add_tag_modal = PanelModal(tsp, "Add Parent Tags", "Add Parent Tags") # TODO translate
self.subtags_add_button.clicked.connect(self.add_tag_modal.show)
# self.subtags_layout.addWidget(self.subtags_add_button)
@@ -196,7 +196,7 @@ class BuildTagPanel(PanelWidget):
self.color_layout.setSpacing(0)
self.color_layout.setAlignment(Qt.AlignmentFlag.AlignLeft)
self.color_title = QLabel()
self.color_title.setText("Color")
self.color_title.setText("Color") # TODO translate
self.color_layout.addWidget(self.color_title)
self.color_field = QComboBox()
self.color_field.setEditable(False)
@@ -218,7 +218,7 @@ class BuildTagPanel(PanelWidget):
)
)
self.color_layout.addWidget(self.color_field)
remove_selected_alias_action = QAction("remove selected alias", self)
remove_selected_alias_action = QAction("remove selected alias", self) # TODO translate
remove_selected_alias_action.triggered.connect(self.remove_selected_alias)
remove_selected_alias_action.setShortcut(
QtCore.QKeyCombination(
@@ -243,7 +243,7 @@ class BuildTagPanel(PanelWidget):
self.alias_names: set[str] = set()
self.new_alias_names: dict = dict()
self.set_tag(tag or Tag(name="New Tag"))
self.set_tag(tag or Tag(name="New Tag")) # TODO translate
if tag is None:
self.name_field.selectAll()

View File

@@ -29,7 +29,7 @@ class DeleteUnlinkedEntriesModal(QWidget):
super().__init__()
self.driver = driver
self.tracker = tracker
self.setWindowTitle("Delete Unlinked Entries")
self.setWindowTitle("Delete Unlinked Entries") # TODO translate
self.setWindowModality(Qt.WindowModality.ApplicationModal)
self.setMinimumSize(500, 400)
self.root_layout = QVBoxLayout(self)
@@ -40,7 +40,7 @@ class DeleteUnlinkedEntriesModal(QWidget):
self.desc_widget.setWordWrap(True)
self.desc_widget.setText(f"""
Are you sure you want to delete the following {self.tracker.missing_files_count} entries?
""")
""") # TODO translate
self.desc_widget.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.list_view = QListView()
@@ -53,13 +53,13 @@ class DeleteUnlinkedEntriesModal(QWidget):
self.button_layout.addStretch(1)
self.cancel_button = QPushButton()
self.cancel_button.setText("&Cancel")
self.cancel_button.setText("&Cancel") # TODO translate
self.cancel_button.setDefault(True)
self.cancel_button.clicked.connect(self.hide)
self.button_layout.addWidget(self.cancel_button)
self.delete_button = QPushButton()
self.delete_button.setText("&Delete")
self.delete_button.setText("&Delete") # TODO translate
self.delete_button.clicked.connect(self.hide)
self.delete_button.clicked.connect(lambda: self.delete_entries())
self.button_layout.addWidget(self.delete_button)
@@ -71,7 +71,7 @@ class DeleteUnlinkedEntriesModal(QWidget):
def refresh_list(self):
self.desc_widget.setText(f"""
Are you sure you want to delete the following {self.tracker.missing_files_count} entries?
""")
""") # TODO translate
self.model.clear()
for i in self.tracker.missing_files:
@@ -81,10 +81,10 @@ class DeleteUnlinkedEntriesModal(QWidget):
def delete_entries(self):
def displayed_text(x):
return f"Deleting {x}/{self.tracker.missing_files_count} Unlinked Entries"
return f"Deleting {x}/{self.tracker.missing_files_count} Unlinked Entries" # TODO translate
pw = ProgressWidget(
window_title="Deleting Entries",
window_title="Deleting Entries", # TODO translate
label_text="",
cancel_button_text=None,
minimum=0,

View File

@@ -41,7 +41,7 @@ class DropImportModal(QWidget):
self.driver: QtDriver = driver
# Widget ======================
self.setWindowTitle("Conflicting File(s)")
self.setWindowTitle("Conflicting File(s)") # TODO translate
self.setWindowModality(Qt.WindowModality.ApplicationModal)
self.setMinimumSize(500, 400)
self.root_layout = QVBoxLayout(self)
@@ -50,7 +50,9 @@ class DropImportModal(QWidget):
self.desc_widget = QLabel()
self.desc_widget.setObjectName("descriptionLabel")
self.desc_widget.setWordWrap(True)
self.desc_widget.setText("The following files have filenames already exist in the library")
self.desc_widget.setText(
"The following files have filenames already exist in the library"
) # TODO translate
self.desc_widget.setAlignment(Qt.AlignmentFlag.AlignCenter)
# Duplicate File List ========
@@ -65,25 +67,25 @@ class DropImportModal(QWidget):
self.button_layout.addStretch(1)
self.skip_button = QPushButton()
self.skip_button.setText("&Skip")
self.skip_button.setText("&Skip") # TODO translate
self.skip_button.setDefault(True)
self.skip_button.clicked.connect(lambda: self.begin_transfer(DuplicateChoice.SKIP))
self.button_layout.addWidget(self.skip_button)
self.overwrite_button = QPushButton()
self.overwrite_button.setText("&Overwrite")
self.overwrite_button.setText("&Overwrite") # TODO translate
self.overwrite_button.clicked.connect(
lambda: self.begin_transfer(DuplicateChoice.OVERWRITE)
)
self.button_layout.addWidget(self.overwrite_button)
self.rename_button = QPushButton()
self.rename_button.setText("&Rename")
self.rename_button.setText("&Rename") # TODO translate
self.rename_button.clicked.connect(lambda: self.begin_transfer(DuplicateChoice.RENAME))
self.button_layout.addWidget(self.rename_button)
self.cancel_button = QPushButton()
self.cancel_button.setText("&Cancel")
self.cancel_button.setText("&Cancel") # TODO translate
self.cancel_button.clicked.connect(lambda: self.begin_transfer(DuplicateChoice.CANCEL))
self.button_layout.addWidget(self.cancel_button)
@@ -138,7 +140,7 @@ class DropImportModal(QWidget):
"""Display the message widgeth with a list of the duplicated files."""
self.desc_widget.setText(
f"The following {len(self.duplicate_files)} file(s) have filenames already exist in the library." # noqa: E501
)
) # TODO translate
self.model.clear()
for dupe in self.duplicate_files:
@@ -158,17 +160,15 @@ class DropImportModal(QWidget):
return
def displayed_text(x):
text = (
f"Importing New Files...\n{x[0] + 1} File{'s' if x[0] + 1 != 1 else ''} Imported."
)
text = f"Importing New Files...\n{x[0] + 1} File{'s' if x[0] + 1 != 1 else ''} Imported." # TODO translate
if self.choice:
text += f" {x[1]} {self.choice.value}"
return text
pw = ProgressWidget(
window_title="Import Files",
label_text="Importing New Files...",
window_title="Import Files", # TODO translate
label_text="Importing New Files...", # TODO translate
cancel_button_text=None,
minimum=0,
maximum=len(self.files),

View File

@@ -35,7 +35,7 @@ class FileExtensionModal(PanelWidget):
super().__init__()
# Initialize Modal =====================================================
self.lib = library
self.setWindowTitle("File Extensions")
self.setWindowTitle("File Extensions") # TODO translate
self.setWindowModality(Qt.WindowModality.ApplicationModal)
self.setMinimumSize(240, 400)
self.root_layout = QVBoxLayout(self)
@@ -50,7 +50,7 @@ class FileExtensionModal(PanelWidget):
# Create "Add Button" Widget -------------------------------------------
self.add_button = QPushButton()
self.add_button.setText("&Add Extension")
self.add_button.setText("&Add Extension") # TODO translate
self.add_button.clicked.connect(self.add_item)
self.add_button.setDefault(True)
self.add_button.setMinimumWidth(100)
@@ -61,11 +61,11 @@ class FileExtensionModal(PanelWidget):
self.mode_layout.setContentsMargins(0, 0, 0, 0)
self.mode_layout.setSpacing(12)
self.mode_label = QLabel()
self.mode_label.setText("List Mode:")
self.mode_label.setText("List Mode:") # TODO translate
self.mode_combobox = QComboBox()
self.mode_combobox.setEditable(False)
self.mode_combobox.addItem("Include")
self.mode_combobox.addItem("Exclude")
self.mode_combobox.addItem("Include") # TODO translate
self.mode_combobox.addItem("Exclude") # TODO translate
is_exclude_list = int(bool(self.lib.prefs(LibraryPrefs.IS_EXCLUDE_LIST)))

View File

@@ -30,7 +30,7 @@ class FixDupeFilesModal(QWidget):
self.driver = driver
self.count = -1
self.filename = ""
self.setWindowTitle("Fix Duplicate Files")
self.setWindowTitle("Fix Duplicate Files") # TODO translate
self.setWindowModality(Qt.WindowModality.ApplicationModal)
self.setMinimumSize(400, 300)
self.root_layout = QVBoxLayout(self)
@@ -44,7 +44,7 @@ class FixDupeFilesModal(QWidget):
self.desc_widget.setStyleSheet("text-align:left;")
self.desc_widget.setText(
"TagStudio supports importing DupeGuru results to manage duplicate files."
)
) # TODO translate
self.desc_widget.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.dupe_count = QLabel()
@@ -54,24 +54,24 @@ class FixDupeFilesModal(QWidget):
self.file_label = QLabel()
self.file_label.setObjectName("fileLabel")
self.file_label.setText("No DupeGuru File Selected")
self.file_label.setText("No DupeGuru File Selected") # TODO translate
self.open_button = QPushButton()
self.open_button.setText("&Load DupeGuru File")
self.open_button.setText("&Load DupeGuru File") # TODO translate
self.open_button.clicked.connect(self.select_file)
self.mirror_modal = MirrorEntriesModal(self.driver, self.tracker)
self.mirror_modal.done.connect(self.refresh_dupes)
self.mirror_button = QPushButton()
self.mirror_button.setText("&Mirror Entries")
self.mirror_button.setText("&Mirror Entries") # TODO translate
self.mirror_button.clicked.connect(self.mirror_modal.show)
self.mirror_desc = QLabel()
self.mirror_desc.setWordWrap(True)
self.mirror_desc.setText(
"Mirror the Entry data across each duplicate match set, combining all data while not "
"removing or duplicating fields. This operation will not delete any files or data."
)
) # TODO translate
self.advice_label = QLabel()
self.advice_label.setWordWrap(True)
@@ -80,7 +80,7 @@ class FixDupeFilesModal(QWidget):
"After mirroring, you're free to use DupeGuru to delete the unwanted files. "
"Afterwards, use TagStudio's \"Fix Unlinked Entries\" feature in the "
"Tools menu in order to delete the unlinked Entries."
)
)# TODO translate
# fmt: on
self.button_container = QWidget()
@@ -89,7 +89,7 @@ class FixDupeFilesModal(QWidget):
self.button_layout.addStretch(1)
self.done_button = QPushButton()
self.done_button.setText("&Done")
self.done_button.setText("&Done") # TODO translate
self.done_button.setDefault(True)
self.done_button.clicked.connect(self.hide)
self.button_layout.addWidget(self.done_button)
@@ -108,9 +108,11 @@ class FixDupeFilesModal(QWidget):
self.set_dupe_count(-1)
def select_file(self):
qfd = QFileDialog(self, "Open DupeGuru Results File", str(self.lib.library_dir))
qfd = QFileDialog(
self, "Open DupeGuru Results File", str(self.lib.library_dir)
) # TODO translate
qfd.setFileMode(QFileDialog.FileMode.ExistingFile)
qfd.setNameFilter("DupeGuru Files (*.dupeguru)")
qfd.setNameFilter("DupeGuru Files (*.dupeguru)") # TODO translate
if qfd.exec_():
filename = qfd.selectedFiles()
if filename:
@@ -120,7 +122,7 @@ class FixDupeFilesModal(QWidget):
if filename:
self.file_label.setText(filename)
else:
self.file_label.setText("No DupeGuru File Selected")
self.file_label.setText("No DupeGuru File Selected") # TODO translate
self.filename = filename
self.refresh_dupes()
self.mirror_modal.refresh_list()
@@ -132,10 +134,10 @@ class FixDupeFilesModal(QWidget):
def set_dupe_count(self, count: int):
if count < 0:
self.mirror_button.setDisabled(True)
self.dupe_count.setText("Duplicate File Matches: N/A")
self.dupe_count.setText("Duplicate File Matches: N/A") # TODO translate
elif count == 0:
self.mirror_button.setDisabled(True)
self.dupe_count.setText(f"Duplicate File Matches: {count}")
self.dupe_count.setText(f"Duplicate File Matches: {count}") # TODO translate
else:
self.mirror_button.setDisabled(False)
self.dupe_count.setText(f"Duplicate File Matches: {count}")
self.dupe_count.setText(f"Duplicate File Matches: {count}") # TODO translate

View File

@@ -29,7 +29,7 @@ class FixUnlinkedEntriesModal(QWidget):
self.missing_count = -1
self.dupe_count = -1
self.setWindowTitle("Fix Unlinked Entries")
self.setWindowTitle("Fix Unlinked Entries") # TODO translate
self.setWindowModality(Qt.WindowModality.ApplicationModal)
self.setMinimumSize(400, 300)
self.root_layout = QVBoxLayout(self)
@@ -45,7 +45,7 @@ class FixUnlinkedEntriesModal(QWidget):
"it is then considered unlinked.\n\n"
"Unlinked entries may be automatically relinked via searching your directories, "
"manually relinked by the user, or deleted if desired."
)
) # TODO translate
self.missing_count_label = QLabel()
self.missing_count_label.setObjectName("missingCountLabel")
@@ -58,14 +58,14 @@ class FixUnlinkedEntriesModal(QWidget):
self.dupe_count_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.refresh_unlinked_button = QPushButton()
self.refresh_unlinked_button.setText("&Refresh All")
self.refresh_unlinked_button.setText("&Refresh All") # TODO translate
self.refresh_unlinked_button.clicked.connect(self.refresh_missing_files)
self.merge_class = MergeDuplicateEntries(self.lib, self.driver)
self.relink_class = RelinkUnlinkedEntries(self.tracker)
self.search_button = QPushButton()
self.search_button.setText("&Search && Relink")
self.search_button.setText("&Search && Relink") # TODO translate
self.relink_class.done.connect(
# refresh the grid
lambda: (
@@ -76,7 +76,7 @@ class FixUnlinkedEntriesModal(QWidget):
self.search_button.clicked.connect(self.relink_class.repair_entries)
self.manual_button = QPushButton()
self.manual_button.setText("&Manual Relink")
self.manual_button.setText("&Manual Relink") # TODO translate
self.manual_button.setHidden(True)
self.delete_button = QPushButton()
@@ -88,7 +88,7 @@ class FixUnlinkedEntriesModal(QWidget):
self.driver.filter_items(),
)
)
self.delete_button.setText("De&lete Unlinked Entries")
self.delete_button.setText("De&lete Unlinked Entries") # TODO translate
self.delete_button.clicked.connect(self.delete_modal.show)
self.button_container = QWidget()
@@ -97,7 +97,7 @@ class FixUnlinkedEntriesModal(QWidget):
self.button_layout.addStretch(1)
self.done_button = QPushButton()
self.done_button.setText("&Done")
self.done_button.setText("&Done") # TODO translate
self.done_button.setDefault(True)
self.done_button.clicked.connect(self.hide)
self.button_layout.addWidget(self.done_button)
@@ -116,8 +116,8 @@ class FixUnlinkedEntriesModal(QWidget):
def refresh_missing_files(self):
pw = ProgressWidget(
window_title="Scanning Library",
label_text="Scanning Library for Unlinked Entries...",
window_title="Scanning Library", # TODO translate
label_text="Scanning Library for Unlinked Entries...", # TODO translate
cancel_button_text=None,
minimum=0,
maximum=self.lib.entries_count,
@@ -139,9 +139,11 @@ class FixUnlinkedEntriesModal(QWidget):
if self.missing_count < 0:
self.search_button.setDisabled(True)
self.delete_button.setDisabled(True)
self.missing_count_label.setText("Unlinked Entries: N/A")
self.missing_count_label.setText("Unlinked Entries: N/A") # TODO translate
else:
# disable buttons if there are no files to fix
self.search_button.setDisabled(self.missing_count == 0)
self.delete_button.setDisabled(self.missing_count == 0)
self.missing_count_label.setText(f"Unlinked Entries: {self.missing_count}")
self.missing_count_label.setText(
f"Unlinked Entries: {self.missing_count}"
) # TODO translate

View File

@@ -164,7 +164,7 @@ class FoldersToTagsModal(QWidget):
self.count = -1
self.filename = ""
self.setWindowTitle("Create Tags From Folders")
self.setWindowTitle("Create Tags From Folders") # TODO translate
self.setWindowModality(Qt.WindowModality.ApplicationModal)
self.setMinimumSize(640, 640)
self.root_layout = QVBoxLayout(self)
@@ -174,7 +174,7 @@ class FoldersToTagsModal(QWidget):
self.title_widget.setObjectName("title")
self.title_widget.setWordWrap(True)
self.title_widget.setStyleSheet("font-weight:bold;" "font-size:14px;" "padding-top: 6px")
self.title_widget.setText("Create Tags From Folders")
self.title_widget.setText("Create Tags From Folders") # TODO translate
self.title_widget.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.desc_widget = QLabel()
@@ -190,10 +190,10 @@ class FoldersToTagsModal(QWidget):
self.open_close_button_layout = QHBoxLayout(self.open_close_button_w)
self.open_all_button = QPushButton()
self.open_all_button.setText("Open All")
self.open_all_button.setText("Open All") # TODO translate
self.open_all_button.clicked.connect(lambda: self.set_all_branches(False))
self.close_all_button = QPushButton()
self.close_all_button.setText("Close All")
self.close_all_button.setText("Close All") # TODO translate
self.close_all_button.clicked.connect(lambda: self.set_all_branches(True))
self.open_close_button_layout.addWidget(self.open_all_button)
@@ -212,7 +212,7 @@ class FoldersToTagsModal(QWidget):
self.scroll_area.setWidget(self.scroll_contents)
self.apply_button = QPushButton()
self.apply_button.setText("&Apply")
self.apply_button.setText("&Apply") # TODO translate
self.apply_button.setMinimumWidth(100)
self.apply_button.clicked.connect(self.on_apply)

View File

@@ -25,8 +25,8 @@ class MergeDuplicateEntries(QObject):
def merge_entries(self):
pw = ProgressWidget(
window_title="Merging Duplicate Entries",
label_text="Merging Duplicate Entries...",
window_title="Merging Duplicate Entries", # TODO translate
label_text="Merging Duplicate Entries...", # TODO translate
cancel_button_text=None,
minimum=0,
maximum=self.tracker.groups_count,

View File

@@ -30,7 +30,7 @@ class MirrorEntriesModal(QWidget):
def __init__(self, driver: "QtDriver", tracker: DupeRegistry):
super().__init__()
self.driver = driver
self.setWindowTitle("Mirror Entries")
self.setWindowTitle("Mirror Entries") # TODO translate
self.setWindowModality(Qt.WindowModality.ApplicationModal)
self.setMinimumSize(500, 400)
self.root_layout = QVBoxLayout(self)
@@ -43,7 +43,7 @@ class MirrorEntriesModal(QWidget):
self.desc_widget.setText(f"""
Are you sure you want to mirror the following {self.tracker.groups_count} Entries?
""")
""") # TODO translate
self.desc_widget.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.list_view = QListView()
@@ -56,13 +56,13 @@ class MirrorEntriesModal(QWidget):
self.button_layout.addStretch(1)
self.cancel_button = QPushButton()
self.cancel_button.setText("&Cancel")
self.cancel_button.setText("&Cancel") # TODO translate
self.cancel_button.setDefault(True)
self.cancel_button.clicked.connect(self.hide)
self.button_layout.addWidget(self.cancel_button)
self.mirror_button = QPushButton()
self.mirror_button.setText("&Mirror")
self.mirror_button.setText("&Mirror") # TODO translate
self.mirror_button.clicked.connect(self.hide)
self.mirror_button.clicked.connect(self.mirror_entries)
self.button_layout.addWidget(self.mirror_button)
@@ -82,10 +82,10 @@ class MirrorEntriesModal(QWidget):
def mirror_entries(self):
def displayed_text(x):
return f"Mirroring {x + 1}/{self.tracker.groups_count} Entries..."
return f"Mirroring {x + 1}/{self.tracker.groups_count} Entries..." # TODO translate
pw = ProgressWidget(
window_title="Mirroring Entries",
window_title="Mirroring Entries", # TODO translate
label_text="",
cancel_button_text=None,
minimum=0,

View File

@@ -17,12 +17,12 @@ class RelinkUnlinkedEntries(QObject):
def repair_entries(self):
def displayed_text(x):
text = f"Attempting to Relink {x}/{self.tracker.missing_files_count} Entries. \n"
text += f"{self.tracker.files_fixed_count} Successfully Relinked."
text = f"Attempting to Relink {x}/{self.tracker.missing_files_count} Entries. \n" # TODO translate
text += f"{self.tracker.files_fixed_count} Successfully Relinked." # TODO translate
return text
pw = ProgressWidget(
window_title="Relinking Entries",
window_title="Relinking Entries", # TODO translate
label_text="",
cancel_button_text=None,
minimum=0,

View File

@@ -44,7 +44,7 @@ class TagDatabasePanel(PanelWidget):
self.search_field = QLineEdit()
self.search_field.setObjectName("searchField")
self.search_field.setMinimumSize(QSize(0, 32))
self.search_field.setPlaceholderText("Search Tags")
self.search_field.setPlaceholderText("Search Tags") # TODO translate
self.search_field.textEdited.connect(lambda: self.update_tags(self.search_field.text()))
self.search_field.returnPressed.connect(
lambda checked=False: self.on_return(self.search_field.text())
@@ -63,7 +63,7 @@ class TagDatabasePanel(PanelWidget):
self.scroll_area.setWidget(self.scroll_contents)
self.create_tag_button = QPushButton()
self.create_tag_button.setText("Create Tag")
self.create_tag_button.setText("Create Tag") # TODO translate
self.create_tag_button.clicked.connect(self.build_tag)
self.root_layout.addWidget(self.search_field)
@@ -74,8 +74,8 @@ class TagDatabasePanel(PanelWidget):
def build_tag(self):
self.modal = PanelModal(
BuildTagPanel(self.lib),
"New Tag",
"Add Tag",
"New Tag", # TODO translate
"Add Tag", # TODO translate
has_save=True,
)
@@ -134,8 +134,10 @@ class TagDatabasePanel(PanelWidget):
return
message_box = QMessageBox()
message_box.setWindowTitle("Remove Tag")
message_box.setText(f'Are you sure you want to delete the tag "{tag.name}"?')
message_box.setWindowTitle("Remove Tag") # TODO translate
message_box.setText(
f'Are you sure you want to delete the tag "{tag.name}"?'
) # TODO translate
message_box.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) # type: ignore
message_box.setIcon(QMessageBox.Question) # type: ignore
@@ -156,7 +158,7 @@ class TagDatabasePanel(PanelWidget):
self.edit_modal = PanelModal(
build_tag_panel,
tag.name,
"Edit Tag",
"Edit Tag", # TODO translate
done_callback=(self.update_tags(self.search_field.text())),
has_save=True,
)

View File

@@ -41,7 +41,7 @@ class TagSearchPanel(PanelWidget):
self.search_field = QLineEdit()
self.search_field.setObjectName("searchField")
self.search_field.setMinimumSize(QSize(0, 32))
self.search_field.setPlaceholderText("Search Tags")
self.search_field.setPlaceholderText("Search Tags") # TODO translate
self.search_field.textEdited.connect(lambda: self.update_tags(self.search_field.text()))
self.search_field.returnPressed.connect(
lambda checked=False: self.on_return(self.search_field.text())

View File

@@ -11,6 +11,6 @@ class PlatformStrings:
open_file_str: str = "Open in file explorer"
if platform.system() == "Windows":
open_file_str = "Open in Explorer"
open_file_str = "Open in Explorer" # TODO translate
elif platform.system() == "Darwin":
open_file_str = "Reveal in Finder"
open_file_str = "Reveal in Finder" # TODO translate

View File

@@ -147,14 +147,14 @@ class Ui_MainWindow(object):
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
self.comboBox_2.setItemText(0, QCoreApplication.translate("MainWindow", u"And (includes all tags)", None))
self.comboBox_2.setItemText(1, QCoreApplication.translate("MainWindow", u"Or (includes any tag)", None))
self.comboBox_2.setItemText(0, QCoreApplication.translate("MainWindow", u"And (includes all tags)", None)) # TODO remove?
self.comboBox_2.setItemText(1, QCoreApplication.translate("MainWindow", u"Or (includes any tag)", None)) # TODO remove?
self.comboBox.setCurrentText("")
self.comboBox.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Thumbnail Size", None))
self.comboBox.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Thumbnail Size", None)) # TODO translate?
self.backButton.setText(QCoreApplication.translate("MainWindow", u"<", None))
self.forwardButton.setText(QCoreApplication.translate("MainWindow", u">", None))
self.searchField.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Search Entries", None))
self.searchField.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Search Entries", None)) # TODO translate?
self.searchButton.setText(QCoreApplication.translate("MainWindow", u"Search", None))
# retranslateUi

View File

@@ -217,7 +217,7 @@ class ItemThumb(FlowWidget):
self.thumb_button.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu)
self.opener = FileOpenerHelper("")
open_file_action = QAction("Open file", self)
open_file_action = QAction("Open file", self) # TODO translate
open_file_action.triggered.connect(self.opener.open_file)
open_explorer_action = QAction(PlatformStrings.open_file_str, self)
open_explorer_action.triggered.connect(self.opener.open_explorer)
@@ -306,7 +306,7 @@ class ItemThumb(FlowWidget):
self.cb_layout.addWidget(badge)
# Filename Label =======================================================
self.file_label = QLabel(text="Filename")
self.file_label = QLabel(text="Filename") # TODO translate
self.file_label.setStyleSheet(ItemThumb.filename_style)
self.file_label.setMaximumHeight(self.label_height)
if not show_filename_label:

View File

@@ -62,7 +62,7 @@ class LandingWidget(QWidget):
open_shortcut_text = "(Ctrl+O)"
self.open_button: QPushButton = QPushButton()
self.open_button.setMinimumWidth(200)
self.open_button.setText(f"Open/Create Library {open_shortcut_text}")
self.open_button.setText(f"Open/Create Library {open_shortcut_text}") # TODO translate
self.open_button.clicked.connect(self.driver.open_library_from_dialog)
# Create status label --------------------------------------------------

View File

@@ -54,7 +54,7 @@ class JsonMigrationModal(QObject):
self.is_migration_initialized: bool = False
self.discrepancies: list[str] = []
self.title: str = f'Save Format Migration: "{self.path}"'
self.title: str = f'Save Format Migration: "{self.path}"' # TODO translate
self.warning: str = "<b><a style='color: #e22c3c'>(!)</a></b>"
self.old_entry_count: int = 0
@@ -77,7 +77,7 @@ class JsonMigrationModal(QObject):
def init_page_info(self) -> None:
"""Initialize the migration info page."""
body_wrapper: PagedBodyWrapper = PagedBodyWrapper()
body_label: QLabel = QLabel(
body_label: QLabel = QLabel( # TODO translate
"Library save files created with TagStudio versions <b>9.4 and below</b> will "
"need to be migrated to the new <b>v9.5+</b> format."
"<br>"
@@ -93,8 +93,8 @@ class JsonMigrationModal(QObject):
body_wrapper.layout().addWidget(body_label)
body_wrapper.layout().setContentsMargins(0, 36, 0, 0)
cancel_button: QPushButtonWrapper = QPushButtonWrapper("Cancel")
next_button: QPushButtonWrapper = QPushButtonWrapper("Continue")
cancel_button: QPushButtonWrapper = QPushButtonWrapper("Cancel") # TODO translate
next_button: QPushButtonWrapper = QPushButtonWrapper("Continue") # TODO translate
cancel_button.clicked.connect(self.migration_cancelled.emit)
self.stack.append(
@@ -115,18 +115,18 @@ class JsonMigrationModal(QObject):
body_container_layout.setContentsMargins(0, 0, 0, 0)
tab: str = " "
self.match_text: str = "Matched"
self.differ_text: str = "Discrepancy"
self.match_text: str = "Matched" # TODO translate
self.differ_text: str = "Discrepancy" # TODO translate
entries_text: str = "Entries:"
tags_text: str = "Tags:"
shorthand_text: str = tab + "Shorthands:"
subtags_text: str = tab + "Parent Tags:"
aliases_text: str = tab + "Aliases:"
colors_text: str = tab + "Colors:"
ext_text: str = "File Extension List:"
ext_type_text: str = "Extension List Type:"
desc_text: str = (
entries_text: str = "Entries:" # TODO translate
tags_text: str = "Tags:" # TODO translate
shorthand_text: str = tab + "Shorthands:" # TODO translate
subtags_text: str = tab + "Parent Tags:" # TODO translate
aliases_text: str = tab + "Aliases:" # TODO translate
colors_text: str = tab + "Colors:" # TODO translate
ext_text: str = "File Extension List:" # TODO translate
ext_type_text: str = "Extension List Type:" # TODO translate
desc_text: str = ( # TODO translate
"<br>Start and preview the results of the library migration process. "
'The converted library will <i>not</i> be used unless you click "Finish Migration". '
"<br><br>"
@@ -137,8 +137,8 @@ class JsonMigrationModal(QObject):
"This process may take up to several minutes for larger libraries."
"</i></center>"
)
path_parity_text: str = tab + "Paths:"
field_parity_text: str = tab + "Fields:"
path_parity_text: str = tab + "Paths:" # TODO translate
field_parity_text: str = tab + "Fields:" # TODO translate
self.entries_row: int = 0
self.path_row: int = 1
@@ -153,7 +153,7 @@ class JsonMigrationModal(QObject):
old_lib_container: QWidget = QWidget()
old_lib_layout: QVBoxLayout = QVBoxLayout(old_lib_container)
old_lib_title: QLabel = QLabel("<h2>v9.4 Library</h2>")
old_lib_title: QLabel = QLabel("<h2>v9.4 Library</h2>") # TODO translate
old_lib_title.setAlignment(Qt.AlignmentFlag.AlignCenter)
old_lib_layout.addWidget(old_lib_title)
@@ -215,7 +215,7 @@ class JsonMigrationModal(QObject):
new_lib_container: QWidget = QWidget()
new_lib_layout: QVBoxLayout = QVBoxLayout(new_lib_container)
new_lib_title: QLabel = QLabel("<h2>v9.5+ Library</h2>")
new_lib_title: QLabel = QLabel("<h2>v9.5+ Library</h2>") # TODO translate
new_lib_title.setAlignment(Qt.AlignmentFlag.AlignCenter)
new_lib_layout.addWidget(new_lib_title)
@@ -291,13 +291,13 @@ class JsonMigrationModal(QObject):
self.body_wrapper_01.layout().addWidget(desc_label)
self.body_wrapper_01.layout().setSpacing(12)
back_button: QPushButtonWrapper = QPushButtonWrapper("Back")
start_button: QPushButtonWrapper = QPushButtonWrapper("Start and Preview")
back_button: QPushButtonWrapper = QPushButtonWrapper("Back") # TODO translate
start_button: QPushButtonWrapper = QPushButtonWrapper("Start and Preview") # TODO translate
start_button.setMinimumWidth(120)
start_button.clicked.connect(self.migrate)
start_button.clicked.connect(lambda: finish_button.setDisabled(False))
start_button.clicked.connect(lambda: start_button.setDisabled(True))
finish_button: QPushButtonWrapper = QPushButtonWrapper("Finish Migration")
finish_button: QPushButtonWrapper = QPushButtonWrapper("Finish Migration") # TODO translate
finish_button.setMinimumWidth(120)
finish_button.setDisabled(True)
finish_button.clicked.connect(self.finish_migration)
@@ -348,9 +348,9 @@ class JsonMigrationModal(QObject):
lambda x: (
pb.setLabelText(f"<h4>{x}</h4>"),
self.update_sql_value_ui(show_msg_box=False)
if x == "Checking for Parity..."
if x == "Checking for Parity..." # TODO translate
else (),
self.update_parity_ui() if x == "Checking for Parity..." else (),
self.update_parity_ui() if x == "Checking for Parity..." else (), # TODO translate
)
)
r = CustomRunnable(iterator.run)
@@ -367,21 +367,23 @@ class JsonMigrationModal(QObject):
"""Iterate over the library migration process."""
try:
# Convert JSON Library to SQLite
yield "Creating SQL Database Tables..."
yield "Creating SQL Database Tables..." # TODO translate
self.sql_lib = SqliteLibrary()
self.temp_path: Path = (
self.json_lib.library_dir / TS_FOLDER_NAME / "migration_ts_library.sqlite"
)
self.sql_lib.storage_path = self.temp_path
if self.temp_path.exists():
logger.info('Temporary migration file "temp_path" already exists. Removing...')
logger.info(
'Temporary migration file "temp_path" already exists. Removing...'
) # TODO translate
self.temp_path.unlink()
self.sql_lib.open_sqlite_library(
self.json_lib.library_dir, is_new=True, add_default_data=False
)
yield f"Migrating {len(self.json_lib.entries):,d} File Entries..."
yield f"Migrating {len(self.json_lib.entries):,d} File Entries..." # TODO translate
self.sql_lib.migrate_json_to_sqlite(self.json_lib)
yield "Checking for Parity..."
yield "Checking for Parity..." # TODO translate
check_set = set()
check_set.add(self.check_field_parity())
check_set.add(self.check_path_parity())
@@ -391,9 +393,9 @@ class JsonMigrationModal(QObject):
check_set.add(self.check_color_parity())
self.update_parity_ui()
if False not in check_set:
yield "Migration Complete!"
yield "Migration Complete!" # TODO translate
else:
yield "Migration Complete, Discrepancies Found"
yield "Migration Complete, Discrepancies Found" # TODO translate
self.done = True
except Exception as e:
@@ -432,16 +434,16 @@ class JsonMigrationModal(QObject):
self.sql_lib.prefs(LibraryPrefs.IS_EXCLUDE_LIST),
self.old_ext_type,
)
logger.info("Parity check complete!")
logger.info("Parity check complete!") # TODO translate
if self.discrepancies:
logger.warning("Discrepancies found:")
logger.warning("Discrepancies found:") # TODO translate
logger.warning("\n".join(self.discrepancies))
QApplication.beep()
if not show_msg_box:
return
msg_box = QMessageBox()
msg_box.setWindowTitle("Library Discrepancies Found")
msg_box.setText(
msg_box.setWindowTitle("Library Discrepancies Found") # TODO translate
msg_box.setText( # TODO translate
"Discrepancies were found between the original and converted library formats. "
"Please review and choose to whether continue with the migration or to cancel."
)
@@ -546,7 +548,7 @@ class JsonMigrationModal(QObject):
"[Field Comparison]",
message=f"NEW (SQL): SQL Entry ID mismatch: {json_entry.id+1}",
)
self.discrepancies.append(
self.discrepancies.append( # TODO translate
f"[Field Comparison]:\nNEW (SQL): SQL Entry ID not found: {json_entry.id+1}"
)
self.field_parity = False
@@ -624,7 +626,7 @@ class JsonMigrationModal(QObject):
and sql_fields is not None
and (json_fields == sql_fields)
):
self.discrepancies.append(
self.discrepancies.append( # TODO translate
f"[Field Comparison]:\nOLD (JSON):{json_fields}\nNEW (SQL):{sql_fields}"
)
self.field_parity = False
@@ -676,7 +678,7 @@ class JsonMigrationModal(QObject):
and json_subtags is not None
and (sql_subtags == json_subtags)
):
self.discrepancies.append(
self.discrepancies.append( # TODO translate
f"[Subtag Parity]:\nOLD (JSON):{json_subtags}\nNEW (SQL):{sql_subtags}"
)
self.subtag_parity = False
@@ -712,7 +714,7 @@ class JsonMigrationModal(QObject):
and json_aliases is not None
and (sql_aliases == json_aliases)
):
self.discrepancies.append(
self.discrepancies.append( # TODO translate
f"[Alias Parity]:\nOLD (JSON):{json_aliases}\nNEW (SQL):{sql_aliases}"
)
self.alias_parity = False
@@ -743,7 +745,7 @@ class JsonMigrationModal(QObject):
and json_shorthand is not None
and (sql_shorthand == json_shorthand)
):
self.discrepancies.append(
self.discrepancies.append( # TODO translate
f"[Shorthand Parity]:\nOLD (JSON):{json_shorthand}\nNEW (SQL):{sql_shorthand}"
)
self.shorthand_parity = False
@@ -774,7 +776,7 @@ class JsonMigrationModal(QObject):
)
if not (sql_color is not None and json_color is not None and (sql_color == json_color)):
self.discrepancies.append(
self.discrepancies.append( # TODO translate
f"[Color Parity]:\nOLD (JSON):{json_color}\nNEW (SQL):{sql_color}"
)
self.color_parity = False

View File

@@ -49,7 +49,7 @@ class PanelModal(QWidget):
if not (save_callback or has_save):
self.done_button = QPushButton()
self.done_button.setText("Done")
self.done_button.setText("Done") # TODO translate
self.done_button.setAutoDefault(True)
self.done_button.clicked.connect(self.hide)
if done_callback:
@@ -59,7 +59,7 @@ class PanelModal(QWidget):
if save_callback or has_save:
self.cancel_button = QPushButton()
self.cancel_button.setText("Cancel")
self.cancel_button.setText("Cancel") # TODO translate
self.cancel_button.clicked.connect(self.hide)
self.cancel_button.clicked.connect(widget.reset)
# self.cancel_button.clicked.connect(cancel_callback)
@@ -67,7 +67,7 @@ class PanelModal(QWidget):
self.button_layout.addWidget(self.cancel_button)
self.save_button = QPushButton()
self.save_button.setText("Save")
self.save_button.setText("Save") # TODO translate
self.save_button.setAutoDefault(True)
self.save_button.clicked.connect(self.hide)
self.save_button.clicked.connect(self.saved.emit)

View File

@@ -119,7 +119,7 @@ class PreviewPanel(QWidget):
)
date_style = "font-size:12px;"
self.open_file_action = QAction("Open file", self)
self.open_file_action = QAction("Open file", self) # TODO translate
self.open_explorer_action = QAction(PlatformStrings.open_file_str, self)
self.preview_img = QPushButtonWrapper()
@@ -279,7 +279,7 @@ class PreviewPanel(QWidget):
self.add_field_button.setCursor(Qt.CursorShape.PointingHandCursor)
self.add_field_button.setMinimumSize(96, 28)
self.add_field_button.setMaximumSize(96, 28)
self.add_field_button.setText("Add Field")
self.add_field_button.setText("Add Field") # TODO translate
self.afb_layout.addWidget(self.add_field_button)
self.add_field_modal = AddFieldModal(self.lib)
self.place_add_field_button()
@@ -303,7 +303,7 @@ class PreviewPanel(QWidget):
self.driver.frame_content[grid_idx] = result
def remove_field_prompt(self, name: str) -> str:
return f'Are you sure you want to remove field "{name}"?'
return f'Are you sure you want to remove field "{name}"?' # TODO translate
def fill_libs_widget(self, layout: QVBoxLayout):
settings = self.driver.settings
@@ -341,7 +341,7 @@ class PreviewPanel(QWidget):
# remove any potential previous items
clear_layout(layout)
label = QLabel("Recent Libraries")
label = QLabel("Recent Libraries") # TODO translate
label.setAlignment(Qt.AlignmentFlag.AlignCenter)
row_layout = QHBoxLayout()
@@ -379,7 +379,7 @@ class PreviewPanel(QWidget):
lib = Path(full_val)
if not lib.exists() or not (lib / TS_FOLDER_NAME).exists():
button.setDisabled(True)
button.setToolTip("Location is missing")
button.setToolTip("Location is missing") # TODO translate
def open_library_button_clicked(path):
return lambda: self.driver.open_library(Path(path))
@@ -492,16 +492,16 @@ class PreviewPanel(QWidget):
created = dt.fromtimestamp(filepath.stat().st_ctime)
modified: dt = dt.fromtimestamp(filepath.stat().st_mtime)
self.date_created_label.setText(
f"<b>Date Created:</b> {dt.strftime(created, "%a, %x, %X")}"
f"<b>Date Created:</b> {dt.strftime(created, "%a, %x, %X")}" # TODO translate
)
self.date_modified_label.setText(
f"<b>Date Modified:</b> {dt.strftime(modified, "%a, %x, %X")}"
f"<b>Date Modified:</b> {dt.strftime(modified, "%a, %x, %X")}" # TODO translate
)
self.date_created_label.setHidden(False)
self.date_modified_label.setHidden(False)
elif filepath:
self.date_created_label.setText("<b>Date Created:</b> <i>N/A</i>")
self.date_modified_label.setText("<b>Date Modified:</b> <i>N/A</i>")
self.date_created_label.setText("<b>Date Created:</b> <i>N/A</i>") # TODO translate
self.date_modified_label.setText("<b>Date Modified:</b> <i>N/A</i>") # TODO translate
self.date_created_label.setHidden(False)
self.date_modified_label.setHidden(False)
else:
@@ -520,7 +520,7 @@ class PreviewPanel(QWidget):
if not self.driver.selected:
if self.selected or not self.initialized:
self.file_label.setText("<i>No Items Selected</i>")
self.file_label.setText("<i>No Items Selected</i>") # TODO translate
self.file_label.set_file_path("")
self.file_label.setCursor(Qt.CursorShape.ArrowCursor)
@@ -777,7 +777,9 @@ class PreviewPanel(QWidget):
self.media_player.hide()
self.update_date_label()
if self.selected != self.driver.selected:
self.file_label.setText(f"<b>{len(self.driver.selected)}</b> Items Selected")
self.file_label.setText(
f"<b>{len(self.driver.selected)}</b> Items Selected"
) # TODO translate
self.file_label.setCursor(Qt.CursorShape.ArrowCursor)
self.file_label.set_file_path("")
self.dimensions_label.setText("")
@@ -872,10 +874,11 @@ class PreviewPanel(QWidget):
else:
container = self.containers[index]
# TODO this is in severe need of refactoring due to exessive code duplication
if isinstance(field, TagBoxField):
container.set_title(field.type.name)
container.set_inline(False)
title = f"{field.type.name} (Tag Box)"
title = f"{field.type.name} (Tag Box)" # TODO translate
if not is_mixed:
inner_container = container.get_inner_widget()
@@ -916,8 +919,8 @@ class PreviewPanel(QWidget):
)
)
else:
text = "<i>Mixed Data</i>"
title = f"{field.type.name} (Wacky Tag Box)"
text = "<i>Mixed Data</i>" # TODO translate
title = f"{field.type.name} (Wacky Tag Box)" # TODO translate
inner_container = TextWidget(title, text)
container.set_inner_widget(inner_container)
@@ -932,7 +935,7 @@ class PreviewPanel(QWidget):
assert isinstance(field.value, (str, type(None)))
text = field.value or ""
else:
text = "<i>Mixed Data</i>"
text = "<i>Mixed Data</i>" # TODO translate
title = f"{field.type.name} ({field.type.type.value})"
inner_container = TextWidget(title, text)
@@ -941,7 +944,7 @@ class PreviewPanel(QWidget):
modal = PanelModal(
EditTextLine(field.value),
title=title,
window_title=f"Edit {field.type.type.value}",
window_title=f"Edit {field.type.type.value}", # TODO translate
save_callback=(
lambda content: (
self.update_field(field, content),
@@ -973,15 +976,15 @@ class PreviewPanel(QWidget):
assert isinstance(field.value, (str, type(None)))
text = (field.value or "").replace("\r", "\n")
else:
text = "<i>Mixed Data</i>"
title = f"{field.type.name} (Text Box)"
text = "<i>Mixed Data</i>" # TODO translate
title = f"{field.type.name} (Text Box)" # TODO translate
inner_container = TextWidget(title, text)
container.set_inner_widget(inner_container)
if not is_mixed:
modal = PanelModal(
EditTextBox(field.value),
title=title,
window_title=f"Edit {field.type.name}",
window_title=f"Edit {field.type.name}", # TODO translate
save_callback=(
lambda content: (
self.update_field(field, content),
@@ -1008,14 +1011,14 @@ class PreviewPanel(QWidget):
container.set_inline(False)
# TODO: Localize this and/or add preferences.
date = dt.strptime(field.value, "%Y-%m-%d %H:%M:%S")
title = f"{field.type.name} (Date)"
title = f"{field.type.name} (Date)" # TODO translate
inner_container = TextWidget(title, date.strftime("%D - %r"))
container.set_inner_widget(inner_container)
except Exception:
container.set_title(field.type.name)
# container.set_editable(False)
container.set_inline(False)
title = f"{field.type.name} (Date) (Unknown Format)"
title = f"{field.type.name} (Date) (Unknown Format)" # TODO translate
inner_container = TextWidget(title, str(field.value))
container.set_inner_widget(inner_container)
@@ -1029,15 +1032,15 @@ class PreviewPanel(QWidget):
)
)
else:
text = "<i>Mixed Data</i>"
title = f"{field.type.name} (Wacky Date)"
text = "<i>Mixed Data</i>" # TODO translate
title = f"{field.type.name} (Wacky Date)" # TODO translate
inner_container = TextWidget(title, text)
container.set_inner_widget(inner_container)
else:
logger.warning("write_container - unknown field", field=field)
container.set_title(field.type.name)
container.set_inline(False)
title = f"{field.type.name} (Unknown Field Type)"
title = f"{field.type.name} (Unknown Field Type)" # TODO translate
inner_container = TextWidget(title, field.type.name)
container.set_inner_widget(inner_container)
container.set_remove_callback(
@@ -1090,10 +1093,12 @@ class PreviewPanel(QWidget):
def remove_message_box(self, prompt: str, callback: Callable) -> None:
remove_mb = QMessageBox()
remove_mb.setText(prompt)
remove_mb.setWindowTitle("Remove Field")
remove_mb.setWindowTitle("Remove Field") # TODO translate
remove_mb.setIcon(QMessageBox.Icon.Warning)
cancel_button = remove_mb.addButton("&Cancel", QMessageBox.ButtonRole.DestructiveRole)
remove_mb.addButton("&Remove", QMessageBox.ButtonRole.RejectRole)
cancel_button = remove_mb.addButton(
"&Cancel", QMessageBox.ButtonRole.DestructiveRole
) # TODO translate
remove_mb.addButton("&Remove", QMessageBox.ButtonRole.RejectRole) # TODO translate
# remove_mb.setStandardButtons(QMessageBox.StandardButton.Cancel)
remove_mb.setDefaultButton(cancel_button)
remove_mb.setEscapeButton(cancel_button)

View File

@@ -126,17 +126,17 @@ class TagWidget(QWidget):
self.bg_button.setFlat(True)
self.bg_button.setText(tag.name)
if has_edit:
edit_action = QAction("Edit", self)
edit_action = QAction("Edit", self) # TODO translate
edit_action.triggered.connect(on_edit_callback)
edit_action.triggered.connect(self.on_edit.emit)
self.bg_button.addAction(edit_action)
# if on_click_callback:
self.bg_button.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu)
search_for_tag_action = QAction("Search for Tag", self)
search_for_tag_action = QAction("Search for Tag", self) # TODO translate
search_for_tag_action.triggered.connect(self.on_click.emit)
self.bg_button.addAction(search_for_tag_action)
add_to_search_action = QAction("Add to Search", self)
add_to_search_action = QAction("Add to Search", self) # TODO translate
self.bg_button.addAction(add_to_search_action)
self.inner_layout = QHBoxLayout()

View File

@@ -75,7 +75,7 @@ class TagBoxWidget(FieldWidget):
)
tsp = TagSearchPanel(self.driver.lib)
tsp.tag_chosen.connect(lambda x: self.add_tag_callback(x))
self.add_modal = PanelModal(tsp, title, "Add Tags")
self.add_modal = PanelModal(tsp, title, "Add Tags") # TODO translate
self.add_button.clicked.connect(
lambda: (
tsp.update_tags(),
@@ -131,7 +131,7 @@ class TagBoxWidget(FieldWidget):
self.edit_modal = PanelModal(
build_tag_panel,
tag.name, # TODO - display name including subtags
"Edit Tag",
"Edit Tag", # TODO translate
done_callback=self.driver.preview_panel.update_widgets,
has_save=True,
)

View File

@@ -115,7 +115,7 @@ class VideoPlayer(QGraphicsView):
self.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu)
self.opener = FileOpenerHelper(filepath=self.filepath)
autoplay_action = QAction("Autoplay", self)
autoplay_action = QAction("Autoplay", self) # TODO translate
autoplay_action.setCheckable(True)
self.addAction(autoplay_action)
autoplay_action.setChecked(
@@ -124,7 +124,7 @@ class VideoPlayer(QGraphicsView):
autoplay_action.triggered.connect(lambda: self.toggle_autoplay())
self.autoplay = autoplay_action
open_file_action = QAction("Open file", self)
open_file_action = QAction("Open file", self) # TODO translate
open_file_action.triggered.connect(self.opener.open_file)
open_explorer_action = QAction(PlatformStrings.open_file_str, self)