Compare commits

..

3 Commits

Author SHA1 Message Date
5872ca4676
Merge major improvements from upstream 2024-12-13 23:09:23 -05:00
62fa5ef7b1
Entirely rewrote title tree backend
Title trees are now model-based rather than item based. Coming with this is proper item metadata, so the data and UI are finally disconnected, making future development much easier. There are also some minor visual improvements as a result of using a TreeView instead of a TreeWidget.
vWii System Menus now have public versions defined in the database. Public version display code has also been entirely rewritten, as the version displayed in the interface and the version used by the code are no longer the same.
2024-12-13 22:39:09 -05:00
c1eb80fbb6
Massively improved code readability
NUSGet's code has been updated to use better formatting and practices that align with how my other projects like libWiiPy and WiiPy are written.
2024-12-13 18:34:37 -05:00
16 changed files with 735 additions and 776 deletions

170
NUSGet.py
View File

@ -27,18 +27,17 @@ import webbrowser
from importlib.metadata import version
from PySide6.QtGui import QIcon
from PySide6.QtWidgets import (QApplication, QMainWindow, QMessageBox, QTreeWidgetItem, QHeaderView, QStyle,
QStyleFactory, QFileDialog)
from PySide6.QtWidgets import QApplication, QMainWindow, QMessageBox, QStyleFactory, QFileDialog
from PySide6.QtCore import QRunnable, Slot, QThreadPool, Signal, QObject, QLibraryInfo, QTranslator, QLocale
from qt.py.ui_MainMenu import Ui_MainWindow
from modules.core import *
from modules.tree import NUSGetTreeModel
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"
current_selected_version = ""
nusget_version = "1.3.0"
regions = {"World": ["41"], "USA/NTSC": ["45"], "Europe/PAL": ["50"], "Japan": ["4A"], "Korea": ["4B"], "China": ["43"],
"Australia/NZ": ["55"]}
@ -84,12 +83,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.ui.script_btn.clicked.connect(self.script_btn_pressed)
self.ui.pack_archive_chkbox.clicked.connect(self.pack_wad_chkbox_toggled)
self.ui.tid_entry.textChanged.connect(self.tid_updated)
# noinspection PyUnresolvedReferences
self.ui.wii_title_tree.header().setSectionResizeMode(QHeaderView.ResizeToContents)
# noinspection PyUnresolvedReferences
self.ui.vwii_title_tree.header().setSectionResizeMode(QHeaderView.ResizeToContents)
# noinspection PyUnresolvedReferences
self.ui.dsi_title_tree.header().setSectionResizeMode(QHeaderView.ResizeToContents)
# 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")
@ -108,83 +101,32 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.ui.console_select_dropdown.addItem("vWii")
self.ui.console_select_dropdown.addItem("DSi")
self.ui.console_select_dropdown.currentIndexChanged.connect(self.selected_console_changed)
# Title tree building code.
wii_tree = self.ui.wii_title_tree
vwii_tree = self.ui.vwii_title_tree
dsi_tree = self.ui.dsi_title_tree
self.trees = [[wii_tree, wii_database], [vwii_tree, vwii_database], [dsi_tree, dsi_database]]
for tree in self.trees:
self.tree_categories = []
global regions
# Iterate over each category in the database file.
for key in tree[1]:
new_category = QTreeWidgetItem()
new_category.setText(0, key)
# 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"])
# 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)
# messy code can absolutely be cleaned up!!
strVersion = str(title_version)
public_versions = title.get("Public Versions", {})
if strVersion in public_versions:
public_version = " (" + public_versions[strVersion] + ")" # add ()
else:
public_version = ""
# changed to strVersion here
#current_selected_version = strVersion
new_version.setText(0, "v" + strVersion + 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.
if title["Ticket"] is True:
new_title.setIcon(0, self.style().standardIcon(QStyle.StandardPixmap.SP_DialogApplyButton))
else:
new_title.setIcon(0, self.style().standardIcon(QStyle.StandardPixmap.SP_DialogCancelButton))
new_category.addChild(new_title)
self.tree_categories.append(new_category)
tree[0].insertTopLevelItems(0, self.tree_categories)
# Connect the double click signal for handling when titles are selected.
tree[0].itemDoubleClicked.connect(self.onItemClicked)
# Prevent resizing, Qt makes us look stupid here
# Title tree loading code. Now powered by Models:tm:
wii_model = NUSGetTreeModel(wii_database, root_name="Wii Titles")
vwii_model = NUSGetTreeModel(vwii_database, root_name="vWii Titles")
dsi_model = NUSGetTreeModel(dsi_database, root_name="DSi Titles")
self.ui.wii_title_tree.setModel(wii_model)
self.ui.wii_title_tree.doubleClicked.connect(self.title_double_clicked)
self.ui.vwii_title_tree.setModel(vwii_model)
self.ui.vwii_title_tree.doubleClicked.connect(self.title_double_clicked)
self.ui.dsi_title_tree.setModel(dsi_model)
self.ui.dsi_title_tree.doubleClicked.connect(self.title_double_clicked)
# Prevent resizing.
self.setFixedSize(self.size())
# Do a quick check to see if there's a newer release available, and inform the user if there is.
worker = Worker(check_nusget_updates, app, nusget_version)
worker.signals.result.connect(self.prompt_for_update)
worker.signals.progress.connect(self.update_log_text)
self.threadpool.start(worker)
@Slot(QTreeWidgetItem, int)
def onItemClicked(self, item, col):
def title_double_clicked(self, index):
if self.ui.download_btn.isEnabled() is True:
# Check to make sure that this is a version and nothing higher. If you've doubled clicked on anything other
# than a version, this returns an AttributeError and the click can be ignored.
try:
category = item.parent().parent().parent().text(0)
except AttributeError:
return
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"]):
title = index.internalPointer().metadata
if title is not None:
self.ui.console_select_dropdown.setCurrentIndex(self.ui.platform_tabs.currentIndex())
try:
danger_text = title["Danger"]
except KeyError:
danger_text = ""
selected_title = SelectedTitle(title["TID"], title["Name"], title["Archive Name"], item.text(0)[1:],
title["Ticket"], item.parent().text(0), category,
self.ui.console_select_dropdown.currentText(), danger_text)
self.load_title_data(selected_title, selected_title.version.split(" ", 1)[0])
selected_title = TitleData(title.tid, title.name, title.archive_name, title.version, title.ticket,
title.region, title.category, title.danger)
self.load_title_data(selected_title)
def tid_updated(self):
tid = self.ui.tid_entry.text()
@ -219,12 +161,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
if ret == QMessageBox.StandardButton.Yes:
webbrowser.open("https://github.com/NinjaCheetah/NUSGet/releases/latest")
def load_title_data(self, selected_title: SelectedTitle, real_version):
def load_title_data(self, selected_title: TitleData):
# Use the information passed from the double click callback to prepare a title for downloading.
# If the last two characters are "XX", then this title has multiple regions, and each region uses its own
# two-digit code. Use the region info passed to load the correct code.
global current_selected_version
current_selected_version = real_version
if selected_title.tid[-2:] == "XX":
global regions
region_code = regions[selected_title.region][0]
@ -233,14 +173,13 @@ class MainWindow(QMainWindow, Ui_MainWindow):
tid = selected_title.tid
# Load the TID and version into the entry boxes.
self.ui.tid_entry.setText(tid)
self.ui.version_entry.setText(real_version)
self.ui.version_entry.setText(str(selected_title.version))
# Load the WAD name, assuming it exists. This shouldn't ever be able to fail as the database has a WAD name
# for every single title, regardless of whether it can be packed or not.
try:
archive_name = f"{selected_title.archive_name}"
archive_name = selected_title.archive_name
if selected_title.category != "System" and selected_title.category != "IOS":
archive_name += f"-{str(bytes.fromhex(tid).decode())[-4:]}"
archive_name += f"-v{real_version}"
archive_name += f"-v{selected_title.version}"
if selected_title.region != "World":
archive_name += f"-{selected_title.region.split('/')[0]}"
if self.ui.console_select_dropdown.currentText() == "DSi":
@ -254,15 +193,13 @@ class MainWindow(QMainWindow, Ui_MainWindow):
archive_name += "-Wii"
archive_name += ".wad"
self.ui.archive_file_entry.setText(archive_name)
except KeyError:
pass
danger_text = selected_title.danger
# Add warning text to the log if the selected title has no ticket.
if selected_title.ticket is False:
danger_text = danger_text + ("Note: This Title does not have a Ticket available, so it cannot be decrypted"
" or packed into a WAD/TAD.")
# Print log info about the selected title and version.
self.log_text = f"{tid} - {selected_title.name}\nVersion: {real_version}\n\n{danger_text}\n"
self.log_text = f"{tid} - {selected_title.name}\nVersion: {selected_title.version}\n\n{danger_text}\n"
self.ui.log_text_browser.setText(self.log_text)
def lock_ui_for_download(self):
@ -303,13 +240,12 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# Create a new worker object to handle the download in a new thread.
if self.ui.console_select_dropdown.currentText() == "DSi":
worker = Worker(run_nus_download_dsi, out_folder, self.ui.tid_entry.text(),
current_selected_version, self.ui.pack_archive_chkbox.isChecked(),
self.ui.version_entry.text(), self.ui.pack_archive_chkbox.isChecked(),
self.ui.keep_enc_chkbox.isChecked(), self.ui.create_dec_chkbox.isChecked(),
self.ui.use_local_chkbox.isChecked(), self.ui.archive_file_entry.text())
else:
worker = Worker(run_nus_download_wii, out_folder, self.ui.tid_entry.text(),
# don't use self.ui.version_entry.text(), use current_selected_version
current_selected_version, self.ui.pack_archive_chkbox.isChecked(),
self.ui.version_entry.text(), self.ui.pack_archive_chkbox.isChecked(),
self.ui.keep_enc_chkbox.isChecked(), self.ui.create_dec_chkbox.isChecked(),
self.ui.use_wiiu_nus_chkbox.isChecked(), self.ui.use_local_chkbox.isChecked(),
self.ui.pack_vwii_mode_chkbox.isChecked(), self.ui.patch_ios_chkbox.isChecked(),
@ -392,68 +328,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()

View File

@ -30,7 +30,18 @@
},
"Ticket": true,
"Archive Name": "System-Menu",
"Danger": "The System Menu is a critical part of the vWii's operation, and should not be modified. If you intend to modify it, you should have Preloader installed, or else you may not be able to use the vWii."
"Danger": "The System Menu is a critical part of the vWii's operation, and should not be modified. If you intend to modify it, you should have Preloader installed, or else you may not be able to use the vWii.",
"Public Versions": {
"512": "4.3J - Wii U v1.0.0J",
"513": "4.3U - Wii U v1.0.0U",
"514": "4.3E - Wii U v1.0.0E",
"544": "4.3J - Wii U v4.0.0J",
"545": "4.3U - Wii U v4.0.0U",
"546": "4.3E - Wii U v4.0.0E",
"608": "4.3J - Wii U v5.2.0J",
"609": "4.3U - Wii U v5.2.0U",
"610": "4.3E - Wii U v5.2.0E"
}
}
],
"System Channels": [

View File

@ -6,8 +6,8 @@ from dataclasses import dataclass
@dataclass
class SelectedTitle:
# Class to store all components of a selected title to make tracking it easier.
class TitleData:
# Class to store all data for a Title.
tid: str
name: str
archive_name: str
@ -15,7 +15,6 @@ class SelectedTitle:
ticket: bool
region: str
category: str
console: str
danger: str

View File

@ -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

View File

@ -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
from .tkey import find_tkey
@ -12,7 +11,6 @@ from libWiiPy.title.ticket import _TitleLimit
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:
@ -31,14 +29,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:
@ -51,26 +48,20 @@ 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.
forge_ticket = False
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. Try to forge a ticket after we download the
# content.
@ -80,31 +71,22 @@ 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
# Try to forge a Ticket, if a common one wasn't available.
if forge_ticket is True:
@ -143,17 +125,11 @@ def run_nus_download_wii(out_folder: pathlib.Path, tid: str, version: str, pack_
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.
@ -165,8 +141,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.
@ -175,10 +150,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...")
@ -191,9 +166,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
@ -202,13 +175,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

136
modules/tree.py Normal file
View File

@ -0,0 +1,136 @@
# "modules/tree.py", licensed under the MIT license
# Copyright 2024 NinjaCheetah
from modules.core import TitleData
from PySide6.QtCore import QAbstractItemModel, QModelIndex, Qt
from PySide6.QtGui import QIcon
class TreeItem:
def __init__(self, data, parent=None, metadata=None):
self.data = data
self.parent = parent
self.children = []
self.metadata = metadata # Store hidden metadata
def add_child(self, item):
self.children.append(item)
def child(self, row):
return self.children[row]
def child_count(self):
return len(self.children)
def column_count(self):
return len(self.data)
def data_at(self, column):
if 0 <= column < len(self.data):
return self.data[column]
return None
def row(self):
if self.parent:
return self.parent.children.index(self)
return 0
class NUSGetTreeModel(QAbstractItemModel):
def __init__(self, data, parent=None, root_name=""):
super().__init__(parent)
self.root_item = TreeItem([root_name])
self.setup_model_data(data, self.root_item)
def setup_model_data(self, title, parent):
if isinstance(title, dict):
for key, value in title.items():
if isinstance(value, list):
key_item = TreeItem([key, ""], parent)
parent.add_child(key_item)
for entry in value:
tid = entry.get("TID")
name = entry.get("Name")
versions = entry.get("Versions", {})
if tid:
tid_item = TreeItem([f"{tid} - {name}", ""], key_item)
key_item.add_child(tid_item)
for region, version_list in versions.items():
region_item = TreeItem([region, ""], tid_item)
tid_item.add_child(region_item)
for version in version_list:
danger = entry.get("Danger") if entry.get("Danger") is not None else ""
metadata = TitleData(entry.get("TID"), entry.get("Name"), entry.get("Archive Name"),
version, entry.get("Ticket"), region, key, danger)
public_versions = entry.get("Public Versions")
if public_versions is not None:
try:
public_ver = public_versions[str(version)]
version_str = f"v{version} ({public_ver})"
except KeyError:
version_str = f"v{version}"
else:
version_str = f"v{version}"
version_item = TreeItem([version_str, ""], region_item, metadata)
region_item.add_child(version_item)
def rowCount(self, parent=QModelIndex()):
if parent.isValid():
parent_item = parent.internalPointer()
else:
parent_item = self.root_item
return parent_item.child_count()
def columnCount(self, parent=QModelIndex()):
return self.root_item.column_count()
def data(self, index, role=Qt.DisplayRole):
if not index.isValid():
return None
item = index.internalPointer()
if role == Qt.DisplayRole:
item = index.internalPointer()
return item.data_at(index.column())
if role == Qt.DecorationRole and index.column() == 0:
# Check for icons based on the "Ticket" metadata only at the TID level
if item.parent and item.parent.data_at(0) == "System":
if item.metadata and "Ticket" in item.metadata:
if item.metadata["Ticket"]:
return QIcon.fromTheme("dialog-ok") # Checkmark icon
else:
return QIcon.fromTheme("dialog-cancel") # X icon
return None
def headerData(self, section, orientation, role=Qt.DisplayRole):
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
return self.root_item.data_at(section)
return None
def index(self, row, column, parent=QModelIndex()):
if not self.hasIndex(row, column, parent):
return QModelIndex()
if not parent.isValid():
parent_item = self.root_item
else:
parent_item = parent.internalPointer()
child_item = parent_item.child(row)
if child_item:
return self.createIndex(row, column, child_item)
return QModelIndex()
def parent(self, index):
if not index.isValid():
return QModelIndex()
child_item = index.internalPointer()
parent_item = child_item.parent
if parent_item == self.root_item:
return QModelIndex()
return self.createIndex(parent_item.row(), 0, parent_item)

View File

@ -3,7 +3,7 @@
################################################################################
## Form generated from reading UI file 'MainMenu.ui'
##
## Created by: Qt User Interface Compiler version 6.8.0
## Created by: Qt User Interface Compiler version 6.8.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
@ -18,8 +18,8 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QHBoxLayout,
QHeaderView, QLabel, QLayout, QLineEdit,
QMainWindow, QMenuBar, QPushButton, QSizePolicy,
QSpacerItem, QTabWidget, QTextBrowser, QTreeWidget,
QTreeWidgetItem, QVBoxLayout, QWidget)
QSpacerItem, QTabWidget, QTextBrowser, QTreeView,
QVBoxLayout, QWidget)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
@ -56,16 +56,8 @@ class Ui_MainWindow(object):
self.wii_tab.setObjectName(u"wii_tab")
self.verticalLayout_2 = QVBoxLayout(self.wii_tab)
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
self.wii_title_tree = QTreeWidget(self.wii_tab)
__qtreewidgetitem = QTreeWidgetItem()
__qtreewidgetitem.setText(0, u"1");
self.wii_title_tree.setHeaderItem(__qtreewidgetitem)
self.wii_title_tree = QTreeView(self.wii_tab)
self.wii_title_tree.setObjectName(u"wii_title_tree")
self.wii_title_tree.setColumnCount(1)
self.wii_title_tree.header().setVisible(False)
self.wii_title_tree.header().setMinimumSectionSize(49)
self.wii_title_tree.header().setDefaultSectionSize(100)
self.wii_title_tree.header().setStretchLastSection(False)
self.verticalLayout_2.addWidget(self.wii_title_tree)
@ -74,16 +66,8 @@ class Ui_MainWindow(object):
self.vwii_tab.setObjectName(u"vwii_tab")
self.verticalLayout_4 = QVBoxLayout(self.vwii_tab)
self.verticalLayout_4.setObjectName(u"verticalLayout_4")
self.vwii_title_tree = QTreeWidget(self.vwii_tab)
__qtreewidgetitem1 = QTreeWidgetItem()
__qtreewidgetitem1.setText(0, u"1");
self.vwii_title_tree.setHeaderItem(__qtreewidgetitem1)
self.vwii_title_tree = QTreeView(self.vwii_tab)
self.vwii_title_tree.setObjectName(u"vwii_title_tree")
self.vwii_title_tree.setColumnCount(1)
self.vwii_title_tree.header().setVisible(False)
self.vwii_title_tree.header().setMinimumSectionSize(49)
self.vwii_title_tree.header().setDefaultSectionSize(100)
self.vwii_title_tree.header().setStretchLastSection(False)
self.verticalLayout_4.addWidget(self.vwii_title_tree)
@ -92,14 +76,8 @@ class Ui_MainWindow(object):
self.dsi_tab.setObjectName(u"dsi_tab")
self.verticalLayout = QVBoxLayout(self.dsi_tab)
self.verticalLayout.setObjectName(u"verticalLayout")
self.dsi_title_tree = QTreeWidget(self.dsi_tab)
__qtreewidgetitem2 = QTreeWidgetItem()
__qtreewidgetitem2.setText(0, u"1");
self.dsi_title_tree.setHeaderItem(__qtreewidgetitem2)
self.dsi_title_tree = QTreeView(self.dsi_tab)
self.dsi_title_tree.setObjectName(u"dsi_title_tree")
self.dsi_title_tree.setHeaderHidden(True)
self.dsi_title_tree.header().setMinimumSectionSize(49)
self.dsi_title_tree.header().setStretchLastSection(False)
self.verticalLayout.addWidget(self.dsi_title_tree)

