1
0
Fork 0
mirror of synced 2024-06-17 10:04:43 +12:00

Added some settings, some nice style, confirm start of app

This commit is contained in:
Dummerle 2021-03-27 17:51:38 +01:00
parent 561b4fa6f2
commit fabc2928db
9 changed files with 741 additions and 2205 deletions

View file

@ -59,13 +59,14 @@ class GameSettings(QWidget):
self.select_proton.addItems(["Don't use Proton"] + self.possible_proton_wrappers)
self.select_proton.currentIndexChanged.connect(self.change_proton)
self.select_proton_widget = SettingsWidget(self.tr("Proton Wrapper"), self.select_proton)
self.layout.addWidget(self.select_proton_widget)
self.linux_settings.layout.addWidget(self.select_proton_widget)
self.proton_prefix = PathEdit("x", QFileDialog.DirectoryOnly)
self.proton_prefix_accept_button = QPushButton(self.tr("Save"))
self.proton_prefix_accept_button.clicked.connect(self.update_prefix)
self.proton_prefix_widget = SettingsWidget(self.tr("Proton prefix"), self.proton_prefix,
self.proton_prefix_accept_button)
self.layout.addWidget(self.proton_prefix_widget)
self.linux_settings.layout.addWidget(self.proton_prefix_widget)
# startparams, skip_update_check

View file

