From 807e632505d9fe5eee31571308e2eec693d2b140 Mon Sep 17 00:00:00 2001 From: NinjaCheetah <58050615+NinjaCheetah@users.noreply.github.com> Date: Mon, 12 Aug 2024 18:55:28 -0400 Subject: [PATCH] Improved translation handling and fixed word wrapping for checkboxes --- NUSGet.py | 58 ++--- qt/py/ui_MainMenu.py | 126 ++++++++-- qt/ui/MainMenu.ui | 239 +++++++++++++++---- resources/translations/nusget_es.ts | 178 +++++++------- resources/translations/nusget_it.ts | 348 +++++++++++++++------------- resources/translations/nusget_nb.ts | 340 ++++++++++++++------------- resources/translations/nusget_no.ts | 340 ++++++++++++++------------- 7 files changed, 966 insertions(+), 663 deletions(-) diff --git a/NUSGet.py b/NUSGet.py index 5f7efc4..cb502c7 100644 --- a/NUSGet.py +++ b/NUSGet.py @@ -18,7 +18,7 @@ from PySide6.QtCore import QRunnable, Slot, QThreadPool, Signal, QObject, QLibra from qt.py.ui_MainMenu import Ui_MainWindow -nusget_version = "1.1" +nusget_version = "1.2.0" regions = {"World": ["41"], "USA/NTSC": ["45"], "Europe/PAL": ["50"], "Japan": ["4A"], "Korea": ["4B"], "China": ["43"], "Australia/NZ": ["55"]} @@ -71,13 +71,15 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Basic intro text set to automatically show when the app loads. This may be changed in the future. libwiipy_version = "v" + version("libWiiPy") libtwlpy_version = "v" + version("libTWLPy") - log_message = self.tr(f"NUSGet v{nusget_version}\nDeveloped by NinjaCheetah\nPowered by libWiiPy " - f"{libwiipy_version}\nDSi support provided by libTWLPy {libtwlpy_version}\n\n" - f"Select a title from the list on the left, or enter a Title ID to begin.\n\n" - f"Titles marked with a checkmark are free and have a ticket available, and can" - f" be decrypted and/or packed into a WAD or TAD. Titles with an X do not have " - f"a ticket, and only their encrypted contents can be saved.\n\nTitles will be " - f"downloaded to a folder named \"NUSGet\" inside your downloads folder.") + log_message = (app.translate("NUSGet v{nusget_version}\nDeveloped by NinjaCheetah\nPowered by libWiiPy " + "{libwiipy_version}\nDSi support provided by libTWLPy {libtwlpy_version}\n\n" + "Select a title from the list on the left, or enter a Title ID to begin.\n\n" + "Titles marked with a checkmark are free and have a ticket available, and can" + " be decrypted and/or packed into a WAD or TAD. Titles with an X do not have " + "a ticket, and only their encrypted contents can be saved.\n\nTitles will be " + "downloaded to a folder named \"NUSGet\" inside your downloads folder.", "Welcome Text") + .format(nusget_version=nusget_version, libwiipy_version=libwiipy_version, + libtwlpy_version=libtwlpy_version)) self.ui.log_text_browser.setText(log_message) # Add console entries to dropdown and attach on change signal. self.ui.console_select_dropdown.addItem("Wii") @@ -233,34 +235,34 @@ class MainWindow(QMainWindow, Ui_MainWindow): msg_box.setStandardButtons(QMessageBox.StandardButton.Ok) msg_box.setDefaultButton(QMessageBox.StandardButton.Ok) if result == -1: - window_title = self.tr("Invalid Title ID") - title_text = self.tr("The Title ID you have entered is not in a valid format!") - body_text = self.tr("Title IDs must be 16 digit strings of numbers and letters. Please enter a correctly " - "formatted Title ID, or select one from the menu on the left.") + window_title = app.translate("Invalid Title ID", "Invalid TID Error Window Title") + title_text = app.translate("The Title ID you have entered is not in a valid format!", "Invalid TID Error Title") + body_text = app.translate("Title IDs must be 16 digit strings of numbers and letters. Please enter a correctly " + "formatted Title ID, or select one from the menu on the left.", "Invalid Title ID Error Body") elif result == -2: - window_title = self.tr("Title ID/Version Not Found") - title_text = self.tr("No title with the provided Title ID or version could be found!") - body_text = self.tr("Please make sure that you have entered a valid Title ID, or selected one from the " + window_title = app.translate("Title ID/Version Not Found", "Target Not Found Error Window Title") + title_text = app.translate("No title with the provided Title ID or version could be found!", "Target Not Found Error Title") + body_text = app.translate("Please make sure that you have entered a valid Title ID, or selected one from the " "title database, and that the provided version exists for the title you are attempting " - "to download.") + "to download.", "Target Not Found Error Body") elif result == -3: - window_title = self.tr("Content Decryption Failed") - title_text = self.tr("Content decryption was not successful! Decrypted contents could not be created.") - body_text = self.tr("Your TMD or Ticket may be damaged, or they may not correspond with the content being " + window_title = app.translate("Content Decryption Failed", "Decryption Error Window Title") + title_text = app.translate("Content decryption was not successful! Decrypted contents could not be created.", "Decryption Error Title") + body_text = app.translate("Your TMD or Ticket may be damaged, or they may not correspond with the content being " "decrypted. If you have checked \"Use local files, if they exist\", try disabling that " - "option before trying the download again to fix potential issues with local data.") + "option before trying the download again to fix potential issues with local data.", "Decryption Error Body") elif result == 1: msg_box.setIcon(QMessageBox.Icon.Warning) - window_title = self.tr("Ticket Not Available") - title_text = self.tr("No Ticket is Available for the Requested Title!") - body_text = self.tr("A ticket could not be downloaded for the requested title, but you have selected \"Pack" + window_title = app.translate("Ticket Not Available", "No Ticket Error Window Title") + title_text = app.translate("No Ticket is Available for the Requested Title!", "No Ticket Error Title") + body_text = app.translate("A ticket could not be downloaded for the requested title, but you have selected \"Pack" " installable archive\" or \"Create decrypted contents\". These options are not " - "available for titles without a ticket. Only encrypted contents have been saved.") + "available for titles without a ticket. Only encrypted contents have been saved.", "No Ticket Error Body") else: - window_title = self.tr("Unknown Error") - title_text = self.tr("An Unknown Error has Occurred!") - body_text = self.tr("Please try again. If this issue persists, please open a new issue on GitHub detailing" - " what you were trying to do when this error occurred.") + window_title = app.translate("Unknown Error", "Unknown Error Window Title") + title_text = app.translate("An Unknown Error has Occurred!", "Unknown Error Title") + body_text = app.translate("Please try again. If this issue persists, please open a new issue on GitHub detailing" + " what you were trying to do when this error occurred.", "Unknown Error Body") if result != 0: msg_box.setWindowTitle(window_title) msg_box.setText(title_text) diff --git a/qt/py/ui_MainMenu.py b/qt/py/ui_MainMenu.py index f24eed3..4baef26 100644 --- a/qt/py/ui_MainMenu.py +++ b/qt/py/ui_MainMenu.py @@ -160,10 +160,27 @@ class Ui_MainWindow(object): self.verticalLayout_7.addWidget(self.label_3) + self.pack_archive_row = QHBoxLayout() + self.pack_archive_row.setObjectName(u"pack_archive_row") self.pack_archive_chkbox = QCheckBox(self.centralwidget) self.pack_archive_chkbox.setObjectName(u"pack_archive_chkbox") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Maximum, QSizePolicy.Policy.Fixed) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.pack_archive_chkbox.sizePolicy().hasHeightForWidth()) + self.pack_archive_chkbox.setSizePolicy(sizePolicy1) + self.pack_archive_chkbox.setText(u"") - self.verticalLayout_7.addWidget(self.pack_archive_chkbox) + self.pack_archive_row.addWidget(self.pack_archive_chkbox) + + self.label_7 = QLabel(self.centralwidget) + self.label_7.setObjectName(u"label_7") + self.label_7.setWordWrap(True) + + self.pack_archive_row.addWidget(self.label_7) + + + self.verticalLayout_7.addLayout(self.pack_archive_row) self.archive_file_entry = QLineEdit(self.centralwidget) self.archive_file_entry.setObjectName(u"archive_file_entry") @@ -171,33 +188,94 @@ class Ui_MainWindow(object): self.verticalLayout_7.addWidget(self.archive_file_entry) + self.keep_enc_row = QHBoxLayout() + self.keep_enc_row.setObjectName(u"keep_enc_row") self.keep_enc_chkbox = QCheckBox(self.centralwidget) self.keep_enc_chkbox.setObjectName(u"keep_enc_chkbox") + sizePolicy1.setHeightForWidth(self.keep_enc_chkbox.sizePolicy().hasHeightForWidth()) + self.keep_enc_chkbox.setSizePolicy(sizePolicy1) + self.keep_enc_chkbox.setText(u"") self.keep_enc_chkbox.setChecked(True) - self.verticalLayout_7.addWidget(self.keep_enc_chkbox) + self.keep_enc_row.addWidget(self.keep_enc_chkbox) + self.label_6 = QLabel(self.centralwidget) + self.label_6.setObjectName(u"label_6") + self.label_6.setWordWrap(True) + + self.keep_enc_row.addWidget(self.label_6) + + + self.verticalLayout_7.addLayout(self.keep_enc_row) + + self.create_dec_row = QHBoxLayout() + self.create_dec_row.setObjectName(u"create_dec_row") self.create_dec_chkbox = QCheckBox(self.centralwidget) self.create_dec_chkbox.setObjectName(u"create_dec_chkbox") + sizePolicy1.setHeightForWidth(self.create_dec_chkbox.sizePolicy().hasHeightForWidth()) + self.create_dec_chkbox.setSizePolicy(sizePolicy1) + self.create_dec_chkbox.setText(u"") - self.verticalLayout_7.addWidget(self.create_dec_chkbox) + self.create_dec_row.addWidget(self.create_dec_chkbox) + self.create_dec_chkbox_lbl = QLabel(self.centralwidget) + self.create_dec_chkbox_lbl.setObjectName(u"create_dec_chkbox_lbl") + self.create_dec_chkbox_lbl.setWordWrap(True) + + self.create_dec_row.addWidget(self.create_dec_chkbox_lbl) + + + self.verticalLayout_7.addLayout(self.create_dec_row) + + self.use_local_row = QHBoxLayout() + self.use_local_row.setObjectName(u"use_local_row") self.use_local_chkbox = QCheckBox(self.centralwidget) self.use_local_chkbox.setObjectName(u"use_local_chkbox") self.use_local_chkbox.setEnabled(True) + sizePolicy1.setHeightForWidth(self.use_local_chkbox.sizePolicy().hasHeightForWidth()) + self.use_local_chkbox.setSizePolicy(sizePolicy1) + self.use_local_chkbox.setText(u"") - self.verticalLayout_7.addWidget(self.use_local_chkbox) + self.use_local_row.addWidget(self.use_local_chkbox) + self.use_local_chkbox_lbl = QLabel(self.centralwidget) + self.use_local_chkbox_lbl.setObjectName(u"use_local_chkbox_lbl") + self.use_local_chkbox_lbl.setWordWrap(True) + + self.use_local_row.addWidget(self.use_local_chkbox_lbl) + + + self.verticalLayout_7.addLayout(self.use_local_row) + + self.use_wiiu_nus_row = QHBoxLayout() + self.use_wiiu_nus_row.setObjectName(u"use_wiiu_nus_row") self.use_wiiu_nus_chkbox = QCheckBox(self.centralwidget) self.use_wiiu_nus_chkbox.setObjectName(u"use_wiiu_nus_chkbox") + sizePolicy1.setHeightForWidth(self.use_wiiu_nus_chkbox.sizePolicy().hasHeightForWidth()) + self.use_wiiu_nus_chkbox.setSizePolicy(sizePolicy1) + self.use_wiiu_nus_chkbox.setLayoutDirection(Qt.LeftToRight) + self.use_wiiu_nus_chkbox.setText(u"") self.use_wiiu_nus_chkbox.setChecked(True) - self.verticalLayout_7.addWidget(self.use_wiiu_nus_chkbox) + self.use_wiiu_nus_row.addWidget(self.use_wiiu_nus_chkbox) + + self.use_wiiu_nus_chkbox_lbl = QLabel(self.centralwidget) + self.use_wiiu_nus_chkbox_lbl.setObjectName(u"use_wiiu_nus_chkbox_lbl") + self.use_wiiu_nus_chkbox_lbl.setWordWrap(True) + + self.use_wiiu_nus_row.addWidget(self.use_wiiu_nus_chkbox_lbl) + + + self.verticalLayout_7.addLayout(self.use_wiiu_nus_row) self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) self.verticalLayout_7.addItem(self.verticalSpacer_2) + self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.verticalLayout_7.addItem(self.horizontalSpacer) + self.horizontalLayout_5.addLayout(self.verticalLayout_7) @@ -209,16 +287,34 @@ class Ui_MainWindow(object): self.verticalLayout_8.addWidget(self.label_4) + self.pack_vwii_mode_row = QHBoxLayout() + self.pack_vwii_mode_row.setObjectName(u"pack_vwii_mode_row") self.pack_vwii_mode_chkbox = QCheckBox(self.centralwidget) self.pack_vwii_mode_chkbox.setObjectName(u"pack_vwii_mode_chkbox") self.pack_vwii_mode_chkbox.setEnabled(False) + sizePolicy1.setHeightForWidth(self.pack_vwii_mode_chkbox.sizePolicy().hasHeightForWidth()) + self.pack_vwii_mode_chkbox.setSizePolicy(sizePolicy1) + self.pack_vwii_mode_chkbox.setText(u"") - self.verticalLayout_8.addWidget(self.pack_vwii_mode_chkbox) + self.pack_vwii_mode_row.addWidget(self.pack_vwii_mode_chkbox) + + self.label_8 = QLabel(self.centralwidget) + self.label_8.setObjectName(u"label_8") + self.label_8.setWordWrap(True) + + self.pack_vwii_mode_row.addWidget(self.label_8) + + + self.verticalLayout_8.addLayout(self.pack_vwii_mode_row) self.verticalSpacer = QSpacerItem(20, 50, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) self.verticalLayout_8.addItem(self.verticalSpacer) + self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.verticalLayout_8.addItem(self.horizontalSpacer_2) + self.horizontalLayout_5.addLayout(self.verticalLayout_8) @@ -237,7 +333,7 @@ class Ui_MainWindow(object): MainWindow.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(MainWindow) self.menubar.setObjectName(u"menubar") - self.menubar.setGeometry(QRect(0, 0, 1010, 29)) + self.menubar.setGeometry(QRect(0, 0, 1010, 30)) MainWindow.setMenuBar(self.menubar) self.retranslateUi(MainWindow) @@ -263,19 +359,19 @@ class Ui_MainWindow(object): self.console_select_dropdown.setCurrentText("") self.download_btn.setText(QCoreApplication.translate("MainWindow", u"Start Download", None)) self.label_3.setText(QCoreApplication.translate("MainWindow", u"General Settings", None)) - self.pack_archive_chkbox.setText(QCoreApplication.translate("MainWindow", u"Pack installable archive (WAD/TAD)", None)) + self.label_7.setText(QCoreApplication.translate("MainWindow", u"Pack installable archive (WAD/TAD)", None)) self.archive_file_entry.setPlaceholderText(QCoreApplication.translate("MainWindow", u"File Name", None)) - self.keep_enc_chkbox.setText(QCoreApplication.translate("MainWindow", u"Keep encrypted contents", None)) - self.create_dec_chkbox.setText(QCoreApplication.translate("MainWindow", u"Create decrypted contents (*.app)", None)) - self.use_local_chkbox.setText(QCoreApplication.translate("MainWindow", u"Use local files, if they exist", None)) - self.use_wiiu_nus_chkbox.setText(QCoreApplication.translate("MainWindow", u"Use the Wii U NUS (faster, only effects Wii/vWii)", None)) + self.label_6.setText(QCoreApplication.translate("MainWindow", u"Keep encrypted contents", None)) + self.create_dec_chkbox_lbl.setText(QCoreApplication.translate("MainWindow", u"Create decrypted contents (*.app)", None)) + self.use_local_chkbox_lbl.setText(QCoreApplication.translate("MainWindow", u"Use local files, if they exist", None)) + self.use_wiiu_nus_chkbox_lbl.setText(QCoreApplication.translate("MainWindow", u"Use the Wii U NUS (faster, only effects Wii/vWii)", None)) self.label_4.setText(QCoreApplication.translate("MainWindow", u"vWii Title Settings", None)) - self.pack_vwii_mode_chkbox.setText(QCoreApplication.translate("MainWindow", u"Re-encrypt title using the Wii Common Key", None)) + self.label_8.setText(QCoreApplication.translate("MainWindow", u"Re-encrypt title using the Wii Common Key", None)) self.log_text_browser.setMarkdown("") self.log_text_browser.setHtml(QCoreApplication.translate("MainWindow", u"\n" "
\n" -"