View File

@ -73,28 +73,7 @@
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTreeWidget" name="wii_title_tree">
<property name="columnCount">
<number>1</number>
</property>
<attribute name="headerVisible">
<bool>false</bool>
</attribute>
<attribute name="headerMinimumSectionSize">
<number>49</number>
</attribute>
<attribute name="headerDefaultSectionSize">
<number>100</number>
</attribute>
<attribute name="headerStretchLastSection">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget>
<widget class="QTreeView" name="wii_title_tree"/>
</item>
</layout>
</widget>
@ -104,28 +83,7 @@
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QTreeWidget" name="vwii_title_tree">
<property name="columnCount">
<number>1</number>
</property>
<attribute name="headerVisible">
<bool>false</bool>
</attribute>
<attribute name="headerMinimumSectionSize">
<number>49</number>
</attribute>
<attribute name="headerDefaultSectionSize">
<number>100</number>
</attribute>
<attribute name="headerStretchLastSection">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget>
<widget class="QTreeView" name="vwii_title_tree"/>
</item>
</layout>
</widget>
@ -135,22 +93,7 @@
</attribute>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTreeWidget" name="dsi_title_tree">
<property name="headerHidden">
<bool>true</bool>
</property>
<attribute name="headerMinimumSectionSize">
<number>49</number>
</attribute>
<attribute name="headerStretchLastSection">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget>
<widget class="QTreeView" name="dsi_title_tree"/>
</item>
</layout>
</widget>

View File

