diff --git a/NUSGet.py b/NUSGet.py index 4b7f303..8b0f80e 100644 --- a/NUSGet.py +++ b/NUSGet.py @@ -37,7 +37,7 @@ from modules.core import * from modules.download_wii import run_nus_download_wii, run_nus_download_wii_batch from modules.download_dsi import run_nus_download_dsi, run_nus_download_dsi_batch -nusget_version = "1.2.0" +nusget_version = "1.3.0" current_selected_version = "" regions = {"World": ["41"], "USA/NTSC": ["45"], "Europe/PAL": ["50"], "Japan": ["4A"], "Korea": ["4B"], "China": ["43"], @@ -123,24 +123,23 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Iterate over each title in the current category. for title in tree[1][key]: new_title = QTreeWidgetItem() - new_title.setText(0, title["TID"] + " - " + title["Name"]) + new_title.setText(0, f"{title['TID']} - {title['Name']}") # Build the list of regions and what versions are offered for each region. for region in title["Versions"]: new_region = QTreeWidgetItem() new_region.setText(0, region) for title_version in title["Versions"][region]: new_version = QTreeWidgetItem() - # Added public display versions (4.3U, 4.3J, etc) + # Added public display versions (4.3U, 4.3J, etc.) # messy code can absolutely be cleaned up!! - strVersion = str(title_version) + version_str = str(title_version) public_versions = title.get("Public Versions", {}) - if strVersion in public_versions: - public_version = " (" + public_versions[strVersion] + ")" # add () - else: - public_version = "" + public_version = "" + if version_str in public_versions: + public_version = f" ({public_versions[version_str]})" # changed to strVersion here #current_selected_version = strVersion - new_version.setText(0, "v" + strVersion + public_version) + new_version.setText(0, f"v{version_str}{public_version}") new_region.addChild(new_version) new_title.addChild(new_region) # Set an indicator icon to show if a ticket is offered for this title or not. @@ -175,7 +174,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): tree = self.trees[self.ui.platform_tabs.currentIndex()] for title in tree[1][category]: # Check to see if the current title matches the selected one, and if it does, pass that info on. - if item.parent().parent().text(0) == (title["TID"] + " - " + title["Name"]): + if item.parent().parent().text(0) == f"{title['TID']} - {title['Name']}": self.ui.console_select_dropdown.setCurrentIndex(self.ui.platform_tabs.currentIndex()) try: danger_text = title["Danger"] @@ -392,68 +391,76 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.ui.pack_vwii_mode_chkbox.setEnabled(False) def script_btn_pressed(self): - file_name = QFileDialog.getOpenFileName(self, caption=app.translate("MainWindow", "Open NUS script"), filter=app.translate("MainWindow", "NUS Scripts (*.nus *.txt)"), options=QFileDialog.Option.ReadOnly) + msg_box = QMessageBox() + msg_box.setIcon(QMessageBox.Icon.Critical) + msg_box.setStandardButtons(QMessageBox.StandardButton.Ok) + msg_box.setDefaultButton(QMessageBox.StandardButton.Ok) + msg_box.setWindowTitle(app.translate("MainWindow", "Script Download Failed")) + file_name = QFileDialog.getOpenFileName(self, caption=app.translate("MainWindow", "Open NUS script"), + filter=app.translate("MainWindow", "NUS Scripts (*.nus *.txt)"), + options=QFileDialog.Option.ReadOnly) if len(file_name[0]) == 0: return - try: - file = open(file_name[0], "r") - except: - QMessageBox.critical(self, app.translate("MainWindow", "Script Failure"), app.translate("MainWindow", "Failed to open the script."), buttons=QMessageBox.StandardButton.Ok, defaultButton=QMessageBox.StandardButton.Ok) + content = open(file_name[0], "r").readlines() + except os.error: + msg_box.setText(app.translate("MainWindow", "The script could not be opened.")) + msg_box.exec() return - - content = file.readlines() - # Decoding NUS Scripts # NUS Scripts are plaintext UTF-8 files that list a title per line, terminated with newlines. # Every title is its u64 TID, a space and its u16 version, *both* written in hexadecimal. - # NUS itself expects versions as decimal notation, so they need to be decoded first, but TIDs are always written in hexadecimal notation. - + # NUS itself expects versions as decimal notation, so they need to be decoded first, but TIDs are always written + # in hexadecimal notation. titles = [] - for index, title in enumerate(content): decoded = title.replace("\n", "").split(" ", 1) if len(decoded[0]) != 16: - QMessageBox.critical(self, app.translate("MainWindow", "Script Failure"), app.translate("MainWindow", "The TID for title #%n is not valid.", "", index+1), buttons=QMessageBox.StandardButton.Ok, defaultButton=QMessageBox.StandardButton.Ok) + msg_box.setText(app.translate("MainWindow", "The TID for title #%n is not valid.", "", index + 1)) + msg_box.exec() return elif len(decoded[1]) != 4: - QMessageBox.critical(self, app.translate("MainWindow", "Script Failure"), app.translate("MainWindow", "The version for title #%n is not valid.", "", index+1), buttons=QMessageBox.StandardButton.Ok, defaultButton=QMessageBox.StandardButton.Ok) + msg_box.setText(app.translate("MainWindow", "The version for title #%n is not valid.", "", index + 1)) + msg_box.exec() return tid = decoded[0] try: - version = int(decoded[1], 16) - except: - QMessageBox.critical(self, app.translate("MainWindow", "Script Failure"), app.translate("MainWindow", "The version for title #%n is not valid.", "", index+1), buttons=QMessageBox.StandardButton.Ok, defaultButton=QMessageBox.StandardButton.Ok) + target_version = int(decoded[1], 16) + except ValueError: + msg_box.setText(app.translate("MainWindow", "The version for title #%n is not valid.", "", index + 1)) + msg_box.exec() return title = None for category in self.trees[self.ui.platform_tabs.currentIndex()][1]: for title_ in self.trees[self.ui.platform_tabs.currentIndex()][1][category]: - # The last two digits are either identifying the title type (e.g IOS slot, BC type, etc) or a region code; in case of the latter, skip the region here to match it + # The last two digits are either identifying the title type (IOS slot, BC type, etc.) or a region code; in case of the latter, skip the region here to match it if not ((title_["TID"][-2:] == "XX" and title_["TID"][:-2] == tid[:-2]) or title_["TID"] == tid): continue found_ver = False for region in title_["Versions"]: for db_version in title_["Versions"][region]: - if db_version == version: + if db_version == target_version: found_ver = True break if not found_ver: - QMessageBox.critical(self, app.translate("MainWindow", "Script Failure"), app.translate("MainWindow", "The version for title #%n could not be discovered in the database.", "", index+1), buttons=QMessageBox.StandardButton.Ok, defaultButton=QMessageBox.StandardButton.Ok) + msg_box.setText(app.translate("MainWindow", "The version for title #%n could not be discovered in the database.", "", index + 1)) + msg_box.exec() return title = title_ break - if title == None: - QMessageBox.critical(self, app.translate("MainWindow", "Script Failure"), app.translate("MainWindow", "Title #%n could not be discovered in the database.", "", index+1), buttons=QMessageBox.StandardButton.Ok, defaultButton=QMessageBox.StandardButton.Ok) + if title is None: + msg_box.setText(app.translate("MainWindow", "Title #%n could not be discovered in the database.", "", index + 1)) + msg_box.exec() return - titles.append((title["TID"], str(version), title["Archive Name"])) + titles.append((title["TID"], str(target_version), title["Archive Name"])) self.lock_ui_for_download() diff --git a/modules/download_dsi.py b/modules/download_dsi.py index ab58339..47f7e86 100644 --- a/modules/download_dsi.py +++ b/modules/download_dsi.py @@ -1,7 +1,6 @@ # "modules/download_dsi.py", licensed under the MIT license # Copyright 2024 NinjaCheetah -import os import pathlib from typing import List, Tuple @@ -27,14 +26,13 @@ def run_nus_download_dsi(out_folder: pathlib.Path, tid: str, version: str, pack_ # Create a new libTWLPy Title. title = libTWLPy.Title() # Make a directory for this title if it doesn't exist. - title_dir = pathlib.Path(os.path.join(out_folder, tid)) - if not title_dir.is_dir(): - title_dir.mkdir() + title_dir = out_folder.joinpath(tid) + title_dir.mkdir(exist_ok=True) # Announce the title being downloaded, and the version if applicable. if title_version is not None: - progress_callback.emit("Downloading title " + tid + " v" + str(title_version) + ", please wait...") + progress_callback.emit(f"Downloading title {tid} v{title_version}, please wait...") else: - progress_callback.emit("Downloading title " + tid + " vLatest, please wait...") + progress_callback.emit(f"Downloading title {tid} vLatest, please wait...") progress_callback.emit(" - Downloading and parsing TMD...") # Download a specific TMD version if a version was specified, otherwise just download the latest TMD. try: @@ -47,25 +45,19 @@ def run_nus_download_dsi(out_folder: pathlib.Path, tid: str, version: str, pack_ except ValueError: return -2 # Make a directory for this version if it doesn't exist. - version_dir = pathlib.Path(os.path.join(title_dir, str(title_version))) - if not version_dir.is_dir(): - version_dir.mkdir() + version_dir = title_dir.joinpath(str(title_version)) + version_dir.mkdir(exist_ok=True) # Write out the TMD to a file. - tmd_out = open(os.path.join(version_dir, "tmd." + str(title_version)), "wb") - tmd_out.write(title.tmd.dump()) - tmd_out.close() + version_dir.joinpath(f"tmd.{title_version}").write_bytes(title.tmd.dump()) # Use a local ticket, if one exists and "use local files" is enabled. - if use_local_chkbox is True and os.path.exists(os.path.join(version_dir, "tik")): + if use_local_chkbox and version_dir.joinpath("tik").exists(): progress_callback.emit(" - Parsing local copy of Ticket...") - local_ticket = open(os.path.join(version_dir, "tik"), "rb") - title.load_ticket(local_ticket.read()) + title.load_ticket(version_dir.joinpath("tik").read_bytes()) else: progress_callback.emit(" - Downloading and parsing Ticket...") try: title.load_ticket(libTWLPy.download_ticket(tid)) - ticket_out = open(os.path.join(version_dir, "tik"), "wb") - ticket_out.write(title.ticket.dump()) - ticket_out.close() + version_dir.joinpath("tik").write_bytes(title.ticket.dump()) except ValueError: # If libTWLPy returns an error, then no ticket is available. Log this, and disable options requiring a # ticket so that they aren't attempted later. @@ -74,38 +66,27 @@ def run_nus_download_dsi(out_folder: pathlib.Path, tid: str, version: str, pack_ decrypt_contents_enabled = False # Load the content record from the TMD, and download the content it lists. DSi titles only have one content. title.load_content_records() - content_file_name = hex(title.tmd.content_record.content_id)[2:] - while len(content_file_name) < 8: - content_file_name = "0" + content_file_name + content_file_name = f"{title.tmd.content_record.content_id:08X}" # Check for a local copy of the current content if "use local files" is enabled, and use it. - if use_local_chkbox is True and os.path.exists(os.path.join(version_dir, content_file_name)): + if use_local_chkbox and version_dir.joinpath(content_file_name).exists(): progress_callback.emit(" - Using local copy of content") - local_file = open(os.path.join(version_dir, content_file_name), "rb") - content = local_file.read() + content = version_dir.joinpath(content_file_name).read_bytes() else: - progress_callback.emit(" - Downloading content (Content ID: " + str(title.tmd.content_record.content_id) + - ", Size: " + str(title.tmd.content_record.content_size) + " bytes)...") + progress_callback.emit(f" - Downloading content (Content ID: {title.tmd.content_record.content_id}, Size: " + f"{title.tmd.content_record.content_size} bytes)...") content = libTWLPy.download_content(tid, title.tmd.content_record.content_id) progress_callback.emit(" - Done!") - # If keep encrypted contents is on, write out each content after its downloaded. + # If keep encrypted contents is on, write out the content after its downloaded. if keep_enc_chkbox is True: - enc_content_out = open(os.path.join(version_dir, content_file_name), "wb") - enc_content_out.write(content) - enc_content_out.close() + version_dir.joinpath(content_file_name).write_bytes(content) title.content.content = content - # If decrypt local contents is still true, decrypt each content and write out the decrypted file. + # If decrypt local contents is still true, decrypt the content and write out the decrypted file. if decrypt_contents_enabled is True: try: - progress_callback.emit(" - Decrypting content (Content ID: " + str(title.tmd.content_record.content_id) - + ")...") + progress_callback.emit(f" - Decrypting content (Content ID: {title.tmd.content_record.content_id})...") dec_content = title.get_content() - content_file_name = hex(title.tmd.content_record.content_id)[2:] - while len(content_file_name) < 8: - content_file_name = "0" + content_file_name - content_file_name = content_file_name + ".app" - dec_content_out = open(os.path.join(version_dir, content_file_name), "wb") - dec_content_out.write(dec_content) - dec_content_out.close() + content_file_name = f"{title.tmd.content_record.content_id:08X}.app" + version_dir.joinpath(content_file_name).write_bytes(dec_content) except ValueError: # If libWiiPy throws an error during decryption, return code -3. This should only be possible if using # local encrypted contents that have been altered at present. @@ -118,14 +99,12 @@ def run_nus_download_dsi(out_folder: pathlib.Path, tid: str, version: str, pack_ # Use a typed TAD name if there is one, and auto generate one based on the TID and version if there isn't. progress_callback.emit("Packing TAD...") if tad_file_name != "" and tad_file_name is not None: - if tad_file_name[-4:] != ".tad": - tad_file_name = tad_file_name + ".tad" + if tad_file_name[-4:].lower() != ".tad": + tad_file_name += ".tad" else: - tad_file_name = tid + "-v" + str(title_version) + ".tad" + tad_file_name = f"{tid}-v{title_version}.tad" # Have libTWLPy dump the TAD, and write that data out. - file = open(os.path.join(version_dir, tad_file_name), "wb") - file.write(title.dump_tad()) - file.close() + version_dir.joinpath(tad_file_name).write_bytes(title.dump_tad()) progress_callback.emit("Download complete!") # This is where the variables come in. If the state of these variables doesn't match the user's choice by this # point, it means that they enabled decryption or TAD packing for a title that doesn't have a ticket. Return @@ -134,12 +113,14 @@ def run_nus_download_dsi(out_folder: pathlib.Path, tid: str, version: str, pack_ return 1 return 0 -def run_nus_download_dsi_batch(out_folder: pathlib.Path, titles: List[Tuple[str, str, str]], pack_tad_chkbox: bool, keep_enc_chkbox: bool, - decrypt_contents_chkbox: bool, use_local_chkbox: bool, progress_callback=None): +def run_nus_download_dsi_batch(out_folder: pathlib.Path, titles: List[Tuple[str, str, str]], pack_tad_chkbox: bool, + keep_enc_chkbox: bool, decrypt_contents_chkbox: bool, use_local_chkbox: bool, + progress_callback=None): for title in titles: - result = run_nus_download_dsi(out_folder, title[0], title[1], pack_tad_chkbox, keep_enc_chkbox, decrypt_contents_chkbox, use_local_chkbox, f"{title[2]}-{title[1]}.tad", progress_callback) + result = run_nus_download_dsi(out_folder, title[0], title[1], pack_tad_chkbox, keep_enc_chkbox, + decrypt_contents_chkbox, use_local_chkbox, f"{title[2]}-{title[1]}.tad", + progress_callback) if result != 0: return result - progress_callback.emit(f"Batch download finished.") return 0 diff --git a/modules/download_wii.py b/modules/download_wii.py index 4302842..0e436b4 100644 --- a/modules/download_wii.py +++ b/modules/download_wii.py @@ -1,7 +1,6 @@ # "modules/download_wii.py", licensed under the MIT license # Copyright 2024 NinjaCheetah -import os import pathlib from typing import List, Tuple @@ -11,7 +10,6 @@ import libWiiPy def run_nus_download_wii(out_folder: pathlib.Path, tid: str, version: str, pack_wad_chkbox: bool, keep_enc_chkbox: bool, decrypt_contents_chkbox: bool, wiiu_nus_chkbox: bool, use_local_chkbox: bool, repack_vwii_chkbox: bool, patch_ios: bool, wad_file_name: str, progress_callback=None): - #print(version) # Actual NUS download function that runs in a separate thread. # Immediately knock out any invalidly formatted Title IDs. if len(tid) != 16: @@ -30,14 +28,13 @@ def run_nus_download_wii(out_folder: pathlib.Path, tid: str, version: str, pack_ # Create a new libWiiPy Title. title = libWiiPy.title.Title() # Make a directory for this title if it doesn't exist. - title_dir = pathlib.Path(os.path.join(out_folder, tid)) - if not title_dir.is_dir(): - title_dir.mkdir() + title_dir = out_folder.joinpath(tid) + title_dir.mkdir(exist_ok=True) # Announce the title being downloaded, and the version if applicable. if title_version is not None: - progress_callback.emit("Downloading title " + tid + " v" + str(title_version) + ", please wait...") + progress_callback.emit(f"Downloading title {tid} v{title_version}, please wait...") else: - progress_callback.emit("Downloading title " + tid + " vLatest, please wait...") + progress_callback.emit(f"Downloading title {tid} vLatest, please wait...") progress_callback.emit(" - Downloading and parsing TMD...") # Download a specific TMD version if a version was specified, otherwise just download the latest TMD. try: @@ -50,25 +47,19 @@ def run_nus_download_wii(out_folder: pathlib.Path, tid: str, version: str, pack_ except ValueError: return -2 # Make a directory for this version if it doesn't exist. - version_dir = pathlib.Path(os.path.join(title_dir, str(title_version))) - if not version_dir.is_dir(): - version_dir.mkdir() + version_dir = title_dir.joinpath(str(title_version)) + version_dir.mkdir(exist_ok=True) # Write out the TMD to a file. - tmd_out = open(os.path.join(version_dir, "tmd." + str(title_version)), "wb") - tmd_out.write(title.tmd.dump()) - tmd_out.close() + version_dir.joinpath(f"tmd.{title_version}").write_bytes(title.tmd.dump()) # Use a local ticket, if one exists and "use local files" is enabled. - if use_local_chkbox is True and os.path.exists(os.path.join(version_dir, "tik")): + if use_local_chkbox and version_dir.joinpath("tik").exists(): progress_callback.emit(" - Parsing local copy of Ticket...") - local_ticket = open(os.path.join(version_dir, "tik"), "rb") - title.load_ticket(local_ticket.read()) + title.load_ticket(version_dir.joinpath("tik").read_bytes()) else: progress_callback.emit(" - Downloading and parsing Ticket...") try: title.load_ticket(libWiiPy.title.download_ticket(tid, wiiu_endpoint=wiiu_nus_enabled)) - ticket_out = open(os.path.join(version_dir, "tik"), "wb") - ticket_out.write(title.ticket.dump()) - ticket_out.close() + version_dir.joinpath("tik").write_bytes(title.ticket.dump()) except ValueError: # If libWiiPy returns an error, then no ticket is available. Log this, and disable options requiring a # ticket so that they aren't attempted later. @@ -79,47 +70,32 @@ def run_nus_download_wii(out_folder: pathlib.Path, tid: str, version: str, pack_ title.load_content_records() content_list = [] for content in range(len(title.tmd.content_records)): - # Generate the correct file name by converting the content ID into hex, minus the 0x, and then appending - # that to the end of 000000. I refuse to believe there isn't a better way to do this here and in libWiiPy. - content_file_name = hex(title.tmd.content_records[content].content_id)[2:] - while len(content_file_name) < 8: - content_file_name = "0" + content_file_name + # Generate the correct file name by converting the content ID into hex. + content_file_name = f"{title.tmd.content_records[content].content_id:08X}" # Check for a local copy of the current content if "use local files" is enabled, and use it. - if use_local_chkbox is True and os.path.exists(os.path.join(version_dir, - content_file_name)): - progress_callback.emit(" - Using local copy of content " + str(content + 1) + " of " + - str(len(title.tmd.content_records))) - local_file = open(os.path.join(version_dir, content_file_name), "rb") - content_list.append(local_file.read()) + if use_local_chkbox is True and version_dir.joinpath(content_file_name).exists(): + progress_callback.emit(f" - Using local copy of content {content + 1} of {len(title.tmd.content_records)}") + content_list.append(version_dir.joinpath(content_file_name).read_bytes()) else: - progress_callback.emit(" - Downloading content " + str(content + 1) + " of " + - str(len(title.tmd.content_records)) + " (Content ID: " + - str(title.tmd.content_records[content].content_id) + ", Size: " + - str(title.tmd.content_records[content].content_size) + " bytes)...") + progress_callback.emit(f" - Downloading content {content + 1} of {len(title.tmd.content_records)} " + f"(Content ID: {title.tmd.content_records[content].content_id}, Size: " + f"{title.tmd.content_records[content].content_size} bytes)...") content_list.append(libWiiPy.title.download_content(tid, title.tmd.content_records[content].content_id, wiiu_endpoint=wiiu_nus_enabled)) progress_callback.emit(" - Done!") # If keep encrypted contents is on, write out each content after its downloaded. if keep_enc_chkbox is True: - enc_content_out = open(os.path.join(version_dir, content_file_name), "wb") - enc_content_out.write(content_list[content]) - enc_content_out.close() + version_dir.joinpath(content_file_name).write_bytes(content_list[content]) title.content.content_list = content_list # If decrypt local contents is still true, decrypt each content and write out the decrypted file. if decrypt_contents_enabled is True: try: for content in range(len(title.tmd.content_records)): - progress_callback.emit(" - Decrypting content " + str(content + 1) + " of " + - str(len(title.tmd.content_records)) + " (Content ID: " + - str(title.tmd.content_records[content].content_id) + ")...") + progress_callback.emit(f" - Decrypting content {content + 1} of {len(title.tmd.content_records)} " + f"(Content ID: {title.tmd.content_records[content].content_id})...") dec_content = title.get_content_by_index(content) - content_file_name = hex(title.tmd.content_records[content].content_id)[2:] - while len(content_file_name) < 8: - content_file_name = "0" + content_file_name - content_file_name = content_file_name + ".app" - dec_content_out = open(os.path.join(version_dir, content_file_name), "wb") - dec_content_out.write(dec_content) - dec_content_out.close() + content_file_name = f"{title.tmd.content_records[content].content_id:08X}.app" + version_dir.joinpath(content_file_name).write_bytes(dec_content) except ValueError: # If libWiiPy throws an error during decryption, return code -3. This should only be possible if using # local encrypted contents that have been altered at present. @@ -131,8 +107,7 @@ def run_nus_download_wii(out_folder: pathlib.Path, tid: str, version: str, pack_ # vWii mode. (vWii mode does not have access to the vWii key, only Wii U mode has that.) if repack_vwii_chkbox is True and (tid[3] == "7" or tid[7] == "7"): progress_callback.emit(" - Re-encrypting Title Key with the common key...") - title_key_dec = title.ticket.get_title_key() - title_key_common = libWiiPy.title.encrypt_title_key(title_key_dec, 0, title.tmd.title_id) + title_key_common = libWiiPy.title.encrypt_title_key(title.ticket.get_title_key(), 0, title.tmd.title_id) title.ticket.common_key_index = 0 title.ticket.title_key_enc = title_key_common # Get the WAD certificate chain, courtesy of libWiiPy. @@ -141,10 +116,10 @@ def run_nus_download_wii(out_folder: pathlib.Path, tid: str, version: str, pack_ # Use a typed WAD name if there is one, and auto generate one based on the TID and version if there isn't. progress_callback.emit(" - Packing WAD...") if wad_file_name != "" and wad_file_name is not None: - if wad_file_name[-4:] != ".wad": - wad_file_name = wad_file_name + ".wad" + if wad_file_name[-4:].lower() != ".wad": + wad_file_name += ".wad" else: - wad_file_name = tid + "-v" + str(title_version) + ".wad" + wad_file_name = f"{tid}-v{title_version}.wad" # If enabled (after we make sure it's an IOS), apply all main IOS patches. if patch_ios and (tid[:8] == "00000001" and int(tid[-2:], 16) > 2): progress_callback.emit(" - Patching IOS...") @@ -157,9 +132,7 @@ def run_nus_download_wii(out_folder: pathlib.Path, tid: str, version: str, pack_ progress_callback.emit(" - No patches could be applied! Is this a stub IOS?") title = ios_patcher.dump() # Have libWiiPy dump the WAD, and write that data out. - file = open(os.path.join(version_dir, wad_file_name), "wb") - file.write(title.dump_wad()) - file.close() + version_dir.joinpath(wad_file_name).write_bytes(title.dump_wad()) progress_callback.emit("Download complete!") # This is where the variables come in. If the state of these variables doesn't match the user's choice by this # point, it means that they enabled decryption or WAD packing for a title that doesn't have a ticket. Return @@ -168,13 +141,15 @@ def run_nus_download_wii(out_folder: pathlib.Path, tid: str, version: str, pack_ return 1 return 0 -def run_nus_download_wii_batch(out_folder: pathlib.Path, titles: List[Tuple[str, str, str]], pack_wad_chkbox: bool, keep_enc_chkbox: bool, - decrypt_contents_chkbox: bool, wiiu_nus_chkbox: bool, use_local_chkbox: bool, - repack_vwii_chkbox: bool, patch_ios: bool, progress_callback=None): +def run_nus_download_wii_batch(out_folder: pathlib.Path, titles: List[Tuple[str, str, str]], pack_wad_chkbox: bool, + keep_enc_chkbox: bool, decrypt_contents_chkbox: bool, wiiu_nus_chkbox: bool, + use_local_chkbox: bool, repack_vwii_chkbox: bool, patch_ios: bool, + progress_callback=None): for title in titles: - result = run_nus_download_wii(out_folder, title[0], title[1], pack_wad_chkbox, keep_enc_chkbox, decrypt_contents_chkbox, wiiu_nus_chkbox, use_local_chkbox, repack_vwii_chkbox, patch_ios, f"{title[2]}-{title[1]}.wad", progress_callback) + result = run_nus_download_wii(out_folder, title[0], title[1], pack_wad_chkbox, keep_enc_chkbox, + decrypt_contents_chkbox, wiiu_nus_chkbox, use_local_chkbox, repack_vwii_chkbox, + patch_ios, f"{title[2]}-{title[1]}.wad", progress_callback) if result != 0: return result - progress_callback.emit(f"Batch download finished.") return 0 diff --git a/resources/translations/nusget_de.ts b/resources/translations/nusget_de.ts index fe67798..066528f 100644 --- a/resources/translations/nusget_de.ts +++ b/resources/translations/nusget_de.ts @@ -4,7 +4,7 @@ MainWindow - + NUSGet v{nusget_version} Developed by NinjaCheetah Powered by libWiiPy {libwiipy_version} @@ -29,131 +29,126 @@ Titel, welche mit einem Häkchen markiert sind, sind frei verfügbar und haben e Titel werden in einem "NUSGet" Ordner innerhalb des Downloads-Ordners gespeichert. - + NUSGet Update Available NUSGet-Update verfügbar - + There's a newer version of NUSGet available! Eine neuere Version von NUSGet ist verfügbar. - + No Output Selected Changed from "output" to "packaging" for clarity Keine Verpackmethode ausgewählt - + You have not selected any format to output the data in! Es wurde keine Methode zum Verpacken der Inhalte ausgewählt. - + Please select at least one option for how you would like the download to be saved. Explicitly mentions options for clarity Es muss mindestens "verschlüsselte Inhalte speichern", "entschlüsselte Inhalte speichern" oder "Verpacke als WAD/TAD" ausgewählt worden sein. - + Invalid Title ID Fehlerhafte Title-ID - + The Title ID you have entered is not in a valid format! Die eingegebene Title-ID ist nicht korrekt. - + 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. Die Title-ID muss mindestens 16 alphanumerische Zeichen enthalten. - + Title ID/Version Not Found Title-ID/Version nicht gefunden - + No title with the provided Title ID or version could be found! The title was moved into the body, and the title was made less of a mouthful, for ease of translation Es konnte kein Titel mit der gegebenen Title-ID oder Version gefunden werden. - + 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. Die Title-ID könnte möglicherweise fehlerhaft sein. - + Content Decryption Failed Entschlüsselung fehlgeschlagen - + Content decryption was not successful! Decrypted contents could not be created. Die Inhalte des Titels konnten nicht korrekt entschlüsselt werden. - + 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. Die gespeicherte TMD oder das Ticket könnten möglicherweise fehlerhaft sein. "Lokale Dateien nutzen" kann ausgeschaltet werden, um diese erneut herunterzuladen. - + Ticket Not Available Ticket nicht verfügbar - + No Ticket is Available for the Requested Title! Kein Ticket konnte für den geforderten Titel gefunden werden. - + 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. Es wurden nur verschlüsselte Inhalte gespeichert. - + Unknown Error Unbekannter Fehler - + An Unknown Error has Occurred! Ein unbekannter Fehler ist aufgetreten. - + 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. Versuchen Sie es erneut. Sofern das Problem bestehen bleibt, können Sie ein Issue auf GitHub öffnen, um den Fehler zu berichten. - + Open NUS script Translating the file type is pointless, since it's not an actual "script" NUS-Script öffnen - + NUS Scripts (*.nus *.txt) NUS Script (*.nus *.txt) - - - - - - + Script Failure Script-Fehler - + Failed to open the script. Konnte das NUS-Script nicht öffnen. diff --git a/resources/translations/nusget_es.ts b/resources/translations/nusget_es.ts index 1e693e5..5f3c17e 100644 --- a/resources/translations/nusget_es.ts +++ b/resources/translations/nusget_es.ts @@ -125,7 +125,7 @@ li.checked::marker { content: "\2612"; } - + NUSGet v{nusget_version} Developed by NinjaCheetah Powered by libWiiPy {libwiipy_version} @@ -139,127 +139,122 @@ Titles will be downloaded to a folder named "NUSGet" inside your downl - + NUSGet Update Available - + There's a newer version of NUSGet available! - + No Output Selected - + You have not selected any format to output the data in! - + Please select at least one option for how you would like the download to be saved. - + Invalid Title ID - + The Title ID you have entered is not in a valid format! - + 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. - + Title ID/Version Not Found - + No title with the provided Title ID or version could be found! - + 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. - + Content Decryption Failed - + Content decryption was not successful! Decrypted contents could not be created. - + 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. - + Ticket Not Available - + No Ticket is Available for the Requested Title! - + 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. - + Unknown Error - + An Unknown Error has Occurred! - + 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. - + Open NUS script - + NUS Scripts (*.nus *.txt) - - - - - - + Script Failure - + Failed to open the script. diff --git a/resources/translations/nusget_fr.ts b/resources/translations/nusget_fr.ts index e82433c..8515c26 100644 --- a/resources/translations/nusget_fr.ts +++ b/resources/translations/nusget_fr.ts @@ -4,7 +4,7 @@ MainWindow - + NUSGet v{nusget_version} Developed by NinjaCheetah Powered by libWiiPy {libwiipy_version} @@ -18,127 +18,122 @@ Titles will be downloaded to a folder named "NUSGet" inside your downl - + NUSGet Update Available - + There's a newer version of NUSGet available! - + No Output Selected - + You have not selected any format to output the data in! - + Please select at least one option for how you would like the download to be saved. - + Invalid Title ID - + The Title ID you have entered is not in a valid format! - + 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. - + Title ID/Version Not Found - + No title with the provided Title ID or version could be found! - + 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. - + Content Decryption Failed - + Content decryption was not successful! Decrypted contents could not be created. - + 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. - + Ticket Not Available - + No Ticket is Available for the Requested Title! - + 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. - + Unknown Error - + An Unknown Error has Occurred! - + 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. - + Open NUS script - + NUS Scripts (*.nus *.txt) - - - - - - + Script Failure - + Failed to open the script. diff --git a/resources/translations/nusget_it.ts b/resources/translations/nusget_it.ts index 260d8b3..eaaa1a5 100644 --- a/resources/translations/nusget_it.ts +++ b/resources/translations/nusget_it.ts @@ -135,122 +135,117 @@ p, li { white-space: pre-wrap; } <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - + No Output Selected Nessun output selezionato - + You have not selected any format to output the data in! Non hai selezionato alcun formato in cui esportare i dati! - + Please select at least one option for how you would like the download to be saved. Per favore scegli almeno un opzione per come vorresti che fosse salvato il download. - + Invalid Title ID ID Titolo invalido - + The Title ID you have entered is not in a valid format! L' ID Titolo che hai inserito non è in un formato valido! - + 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. Gli ID Titolo sono un codice di 16 caratteri tra numeri e lettere. Per favore inserisci in ID Titolo formattato correttamente, o scegline uno dal menù a sinistra. - + Title ID/Version Not Found ID Titolo/Versione non trovata - + No title with the provided Title ID or version could be found! Non è stato trovato nessun titolo con l' ID Titolo o versione data! - + 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. Assicurati di aver inserito un' ID Titolo valido, o scegline uno dal database, e che la versione richiesta esista per il titolo che vuoi scaricare. - + Content Decryption Failed Decriptazione contenuti fallita - + Content decryption was not successful! Decrypted contents could not be created. La decriptazione dei contenuti non è andata a buon fine! I contenuti decriptadi non sono stati creati. - + 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. Il tuo TMD o Ticket potrebbe essere danneggiato, o potrebbe non corrispondere col contenuto da decriptare. Se hai selezionato "Usa file locali, se esistenti", prova a disabilitare quell'opzione prima di riprovare a scaricare per aggiustare potenziali errori coi dati locali. - + Ticket Not Available Ticket non disponibile - + No Ticket is Available for the Requested Title! Nessun ticket disponibile per il titolo richiesto! - + 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. Non è stato possibile scaricare un ticket per il titolo richiesto, ma hai selezionato "Crea archivio installabile" o "Crea contenuto decriptato". Queste opzioni non sono disponibili per i titoli senza un ticket. Sono stati salvati solo i contenuti criptati. - + Unknown Error Errore sconosciuto - + An Unknown Error has Occurred! Errore sconosciuto! - + 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. Per favore riprova. Se il problema persiste, apri un issue su GitHub specificando in modo dettagliato cosa volevi fare quando è comparso questo errore. - + Open NUS script Apri script NUS - + NUS Scripts (*.nus *.txt) Scrpit NUS (*.nus *.txt) - - - - - - + Script Failure Errore script - + Failed to open the script. Impossibile aprire lo script. - + NUSGet v{nusget_version} Developed by NinjaCheetah Powered by libWiiPy {libwiipy_version} @@ -277,12 +272,12 @@ I titoli verranno scaricati nella cartella "NUSGet" all'interno d Applica patch agli IOS (Solo per le WAD) - + NUSGet Update Available Aggiornamento di NUSGet disponibile - + There's a newer version of NUSGet available! Una nuova versione di NUSGet è disponibile! diff --git a/resources/translations/nusget_ko.ts b/resources/translations/nusget_ko.ts index d98ba83..49c1e9f 100644 --- a/resources/translations/nusget_ko.ts +++ b/resources/translations/nusget_ko.ts @@ -135,122 +135,117 @@ p, li { white-space: pre-wrap; } <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - + No Output Selected 선택된 출력 없음 - + You have not selected any format to output the data in! 데이터를 출력할 형식을 선택하지 않았습니다! - + Please select at least one option for how you would like the download to be saved. 다운로드를 저장할 방법을 하나 이상 선택하세요. - + Invalid Title ID 잘못된 제목 ID - + The Title ID you have entered is not in a valid format! 입력한 타이틀 ID의 형식이 올바르지 않습니다! - + 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. 타이틀 ID는 숫자와 문자로 구성된 16자리 문자열이어야 합니다. 올바르게 포맷된 타이틀 ID를 입력하거나 왼쪽 메뉴에서 하나를 선택하세요. - + Title ID/Version Not Found 타이틀 ID/버전을 찾을 수 없음 - + No title with the provided Title ID or version could be found! 제공된 타이틀 ID 또는 버전으로 제목을 찾을 수 없습니다! - + 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. 유효한 타이틀 ID를 입력했는지 또는 타이틀 데이터베이스에서 선택했는지, 그리고 다운로드하려는 타이틀에 대해 제공된 버전이 있는지 확인하세요. - + Content Decryption Failed 콘텐츠 복호화 실패 - + Content decryption was not successful! Decrypted contents could not be created. 콘텐츠 복호화가 성공하지 못했습니다! 복호화된 콘텐츠를 만들 수 없습니다. - + 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. TMD 또는 티켓이 손상되었거나 복호화되는 콘텐츠와 일치하지 않을 수 있습니다. "로컬 파일이 있으면 사용"을 체크한 경우, 로컬 데이터와 관련된 잠재적인 문제를 해결하기 위해 다시 다운로드를 시도하기 전에 해당 옵션을 비활성화해 보세요. - + Ticket Not Available 사용 가능한 티켓이 아님 - + No Ticket is Available for the Requested Title! 요청한 타이틀에 대한 티켓이 없습니다! - + 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. 요청한 타이틀에 대한 티켓을 다운로드할 수 없지만 "설치 가능한 아카이브 팩" 또는 "암호 해독된 콘텐츠 생성"을 선택했습니다. 이러한 옵션은 티켓이 없는 타이틀에는 사용할 수 없습니다. 암호화된 콘텐츠만 저장되었습니다. - + Unknown Error 알 수 없는 오류 - + An Unknown Error has Occurred! 알 수 없는 오류가 발생했습니다! - + 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. 다시 시도하세요. 이 문제가 지속되면 GitHub에서 새 이슈를 열어 이 오류가 발생했을 때 무엇을 하려고 했는지 자세히 설명하세요. - + Open NUS script NUS 스크립트 열기 - + NUS Scripts (*.nus *.txt) NUS 스크립트 (*.nus *.txt) - - - - - - + Script Failure 스크립트 실패 - + Failed to open the script. 스크립트를 열 수 없습니다. - + NUSGet v{nusget_version} Developed by NinjaCheetah Powered by libWiiPy {libwiipy_version} @@ -278,12 +273,12 @@ DSi 지원 : libTWLPy {libtwlpy_version}에서 제공 IOS에 패치 적용 (WAD에만 적용) - + NUSGet Update Available NUSGet 업데이트 가능 - + There's a newer version of NUSGet available! NUSBet의 새로운 버전이 나왔습니다! diff --git a/resources/translations/nusget_nb.ts b/resources/translations/nusget_nb.ts index 2c56a54..4a32e51 100644 --- a/resources/translations/nusget_nb.ts +++ b/resources/translations/nusget_nb.ts @@ -128,7 +128,7 @@ p, li { white-space: pre-wrap; } <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - + NUSGet v{nusget_version} Developed by NinjaCheetah Powered by libWiiPy {libwiipy_version} @@ -151,117 +151,112 @@ Titler merket med en hake er fri og har en billett tilgjengelig, og kan dekrypte Titler er lastes ned til en mappe med navnet "NUSGet" i nedlastingsmappen din. - + No Output Selected - + You have not selected any format to output the data in! - + Please select at least one option for how you would like the download to be saved. - + Invalid Title ID Ugyldig Tittel ID - + The Title ID you have entered is not in a valid format! Tittel IDen du har angitt er ikke i et gyldig format! - + 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. Tittel IDer må være 16-sifrede tall og bokstav strenger. Vennligst skriv inn en korrekt formatert Tittel ID, eller velg en fra menyen til venstre. - + Title ID/Version Not Found Tittel ID/Versjon Ikke Funnet - + No title with the provided Title ID or version could be found! Ingen tittel med oppgitt Tittel ID eller versjon ble funnet! - + 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. Vennligst kontroller at du har oppgitt en gyldig Tittel ID, eller valgt en fra titteldatabasen, og at den angitte versjonen finnes for tittelen du forsøker å laste ned. - + Content Decryption Failed Dekryptering av Innhold Mislyktes - + Content decryption was not successful! Decrypted contents could not be created. Dekryptering av innhold var ikke vellykket! Dekryptert innhold kunne ikke opprettes. - + 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. TMDen eller Billetten kan være skadet, eller det kan hende at de ikke samsvarer med innholdet some dekrypteres. Hvis du har krysset av for "Bruk lokale filer, hvis de finnes", kan du prøve å deaktivere dette alternativet før du prøver nedlastingen på nytt for å løse eventuelle problemer med lokale data. - + Ticket Not Available Billett Ikke Tilgjengelig - + No Ticket is Available for the Requested Title! Ingen billett er tilgjengelig for den forespurte tittelen! - + 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. En billett kunne ikke lastes ned for den forespurte tittelen, men du har valgt "Pakk installerbart arkiv" eller "Opprett dekryptert innhold". Disse alternativene er ikke tilgjenelige for titler uten billett. Bare kryptert innhold har blitt lagret. - + Unknown Error Ukjent Feil - + An Unknown Error has Occurred! En ukjent feil har oppstått! - + 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. Vennligst prøv igjen. Hvis dette problemet vedvarer, åpne et nytt issue på GitHub med detaljer om hva du prøvde å gjøre da denne feilen oppstod. - + Open NUS script - + NUS Scripts (*.nus *.txt) - - - - - - + Script Failure - + Failed to open the script. @@ -271,12 +266,12 @@ Titler er lastes ned til en mappe med navnet "NUSGet" i nedlastingsmap - + NUSGet Update Available - + There's a newer version of NUSGet available! diff --git a/resources/translations/nusget_no.ts b/resources/translations/nusget_no.ts index 2c56a54..4a32e51 100644 --- a/resources/translations/nusget_no.ts +++ b/resources/translations/nusget_no.ts @@ -128,7 +128,7 @@ p, li { white-space: pre-wrap; } <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - + NUSGet v{nusget_version} Developed by NinjaCheetah Powered by libWiiPy {libwiipy_version} @@ -151,117 +151,112 @@ Titler merket med en hake er fri og har en billett tilgjengelig, og kan dekrypte Titler er lastes ned til en mappe med navnet "NUSGet" i nedlastingsmappen din. - + No Output Selected - + You have not selected any format to output the data in! - + Please select at least one option for how you would like the download to be saved. - + Invalid Title ID Ugyldig Tittel ID - + The Title ID you have entered is not in a valid format! Tittel IDen du har angitt er ikke i et gyldig format! - + 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. Tittel IDer må være 16-sifrede tall og bokstav strenger. Vennligst skriv inn en korrekt formatert Tittel ID, eller velg en fra menyen til venstre. - + Title ID/Version Not Found Tittel ID/Versjon Ikke Funnet - + No title with the provided Title ID or version could be found! Ingen tittel med oppgitt Tittel ID eller versjon ble funnet! - + 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. Vennligst kontroller at du har oppgitt en gyldig Tittel ID, eller valgt en fra titteldatabasen, og at den angitte versjonen finnes for tittelen du forsøker å laste ned. - + Content Decryption Failed Dekryptering av Innhold Mislyktes - + Content decryption was not successful! Decrypted contents could not be created. Dekryptering av innhold var ikke vellykket! Dekryptert innhold kunne ikke opprettes. - + 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. TMDen eller Billetten kan være skadet, eller det kan hende at de ikke samsvarer med innholdet some dekrypteres. Hvis du har krysset av for "Bruk lokale filer, hvis de finnes", kan du prøve å deaktivere dette alternativet før du prøver nedlastingen på nytt for å løse eventuelle problemer med lokale data. - + Ticket Not Available Billett Ikke Tilgjengelig - + No Ticket is Available for the Requested Title! Ingen billett er tilgjengelig for den forespurte tittelen! - + 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. En billett kunne ikke lastes ned for den forespurte tittelen, men du har valgt "Pakk installerbart arkiv" eller "Opprett dekryptert innhold". Disse alternativene er ikke tilgjenelige for titler uten billett. Bare kryptert innhold har blitt lagret. - + Unknown Error Ukjent Feil - + An Unknown Error has Occurred! En ukjent feil har oppstått! - + 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. Vennligst prøv igjen. Hvis dette problemet vedvarer, åpne et nytt issue på GitHub med detaljer om hva du prøvde å gjøre da denne feilen oppstod. - + Open NUS script - + NUS Scripts (*.nus *.txt) - - - - - - + Script Failure - + Failed to open the script. @@ -271,12 +266,12 @@ Titler er lastes ned til en mappe med navnet "NUSGet" i nedlastingsmap - + NUSGet Update Available - + There's a newer version of NUSGet available! diff --git a/resources/translations/nusget_ro.ts b/resources/translations/nusget_ro.ts index 9f616ec..d137fb6 100644 --- a/resources/translations/nusget_ro.ts +++ b/resources/translations/nusget_ro.ts @@ -4,7 +4,7 @@ MainWindow - + NUSGet v{nusget_version} Developed by NinjaCheetah Powered by libWiiPy {libwiipy_version} @@ -27,127 +27,122 @@ Titlurile marcate cu bifă sunt gratuite și au un tichet disponibil și pot fi Titlurile vor fi descărcate într-un folder numit „NUSGet” în fișierul dvs. de download. - + NUSGet Update Available Actualizare NUSGet disponibilă - + There's a newer version of NUSGet available! O nouă versiune NUSGet este disponibilă! - + No Output Selected Nu s-a selectat un output. - + You have not selected any format to output the data in! Nu ați selectat niciun format de ieșire. - + Please select at least one option for how you would like the download to be saved. Vă rugăm să selectați cel puțin o opțiune pentru modul în care doriți să salvați datele descărcate. - + Invalid Title ID Title ID invalid - + The Title ID you have entered is not in a valid format! Title ID pe care l-ați introdus este invalid! - + 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. Title ID-urile trebuie să conțină exact 16 cifre și/sau litere. Vă rugăm introduceți un Title ID corect, sau selectați unul din meniul din stânga. - + Title ID/Version Not Found Title ID/Versiunea nu a fost găsită - + No title with the provided Title ID or version could be found! Niciun titlu care să corespundă cu Title ID sau cu versiunea introdusă nu a fost găsit! - + 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. Vă rugăm să vă asigurați că ați introdus un Title ID valid sau selectat din baza de date cu titluri, și că versiunea introdusă există pentru titlul pe care încercați să îl descărcați. - + Content Decryption Failed Decriptarea conținutului a eșuat. - + Content decryption was not successful! Decrypted contents could not be created. Decriptarea conținutului nu a reușit. Nu s-a putut crea conținutul decriptat. - + 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. TMD-ul sau Ticket-ul dvs. sunt corupte, sau nu corespund cu conținutul de decriptat. Dacă ați bifat „Folosiți fișiere locale, dacă există”, încercați să debifați această opțiune înainte de a descărca din nou pentru a rezolva potențiale probleme cu datele existente local. - + Ticket Not Available Ticket-ul nu este valabil - + No Ticket is Available for the Requested Title! Niciun Ticket nu este valabil pentru titlul dorit. - + 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. Nu se poate descărca un tichet pentru titlul cerut, dar ați selectat „Împachetați arhiva instalabilă” sau „Creați conținut decriptat”. Aceste opțiuni nu sunt valabile pentru titluri fărătichet. Doar conținuturile criptate au fost salvate. - + Unknown Error Eroare necunoscută - + An Unknown Error has Occurred! S-a produs o eroare necunoscută! - + 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. Vă rugăm încercați din nou. Dacă problema persistă, vă rugăm să deschideți un issue pe GitHub în care să explicați ce ați încercat să faceți atunci când această eroare a apărut. - + Open NUS script Deschideți script NUS - + NUS Scripts (*.nus *.txt) - - - - - - + Script Failure Eșuare Script - + Failed to open the script. Nu s-a putut deschide script-ul.