@ -1,7 +1,7 @@
from logging import getLogger
from PyQt5.QtCore import pyqtSignal, QProcess
from PyQt5.QtWidgets import QGroupBox
from PyQt5.QtCore import pyqtSignal, QProcess, QSettings
from PyQt5.QtWidgets import QGroupBox, QMessageBox
from Rare.utils import LegendaryApi
from custom_legendary.core import LegendaryCore
@ -30,6 +30,11 @@ class BaseInstalledWidget(QGroupBox):
# self.setStyleSheet("border-radius: 5px")
def launch(self, offline=False, skip_version_check=False):
if QSettings().value("confirm_start", False, bool):
if not QMessageBox.question(self, "Launch", self.tr("Do you want to launch {}").format(self.game.app_title),
QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
logger.info("Cancel Startup")
return 1
logger.info("Launching " + self.igame.title)
self.proc, params = LegendaryApi.launch_game(self.core, self.igame.app_name, offline,
skip_version_check=skip_version_check)
@ -43,6 +48,6 @@ class BaseInstalledWidget(QGroupBox):
return 0
def finished(self, exit_code):
logger.info("Game exited with exit code: ", exit_code)
logger.info("Game exited with exit code: " + str(exit_code))
self.finish_signal.emit(self.game.app_name)
self.game_running = False

View file

@ -1,29 +1,31 @@
from logging import getLogger
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QWidget, QCheckBox, QVBoxLayout, QWidgetAction, QMenu, QToolButton, QHBoxLayout, QLabel
from PyQt5.QtWidgets import QWidget, QCheckBox, QVBoxLayout, QWidgetAction, QMenu, QToolButton, QHBoxLayout, QGroupBox
from custom_legendary.core import LegendaryCore
logger = getLogger("DXVK Settings")
class DxvkWidget(QWidget):
dxvk_settings = {"fps": (False, "Fps"),
"gpuload": (False, "GPU usage"),
"memory": (False, "Used Memory"),
"devinfo": (False, "Device info"),
"version": (False, "DXVK version"),
"api": (False, "D3D Level of application")
}
class DxvkWidget(QGroupBox):
def __init__(self, core: LegendaryCore):
super(DxvkWidget, self).__init__()
self.core = core
self.dxvk_settings = {
"fps": (False, "Fps"),
"gpuload": (False, self.tr("GPU usage")),
"memory": (False, self.tr("Used Memory")),
"devinfo": (False, self.tr("Device info")),
"version": (False, self.tr("DXVK version")),
"api": (False, self.tr("D3D Level of application")),
"frametime": (False, self.tr("Frame time graph"))
}
self.name = "default"
self.layout = QVBoxLayout()
self.child_layout = QHBoxLayout()
self.title = QLabel("dxvk settings")
self.setTitle(self.tr("dxvk settings"))
self.show_dxvk = QCheckBox("Show Dxvk HUD")
self.more_settings = QToolButton()
@ -46,7 +48,6 @@ class DxvkWidget(QWidget):
self.show_dxvk.stateChanged.connect(self.update_dxvk_active)
self.show_dxvk.setChecked(not dxvk_hud == "")
self.layout.addWidget(self.title)
self.child_layout.addWidget(self.show_dxvk)
self.child_layout.addWidget(self.more_settings)
@ -57,27 +58,28 @@ class DxvkWidget(QWidget):
def update_settings(self, app_name):
self.name = app_name
dxvk_hud = self.core.lgd.config.get(f"{self.name}.env", "DXVK_HUD", fallback="")
self.more_settings.setDisabled(not dxvk_hud == "")
if dxvk_hud:
self.more_settings.setDisabled(False)
for s in dxvk_hud.split(","):
y = list(self.dxvk_settings[s])
y[0] = True
self.dxvk_settings[s] = tuple(y)
else:
self.show_dxvk.setChecked(False)
self.more_settings.setDisabled(True)
def update_dxvk_active(self):
if self.show_dxvk.isChecked():
if not f"{self.name}.env" in self.core.lgd.config.sections():
self.core.lgd.config[f"{self.name}.env"] = {}
self.more_settings.setDisabled(False)
self.more_settings_widget.settings = {"fps": (True, "Fps"),
"gpuload": (True, "GPU usage"),
"memory": (False, "Used Memory"),
"devinfo": (False, "Device info"),
"version": (False, "DXVK version"),
"api": (False, "D3D Level of application")
}
for i in self.more_settings_widget.settings:
if i in ["fps", "gpuload"]:
lst = list(self.more_settings_widget.settings[i])
lst[0] = True
self.more_settings_widget.settings[i] = tuple(lst)
self.core.lgd.config[f"{self.name}.env"]["DXVK_HUD"] = "fps,gpuload"
for w in self.more_settings_widget.widgets:
if w.tag == "fps" or w.tag == "gpuload":

View file

@ -1,8 +1,8 @@
from logging import getLogger
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QFileDialog, QLineEdit
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QFileDialog, QLineEdit, QGroupBox
from Rare.Components.Tabs.Settings.DXVK.Dxvk import DxvkWidget
from Rare.Components.Tabs.Settings.Dxvk import DxvkWidget
from Rare.Components.Tabs.Settings.SettingsWidget import SettingsWidget
from Rare.utils.QtExtensions import PathEdit
from custom_legendary.core import LegendaryCore
@ -10,15 +10,14 @@ from custom_legendary.core import LegendaryCore
logger = getLogger("LinuxSettings")
class LinuxSettings(QWidget):
class LinuxSettings(QGroupBox):
def __init__(self, core: LegendaryCore, name="default"):
super(LinuxSettings, self).__init__()
self.layout = QVBoxLayout()
self.name = name
self.core = core
self.title = QLabel("<h2>Linux settings</h2>")
self.layout.addWidget(self.title)
self.setTitle(self.tr("Linux settings"))
self.setObjectName("group")
# Wineprefix
self.select_path = PathEdit(self.core.lgd.config.get(self.name, "wine_prefix", fallback=""),
type_of_file=QFileDialog.DirectoryOnly,

View file

@ -3,7 +3,7 @@ import shutil
from logging import getLogger
from PyQt5.QtCore import QSettings
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QFileDialog, QComboBox, QPushButton
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QFileDialog, QComboBox, QPushButton, QCheckBox
from Rare.Components.Tabs.Settings.SettingsWidget import SettingsWidget
from Rare.utils.QtExtensions import PathEdit
@ -50,10 +50,19 @@ class RareSettings(QWidget):
self.select_lang.currentIndexChanged.connect(self.update_lang)
self.layout.addWidget(self.lang_widget)
self.game_start_accept = QCheckBox(self.tr("Confirm launch of game"))
self.game_start_accept.stateChanged.connect(self.update_start_confirm)
self.game_start_accept_widget = SettingsWidget(self.tr("Confirm launch of game"), self.game_start_accept)
self.layout.addWidget(self.game_start_accept_widget)
self.layout.addStretch()
self.setLayout(self.layout)
def update_start_confirm(self):
settings = QSettings()
settings.setValue("confirm_start", self.game_start_accept.isChecked())
def save_path(self):
self.save_path_button.setDisabled(True)
self.update_path()

View file

@ -30,6 +30,10 @@ QTabBar::tab:hover#main_tab_bar {
}
QGroupBox#group{
font-size: 15px;
}
QTabBar::tab:disabled {
color: transparent;
background-color: transparent;

File diff suppressed because it is too large Load diff

690
Rare/languages/de.ts Normal file
View file

@ -0,0 +1,690 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="de_DE" sourcelanguage="en">
<context>
<name>About</name>
<message>
<location filename="../Components/Tabs/Settings/About.py" line="17"/>
<source>Developer:</source>
<translation>Entwickler:</translation>
</message>
<message>
<location filename="../Components/Tabs/Settings/About.py" line="22"/>
<source>Legendary developer:</source>
<translation>Legendary Entwickler:</translation>
</message>
<message>
<location filename="../Components/Tabs/Settings/About.py" line="28"/>
<source>This is a beta version, so you can get bugs. If you get a bug, please report it by creating a Issue on &lt;a href=&apos;https://github.com/Dummerle/Rare/issues&apos;&gt;Github&lt;/a&gt;. You can also contact me on Discord (Dummerle#7419). If you have a feature request, please contact me</source>
<translation>Dies ist eine beta version, also können Bugs entstehen. Wenn du einen Bug bemerkst, kontaktiere mich, indem du einen Issue auf &lt;a href=&apos;https://github.com/Dummerle/Rare/issues&apos;&gt;Github&lt;/a&gt; erstellst oder mir auf Discord eine Nachricht schickst. Ebenso bei einem Wunsch für Features</translation>
</message>
</context>
<context>
<name>BrowserLogin</name>
<message>
<location filename="../Components/Dialogs/Login/BrowserLogin.py" line="24"/>
<source>Opens a browser. You login and copy the json code in the field below. Click &lt;a href=&apos;{}&apos;&gt;here&lt;/a&gt; to open Browser</source>
<translation>Öffnet den Browser. Einloggen und den Text in das untere Feld kopieren. Drücke Click &lt;a href=&apos;{}&apos;&gt;hier&lt;/a&gt; um den Browser zu öffnen</translation>
</message>
<message>
<location filename="../Components/Dialogs/Login/BrowserLogin.py" line="32"/>
<source>Insert SID here</source>
<translation>Den Text hier einfügen</translation>
</message>
<message>
<location filename="../Components/Dialogs/Login/BrowserLogin.py" line="37"/>
<source>Login</source>
<translation>Einloggen</translation>
</message>
<message>
<location filename="../Components/Dialogs/Login/BrowserLogin.py" line="44"/>
<source>Loading...</source>
<translation>Laden...</translation>
</message>
</context>
<context>
<name>DownloadTab</name>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="161"/>
<source>No active Download</source>
<translation>Kein aktiver Download</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="154"/>
<source>Stop Download</source>
<translation>Download anhalten</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="173"/>
<source>No updates available</source>
<translation>Keine Updates verfügbar</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="220"/>
<source>Error preparing download</source>
<translation>Fehler beim Vorbereiten des Downloads</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="225"/>
<source>Download size is 0. Game already exists</source>
<translation>Die Größe des Downloads ist 0. Spiel existiert bereits</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="290"/>
<source>Installation finished</source>
<translation>Installation abgeschlossen</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="314"/>
<source>Installing Game: No active download</source>
<translation>Installierendes Spiel: Kein aktiver Download</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="322"/>
<source>Download speed</source>
<translation>Geschwindigkeit</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="323"/>
<source>Cache used</source>
<translation>Benutzter Cache</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="324"/>
<source>Downloaded</source>
<translation>Runtergeladen</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="325"/>
<source>Time left: </source>
<translation>Zeit übrig: </translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="291"/>
<source>Finished Download of game {}</source>
<translation>Downlaod von {} abgeschlossen</translation>
</message>
</context>
<context>
<name>GameActions</name>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="182"/>
<source>Uninstall game</source>
<translation>Spiel deinstallieren</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="184"/>
<source>Uninstall</source>
<translation>Deinstallieren</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="190"/>
<source>Verify Game</source>
<translation>Spieldateien überprüfen</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="195"/>
<source>Verify</source>
<translation>Überprüfen</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="204"/>
<source>Repair Game</source>
<translation>Spiel reparieren</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="206"/>
<source>Repair</source>
<translation>Reparieren</translation>
</message>
</context>
<context>
<name>GameInfo</name>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="106"/>
<source>Repair file does not exist or game does not need a repair. Please verify game first</source>
<translation>Reparationsdatei existiert nicht oder das Spiel braucht keine Reperatur. Bitte das spiel zuerst überprüfen</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="131"/>
<source>Verification failed, {} file(s) corrupted, {} file(s) are missing. Do you want to repair them?</source>
<translation>Überprüfung fehlgeschlagen, {} Datei(en) fehlerhaft, {} Datei(en) fehlen. Willst du das Spiel reparieren?</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="160"/>
<source>Developer: </source>
<translation>Entwickler: </translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="161"/>
<source>Install size: </source>
<translation>Größe: </translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="163"/>
<source>Install path: </source>
<translation>Installationsordner: </translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="98"/>
<source>Are you sure to uninstall {}</source>
<translation>Möchtest du {} wirklich deinstallieren</translation>
</message>
</context>
<context>
<name>GameList</name>
<message>
<location filename="../Components/Tabs/Games/GameList.py" line="140"/>
<source>Launch</source>
<translation>Starten</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameList.py" line="145"/>
<source>Game running</source>
<translation>Spiel läuft</translation>
</message>
</context>
<context>
<name>GameListHeadBar</name>
<message>
<location filename="../Components/Tabs/Games/GamesTab.py" line="74"/>
<source>Installed only</source>
<translation>Nur Installierte</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GamesTab.py" line="81"/>
<source>Import Game</source>
<translation>Spiel importieren</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GamesTab.py" line="93"/>
<source>Search Game</source>
<translation>Spiel suchen</translation>
</message>
</context>
<context>
<name>GameSettings</name>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameSettings.py" line="27"/>
<source>Launch Game offline</source>
<translation>Spiel offline starten</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameSettings.py" line="32"/>
<source>Skip update check before launching</source>
<translation>Überprüfung nach Updates beim Start überspringen</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameSettings.py" line="64"/>
<source>Save</source>
<translation>Speichern</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameSettings.py" line="41"/>
<source>Wrapper (e.g. optirun)</source>
<translation>Wrapper (z.B. optirun)</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameSettings.py" line="61"/>
<source>Proton Wrapper</source>
<translation>Proton Version</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameSettings.py" line="66"/>
<source>Proton prefix</source>
<translation>Protonprefix</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameSettings.py" line="172"/>
<source>No permission to create folder</source>
<translation>Keine Berechtigung den Ordner zu erstellen</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameSettings.py" line="217"/>
<source>Please select path for proton prefix</source>
<translation>Bitte wähle den Pfad zum Protonprefix</translation>
</message>
</context>
<context>
<name>GameWidgetInstalled</name>
<message>
<location filename="../Components/Tabs/Games/GameWidgets/InstalledIconWidget.py" line="36"/>
<source>Update available</source>
<translation>Update verfügbar</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameWidgets/InstalledIconWidget.py" line="86"/>
<source>Start game without version check</source>
<translation>Ohne Updateüberprüfung starten</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameWidgets/InstalledIconWidget.py" line="94"/>
<source>Game running</source>
<translation>Spiel läuft</translation>
</message>
</context>
<context>
<name>IconWidgetUninstalled</name>
<message>
<location filename="../Components/Tabs/Games/GameWidgets/UninstalledIconWidget.py" line="43"/>
<source>Install Game</source>
<translation>Spiel installieren</translation>
</message>
</context>
<context>
<name>ImportWidget</name>
<message>
<location filename="../Components/Dialogs/Login/ImportWidget.py" line="99"/>
<source>Import</source>
<translation>Importieren</translation>
</message>
<message>
<location filename="../Components/Dialogs/Login/ImportWidget.py" line="39"/>
<source>Could not find EGL program data</source>
<translation>Konnte nicht die EGL Dateien finden</translation>
</message>
<message>
<location filename="../Components/Dialogs/Login/ImportWidget.py" line="42"/>
<source>Found EGL program Data. Do you want to import them?</source>
<translation>EGL Dateien gefunden. Willst du sie importieren?</translation>
</message>
<message>
<location filename="../Components/Dialogs/Login/ImportWidget.py" line="51"/>
<source>Could not find any Epic Games login data</source>
<translation>Konnte keine Logindaten finden</translation>
</message>
<message>
<location filename="../Components/Dialogs/Login/ImportWidget.py" line="86"/>
<source>Loading...</source>
<translation>Laden...</translation>
</message>
<message>
<location filename="../Components/Dialogs/Login/ImportWidget.py" line="98"/>
<source>Error: No valid session found</source>
<translation>Keine valide Session gefunden</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="23"/>
<source>Back</source>
<translation>Zurück</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="37"/>
<source>Select path to game</source>
<translation>Wähle den Pfad zum Spiel</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="43"/>
<source>Import Game</source>
<translation>Spiel importieren</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="51"/>
<source>Import all games from Epic Games Launcher</source>
<translation>Alle Spiele aus dem Epic Games Launcher importieren</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="116"/>
<source>Successfully imported {} Games</source>
<translation>{} Spiele erfolgreich importiert</translation>
</message>
</context>
<context>
<name>InfoTabs</name>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="26"/>
<source>Back</source>
<translation>Zurück</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="30"/>
<source>Game Info</source>
<translation>Spielinfo</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="32"/>
<source>Settings</source>
<translation>Einstellungen</translation>
</message>
</context>
<context>
<name>InstallDialog</name>
<message>
<location filename="../Components/Dialogs/InstallDialog.py" line="22"/>
<source>Max workers (0: Default)</source>
<translation>Maximale Anzahl Downloadprozessen(Standard: 0)</translation>
</message>
</context>
<context>
<name>InstallInfoDialog</name>
<message>
<location filename="../Components/Dialogs/InstallDialog.py" line="55"/>
<source>Download size: {}GB
Install size: {}GB</source>
<translation>Downloadgröße: {}GB
Installationsgröße: {} GB</translation>
</message>
<message>
<location filename="../Components/Dialogs/InstallDialog.py" line="61"/>
<source>Install</source>
<translation>Installieren</translation>
</message>
<message>
<location filename="../Components/Dialogs/InstallDialog.py" line="63"/>
<source>Cancel</source>
<translation>Abbruch</translation>
</message>
</context>
<context>
<name>InstalledListWidget</name>
<message>
<location filename="../Components/Tabs/Games/GameWidgets/InstalledListWidget.py" line="41"/>
<source>Launch</source>
<translation>Starten</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameWidgets/InstalledListWidget.py" line="52"/>
<source>Developer: </source>
<translation>Entwickler: </translation>
</message>
</context>
<context>
<name>LaunchDialog</name>
<message>
<location filename="../Components/Launch/LaunchDialog.py" line="60"/>
<source>Launching Rare</source>
<translation>Starte Rare</translation>
</message>
<message>
<location filename="../Components/Launch/LaunchDialog.py" line="62"/>
<source>Logging in</source>
<translation>Einloggen</translation>
</message>
<message>
<location filename="../Components/Launch/LaunchDialog.py" line="80"/>
<source>Downloading Images</source>
<translation>Bilder runterladen</translation>
</message>
<message>
<location filename="../Components/Launch/LaunchDialog.py" line="91"/>
<source>Starting...</source>
<translation>Starten...</translation>
</message>
</context>
<context>
<name>LegendarySettings</name>
<message>
<location filename="../Components/Tabs/Settings/Legendary.py" line="18"/>
<source>Legendary settings</source>
<translation>Legendary Einstellungen</translation>
</message>
<message>
<location filename="../Components/Tabs/Settings/Legendary.py" line="27"/>
<source>Default installation directory</source>
<translation>Standardordner für Installationen</translation>
</message>
<message>
<location filename="../Components/Tabs/Settings/Legendary.py" line="36"/>
<source>Max workers for Download (Less: slower download)(0: Default)</source>
<translation>Maximale Anzahl Downloadprozesse (Weniger: langsamer)(Standard: 0)</translation>
</message>
</context>
<context>
<name>LinuxSettings</name>
<message>
<location filename="../Components/Tabs/Settings/Linux.py" line="29"/>
<source>Default Wine Prefix</source>
<translation>Standard Wineprefix</translation>
</message>
<message>
<location filename="../Components/Tabs/Settings/Linux.py" line="37"/>
<source>Default Wine executable</source>
<translation>Standard Wine</translation>
</message>
</context>
<context>
<name>ListWidgetUninstalled</name>
<message>
<location filename="../Components/Tabs/Games/GameWidgets/UninstalledListWidget.py" line="29"/>
<source>Install</source>
<translation>Installieren</translation>
</message>
</context>
<context>
<name>LoginDialog</name>
<message>
<location filename="../Components/Dialogs/Login/LoginDialog.py" line="30"/>
<source>Select one option to Login</source>
<translation>Wähle eine Option zum Einloggen</translation>
</message>
<message>
<location filename="../Components/Dialogs/Login/LoginDialog.py" line="33"/>
<source>Use Browser</source>
<translation>Über den Browser</translation>
</message>
<message>
<location filename="../Components/Dialogs/Login/LoginDialog.py" line="33"/>
<source>This opens your default browser. Login and copy the text</source>
<translation>Dies öffnet den Browser, Einloggen und den Text kopieren</translation>
</message>
</context>
<context>
<name>MiniWidget</name>
<message>
<location filename="../Components/Tabs/Account/AccountWidget.py" line="20"/>
<source>Logged in as </source>
<translation>Eingeloggt als </translation>
</message>
<message>
<location filename="../Components/Tabs/Account/AccountWidget.py" line="22"/>
<source>Account settings</source>
<translation>Accounteinstellungen</translation>
</message>
<message>
<location filename="../Components/Tabs/Account/AccountWidget.py" line="26"/>
<source>Logout</source>
<translation>Ausloggen</translation>
</message>
<message>
<location filename="../Components/Tabs/Account/AccountWidget.py" line="32"/>
<source>Do you really want to logout</source>
<translation>Willst du dich wirklich abmelden</translation>
</message>
</context>
<context>
<name>PathEdit</name>
<message>
<location filename="../utils/QtExtensions.py" line="133"/>
<source>Select Path</source>
<translation>Wähle den Ordner</translation>
</message>
<message>
<location filename="../utils/QtExtensions.py" line="146"/>
<source>Choose Path</source>
<translation>Wähle den Ordner</translation>
</message>
</context>
<context>
<name>PathInputDialog</name>
<message>
<location filename="../Components/Dialogs/PathInputDialog.py" line="24"/>
<source>Cancel</source>
<translation>Abbruch</translation>
</message>
</context>
<context>
<name>RareSettings</name>
<message>
<location filename="../Components/Tabs/Settings/Rare.py" line="19"/>
<source>Rare settings</source>
<translation>Rare Einstellungen</translation>
</message>
<message>
<location filename="../Components/Tabs/Settings/Rare.py" line="33"/>
<source>Save</source>
<translation>Speichern</translation>
</message>
<message>
<location filename="../Components/Tabs/Settings/Rare.py" line="35"/>
<source>Image Directory</source>
<translation>Ordner für Bilder</translation>
</message>
<message>
<location filename="../Components/Tabs/Settings/Rare.py" line="49"/>
<source>Language</source>
<translation>Sprache</translation>
</message>
<message>
<location filename="../Components/Tabs/Settings/Rare.py" line="68"/>
<source>Restart Application to activate changes</source>
<translation>Starte die App neu um die Änderungen zu aktivieren</translation>
</message>
</context>
<context>
<name>SyncSaves</name>
<message>
<location filename="../Components/Tabs/CloudSaves/CloudSaves.py" line="65"/>
<source>Cloud Saves</source>
<translation>Cloud Speicherstände</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/CloudSaves.py" line="54"/>
<source>Found Saves for folowing Games</source>
<translation>Spielstände für folgende Spiele gefunden</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/CloudSaves.py" line="65"/>
<source>Your games does not support Cloud Saves</source>
<translation>Deine Spiele unterstützen keine Online Speicherstände</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/CloudSaves.py" line="70"/>
<source>Sync all games</source>
<translation>Alle Spiele synchronisieren</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/CloudSaves.py" line="110"/>
<source>Found no savepath</source>
<translation>Kein Speicherort gefunden</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/CloudSaves.py" line="110"/>
<source>No save path was found. Please select path or skip</source>
<translation>Kein Speicherort wurde gefunden. Wähle einen Ordner oder überspringe</translation>
</message>
</context>
<context>
<name>SyncWidget</name>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="60"/>
<source>Path not found</source>
<translation>Ordner nicht gefunden</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="76"/>
<source>Local Save date: </source>
<translation>Lokales Speicherdatum: </translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="79"/>
<source>No Local Save files</source>
<translation>Keine Lokalen Dateien</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="81"/>
<source>Cloud save date: </source>
<translation>Online Speicherdatum: </translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="83"/>
<source>No Cloud saves</source>
<translation>Keine Online Speicherstände</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="87"/>
<source>Game is up to date</source>
<translation>Spiel ist aktuell</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="88"/>
<source>Upload anyway</source>
<translation>Trotzdem hochladen</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="89"/>
<source>Download anyway</source>
<translation>Trotzdem herunterladen</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="91"/>
<source>Cloud save is newer</source>
<translation>Online Speicherstand ist aktueller</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="92"/>
<source>Download Cloud saves</source>
<translation>Online Speicherstand herunterladen</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="96"/>
<source>Upload Saves</source>
<translation>Spielstände hochladen</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="107"/>
<source>Local save is newer</source>
<translation>Lokaler Speicher ist aktueller</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="108"/>
<source>Upload saves</source>
<translation>Spielstände hochladen</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="112"/>
<source>Download saves</source>
<translation>Spielstand herunterladen</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="134"/>
<source>Change path</source>
<translation>Pfad ändern</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="159"/>
<source>Uploading...</source>
<translation>Hochladen...</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="167"/>
<source>Upload finished</source>
<translation>Hochladen abgeschlossen</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="177"/>
<source>Downloading...</source>
<translation>Runterladen...</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="183"/>
<source>Download finished</source>
<translation>Download abgeschlossen</translation>
</message>
</context>
<context>
<name>TabWidget</name>
<message>
<location filename="../Components/TabWidget.py" line="23"/>
<source>Games</source>
<translation>Spiele</translation>
</message>
</context>
<context>
<name>UpdateWidget</name>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="352"/>
<source>Update Game</source>
<translation>Spiel updaten</translation>
</message>
</context>
</TS>