@ -4,7 +4,7 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../../NUSGet.py" line="85"/>
<location filename="../../NUSGet.py" line="96"/>
<source>NUSGet v{nusget_version}
Developed by NinjaCheetah
Powered by libWiiPy {libwiipy_version}
@ -29,136 +29,139 @@ Titel, welche mit einem Häkchen markiert sind, sind frei verfügbar und haben e
Titel werden in einem &quot;NUSGet&quot; Ordner innerhalb des Downloads-Ordners gespeichert.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="184"/>
<location filename="../../NUSGet.py" line="156"/>
<source>NUSGet Update Available</source>
<translation>NUSGet-Update verfügbar</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="185"/>
<location filename="../../NUSGet.py" line="157"/>
<source>There&apos;s a newer version of NUSGet available!</source>
<translation>Eine neuere Version von NUSGet ist verfügbar.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="264"/>
<location filename="../../NUSGet.py" line="233"/>
<source>No Output Selected</source>
<translatorcomment>Changed from &quot;output&quot; to &quot;packaging&quot; for clarity</translatorcomment>
<translation>Keine Verpackmethode ausgewählt</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="265"/>
<location filename="../../NUSGet.py" line="234"/>
<source>You have not selected any format to output the data in!</source>
<translation>Es wurde keine Methode zum Verpacken der Inhalte ausgewählt.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="267"/>
<location filename="../../NUSGet.py" line="236"/>
<source>Please select at least one option for how you would like the download to be saved.</source>
<translatorcomment>Explicitly mentions options for clarity</translatorcomment>
<translation>Es muss mindestens &quot;verschlüsselte Inhalte speichern&quot;, &quot;entschlüsselte Inhalte speichern&quot; oder &quot;Verpacke als WAD/TAD&quot; ausgewählt worden sein.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="298"/>
<location filename="../../NUSGet.py" line="267"/>
<source>Invalid Title ID</source>
<translation>Fehlerhafte Title-ID</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="299"/>
<location filename="../../NUSGet.py" line="268"/>
<source>The Title ID you have entered is not in a valid format!</source>
<translation>Die eingegebene Title-ID ist nicht korrekt.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="301"/>
<location filename="../../NUSGet.py" line="270"/>
<source>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.</source>
<translation>Die Title-ID muss mindestens 16 alphanumerische Zeichen enthalten.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="303"/>
<location filename="../../NUSGet.py" line="272"/>
<source>Title ID/Version Not Found</source>
<translation>Title-ID/Version nicht gefunden</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="304"/>
<location filename="../../NUSGet.py" line="273"/>
<source>No title with the provided Title ID or version could be found!</source>
<translatorcomment>The title was moved into the body, and the title was made less of a mouthful, for ease of translation</translatorcomment>
<translation>Es konnte kein Titel mit der gegebenen Title-ID oder Version gefunden werden.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="306"/>
<location filename="../../NUSGet.py" line="275"/>
<source>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.</source>
<translation>Die Title-ID könnte möglicherweise fehlerhaft sein.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="308"/>
<location filename="../../NUSGet.py" line="277"/>
<source>Content Decryption Failed</source>
<translation>Entschlüsselung fehlgeschlagen</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="309"/>
<location filename="../../NUSGet.py" line="278"/>
<source>Content decryption was not successful! Decrypted contents could not be created.</source>
<translation>Die Inhalte des Titels konnten nicht korrekt entschlüsselt werden.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="312"/>
<location filename="../../NUSGet.py" line="281"/>
<source>Your TMD or Ticket may be damaged, or they may not correspond with the content being decrypted. If you have checked &quot;Use local files, if they exist&quot;, try disabling that option before trying the download again to fix potential issues with local data.</source>
<translation>Die gespeicherte TMD oder das Ticket könnten möglicherweise fehlerhaft sein. &quot;Lokale Dateien nutzen&quot; kann ausgeschaltet werden, um diese erneut herunterzuladen.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="315"/>
<location filename="../../NUSGet.py" line="284"/>
<source>Ticket Not Available</source>
<translation>Ticket nicht verfügbar</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="316"/>
<location filename="../../NUSGet.py" line="285"/>
<source>No Ticket is Available for the Requested Title!</source>
<translation>Kein Ticket konnte für den geforderten Titel gefunden werden.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="319"/>
<location filename="../../NUSGet.py" line="288"/>
<source>A ticket could not be downloaded for the requested title, but you have selected &quot;Pack installable archive&quot; or &quot;Create decrypted contents&quot;. These options are not available for titles without a ticket. Only encrypted contents have been saved.</source>
<translation>Es wurden nur verschlüsselte Inhalte gespeichert.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="321"/>
<location filename="../../NUSGet.py" line="290"/>
<source>Unknown Error</source>
<translation>Unbekannter Fehler</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="322"/>
<location filename="../../NUSGet.py" line="291"/>
<source>An Unknown Error has Occurred!</source>
<translation>Ein unbekannter Fehler ist aufgetreten.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="324"/>
<location filename="../../NUSGet.py" line="293"/>
<source>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.</source>
<translation>Versuchen Sie es erneut. Sofern das Problem bestehen bleibt, können Sie ein Issue auf GitHub öffnen, um den Fehler zu berichten.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="337"/>
<source>Script Download Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="338"/>
<source>Open NUS script</source>
<translatorcomment>Translating the file type is pointless, since it&apos;s not an actual &quot;script&quot;</translatorcomment>
<translation>NUS-Script öffnen</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="339"/>
<source>NUS Scripts (*.nus *.txt)</source>
<translation>NUS Script (*.nus *.txt)</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<location filename="../../NUSGet.py" line="386"/>
<location filename="../../NUSGet.py" line="389"/>
<location filename="../../NUSGet.py" line="397"/>
<location filename="../../NUSGet.py" line="415"/>
<location filename="../../NUSGet.py" line="422"/>
<location filename="../../NUSGet.py" line="346"/>
<source>The script could not be opened.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Script Failure</source>
<translation>Script-Fehler</translation>
<translation type="vanished">Script-Fehler</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<source>Failed to open the script.</source>
<translation>Konnte das NUS-Script nicht öffnen.</translation>
<translation type="vanished">Konnte das NUS-Script nicht öffnen.</translation>
</message>
<message>
<location filename="../../modules/core.py" line="26"/>
<location filename="../../modules/core.py" line="25"/>
<source>
Could not check for updates.</source>
@ -167,7 +170,7 @@ Could not check for updates.</source>
Konnte nicht nach Updates suchen.</translation>
</message>
<message>
<location filename="../../modules/core.py" line="34"/>
<location filename="../../modules/core.py" line="33"/>
<source>
There&apos;s a newer version of NUSGet available!</source>
@ -176,7 +179,7 @@ There&apos;s a newer version of NUSGet available!</source>
Eine neuere Version von NUSGet ist verfügbar.</translation>
</message>
<message>
<location filename="../../modules/core.py" line="36"/>
<location filename="../../modules/core.py" line="35"/>
<source>
You&apos;re running the latest release of NUSGet.</source>
@ -202,102 +205,102 @@ Die neuste Version von NUSGet ist bereits aktiv.</translation>
<translation></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="103"/>
<location filename="../../qt/ui/MainMenu.ui" line="82"/>
<source>vWii</source>
<translation></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="134"/>
<location filename="../../qt/ui/MainMenu.ui" line="92"/>
<source>DSi</source>
<translation></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="174"/>
<location filename="../../qt/ui/MainMenu.ui" line="117"/>
<source>Title ID</source>
<translatorcomment>We do not translate &quot;Title ID&quot; beyond making it grammatically correct (hence the dash), since it refers to a NUS specific component</translatorcomment>
<translation>Title-ID</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="181"/>
<location filename="../../qt/ui/MainMenu.ui" line="124"/>
<source>v</source>
<translatorcomment>Since vNNNNN is a common way of referring to versions across the Wii both by Nintendo and modders, we keep it identical</translatorcomment>
<translation></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="194"/>
<location filename="../../qt/ui/MainMenu.ui" line="137"/>
<source>Version</source>
<translatorcomment>The same word is used in German</translatorcomment>
<translation></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="201"/>
<location filename="../../qt/ui/MainMenu.ui" line="144"/>
<source>Console:</source>
<translation>Konsole:</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="237"/>
<location filename="../../qt/ui/MainMenu.ui" line="180"/>
<source>Start Download</source>
<translation>Herunterladen</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="250"/>
<location filename="../../qt/ui/MainMenu.ui" line="193"/>
<source>Run Script</source>
<translation>Script starten</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="277"/>
<location filename="../../qt/ui/MainMenu.ui" line="220"/>
<source>General Settings</source>
<translation>Einstellungen</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="308"/>
<location filename="../../qt/ui/MainMenu.ui" line="251"/>
<source>Pack installable archive (WAD/TAD)</source>
<translation>Installierbar verpacken (WAD/TAD)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="323"/>
<location filename="../../qt/ui/MainMenu.ui" line="266"/>
<source>File Name</source>
<translation>Dateiname</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="357"/>
<location filename="../../qt/ui/MainMenu.ui" line="300"/>
<source>Keep encrypted contents</source>
<translation>Verschlüsselte Inhalte speichern</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="393"/>
<location filename="../../qt/ui/MainMenu.ui" line="336"/>
<source>Create decrypted contents (*.app)</source>
<translation>Entschlüsselte Inhalte speichern (*.app)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="432"/>
<location filename="../../qt/ui/MainMenu.ui" line="375"/>
<source>Use local files, if they exist</source>
<translation>Lokale Dateien nutzen, sofern verfügbar</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="477"/>
<location filename="../../qt/ui/MainMenu.ui" line="420"/>
<source>Use the Wii U NUS (faster, only effects Wii/vWii)</source>
<translation>Wii U-NUS nutzen (schneller, gilt nur für Wii/vWii)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="519"/>
<location filename="../../qt/ui/MainMenu.ui" line="462"/>
<source>Apply patches to IOS (Applies to WADs only)</source>
<translatorcomment>&quot;Patch&quot; does not have a good translation into German, and in most modding forums, it&apos;s used as is</translatorcomment>
<translation>Patches für IOS anwenden (Gilt nur für WAD)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="575"/>
<location filename="../../qt/ui/MainMenu.ui" line="518"/>
<source>vWii Title Settings</source>
<translation>vWii Titel-Einstellungen</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<location filename="../../qt/ui/MainMenu.ui" line="552"/>
<source>Re-encrypt title using the Wii Common Key</source>
<translatorcomment>Common key does not get translated</translatorcomment>
<translation>Titel mit dem Common-Key der Wii neu verschlüsseln</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="666"/>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }

View File

@ -10,19 +10,19 @@
<translation type="unfinished">Wii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="103"/>
<location filename="../../qt/ui/MainMenu.ui" line="82"/>
<source>vWii</source>
<translatorcomment>Does not change.</translatorcomment>
<translation>vWii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="134"/>
<location filename="../../qt/ui/MainMenu.ui" line="92"/>
<source>DSi</source>
<translatorcomment>Does not change.</translatorcomment>
<translation>DSi</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="181"/>
<location filename="../../qt/ui/MainMenu.ui" line="124"/>
<source>v</source>
<translatorcomment>Does not change.</translatorcomment>
<translation>v</translation>
@ -38,77 +38,77 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="174"/>
<location filename="../../qt/ui/MainMenu.ui" line="117"/>
<source>Title ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="194"/>
<location filename="../../qt/ui/MainMenu.ui" line="137"/>
<source>Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="201"/>
<location filename="../../qt/ui/MainMenu.ui" line="144"/>
<source>Console:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="237"/>
<location filename="../../qt/ui/MainMenu.ui" line="180"/>
<source>Start Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="250"/>
<location filename="../../qt/ui/MainMenu.ui" line="193"/>
<source>Run Script</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="277"/>
<location filename="../../qt/ui/MainMenu.ui" line="220"/>
<source>General Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="308"/>
<location filename="../../qt/ui/MainMenu.ui" line="251"/>
<source>Pack installable archive (WAD/TAD)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="323"/>
<location filename="../../qt/ui/MainMenu.ui" line="266"/>
<source>File Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="357"/>
<location filename="../../qt/ui/MainMenu.ui" line="300"/>
<source>Keep encrypted contents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="393"/>
<location filename="../../qt/ui/MainMenu.ui" line="336"/>
<source>Create decrypted contents (*.app)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="432"/>
<location filename="../../qt/ui/MainMenu.ui" line="375"/>
<source>Use local files, if they exist</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="477"/>
<location filename="../../qt/ui/MainMenu.ui" line="420"/>
<source>Use the Wii U NUS (faster, only effects Wii/vWii)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="575"/>
<location filename="../../qt/ui/MainMenu.ui" line="518"/>
<source>vWii Title Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<location filename="../../qt/ui/MainMenu.ui" line="552"/>
<source>Re-encrypt title using the Wii Common Key</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="666"/>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@ -120,12 +120,12 @@ li.checked::marker { content: &quot;\2612&quot;; }
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="519"/>
<location filename="../../qt/ui/MainMenu.ui" line="462"/>
<source>Apply patches to IOS (Applies to WADs only)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="85"/>
<location filename="../../NUSGet.py" line="96"/>
<source>NUSGet v{nusget_version}
Developed by NinjaCheetah
Powered by libWiiPy {libwiipy_version}
@ -139,146 +139,141 @@ Titles will be downloaded to a folder named &quot;NUSGet&quot; inside your downl
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="184"/>
<location filename="../../NUSGet.py" line="156"/>
<source>NUSGet Update Available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="185"/>
<location filename="../../NUSGet.py" line="157"/>
<source>There&apos;s a newer version of NUSGet available!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="264"/>
<location filename="../../NUSGet.py" line="233"/>
<source>No Output Selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="265"/>
<location filename="../../NUSGet.py" line="234"/>
<source>You have not selected any format to output the data in!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="267"/>
<location filename="../../NUSGet.py" line="236"/>
<source>Please select at least one option for how you would like the download to be saved.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="298"/>
<location filename="../../NUSGet.py" line="267"/>
<source>Invalid Title ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="299"/>
<location filename="../../NUSGet.py" line="268"/>
<source>The Title ID you have entered is not in a valid format!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="301"/>
<location filename="../../NUSGet.py" line="270"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="303"/>
<location filename="../../NUSGet.py" line="272"/>
<source>Title ID/Version Not Found</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="304"/>
<location filename="../../NUSGet.py" line="273"/>
<source>No title with the provided Title ID or version could be found!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="306"/>
<location filename="../../NUSGet.py" line="275"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="308"/>
<location filename="../../NUSGet.py" line="277"/>
<source>Content Decryption Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="309"/>
<location filename="../../NUSGet.py" line="278"/>
<source>Content decryption was not successful! Decrypted contents could not be created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="312"/>
<location filename="../../NUSGet.py" line="281"/>
<source>Your TMD or Ticket may be damaged, or they may not correspond with the content being decrypted. If you have checked &quot;Use local files, if they exist&quot;, try disabling that option before trying the download again to fix potential issues with local data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="315"/>
<location filename="../../NUSGet.py" line="284"/>
<source>Ticket Not Available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="316"/>
<location filename="../../NUSGet.py" line="285"/>
<source>No Ticket is Available for the Requested Title!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="319"/>
<location filename="../../NUSGet.py" line="288"/>
<source>A ticket could not be downloaded for the requested title, but you have selected &quot;Pack installable archive&quot; or &quot;Create decrypted contents&quot;. These options are not available for titles without a ticket. Only encrypted contents have been saved.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="321"/>
<location filename="../../NUSGet.py" line="290"/>
<source>Unknown Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="322"/>
<location filename="../../NUSGet.py" line="291"/>
<source>An Unknown Error has Occurred!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="324"/>
<location filename="../../NUSGet.py" line="293"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="337"/>
<source>Script Download Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="338"/>
<source>Open NUS script</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="339"/>
<source>NUS Scripts (*.nus *.txt)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<location filename="../../NUSGet.py" line="386"/>
<location filename="../../NUSGet.py" line="389"/>
<location filename="../../NUSGet.py" line="397"/>
<location filename="../../NUSGet.py" line="415"/>
<location filename="../../NUSGet.py" line="422"/>
<source>Script Failure</source>
<location filename="../../NUSGet.py" line="346"/>
<source>The script could not be opened.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<source>Failed to open the script.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="26"/>
<location filename="../../modules/core.py" line="25"/>
<source>
Could not check for updates.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="34"/>
<location filename="../../modules/core.py" line="33"/>
<source>
There&apos;s a newer version of NUSGet available!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="36"/>
<location filename="../../modules/core.py" line="35"/>
<source>
You&apos;re running the latest release of NUSGet.</source>

View File

@ -4,7 +4,7 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../../NUSGet.py" line="85"/>
<location filename="../../NUSGet.py" line="96"/>
<source>NUSGet v{nusget_version}
Developed by NinjaCheetah
Powered by libWiiPy {libwiipy_version}
@ -18,128 +18,123 @@ Titles will be downloaded to a folder named &quot;NUSGet&quot; inside your downl
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="184"/>
<location filename="../../NUSGet.py" line="156"/>
<source>NUSGet Update Available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="185"/>
<location filename="../../NUSGet.py" line="157"/>
<source>There&apos;s a newer version of NUSGet available!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="264"/>
<location filename="../../NUSGet.py" line="233"/>
<source>No Output Selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="265"/>
<location filename="../../NUSGet.py" line="234"/>
<source>You have not selected any format to output the data in!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="267"/>
<location filename="../../NUSGet.py" line="236"/>
<source>Please select at least one option for how you would like the download to be saved.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="298"/>
<location filename="../../NUSGet.py" line="267"/>
<source>Invalid Title ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="299"/>
<location filename="../../NUSGet.py" line="268"/>
<source>The Title ID you have entered is not in a valid format!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="301"/>
<location filename="../../NUSGet.py" line="270"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="303"/>
<location filename="../../NUSGet.py" line="272"/>
<source>Title ID/Version Not Found</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="304"/>
<location filename="../../NUSGet.py" line="273"/>
<source>No title with the provided Title ID or version could be found!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="306"/>
<location filename="../../NUSGet.py" line="275"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="308"/>
<location filename="../../NUSGet.py" line="277"/>
<source>Content Decryption Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="309"/>
<location filename="../../NUSGet.py" line="278"/>
<source>Content decryption was not successful! Decrypted contents could not be created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="312"/>
<location filename="../../NUSGet.py" line="281"/>
<source>Your TMD or Ticket may be damaged, or they may not correspond with the content being decrypted. If you have checked &quot;Use local files, if they exist&quot;, try disabling that option before trying the download again to fix potential issues with local data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="315"/>
<location filename="../../NUSGet.py" line="284"/>
<source>Ticket Not Available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="316"/>
<location filename="../../NUSGet.py" line="285"/>
<source>No Ticket is Available for the Requested Title!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="319"/>
<location filename="../../NUSGet.py" line="288"/>
<source>A ticket could not be downloaded for the requested title, but you have selected &quot;Pack installable archive&quot; or &quot;Create decrypted contents&quot;. These options are not available for titles without a ticket. Only encrypted contents have been saved.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="321"/>
<location filename="../../NUSGet.py" line="290"/>
<source>Unknown Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="322"/>
<location filename="../../NUSGet.py" line="291"/>
<source>An Unknown Error has Occurred!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="324"/>
<location filename="../../NUSGet.py" line="293"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="337"/>
<source>Script Download Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="338"/>
<source>Open NUS script</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="339"/>
<source>NUS Scripts (*.nus *.txt)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<location filename="../../NUSGet.py" line="386"/>
<location filename="../../NUSGet.py" line="389"/>
<location filename="../../NUSGet.py" line="397"/>
<location filename="../../NUSGet.py" line="415"/>
<location filename="../../NUSGet.py" line="422"/>
<source>Script Failure</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<source>Failed to open the script.</source>
<location filename="../../NUSGet.py" line="346"/>
<source>The script could not be opened.</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -158,97 +153,97 @@ Titles will be downloaded to a folder named &quot;NUSGet&quot; inside your downl
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="103"/>
<location filename="../../qt/ui/MainMenu.ui" line="82"/>
<source>vWii</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="134"/>
<location filename="../../qt/ui/MainMenu.ui" line="92"/>
<source>DSi</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="174"/>
<location filename="../../qt/ui/MainMenu.ui" line="117"/>
<source>Title ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="181"/>
<location filename="../../qt/ui/MainMenu.ui" line="124"/>
<source>v</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="194"/>
<location filename="../../qt/ui/MainMenu.ui" line="137"/>
<source>Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="201"/>
<location filename="../../qt/ui/MainMenu.ui" line="144"/>
<source>Console:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="237"/>
<location filename="../../qt/ui/MainMenu.ui" line="180"/>
<source>Start Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="250"/>
<location filename="../../qt/ui/MainMenu.ui" line="193"/>
<source>Run Script</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="277"/>
<location filename="../../qt/ui/MainMenu.ui" line="220"/>
<source>General Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="308"/>
<location filename="../../qt/ui/MainMenu.ui" line="251"/>
<source>Pack installable archive (WAD/TAD)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="323"/>
<location filename="../../qt/ui/MainMenu.ui" line="266"/>
<source>File Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="357"/>
<location filename="../../qt/ui/MainMenu.ui" line="300"/>
<source>Keep encrypted contents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="393"/>
<location filename="../../qt/ui/MainMenu.ui" line="336"/>
<source>Create decrypted contents (*.app)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="432"/>
<location filename="../../qt/ui/MainMenu.ui" line="375"/>
<source>Use local files, if they exist</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="477"/>
<location filename="../../qt/ui/MainMenu.ui" line="420"/>
<source>Use the Wii U NUS (faster, only effects Wii/vWii)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="519"/>
<location filename="../../qt/ui/MainMenu.ui" line="462"/>
<source>Apply patches to IOS (Applies to WADs only)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="575"/>
<location filename="../../qt/ui/MainMenu.ui" line="518"/>
<source>vWii Title Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<location filename="../../qt/ui/MainMenu.ui" line="552"/>
<source>Re-encrypt title using the Wii Common Key</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="666"/>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@ -260,21 +255,21 @@ li.checked::marker { content: &quot;\2612&quot;; }
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="26"/>
<location filename="../../modules/core.py" line="25"/>
<source>
Could not check for updates.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="34"/>
<location filename="../../modules/core.py" line="33"/>
<source>
There&apos;s a newer version of NUSGet available!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="36"/>
<location filename="../../modules/core.py" line="35"/>
<source>
You&apos;re running the latest release of NUSGet.</source>

View File

@ -19,92 +19,92 @@
<translation>Wii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="103"/>
<location filename="../../qt/ui/MainMenu.ui" line="82"/>
<source>vWii</source>
<translation>vWii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="134"/>
<location filename="../../qt/ui/MainMenu.ui" line="92"/>
<source>DSi</source>
<translation>DSi</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="174"/>
<location filename="../../qt/ui/MainMenu.ui" line="117"/>
<source>Title ID</source>
<translation>ID Titolo</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="181"/>
<location filename="../../qt/ui/MainMenu.ui" line="124"/>
<source>v</source>
<translation>v</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="194"/>
<location filename="../../qt/ui/MainMenu.ui" line="137"/>
<source>Version</source>
<translation>Versione</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="201"/>
<location filename="../../qt/ui/MainMenu.ui" line="144"/>
<source>Console:</source>
<translation>Console:</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="237"/>
<location filename="../../qt/ui/MainMenu.ui" line="180"/>
<source>Start Download</source>
<translation>Avvia download</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="250"/>
<location filename="../../qt/ui/MainMenu.ui" line="193"/>
<source>Run Script</source>
<translation>Avvia Script</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="277"/>
<location filename="../../qt/ui/MainMenu.ui" line="220"/>
<source>General Settings</source>
<translation>Impostazioni generali</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="308"/>
<location filename="../../qt/ui/MainMenu.ui" line="251"/>
<source>Pack installable archive (WAD/TAD)</source>
<translation>Archivio installabile (WAD/TAD)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="323"/>
<location filename="../../qt/ui/MainMenu.ui" line="266"/>
<source>File Name</source>
<translation>Nome del file</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="357"/>
<location filename="../../qt/ui/MainMenu.ui" line="300"/>
<source>Keep encrypted contents</source>
<translation>Mantieni contenuti criptati</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="393"/>
<location filename="../../qt/ui/MainMenu.ui" line="336"/>
<source>Create decrypted contents (*.app)</source>
<translation>Crea contenuto decriptato (*.app)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="432"/>
<location filename="../../qt/ui/MainMenu.ui" line="375"/>
<source>Use local files, if they exist</source>
<translation>Usa file locali, se esistenti</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="477"/>
<location filename="../../qt/ui/MainMenu.ui" line="420"/>
<source>Use the Wii U NUS (faster, only effects Wii/vWii)</source>
<translation>Usa il NUS di Wii U (più veloce, riguarda solo Wii/vWii)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="575"/>
<location filename="../../qt/ui/MainMenu.ui" line="518"/>
<source>vWii Title Settings</source>
<translation>Impostazioni titoli vWii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<location filename="../../qt/ui/MainMenu.ui" line="552"/>
<source>Re-encrypt title using the Wii Common Key</source>
<translation>Cripta titolo usando la Chiave Comune Wii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="666"/>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@ -135,122 +135,125 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="264"/>
<location filename="../../NUSGet.py" line="233"/>
<source>No Output Selected</source>
<translation>Nessun output selezionato</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="265"/>
<location filename="../../NUSGet.py" line="234"/>
<source>You have not selected any format to output the data in!</source>
<translation>Non hai selezionato alcun formato in cui esportare i dati!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="267"/>
<location filename="../../NUSGet.py" line="236"/>
<source>Please select at least one option for how you would like the download to be saved.</source>
<translation>Per favore scegli almeno un opzione per come vorresti che fosse salvato il download.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="298"/>
<location filename="../../NUSGet.py" line="267"/>
<source>Invalid Title ID</source>
<translation>ID Titolo invalido</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="299"/>
<location filename="../../NUSGet.py" line="268"/>
<source>The Title ID you have entered is not in a valid format!</source>
<translation>L&apos; ID Titolo che hai inserito non è in un formato valido!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="301"/>
<location filename="../../NUSGet.py" line="270"/>
<source>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.</source>
<translation>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.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="303"/>
<location filename="../../NUSGet.py" line="272"/>
<source>Title ID/Version Not Found</source>
<translation>ID Titolo/Versione non trovata</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="304"/>
<location filename="../../NUSGet.py" line="273"/>
<source>No title with the provided Title ID or version could be found!</source>
<translation>Non è stato trovato nessun titolo con l&apos; ID Titolo o versione data!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="306"/>
<location filename="../../NUSGet.py" line="275"/>
<source>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.</source>
<translation>Assicurati di aver inserito un&apos; ID Titolo valido, o scegline uno dal database, e che la versione richiesta esista per il titolo che vuoi scaricare.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="308"/>
<location filename="../../NUSGet.py" line="277"/>
<source>Content Decryption Failed</source>
<translation>Decriptazione contenuti fallita</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="309"/>
<location filename="../../NUSGet.py" line="278"/>
<source>Content decryption was not successful! Decrypted contents could not be created.</source>
<translation>La decriptazione dei contenuti non è andata a buon fine! I contenuti decriptadi non sono stati creati.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="312"/>
<location filename="../../NUSGet.py" line="281"/>
<source>Your TMD or Ticket may be damaged, or they may not correspond with the content being decrypted. If you have checked &quot;Use local files, if they exist&quot;, try disabling that option before trying the download again to fix potential issues with local data.</source>
<translation>Il tuo TMD o Ticket potrebbe essere danneggiato, o potrebbe non corrispondere col contenuto da decriptare. Se hai selezionato &quot;Usa file locali, se esistenti&quot;, prova a disabilitare quell&apos;opzione prima di riprovare a scaricare per aggiustare potenziali errori coi dati locali.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="315"/>
<location filename="../../NUSGet.py" line="284"/>
<source>Ticket Not Available</source>
<translation>Ticket non disponibile</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="316"/>
<location filename="../../NUSGet.py" line="285"/>
<source>No Ticket is Available for the Requested Title!</source>
<translation>Nessun ticket disponibile per il titolo richiesto!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="319"/>
<location filename="../../NUSGet.py" line="288"/>
<source>A ticket could not be downloaded for the requested title, but you have selected &quot;Pack installable archive&quot; or &quot;Create decrypted contents&quot;. These options are not available for titles without a ticket. Only encrypted contents have been saved.</source>
<translation>Non è stato possibile scaricare un ticket per il titolo richiesto, ma hai selezionato &quot;Crea archivio installabile&quot; o &quot;Crea contenuto decriptato&quot;. Queste opzioni non sono disponibili per i titoli senza un ticket. Sono stati salvati solo i contenuti criptati.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="321"/>
<location filename="../../NUSGet.py" line="290"/>
<source>Unknown Error</source>
<translation>Errore sconosciuto</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="322"/>
<location filename="../../NUSGet.py" line="291"/>
<source>An Unknown Error has Occurred!</source>
<translation>Errore sconosciuto!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="324"/>
<location filename="../../NUSGet.py" line="293"/>
<source>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.</source>
<translation>Per favore riprova. Se il problema persiste, apri un issue su GitHub specificando in modo dettagliato cosa volevi fare quando è comparso questo errore.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="337"/>
<source>Script Download Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="338"/>
<source>Open NUS script</source>
<translation>Apri script NUS</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="339"/>
<source>NUS Scripts (*.nus *.txt)</source>
<translation>Scrpit NUS (*.nus *.txt)</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<location filename="../../NUSGet.py" line="386"/>
<location filename="../../NUSGet.py" line="389"/>
<location filename="../../NUSGet.py" line="397"/>
<location filename="../../NUSGet.py" line="415"/>
<location filename="../../NUSGet.py" line="422"/>
<location filename="../../NUSGet.py" line="346"/>
<source>The script could not be opened.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Script Failure</source>
<translation>Errore script</translation>
<translation type="vanished">Errore script</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<source>Failed to open the script.</source>
<translation>Impossibile aprire lo script.</translation>
<translation type="vanished">Impossibile aprire lo script.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="85"/>
<location filename="../../NUSGet.py" line="96"/>
<source>NUSGet v{nusget_version}
Developed by NinjaCheetah
Powered by libWiiPy {libwiipy_version}
@ -272,36 +275,36 @@ I titoli marcati da una spunta sono disponibili e hanno un ticket libero, e poss
I titoli verranno scaricati nella cartella &quot;NUSGet&quot; all&apos;interno della cartella Download.</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="519"/>
<location filename="../../qt/ui/MainMenu.ui" line="462"/>
<source>Apply patches to IOS (Applies to WADs only)</source>
<translation>Applica patch agli IOS (Solo per le WAD)</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="184"/>
<location filename="../../NUSGet.py" line="156"/>
<source>NUSGet Update Available</source>
<translation>Aggiornamento di NUSGet disponibile</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="185"/>
<location filename="../../NUSGet.py" line="157"/>
<source>There&apos;s a newer version of NUSGet available!</source>
<translation>Una nuova versione di NUSGet è disponibile!</translation>
</message>
<message>
<location filename="../../modules/core.py" line="26"/>
<location filename="../../modules/core.py" line="25"/>
<source>
Could not check for updates.</source>
<translation>Impossibile trovare eventuali aggiornamenti.</translation>
</message>
<message>
<location filename="../../modules/core.py" line="34"/>
<location filename="../../modules/core.py" line="33"/>
<source>
There&apos;s a newer version of NUSGet available!</source>
<translation>Una nuova versione di NUSGet è disponibile!</translation>
</message>
<message>
<location filename="../../modules/core.py" line="36"/>
<location filename="../../modules/core.py" line="35"/>
<source>
You&apos;re running the latest release of NUSGet.</source>

View File

@ -19,92 +19,92 @@
<translation>Wii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="103"/>
<location filename="../../qt/ui/MainMenu.ui" line="82"/>
<source>vWii</source>
<translation>vWii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="134"/>
<location filename="../../qt/ui/MainMenu.ui" line="92"/>
<source>DSi</source>
<translation>DSi</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="174"/>
<location filename="../../qt/ui/MainMenu.ui" line="117"/>
<source>Title ID</source>
<translation> ID</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="181"/>
<location filename="../../qt/ui/MainMenu.ui" line="124"/>
<source>v</source>
<translation>v</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="194"/>
<location filename="../../qt/ui/MainMenu.ui" line="137"/>
<source>Version</source>
<translation></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="201"/>
<location filename="../../qt/ui/MainMenu.ui" line="144"/>
<source>Console:</source>
<translation>:</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="237"/>
<location filename="../../qt/ui/MainMenu.ui" line="180"/>
<source>Start Download</source>
<translation> </translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="250"/>
<location filename="../../qt/ui/MainMenu.ui" line="193"/>
<source>Run Script</source>
<translation> </translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="277"/>
<location filename="../../qt/ui/MainMenu.ui" line="220"/>
<source>General Settings</source>
<translation> </translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="308"/>
<location filename="../../qt/ui/MainMenu.ui" line="251"/>
<source>Pack installable archive (WAD/TAD)</source>
<translation> (WAD/TAD) </translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="323"/>
<location filename="../../qt/ui/MainMenu.ui" line="266"/>
<source>File Name</source>
<translation> </translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="357"/>
<location filename="../../qt/ui/MainMenu.ui" line="300"/>
<source>Keep encrypted contents</source>
<translation> </translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="393"/>
<location filename="../../qt/ui/MainMenu.ui" line="336"/>
<source>Create decrypted contents (*.app)</source>
<translation> (*.app) </translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="432"/>
<location filename="../../qt/ui/MainMenu.ui" line="375"/>
<source>Use local files, if they exist</source>
<translation> </translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="477"/>
<location filename="../../qt/ui/MainMenu.ui" line="420"/>
<source>Use the Wii U NUS (faster, only effects Wii/vWii)</source>
<translation>Wii U NUS ( Wii/vWii에만 )</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="575"/>
<location filename="../../qt/ui/MainMenu.ui" line="518"/>
<source>vWii Title Settings</source>
<translation>vWii </translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<location filename="../../qt/ui/MainMenu.ui" line="552"/>
<source>Re-encrypt title using the Wii Common Key</source>
<translation>Wii </translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="666"/>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@ -135,122 +135,125 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="264"/>
<location filename="../../NUSGet.py" line="233"/>
<source>No Output Selected</source>
<translation> </translation>
</message>
<message>
<location filename="../../NUSGet.py" line="265"/>
<location filename="../../NUSGet.py" line="234"/>
<source>You have not selected any format to output the data in!</source>
<translation> !</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="267"/>
<location filename="../../NUSGet.py" line="236"/>
<source>Please select at least one option for how you would like the download to be saved.</source>
<translation> .</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="298"/>
<location filename="../../NUSGet.py" line="267"/>
<source>Invalid Title ID</source>
<translation> ID</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="299"/>
<location filename="../../NUSGet.py" line="268"/>
<source>The Title ID you have entered is not in a valid format!</source>
<translation> ID의 !</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="301"/>
<location filename="../../NUSGet.py" line="270"/>
<source>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.</source>
<translation> ID는 16 . ID를 .</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="303"/>
<location filename="../../NUSGet.py" line="272"/>
<source>Title ID/Version Not Found</source>
<translation> ID/ </translation>
</message>
<message>
<location filename="../../NUSGet.py" line="304"/>
<location filename="../../NUSGet.py" line="273"/>
<source>No title with the provided Title ID or version could be found!</source>
<translation> ID !</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="306"/>
<location filename="../../NUSGet.py" line="275"/>
<source>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.</source>
<translation> ID를 , .</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="308"/>
<location filename="../../NUSGet.py" line="277"/>
<source>Content Decryption Failed</source>
<translation> </translation>
</message>
<message>
<location filename="../../NUSGet.py" line="309"/>
<location filename="../../NUSGet.py" line="278"/>
<source>Content decryption was not successful! Decrypted contents could not be created.</source>
<translation> ! .</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="312"/>
<location filename="../../NUSGet.py" line="281"/>
<source>Your TMD or Ticket may be damaged, or they may not correspond with the content being decrypted. If you have checked &quot;Use local files, if they exist&quot;, try disabling that option before trying the download again to fix potential issues with local data.</source>
<translation>TMD . &quot; &quot; , .</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="315"/>
<location filename="../../NUSGet.py" line="284"/>
<source>Ticket Not Available</source>
<translation> </translation>
</message>
<message>
<location filename="../../NUSGet.py" line="316"/>
<location filename="../../NUSGet.py" line="285"/>
<source>No Ticket is Available for the Requested Title!</source>
<translation> !</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="319"/>
<location filename="../../NUSGet.py" line="288"/>
<source>A ticket could not be downloaded for the requested title, but you have selected &quot;Pack installable archive&quot; or &quot;Create decrypted contents&quot;. These options are not available for titles without a ticket. Only encrypted contents have been saved.</source>
<translation> &quot; &quot; &quot; &quot; . . .</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="321"/>
<location filename="../../NUSGet.py" line="290"/>
<source>Unknown Error</source>
<translation> </translation>
</message>
<message>
<location filename="../../NUSGet.py" line="322"/>
<location filename="../../NUSGet.py" line="291"/>
<source>An Unknown Error has Occurred!</source>
<translation> !</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="324"/>
<location filename="../../NUSGet.py" line="293"/>
<source>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.</source>
<translation> . GitHub에서 .</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="337"/>
<source>Script Download Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="338"/>
<source>Open NUS script</source>
<translation>NUS </translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="339"/>
<source>NUS Scripts (*.nus *.txt)</source>
<translation>NUS (*.nus *.txt)</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<location filename="../../NUSGet.py" line="386"/>
<location filename="../../NUSGet.py" line="389"/>
<location filename="../../NUSGet.py" line="397"/>
<location filename="../../NUSGet.py" line="415"/>
<location filename="../../NUSGet.py" line="422"/>
<location filename="../../NUSGet.py" line="346"/>
<source>The script could not be opened.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Script Failure</source>
<translation> </translation>
<translation type="vanished"> </translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<source>Failed to open the script.</source>
<translation> .</translation>
<translation type="vanished"> .</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="85"/>
<location filename="../../NUSGet.py" line="96"/>
<source>NUSGet v{nusget_version}
Developed by NinjaCheetah
Powered by libWiiPy {libwiipy_version}
@ -273,22 +276,22 @@ DSi 지원 : libTWLPy {libtwlpy_version}에서 제공
&quot;NUSBet&quot; .</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="519"/>
<location filename="../../qt/ui/MainMenu.ui" line="462"/>
<source>Apply patches to IOS (Applies to WADs only)</source>
<translation>IOS에 (WAD에만 )</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="184"/>
<location filename="../../NUSGet.py" line="156"/>
<source>NUSGet Update Available</source>
<translation>NUSGet </translation>
</message>
<message>
<location filename="../../NUSGet.py" line="185"/>
<location filename="../../NUSGet.py" line="157"/>
<source>There&apos;s a newer version of NUSGet available!</source>
<translation>NUSBet의 !</translation>
</message>
<message>
<location filename="../../modules/core.py" line="26"/>
<location filename="../../modules/core.py" line="25"/>
<source>
Could not check for updates.</source>
@ -297,7 +300,7 @@ Could not check for updates.</source>
.</translation>
</message>
<message>
<location filename="../../modules/core.py" line="34"/>
<location filename="../../modules/core.py" line="33"/>
<source>
There&apos;s a newer version of NUSGet available!</source>
@ -306,7 +309,7 @@ There&apos;s a newer version of NUSGet available!</source>
NUSBet의 !</translation>
</message>
<message>
<location filename="../../modules/core.py" line="36"/>
<location filename="../../modules/core.py" line="35"/>
<source>
You&apos;re running the latest release of NUSGet.</source>

View File

@ -19,92 +19,92 @@
<translation>Wii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="103"/>
<location filename="../../qt/ui/MainMenu.ui" line="82"/>
<source>vWii</source>
<translation>vWii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="134"/>
<location filename="../../qt/ui/MainMenu.ui" line="92"/>
<source>DSi</source>
<translation>DSi</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="174"/>
<location filename="../../qt/ui/MainMenu.ui" line="117"/>
<source>Title ID</source>
<translation>Tittel ID</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="181"/>
<location filename="../../qt/ui/MainMenu.ui" line="124"/>
<source>v</source>
<translation>v</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="194"/>
<location filename="../../qt/ui/MainMenu.ui" line="137"/>
<source>Version</source>
<translation>Versjon</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="201"/>
<location filename="../../qt/ui/MainMenu.ui" line="144"/>
<source>Console:</source>
<translation>Konsoll:</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="237"/>
<location filename="../../qt/ui/MainMenu.ui" line="180"/>
<source>Start Download</source>
<translation>Start Nedlasting</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="250"/>
<location filename="../../qt/ui/MainMenu.ui" line="193"/>
<source>Run Script</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="277"/>
<location filename="../../qt/ui/MainMenu.ui" line="220"/>
<source>General Settings</source>
<translation>Generelle Instillinger</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="308"/>
<location filename="../../qt/ui/MainMenu.ui" line="251"/>
<source>Pack installable archive (WAD/TAD)</source>
<translation>Pakke installerbart arkiv (WAD/TAD)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="323"/>
<location filename="../../qt/ui/MainMenu.ui" line="266"/>
<source>File Name</source>
<translation>Filnavn</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="357"/>
<location filename="../../qt/ui/MainMenu.ui" line="300"/>
<source>Keep encrypted contents</source>
<translation>Oppbevar kryptert innhold</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="393"/>
<location filename="../../qt/ui/MainMenu.ui" line="336"/>
<source>Create decrypted contents (*.app)</source>
<translation>Opprette dekryptert innold (*.app)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="432"/>
<location filename="../../qt/ui/MainMenu.ui" line="375"/>
<source>Use local files, if they exist</source>
<translation>Bruk lokale filer, hvis de finnes</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="477"/>
<location filename="../../qt/ui/MainMenu.ui" line="420"/>
<source>Use the Wii U NUS (faster, only effects Wii/vWii)</source>
<translation>Bruk Wii U NUS (raskere, påvirker bare Wii/vWii)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="575"/>
<location filename="../../qt/ui/MainMenu.ui" line="518"/>
<source>vWii Title Settings</source>
<translation>vWii Tittelinstillinger</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<location filename="../../qt/ui/MainMenu.ui" line="552"/>
<source>Re-encrypt title using the Wii Common Key</source>
<translation>Krypter tittelen nytt ved hjelp av Wii Common Key</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="666"/>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@ -128,7 +128,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="85"/>
<location filename="../../NUSGet.py" line="96"/>
<source>NUSGet v{nusget_version}
Developed by NinjaCheetah
Powered by libWiiPy {libwiipy_version}
@ -151,151 +151,146 @@ Titler merket med en hake er fri og har en billett tilgjengelig, og kan dekrypte
Titler er lastes ned til en mappe med navnet &quot;NUSGet&quot; i nedlastingsmappen din.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="264"/>
<location filename="../../NUSGet.py" line="233"/>
<source>No Output Selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="265"/>
<location filename="../../NUSGet.py" line="234"/>
<source>You have not selected any format to output the data in!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="267"/>
<location filename="../../NUSGet.py" line="236"/>
<source>Please select at least one option for how you would like the download to be saved.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="298"/>
<location filename="../../NUSGet.py" line="267"/>
<source>Invalid Title ID</source>
<translation>Ugyldig Tittel ID</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="299"/>
<location filename="../../NUSGet.py" line="268"/>
<source>The Title ID you have entered is not in a valid format!</source>
<translation>Tittel IDen du har angitt er ikke i et gyldig format!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="301"/>
<location filename="../../NUSGet.py" line="270"/>
<source>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.</source>
<translation>Tittel IDer være 16-sifrede tall og bokstav strenger. Vennligst skriv inn en korrekt formatert Tittel ID, eller velg en fra menyen til venstre.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="303"/>
<location filename="../../NUSGet.py" line="272"/>
<source>Title ID/Version Not Found</source>
<translation>Tittel ID/Versjon Ikke Funnet</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="304"/>
<location filename="../../NUSGet.py" line="273"/>
<source>No title with the provided Title ID or version could be found!</source>
<translation>Ingen tittel med oppgitt Tittel ID eller versjon ble funnet!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="306"/>
<location filename="../../NUSGet.py" line="275"/>
<source>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.</source>
<translation>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.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="308"/>
<location filename="../../NUSGet.py" line="277"/>
<source>Content Decryption Failed</source>
<translation>Dekryptering av Innhold Mislyktes</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="309"/>
<location filename="../../NUSGet.py" line="278"/>
<source>Content decryption was not successful! Decrypted contents could not be created.</source>
<translation>Dekryptering av innhold var ikke vellykket! Dekryptert innhold kunne ikke opprettes.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="312"/>
<location filename="../../NUSGet.py" line="281"/>
<source>Your TMD or Ticket may be damaged, or they may not correspond with the content being decrypted. If you have checked &quot;Use local files, if they exist&quot;, try disabling that option before trying the download again to fix potential issues with local data.</source>
<translation>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 &quot;Bruk lokale filer, hvis de finnes&quot;, kan du prøve å deaktivere dette alternativet før du prøver nedlastingen nytt for å løse eventuelle problemer med lokale data.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="315"/>
<location filename="../../NUSGet.py" line="284"/>
<source>Ticket Not Available</source>
<translation>Billett Ikke Tilgjengelig</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="316"/>
<location filename="../../NUSGet.py" line="285"/>
<source>No Ticket is Available for the Requested Title!</source>
<translation>Ingen billett er tilgjengelig for den forespurte tittelen!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="319"/>
<location filename="../../NUSGet.py" line="288"/>
<source>A ticket could not be downloaded for the requested title, but you have selected &quot;Pack installable archive&quot; or &quot;Create decrypted contents&quot;. These options are not available for titles without a ticket. Only encrypted contents have been saved.</source>
<translation>En billett kunne ikke lastes ned for den forespurte tittelen, men du har valgt &quot;Pakk installerbart arkiv&quot; eller &quot;Opprett dekryptert innhold&quot;. Disse alternativene er ikke tilgjenelige for titler uten billett. Bare kryptert innhold har blitt lagret.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="321"/>
<location filename="../../NUSGet.py" line="290"/>
<source>Unknown Error</source>
<translation>Ukjent Feil</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="322"/>
<location filename="../../NUSGet.py" line="291"/>
<source>An Unknown Error has Occurred!</source>
<translation>En ukjent feil har oppstått!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="324"/>
<location filename="../../NUSGet.py" line="293"/>
<source>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.</source>
<translation>Vennligst prøv igjen. Hvis dette problemet vedvarer, åpne et nytt issue GitHub med detaljer om hva du prøvde å gjøre da denne feilen oppstod.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="337"/>
<source>Script Download Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="338"/>
<source>Open NUS script</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="339"/>
<source>NUS Scripts (*.nus *.txt)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<location filename="../../NUSGet.py" line="386"/>
<location filename="../../NUSGet.py" line="389"/>
<location filename="../../NUSGet.py" line="397"/>
<location filename="../../NUSGet.py" line="415"/>
<location filename="../../NUSGet.py" line="422"/>
<source>Script Failure</source>
<location filename="../../NUSGet.py" line="346"/>
<source>The script could not be opened.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<source>Failed to open the script.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="519"/>
<location filename="../../qt/ui/MainMenu.ui" line="462"/>
<source>Apply patches to IOS (Applies to WADs only)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="184"/>
<location filename="../../NUSGet.py" line="156"/>
<source>NUSGet Update Available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="185"/>
<location filename="../../NUSGet.py" line="157"/>
<source>There&apos;s a newer version of NUSGet available!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="26"/>
<location filename="../../modules/core.py" line="25"/>
<source>
Could not check for updates.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="34"/>
<location filename="../../modules/core.py" line="33"/>
<source>
There&apos;s a newer version of NUSGet available!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="36"/>
<location filename="../../modules/core.py" line="35"/>
<source>
You&apos;re running the latest release of NUSGet.</source>

View File

@ -19,92 +19,92 @@
<translation>Wii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="103"/>
<location filename="../../qt/ui/MainMenu.ui" line="82"/>
<source>vWii</source>
<translation>vWii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="134"/>
<location filename="../../qt/ui/MainMenu.ui" line="92"/>
<source>DSi</source>
<translation>DSi</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="174"/>
<location filename="../../qt/ui/MainMenu.ui" line="117"/>
<source>Title ID</source>
<translation>Tittel ID</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="181"/>
<location filename="../../qt/ui/MainMenu.ui" line="124"/>
<source>v</source>
<translation>v</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="194"/>
<location filename="../../qt/ui/MainMenu.ui" line="137"/>
<source>Version</source>
<translation>Versjon</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="201"/>
<location filename="../../qt/ui/MainMenu.ui" line="144"/>
<source>Console:</source>
<translation>Konsoll:</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="237"/>
<location filename="../../qt/ui/MainMenu.ui" line="180"/>
<source>Start Download</source>
<translation>Start Nedlasting</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="250"/>
<location filename="../../qt/ui/MainMenu.ui" line="193"/>
<source>Run Script</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="277"/>
<location filename="../../qt/ui/MainMenu.ui" line="220"/>
<source>General Settings</source>
<translation>Generelle Instillinger</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="308"/>
<location filename="../../qt/ui/MainMenu.ui" line="251"/>
<source>Pack installable archive (WAD/TAD)</source>
<translation>Pakke installerbart arkiv (WAD/TAD)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="323"/>
<location filename="../../qt/ui/MainMenu.ui" line="266"/>
<source>File Name</source>
<translation>Filnavn</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="357"/>
<location filename="../../qt/ui/MainMenu.ui" line="300"/>
<source>Keep encrypted contents</source>
<translation>Oppbevar kryptert innhold</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="393"/>
<location filename="../../qt/ui/MainMenu.ui" line="336"/>
<source>Create decrypted contents (*.app)</source>
<translation>Opprette dekryptert innold (*.app)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="432"/>
<location filename="../../qt/ui/MainMenu.ui" line="375"/>
<source>Use local files, if they exist</source>
<translation>Bruk lokale filer, hvis de finnes</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="477"/>
<location filename="../../qt/ui/MainMenu.ui" line="420"/>
<source>Use the Wii U NUS (faster, only effects Wii/vWii)</source>
<translation>Bruk Wii U NUS (raskere, påvirker bare Wii/vWii)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="575"/>
<location filename="../../qt/ui/MainMenu.ui" line="518"/>
<source>vWii Title Settings</source>
<translation>vWii Tittelinstillinger</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<location filename="../../qt/ui/MainMenu.ui" line="552"/>
<source>Re-encrypt title using the Wii Common Key</source>
<translation>Krypter tittelen nytt ved hjelp av Wii Common Key</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="666"/>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@ -128,7 +128,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="85"/>
<location filename="../../NUSGet.py" line="96"/>
<source>NUSGet v{nusget_version}
Developed by NinjaCheetah
Powered by libWiiPy {libwiipy_version}
@ -151,151 +151,146 @@ Titler merket med en hake er fri og har en billett tilgjengelig, og kan dekrypte
Titler er lastes ned til en mappe med navnet &quot;NUSGet&quot; i nedlastingsmappen din.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="264"/>
<location filename="../../NUSGet.py" line="233"/>
<source>No Output Selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="265"/>
<location filename="../../NUSGet.py" line="234"/>
<source>You have not selected any format to output the data in!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="267"/>
<location filename="../../NUSGet.py" line="236"/>
<source>Please select at least one option for how you would like the download to be saved.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="298"/>
<location filename="../../NUSGet.py" line="267"/>
<source>Invalid Title ID</source>
<translation>Ugyldig Tittel ID</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="299"/>
<location filename="../../NUSGet.py" line="268"/>
<source>The Title ID you have entered is not in a valid format!</source>
<translation>Tittel IDen du har angitt er ikke i et gyldig format!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="301"/>
<location filename="../../NUSGet.py" line="270"/>
<source>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.</source>
<translation>Tittel IDer være 16-sifrede tall og bokstav strenger. Vennligst skriv inn en korrekt formatert Tittel ID, eller velg en fra menyen til venstre.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="303"/>
<location filename="../../NUSGet.py" line="272"/>
<source>Title ID/Version Not Found</source>
<translation>Tittel ID/Versjon Ikke Funnet</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="304"/>
<location filename="../../NUSGet.py" line="273"/>
<source>No title with the provided Title ID or version could be found!</source>
<translation>Ingen tittel med oppgitt Tittel ID eller versjon ble funnet!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="306"/>
<location filename="../../NUSGet.py" line="275"/>
<source>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.</source>
<translation>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.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="308"/>
<location filename="../../NUSGet.py" line="277"/>
<source>Content Decryption Failed</source>
<translation>Dekryptering av Innhold Mislyktes</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="309"/>
<location filename="../../NUSGet.py" line="278"/>
<source>Content decryption was not successful! Decrypted contents could not be created.</source>
<translation>Dekryptering av innhold var ikke vellykket! Dekryptert innhold kunne ikke opprettes.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="312"/>
<location filename="../../NUSGet.py" line="281"/>
<source>Your TMD or Ticket may be damaged, or they may not correspond with the content being decrypted. If you have checked &quot;Use local files, if they exist&quot;, try disabling that option before trying the download again to fix potential issues with local data.</source>
<translation>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 &quot;Bruk lokale filer, hvis de finnes&quot;, kan du prøve å deaktivere dette alternativet før du prøver nedlastingen nytt for å løse eventuelle problemer med lokale data.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="315"/>
<location filename="../../NUSGet.py" line="284"/>
<source>Ticket Not Available</source>
<translation>Billett Ikke Tilgjengelig</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="316"/>
<location filename="../../NUSGet.py" line="285"/>
<source>No Ticket is Available for the Requested Title!</source>
<translation>Ingen billett er tilgjengelig for den forespurte tittelen!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="319"/>
<location filename="../../NUSGet.py" line="288"/>
<source>A ticket could not be downloaded for the requested title, but you have selected &quot;Pack installable archive&quot; or &quot;Create decrypted contents&quot;. These options are not available for titles without a ticket. Only encrypted contents have been saved.</source>
<translation>En billett kunne ikke lastes ned for den forespurte tittelen, men du har valgt &quot;Pakk installerbart arkiv&quot; eller &quot;Opprett dekryptert innhold&quot;. Disse alternativene er ikke tilgjenelige for titler uten billett. Bare kryptert innhold har blitt lagret.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="321"/>
<location filename="../../NUSGet.py" line="290"/>
<source>Unknown Error</source>
<translation>Ukjent Feil</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="322"/>
<location filename="../../NUSGet.py" line="291"/>
<source>An Unknown Error has Occurred!</source>
<translation>En ukjent feil har oppstått!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="324"/>
<location filename="../../NUSGet.py" line="293"/>
<source>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.</source>
<translation>Vennligst prøv igjen. Hvis dette problemet vedvarer, åpne et nytt issue GitHub med detaljer om hva du prøvde å gjøre da denne feilen oppstod.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="337"/>
<source>Script Download Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="338"/>
<source>Open NUS script</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="339"/>
<source>NUS Scripts (*.nus *.txt)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<location filename="../../NUSGet.py" line="386"/>
<location filename="../../NUSGet.py" line="389"/>
<location filename="../../NUSGet.py" line="397"/>
<location filename="../../NUSGet.py" line="415"/>
<location filename="../../NUSGet.py" line="422"/>
<source>Script Failure</source>
<location filename="../../NUSGet.py" line="346"/>
<source>The script could not be opened.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<source>Failed to open the script.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="519"/>
<location filename="../../qt/ui/MainMenu.ui" line="462"/>
<source>Apply patches to IOS (Applies to WADs only)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="184"/>
<location filename="../../NUSGet.py" line="156"/>
<source>NUSGet Update Available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="185"/>
<location filename="../../NUSGet.py" line="157"/>
<source>There&apos;s a newer version of NUSGet available!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="26"/>
<location filename="../../modules/core.py" line="25"/>
<source>
Could not check for updates.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="34"/>
<location filename="../../modules/core.py" line="33"/>
<source>
There&apos;s a newer version of NUSGet available!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="36"/>
<location filename="../../modules/core.py" line="35"/>
<source>
You&apos;re running the latest release of NUSGet.</source>

View File

@ -4,7 +4,7 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../../NUSGet.py" line="85"/>
<location filename="../../NUSGet.py" line="96"/>
<source>NUSGet v{nusget_version}
Developed by NinjaCheetah
Powered by libWiiPy {libwiipy_version}
@ -27,129 +27,132 @@ 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.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="184"/>
<location filename="../../NUSGet.py" line="156"/>
<source>NUSGet Update Available</source>
<translation type="unfinished">Actualizare NUSGet disponibilă</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="185"/>
<location filename="../../NUSGet.py" line="157"/>
<source>There&apos;s a newer version of NUSGet available!</source>
<translation type="unfinished">O nouă versiune NUSGet este disponibilă!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="264"/>
<location filename="../../NUSGet.py" line="233"/>
<source>No Output Selected</source>
<translation type="unfinished">Nu s-a selectat un output.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="265"/>
<location filename="../../NUSGet.py" line="234"/>
<source>You have not selected any format to output the data in!</source>
<translation type="unfinished">Nu ați selectat niciun format de ieșire.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="267"/>
<location filename="../../NUSGet.py" line="236"/>
<source>Please select at least one option for how you would like the download to be saved.</source>
<translation type="unfinished"> rugăm selectați cel puțin o opțiune pentru modul în care doriți salvați datele descărcate.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="298"/>
<location filename="../../NUSGet.py" line="267"/>
<source>Invalid Title ID</source>
<translation type="unfinished">Title ID invalid</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="299"/>
<location filename="../../NUSGet.py" line="268"/>
<source>The Title ID you have entered is not in a valid format!</source>
<translation type="unfinished">Title ID pe care l-ați introdus este invalid!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="301"/>
<location filename="../../NUSGet.py" line="270"/>
<source>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.</source>
<translation type="unfinished">Title ID-urile trebuie conțină exact 16 cifre și/sau litere. rugăm introduceți un Title ID corect, sau selectați unul din meniul din stânga.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="303"/>
<location filename="../../NUSGet.py" line="272"/>
<source>Title ID/Version Not Found</source>
<translation type="unfinished">Title ID/Versiunea nu a fost găsită</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="304"/>
<location filename="../../NUSGet.py" line="273"/>
<source>No title with the provided Title ID or version could be found!</source>
<translation type="unfinished">Niciun titlu care corespundă cu Title ID sau cu versiunea introdusă nu a fost găsit!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="306"/>
<location filename="../../NUSGet.py" line="275"/>
<source>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.</source>
<translation type="unfinished"> rugăm asigurați ați introdus un Title ID valid sau selectat din baza de date cu titluri, și versiunea introdusă există pentru titlul pe care încercați îl descărcați.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="308"/>
<location filename="../../NUSGet.py" line="277"/>
<source>Content Decryption Failed</source>
<translation type="unfinished">Decriptarea conținutului a eșuat.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="309"/>
<location filename="../../NUSGet.py" line="278"/>
<source>Content decryption was not successful! Decrypted contents could not be created.</source>
<translation type="unfinished">Decriptarea conținutului nu a reușit. Nu s-a putut crea conținutul decriptat.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="312"/>
<location filename="../../NUSGet.py" line="281"/>
<source>Your TMD or Ticket may be damaged, or they may not correspond with the content being decrypted. If you have checked &quot;Use local files, if they exist&quot;, try disabling that option before trying the download again to fix potential issues with local data.</source>
<translation type="unfinished">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 debifați această opțiune înainte de a descărca din nou pentru a rezolva potențiale probleme cu datele existente local.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="315"/>
<location filename="../../NUSGet.py" line="284"/>
<source>Ticket Not Available</source>
<translation type="unfinished">Ticket-ul nu este valabil</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="316"/>
<location filename="../../NUSGet.py" line="285"/>
<source>No Ticket is Available for the Requested Title!</source>
<translation type="unfinished">Niciun Ticket nu este valabil pentru titlul dorit.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="319"/>
<location filename="../../NUSGet.py" line="288"/>
<source>A ticket could not be downloaded for the requested title, but you have selected &quot;Pack installable archive&quot; or &quot;Create decrypted contents&quot;. These options are not available for titles without a ticket. Only encrypted contents have been saved.</source>
<translation type="unfinished">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.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="321"/>
<location filename="../../NUSGet.py" line="290"/>
<source>Unknown Error</source>
<translation type="unfinished">Eroare necunoscută</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="322"/>
<location filename="../../NUSGet.py" line="291"/>
<source>An Unknown Error has Occurred!</source>
<translation type="unfinished">S-a produs o eroare necunoscută!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="324"/>
<location filename="../../NUSGet.py" line="293"/>
<source>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.</source>
<translation type="unfinished"> rugăm încercați din nou. Dacă problema persistă, rugăm deschideți un issue pe GitHub în care explicați ce ați încercat faceți atunci când această eroare a apărut.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="337"/>
<source>Script Download Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="338"/>
<source>Open NUS script</source>
<translation type="unfinished">Deschideți script NUS</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="364"/>
<location filename="../../NUSGet.py" line="339"/>
<source>NUS Scripts (*.nus *.txt)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<location filename="../../NUSGet.py" line="386"/>
<location filename="../../NUSGet.py" line="389"/>
<location filename="../../NUSGet.py" line="397"/>
<location filename="../../NUSGet.py" line="415"/>
<location filename="../../NUSGet.py" line="422"/>
<source>Script Failure</source>
<translation type="unfinished">Eșuare Script</translation>
<location filename="../../NUSGet.py" line="346"/>
<source>The script could not be opened.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Script Failure</source>
<translation type="obsolete">Eșuare Script</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="371"/>
<source>Failed to open the script.</source>
<translation type="unfinished">Nu s-a putut deschide script-ul.</translation>
<translation type="obsolete">Nu s-a putut deschide script-ul.</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="26"/>
@ -167,97 +170,97 @@ Titlurile vor fi descărcate într-un folder numit „NUSGet” în fișierul dv
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="103"/>
<location filename="../../qt/ui/MainMenu.ui" line="82"/>
<source>vWii</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="134"/>
<location filename="../../qt/ui/MainMenu.ui" line="92"/>
<source>DSi</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="174"/>
<location filename="../../qt/ui/MainMenu.ui" line="117"/>
<source>Title ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="181"/>
<location filename="../../qt/ui/MainMenu.ui" line="124"/>
<source>v</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="194"/>
<location filename="../../qt/ui/MainMenu.ui" line="137"/>
<source>Version</source>
<translation type="unfinished">Versiune</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="201"/>
<location filename="../../qt/ui/MainMenu.ui" line="144"/>
<source>Console:</source>
<translation type="unfinished">Consolă</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="237"/>
<location filename="../../qt/ui/MainMenu.ui" line="180"/>
<source>Start Download</source>
<translation type="unfinished">Începeți descărcarea</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="250"/>
<location filename="../../qt/ui/MainMenu.ui" line="193"/>
<source>Run Script</source>
<translation type="unfinished">Rulați script</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="277"/>
<location filename="../../qt/ui/MainMenu.ui" line="220"/>
<source>General Settings</source>
<translation type="unfinished">Setări Generale</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="308"/>
<location filename="../../qt/ui/MainMenu.ui" line="251"/>
<source>Pack installable archive (WAD/TAD)</source>
<translation type="unfinished">Împachetați arhiva instalabilă (WAD/TAD)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="323"/>
<location filename="../../qt/ui/MainMenu.ui" line="266"/>
<source>File Name</source>
<translation type="unfinished">Nume fișier</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="357"/>
<location filename="../../qt/ui/MainMenu.ui" line="300"/>
<source>Keep encrypted contents</source>
<translation type="unfinished">Păstrați conținuturile encriptate</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="393"/>
<location filename="../../qt/ui/MainMenu.ui" line="336"/>
<source>Create decrypted contents (*.app)</source>
<translation type="unfinished">Creați conținuturi decriptate (*.app)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="432"/>
<location filename="../../qt/ui/MainMenu.ui" line="375"/>
<source>Use local files, if they exist</source>
<translation type="unfinished">Folosiți fișiere locale, dacă există</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="477"/>
<location filename="../../qt/ui/MainMenu.ui" line="420"/>
<source>Use the Wii U NUS (faster, only effects Wii/vWii)</source>
<translation type="unfinished">Folosiți Wii U NUS (mai rapid, doar pentru Wii/vWii)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="519"/>
<location filename="../../qt/ui/MainMenu.ui" line="462"/>
<source>Apply patches to IOS (Applies to WADs only)</source>
<translation type="unfinished">Aplicați patch-uri pentru IOS (se aplică doar pe WAD-uri)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="575"/>
<location filename="../../qt/ui/MainMenu.ui" line="518"/>
<source>vWii Title Settings</source>
<translation type="unfinished">vWII Setări titlu</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<location filename="../../qt/ui/MainMenu.ui" line="552"/>
<source>Re-encrypt title using the Wii Common Key</source>
<translation type="unfinished">Re-encriptați titlul folosind cheia comună Wii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="666"/>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@ -269,21 +272,21 @@ li.checked::marker { content: &quot;\2612&quot;; }
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="26"/>
<location filename="../../modules/core.py" line="25"/>
<source>
Could not check for updates.</source>
<translation type="unfinished">Nu s-a putut verifica dacă există actualizări.</translation>
</message>
<message>
<location filename="../../modules/core.py" line="34"/>
<location filename="../../modules/core.py" line="33"/>
<source>
There&apos;s a newer version of NUSGet available!</source>
<translation type="unfinished">O nouă versiune de NUSGet este valabilă!</translation>
</message>
<message>
<location filename="../../modules/core.py" line="36"/>
<location filename="../../modules/core.py" line="35"/>
<source>
You&apos;re running the latest release of NUSGet.</source>