Compare commits
3 Commits
797de29134
...
34dff96e9a
Author | SHA1 | Date | |
---|---|---|---|
34dff96e9a
|
|||
8ff0daafa4
|
|||
caed021c48
|
@@ -15,7 +15,7 @@
|
||||
- [X] Добавить метаданные для тем (скриншоты, описание, домашняя страница и автор)
|
||||
- [ ] Продумать систему вкладок вместо текущей
|
||||
- [ ] [Добавить сессию Gamescope, аналогичную той, что используется в SteamOS](https://git.linux-gaming.ru/Boria138/gamescope-session-portprotonqt)
|
||||
- [ ] Разобраться почему теряется часть стилей в Gamescope
|
||||
- [X] Разобраться почему теряется часть стилей в Gamescope
|
||||
- [ ] Разработать адаптивный дизайн (за эталон берётся Steam Deck с разрешением 1280×800)
|
||||
- [ ] Переделать скриншоты для соответствия [гайдлайнам Flathub](https://docs.flathub.org/docs/for-app-authors/metainfo-guidelines/quality-guidelines#screenshots)
|
||||
- [X] Получать описания и названия игр из базы данных Steam
|
||||
@@ -39,12 +39,11 @@
|
||||
- [X] Добавить в карточки данные с AreWeAntiCheatYet
|
||||
- [X] Продублировать бейджи с карточки на страницу с деталями игры
|
||||
- [X] Добавить парсинг ярлыков из Steam
|
||||
- [X] Добавить парсинг ярлыков из EGS (скрыто для переработки)
|
||||
- [X] Добавить парсинг ярлыков из EGS
|
||||
- [ ] Избавиться от бинарника legendary
|
||||
- [X] Добавить запуск игр из EGS
|
||||
- [ ] Добавить скачивание игр из EGS
|
||||
- [ ] Добавить поддержку запуска сторонних игр из EGS
|
||||
- [ ] Добавить поддержку запуска игр с EOS
|
||||
- [ ] Добавить авторизацию в EGS через WebView вместо ручного ввода
|
||||
- [X] Получать описания для игр из EGS через их [API](https://store-content.ak.epicgames.com/api)
|
||||
- [X] Получать slug через GraphQL [запрос](https://launcher.store.epicgames.com/graphql)
|
||||
@@ -58,6 +57,7 @@
|
||||
- [X] Добавить систему избранного для карточек
|
||||
- [X] Заменить все `print` на `logging`
|
||||
- [ ] Привести все логи к единому языку
|
||||
- [ ] Уменьшить количество строк для перевода
|
||||
- [X] Стилизовать все элементы без стилей (QMessageBox, QSlider, QDialog)
|
||||
- [X] Убрать жёсткую привязку путей к стрелочкам QComboBox в `styles.py`
|
||||
- [X] Исправить частичное применение тем на лету
|
||||
|
@@ -14,3 +14,5 @@ MIME-Version:
|
||||
Content-Type:
|
||||
Content-Transfer-Encoding:
|
||||
Generated-By:
|
||||
start.sh
|
||||
EGS
|
||||
|
@@ -20,9 +20,9 @@ Current translation status:
|
||||
|
||||
| Locale | Progress | Translated |
|
||||
| :----- | -------: | ---------: |
|
||||
| [de_DE](./de_DE/LC_MESSAGES/messages.po) | 0% | 0 of 161 |
|
||||
| [es_ES](./es_ES/LC_MESSAGES/messages.po) | 0% | 0 of 161 |
|
||||
| [ru_RU](./ru_RU/LC_MESSAGES/messages.po) | 100% | 161 of 161 |
|
||||
| [de_DE](./de_DE/LC_MESSAGES/messages.po) | 0% | 0 of 194 |
|
||||
| [es_ES](./es_ES/LC_MESSAGES/messages.po) | 0% | 0 of 194 |
|
||||
| [ru_RU](./ru_RU/LC_MESSAGES/messages.po) | 100% | 194 of 194 |
|
||||
|
||||
---
|
||||
|
||||
|
@@ -20,9 +20,9 @@
|
||||
|
||||
| Локаль | Прогресс | Переведено |
|
||||
| :----- | -------: | ---------: |
|
||||
| [de_DE](./de_DE/LC_MESSAGES/messages.po) | 0% | 0 из 161 |
|
||||
| [es_ES](./es_ES/LC_MESSAGES/messages.po) | 0% | 0 из 161 |
|
||||
| [ru_RU](./ru_RU/LC_MESSAGES/messages.po) | 100% | 161 из 161 |
|
||||
| [de_DE](./de_DE/LC_MESSAGES/messages.po) | 0% | 0 из 194 |
|
||||
| [es_ES](./es_ES/LC_MESSAGES/messages.po) | 0% | 0 из 194 |
|
||||
| [ru_RU](./ru_RU/LC_MESSAGES/messages.po) | 100% | 194 из 194 |
|
||||
|
||||
---
|
||||
|
||||
|
@@ -12,7 +12,7 @@ from PySide6.QtCore import QUrl, QPoint, QObject, Signal, Qt
|
||||
from PySide6.QtGui import QDesktopServices
|
||||
from portprotonqt.config_utils import parse_desktop_entry, read_favorites, save_favorites
|
||||
from portprotonqt.localization import _
|
||||
from portprotonqt.steam_api import is_game_in_steam, add_to_steam, remove_from_steam
|
||||
from portprotonqt.steam_api import is_game_in_steam, add_to_steam, remove_from_steam, get_steam_home, get_last_steam_user, convert_steam_id
|
||||
from portprotonqt.dialogs import AddGameDialog
|
||||
from portprotonqt.egs_api import add_egs_to_steam, get_egs_executable
|
||||
import vdf
|
||||
@@ -23,6 +23,7 @@ class ContextMenuSignals(QObject):
|
||||
"""Signals for thread-safe UI updates from worker threads."""
|
||||
show_status_message = Signal(str, int)
|
||||
show_warning_dialog = Signal(str, str)
|
||||
show_info_dialog = Signal(str, str)
|
||||
|
||||
class ContextMenuManager:
|
||||
"""Manages context menu actions for game management in PortProtonQt."""
|
||||
@@ -65,12 +66,21 @@ class ContextMenuManager:
|
||||
self._show_warning_dialog,
|
||||
Qt.ConnectionType.QueuedConnection
|
||||
)
|
||||
self.signals.show_info_dialog.connect(
|
||||
self._show_info_dialog,
|
||||
Qt.ConnectionType.QueuedConnection
|
||||
)
|
||||
|
||||
def _show_warning_dialog(self, title: str, message: str):
|
||||
"""Show a warning dialog in the main thread."""
|
||||
logger.debug("Showing warning dialog: %s - %s", title, message)
|
||||
QMessageBox.warning(self.parent, title, message)
|
||||
|
||||
def _show_info_dialog(self, title: str, message: str):
|
||||
"""Show an info dialog in the main thread."""
|
||||
logger.debug("Showing info dialog: %s - %s", title, message)
|
||||
QMessageBox.information(self.parent, title, message)
|
||||
|
||||
def _is_egs_game_installed(self, app_name: str) -> bool:
|
||||
"""
|
||||
Check if an EGS game is installed by reading installed.json.
|
||||
@@ -123,10 +133,6 @@ class ContextMenuManager:
|
||||
)
|
||||
# Show other actions only if the game is installed
|
||||
if self._is_egs_game_installed(game_card.appid):
|
||||
uninstall_action = menu.addAction(_("Uninstall Game"))
|
||||
uninstall_action.triggered.connect(
|
||||
lambda: self.uninstall_egs_game(game_card.name, game_card.appid)
|
||||
)
|
||||
is_in_steam = is_game_in_steam(game_card.name)
|
||||
if is_in_steam:
|
||||
remove_steam_action = menu.addAction(_("Remove from Steam"))
|
||||
@@ -227,23 +233,22 @@ class ContextMenuManager:
|
||||
return
|
||||
|
||||
if not os.path.exists(self.legendary_path):
|
||||
self._show_warning_dialog(_("Error"), _("Legendary executable not found at {0}").format(self.legendary_path))
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"), _("Legendary executable not found at {0}").format(self.legendary_path)
|
||||
)
|
||||
return
|
||||
|
||||
def on_add_to_steam_result(result: tuple[bool, str]):
|
||||
success, message = result
|
||||
if success:
|
||||
self.signals.show_status_message.emit(
|
||||
_("The game was added successfully. Please restart Steam for changes to take effect."), 5000
|
||||
self.signals.show_info_dialog.emit(
|
||||
_("Success"),
|
||||
_("'{0}' was added to Steam. Please restart Steam for changes to take effect.").format(game_name)
|
||||
)
|
||||
else:
|
||||
self.signals.show_warning_dialog.emit(_("Error"), message)
|
||||
|
||||
if self.parent.statusBar():
|
||||
self.parent.statusBar().showMessage(_("Adding '{0}' to Steam...").format(game_name), 0)
|
||||
logger.debug("Direct status message: Adding '%s' to Steam", game_name)
|
||||
else:
|
||||
logger.warning("Status bar not available when adding '%s' to Steam", game_name)
|
||||
logger.debug("Adding '%s' to Steam", game_name)
|
||||
add_egs_to_steam(app_name, game_name, self.legendary_path, on_add_to_steam_result)
|
||||
|
||||
def open_egs_game_folder(self, app_name: str):
|
||||
@@ -258,7 +263,7 @@ class ContextMenuManager:
|
||||
|
||||
exe_path = get_egs_executable(app_name, self.legendary_config_path)
|
||||
if not exe_path or not os.path.exists(exe_path):
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Executable file not found for game: {0}").format(app_name)
|
||||
)
|
||||
@@ -275,7 +280,7 @@ class ContextMenuManager:
|
||||
else:
|
||||
logger.warning("Status bar not available when opening folder for '%s'", app_name)
|
||||
except Exception as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to open game folder: {0}").format(str(e))
|
||||
)
|
||||
@@ -305,7 +310,7 @@ class ContextMenuManager:
|
||||
return
|
||||
|
||||
if not os.path.exists(self.legendary_path):
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Legendary executable not found at {0}").format(self.legendary_path)
|
||||
)
|
||||
@@ -329,81 +334,6 @@ class ContextMenuManager:
|
||||
logger.warning("Status bar not available when importing '%s'", game_name)
|
||||
threading.Thread(target=run_import, daemon=True).start()
|
||||
|
||||
def uninstall_egs_game(self, game_name: str, app_name: str):
|
||||
"""
|
||||
Uninstalls an Epic Games Store game using Legendary asynchronously.
|
||||
|
||||
Args:
|
||||
game_name: The display name of the game.
|
||||
app_name: The Legendary app_name (unique identifier for the game).
|
||||
"""
|
||||
if not self._check_portproton():
|
||||
return
|
||||
|
||||
if not os.path.exists(self.legendary_path):
|
||||
self._show_warning_dialog(
|
||||
_("Error"),
|
||||
_("Legendary executable not found at {0}").format(self.legendary_path)
|
||||
)
|
||||
return
|
||||
|
||||
reply = QMessageBox.question(
|
||||
self.parent,
|
||||
_("Confirm Uninstallation"),
|
||||
_("Are you sure you want to uninstall '{0}'? This will remove the game files.").format(game_name),
|
||||
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
|
||||
QMessageBox.StandardButton.No
|
||||
)
|
||||
if reply != QMessageBox.StandardButton.Yes:
|
||||
return
|
||||
|
||||
def run_uninstall():
|
||||
cmd = [self.legendary_path, "uninstall", app_name, "--skip-uninstaller"]
|
||||
try:
|
||||
subprocess.run(
|
||||
cmd,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=True,
|
||||
env={"LEGENDARY_CONFIG_PATH": self.legendary_config_path}
|
||||
)
|
||||
self.signals.show_status_message.emit(
|
||||
_("Successfully uninstalled '{0}'").format(game_name), 3000
|
||||
)
|
||||
except subprocess.CalledProcessError as e:
|
||||
self.signals.show_status_message.emit(
|
||||
_("Failed to uninstall '{0}'").format(game_name), 3000
|
||||
)
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to uninstall '{0}': {1}").format(game_name, e.stderr)
|
||||
)
|
||||
except FileNotFoundError:
|
||||
self.signals.show_status_message.emit(
|
||||
_("Legendary executable not found"), 3000
|
||||
)
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Legendary executable not found")
|
||||
)
|
||||
except Exception as e:
|
||||
self.signals.show_status_message.emit(
|
||||
_("Unexpected error during uninstall"), 3000
|
||||
)
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Unexpected error during uninstall: {0}").format(str(e))
|
||||
)
|
||||
|
||||
if self.parent.statusBar():
|
||||
self.parent.statusBar().showMessage(
|
||||
_("Uninstalling '{0}'...").format(game_name), 0
|
||||
)
|
||||
logger.debug("Direct status message: Uninstalling '%s'", game_name)
|
||||
else:
|
||||
logger.warning("Status bar not available when uninstalling '%s'", game_name)
|
||||
threading.Thread(target=run_uninstall, daemon=True).start()
|
||||
|
||||
def toggle_favorite(self, game_card, add: bool):
|
||||
"""
|
||||
Toggle the favorite status of a game and update its icon.
|
||||
@@ -439,7 +369,7 @@ class ContextMenuManager:
|
||||
def _check_portproton(self):
|
||||
"""Check if PortProton is available."""
|
||||
if self.portproton_location is None:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("PortProton is not found.")
|
||||
)
|
||||
@@ -474,7 +404,7 @@ class ContextMenuManager:
|
||||
return False
|
||||
|
||||
if not os.path.exists(self.legendary_path):
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Legendary executable not found at {0}").format(self.legendary_path)
|
||||
)
|
||||
@@ -486,7 +416,7 @@ class ContextMenuManager:
|
||||
if self.portproton_location and ".var" not in self.portproton_location:
|
||||
wrapper = start_sh_path
|
||||
if not os.path.exists(start_sh_path):
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("start.sh not found at {0}").format(start_sh_path)
|
||||
)
|
||||
@@ -509,10 +439,10 @@ class ContextMenuManager:
|
||||
desktop_entry = f"""[Desktop Entry]
|
||||
Type=Application
|
||||
Name={game_name}
|
||||
Exec="{self.legendary_path}" launch {app_name} --no-wine --wrapper "env START_FROM_STEAM=1 {wrapper}" "$@"
|
||||
Exec="{self.legendary_path}" launch {app_name} --no-wine --wrapper "env START_FROM_STEAM=1 {wrapper}"
|
||||
Icon={icon_path}
|
||||
Terminal=false
|
||||
Categories=Game;
|
||||
Categories=Game
|
||||
"""
|
||||
try:
|
||||
with open(desktop_path, "w", encoding="utf-8") as f:
|
||||
@@ -521,7 +451,7 @@ Categories=Game;
|
||||
logger.info(f"Created .desktop file for EGS game: {desktop_path}")
|
||||
return True
|
||||
except Exception as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to create .desktop file: {0}").format(str(e))
|
||||
)
|
||||
@@ -555,13 +485,13 @@ Categories=Game;
|
||||
self.parent.statusBar().showMessage(
|
||||
_("Game '{0}' added to desktop").format(game_name), 3000
|
||||
)
|
||||
logger.debug("Direct status message: Game '%s' added to desktop", game_name)
|
||||
logger.debug("Direct status message: Game '{0}' added to desktop", game_name)
|
||||
else:
|
||||
logger.warning("Status bar not available when adding '%s' to desktop", game_name)
|
||||
logger.warning("Status bar not available when adding '{0}' to desktop", game_name)
|
||||
except OSError as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to add game to desktop: {0}").format(str(e))
|
||||
_("Failed to add game to desktop: {0}").format(game_name, str(e))
|
||||
)
|
||||
|
||||
def remove_egs_from_desktop(self, game_name: str):
|
||||
@@ -575,8 +505,8 @@ Categories=Game;
|
||||
desktop_path = os.path.join(desktop_dir, f"{game_name}.desktop")
|
||||
self._remove_file(
|
||||
desktop_path,
|
||||
_("Failed to remove game from Desktop: {0}"),
|
||||
_("Game '{0}' removed from Desktop"),
|
||||
_("Failed to remove game '{0}' from Desktop: {{0}}").format(game_name),
|
||||
_("Successfully removed game '{0}' from Desktop").format(game_name),
|
||||
game_name
|
||||
)
|
||||
|
||||
@@ -608,13 +538,13 @@ Categories=Game;
|
||||
self.parent.statusBar().showMessage(
|
||||
_("Game '{0}' added to menu").format(game_name), 3000
|
||||
)
|
||||
logger.debug("Direct status message: Game '%s' added to menu", game_name)
|
||||
logger.debug("Direct status message: Game '{0}' added to menu", game_name)
|
||||
else:
|
||||
logger.warning("Status bar not available when adding '%s' to menu", game_name)
|
||||
logger.warning("Status bar not available when adding '{0}' to menu", game_name)
|
||||
except OSError as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to add game to menu: {0}").format(str(e))
|
||||
_("Failed to add game '{0}' to menu: {1}").format(game_name, str(e))
|
||||
)
|
||||
|
||||
def remove_egs_from_menu(self, game_name: str):
|
||||
@@ -628,8 +558,8 @@ Categories=Game;
|
||||
desktop_path = os.path.join(applications_dir, f"{game_name}.desktop")
|
||||
self._remove_file(
|
||||
desktop_path,
|
||||
_("Failed to remove game from menu: {0}"),
|
||||
_("Game '{0}' removed from menu"),
|
||||
_("Failed to remove game '{0}' from menu: {{0}}").format(game_name),
|
||||
_("Successfully removed game '{0}' from menu").format(game_name),
|
||||
game_name
|
||||
)
|
||||
|
||||
@@ -645,21 +575,21 @@ Categories=Game;
|
||||
if entry:
|
||||
exec_line = entry.get("Exec", entry.get("exec", "")).strip()
|
||||
if not exec_line:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("No executable command found in .desktop for game: {0}").format(game_name)
|
||||
_("No executable command found in .desktop file for game: {0}").format(game_name)
|
||||
)
|
||||
return None
|
||||
else:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to parse .desktop file for game: {0}").format(game_name)
|
||||
)
|
||||
return None
|
||||
except Exception as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Error reading .desktop file: {0}").format(e)
|
||||
_("Failed to read .desktop file: {0}").format(str(e))
|
||||
)
|
||||
return None
|
||||
else:
|
||||
@@ -669,7 +599,7 @@ Categories=Game;
|
||||
exec_line = entry.get("Exec", entry.get("exec", "")).strip()
|
||||
if exec_line:
|
||||
return exec_line
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_(".desktop file not found for game: {0}").format(game_name)
|
||||
)
|
||||
@@ -681,7 +611,7 @@ Categories=Game;
|
||||
try:
|
||||
entry_exec_split = shlex.split(exec_line)
|
||||
if not entry_exec_split:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Invalid executable command: {0}").format(exec_line)
|
||||
)
|
||||
@@ -693,16 +623,16 @@ Categories=Game;
|
||||
else:
|
||||
exe_path = entry_exec_split[-1]
|
||||
if not exe_path or not os.path.exists(exe_path):
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Executable file not found: {0}").format(exe_path or "None")
|
||||
)
|
||||
return None
|
||||
return exe_path
|
||||
except Exception as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to parse executable command: {0}").format(e)
|
||||
_("Failed to parse executable command: {0}").format(str(e))
|
||||
)
|
||||
return None
|
||||
|
||||
@@ -717,9 +647,9 @@ Categories=Game;
|
||||
logger.warning("Status bar not available when removing file for '%s'", game_name)
|
||||
return True
|
||||
except OSError as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
error_message.format(e)
|
||||
error_message.format(str(e))
|
||||
)
|
||||
return False
|
||||
|
||||
@@ -741,9 +671,9 @@ Categories=Game;
|
||||
|
||||
desktop_path = self._get_desktop_path(game_name)
|
||||
if not os.path.exists(desktop_path):
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Could not locate .desktop file for '{0}'").format(game_name)
|
||||
_("Could not locate .desktop file for game: {0}").format(game_name)
|
||||
)
|
||||
return
|
||||
|
||||
@@ -772,9 +702,9 @@ Categories=Game;
|
||||
try:
|
||||
shutil.rmtree(custom_folder)
|
||||
except OSError as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to delete custom data: {0}").format(e)
|
||||
_("Failed to delete custom data: {0}").format(str(e))
|
||||
)
|
||||
|
||||
def add_to_menu(self, game_name, exec_line):
|
||||
@@ -784,9 +714,9 @@ Categories=Game;
|
||||
|
||||
desktop_path = self._get_desktop_path(game_name)
|
||||
if not os.path.exists(desktop_path):
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Could not locate .desktop file for '{0}'").format(game_name)
|
||||
_("Could not locate .desktop file for game: {0}").format(game_name)
|
||||
)
|
||||
return
|
||||
|
||||
@@ -801,13 +731,13 @@ Categories=Game;
|
||||
self.parent.statusBar().showMessage(
|
||||
_("Game '{0}' added to menu").format(game_name), 3000
|
||||
)
|
||||
logger.debug("Direct status message: Game '%s' added to menu", game_name)
|
||||
logger.debug("Direct status message: Game '{0}' added to menu", game_name)
|
||||
else:
|
||||
logger.warning("Status bar not available when adding '%s' to menu", game_name)
|
||||
logger.warning("Status bar not available when adding '{0}' to menu", game_name)
|
||||
except OSError as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to add game to menu: {0}").format(str(e))
|
||||
_("Failed to add game '{0}' to menu: {1}").format(game_name, str(e))
|
||||
)
|
||||
|
||||
def remove_from_menu(self, game_name):
|
||||
@@ -816,8 +746,8 @@ Categories=Game;
|
||||
desktop_path = os.path.join(applications_dir, f"{game_name}.desktop")
|
||||
self._remove_file(
|
||||
desktop_path,
|
||||
_("Failed to remove game from menu: {0}"),
|
||||
_("Game '{0}' removed from menu"),
|
||||
_("Failed to remove game '{0}' from menu: {{0}}").format(game_name),
|
||||
_("Successfully removed game '{0}' from menu").format(game_name),
|
||||
game_name
|
||||
)
|
||||
|
||||
@@ -828,9 +758,9 @@ Categories=Game;
|
||||
|
||||
desktop_path = self._get_desktop_path(game_name)
|
||||
if not os.path.exists(desktop_path):
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Could not locate .desktop file for '{0}'").format(game_name)
|
||||
_("Could not locate .desktop file for game: {0}").format(game_name)
|
||||
)
|
||||
return
|
||||
|
||||
@@ -845,13 +775,13 @@ Categories=Game;
|
||||
self.parent.statusBar().showMessage(
|
||||
_("Game '{0}' added to desktop").format(game_name), 3000
|
||||
)
|
||||
logger.debug("Direct status message: Game '%s' added to desktop", game_name)
|
||||
logger.debug("Direct status message: Game '{0}' added to desktop", game_name)
|
||||
else:
|
||||
logger.warning("Status bar not available when adding '%s' to desktop", game_name)
|
||||
logger.warning("Status bar not available when adding '{0}' to desktop", game_name)
|
||||
except OSError as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to add game to desktop: {0}").format(str(e))
|
||||
_("Failed to add game '{0}' to desktop: {1}").format(game_name, str(e))
|
||||
)
|
||||
|
||||
def remove_from_desktop(self, game_name):
|
||||
@@ -860,8 +790,8 @@ Categories=Game;
|
||||
desktop_path = os.path.join(desktop_dir, f"{game_name}.desktop")
|
||||
self._remove_file(
|
||||
desktop_path,
|
||||
_("Failed to remove game from Desktop: {0}"),
|
||||
_("Game '{0}' removed from Desktop"),
|
||||
_("Failed to remove game '{0}' from Desktop: {{0}}").format(game_name),
|
||||
_("Successfully removed game '{0}' from Desktop").format(game_name),
|
||||
game_name
|
||||
)
|
||||
|
||||
@@ -893,7 +823,7 @@ Categories=Game;
|
||||
new_cover_path = dialog.coverEdit.text().strip()
|
||||
|
||||
if not new_name or not new_exe_path:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Game name and executable path are required.")
|
||||
)
|
||||
@@ -901,7 +831,7 @@ Categories=Game;
|
||||
|
||||
desktop_entry, new_desktop_path = dialog.getDesktopEntryData()
|
||||
if not desktop_entry or not new_desktop_path:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to generate .desktop file data.")
|
||||
)
|
||||
@@ -921,9 +851,9 @@ Categories=Game;
|
||||
f.write(desktop_entry)
|
||||
os.chmod(new_desktop_path, 0o755)
|
||||
except OSError as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to save .desktop file: {0}").format(e)
|
||||
_("Failed to save .desktop file: {0}").format(str(e))
|
||||
)
|
||||
return
|
||||
|
||||
@@ -941,9 +871,9 @@ Categories=Game;
|
||||
try:
|
||||
shutil.copyfile(new_cover_path, os.path.join(custom_folder, f"cover{ext}"))
|
||||
except OSError as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to copy cover image: {0}").format(e)
|
||||
_("Failed to copy cover image: {0}").format(str(e))
|
||||
)
|
||||
return
|
||||
|
||||
@@ -960,23 +890,19 @@ Categories=Game;
|
||||
if not exe_path:
|
||||
return
|
||||
|
||||
def on_add_to_steam_result(result: tuple[bool, str]):
|
||||
success, message = result
|
||||
if success:
|
||||
self.signals.show_status_message.emit(
|
||||
_("The game was added successfully. Please restart Steam for changes to take effect."), 5000
|
||||
)
|
||||
else:
|
||||
self.signals.show_warning_dialog.emit(_("Error"), message)
|
||||
logger.debug("Adding '{0}' to Steam", game_name)
|
||||
|
||||
if self.parent.statusBar():
|
||||
self.parent.statusBar().showMessage(
|
||||
_("Adding '{0}' to Steam...").format(game_name), 0
|
||||
)
|
||||
logger.debug("Direct status message: Adding '%s' to Steam", game_name)
|
||||
else:
|
||||
logger.warning("Status bar not available when adding '%s' to Steam", game_name)
|
||||
try:
|
||||
add_to_steam(game_name, exec_line, cover_path)
|
||||
self.signals.show_info_dialog.emit(
|
||||
_("Success"),
|
||||
_("'{0}' was added to Steam. Please restart Steam for changes to take effect.").format(game_name)
|
||||
)
|
||||
except Exception as e:
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to add game '{0}' to Steam: {1}").format(game_name, str(e))
|
||||
)
|
||||
|
||||
def remove_from_steam(self, game_name, exec_line, game_source):
|
||||
"""Handle removing a game from Steam via steam_api, supporting both EGS and non-EGS games."""
|
||||
@@ -986,8 +912,9 @@ Categories=Game;
|
||||
def on_remove_from_steam_result(result: tuple[bool, str]):
|
||||
success, message = result
|
||||
if success:
|
||||
self.signals.show_status_message.emit(
|
||||
_("The game was removed successfully. Please restart Steam for changes to take effect."), 5000
|
||||
self.signals.show_info_dialog.emit(
|
||||
_("Success"),
|
||||
_("'{0}' was removed from Steam. Please restart Steam for changes to take effect.").format(game_name)
|
||||
)
|
||||
else:
|
||||
self.signals.show_warning_dialog.emit(_("Error"), message)
|
||||
@@ -995,7 +922,7 @@ Categories=Game;
|
||||
if game_source == "epic":
|
||||
# For EGS games, construct the script path used in Steam shortcuts.vdf
|
||||
if not self.portproton_location:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("PortProton directory not found")
|
||||
)
|
||||
@@ -1007,15 +934,14 @@ Categories=Game;
|
||||
|
||||
# Directly remove the shortcut by matching AppName and Exe
|
||||
try:
|
||||
from portprotonqt.steam_api import get_steam_home, get_last_steam_user, convert_steam_id
|
||||
steam_home = get_steam_home()
|
||||
if not steam_home:
|
||||
self._show_warning_dialog(_("Error"), _("Steam directory not found"))
|
||||
self.signals.show_warning_dialog.emit(_("Error"), _("Steam directory not found"))
|
||||
return
|
||||
|
||||
last_user = get_last_steam_user(steam_home)
|
||||
if not last_user or 'SteamID' not in last_user:
|
||||
self._show_warning_dialog(_("Error"), _("Failed to get Steam user ID"))
|
||||
self.signals.show_warning_dialog.emit(_("Error"), _("Failed to get Steam user ID"))
|
||||
return
|
||||
|
||||
userdata_dir = os.path.join(steam_home, "userdata")
|
||||
@@ -1026,7 +952,7 @@ Categories=Game;
|
||||
backup_path = f"{steam_shortcuts_path}.backup"
|
||||
|
||||
if not os.path.exists(steam_shortcuts_path):
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Steam shortcuts file not found")
|
||||
)
|
||||
@@ -1037,9 +963,9 @@ Categories=Game;
|
||||
shutil.copy2(steam_shortcuts_path, backup_path)
|
||||
logger.info(f"Created backup of shortcuts.vdf at {backup_path}")
|
||||
except Exception as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to create backup of shortcuts.vdf: {0}").format(e)
|
||||
_("Failed to create backup of shortcuts.vdf: {0}").format(str(e))
|
||||
)
|
||||
return
|
||||
|
||||
@@ -1048,9 +974,9 @@ Categories=Game;
|
||||
with open(steam_shortcuts_path, 'rb') as f:
|
||||
shortcuts_data = vdf.binary_load(f)
|
||||
except Exception as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to load shortcuts.vdf: {0}").format(e)
|
||||
_("Failed to load shortcuts.vdf: {0}").format(str(e))
|
||||
)
|
||||
return
|
||||
|
||||
@@ -1068,7 +994,7 @@ Categories=Game;
|
||||
index += 1
|
||||
|
||||
if not modified:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Game '{0}' not found in Steam shortcuts").format(game_name)
|
||||
)
|
||||
@@ -1081,9 +1007,9 @@ Categories=Game;
|
||||
logger.info(f"Updated shortcuts.vdf, removed '{game_name}'")
|
||||
on_remove_from_steam_result((True, f"Game '{game_name}' removed from Steam"))
|
||||
except Exception as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to update shortcuts.vdf: {0}").format(e)
|
||||
_("Failed to update shortcuts.vdf: {0}").format(str(e))
|
||||
)
|
||||
if os.path.exists(backup_path):
|
||||
try:
|
||||
@@ -1098,20 +1024,20 @@ Categories=Game;
|
||||
if os.path.exists(script_path):
|
||||
try:
|
||||
os.remove(script_path)
|
||||
logger.info(f"Removed EGS script file: {script_path}")
|
||||
logger.info(f"Removed EGS script: {script_path}")
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to remove EGS script file {script_path}: {e}")
|
||||
logger.warning(f"Failed to remove EGS script {script_path}: {e}")
|
||||
|
||||
except Exception as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to remove EGS game from Steam: {0}").format(e)
|
||||
_("Failed to remove EGS game '{0}' from Steam: {1}").format(game_name, str(e))
|
||||
)
|
||||
on_remove_from_steam_result((False, f"Failed to remove EGS game from Steam: {e}"))
|
||||
on_remove_from_steam_result((False, f"Failed to remove EGS game '{game_name}' from Steam: {str(e)}"))
|
||||
return
|
||||
|
||||
else:
|
||||
# For non-EGS games, use the existing logic
|
||||
# For non-EGS games, use the existing logic without callback
|
||||
exec_line = self._get_exec_line(game_name, exec_line)
|
||||
if not exec_line:
|
||||
return
|
||||
@@ -1121,13 +1047,21 @@ Categories=Game;
|
||||
return
|
||||
|
||||
if self.parent.statusBar():
|
||||
self.parent.statusBar().showMessage(
|
||||
_("Removing '{0}' from Steam...").format(game_name), 0
|
||||
)
|
||||
logger.debug("Direct status message: Removing '%s' from Steam", game_name)
|
||||
logger.debug("Direct status message: Removing '{0}' from Steam", game_name)
|
||||
else:
|
||||
logger.warning("Status bar not available when removing '%s' from Steam", game_name)
|
||||
logger.warning("Status bar not available when removing '{0}' from Steam", game_name)
|
||||
|
||||
try:
|
||||
remove_from_steam(game_name, exec_line)
|
||||
self.signals.show_info_dialog.emit(
|
||||
_("Success"),
|
||||
_("'{0}' was removed from Steam. Please restart Steam for changes to take effect.").format(game_name)
|
||||
)
|
||||
except Exception as e:
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to remove game '{0}' from Steam: {1}").format(game_name, str(e))
|
||||
)
|
||||
|
||||
def open_game_folder(self, game_name, exec_line):
|
||||
"""Open the folder containing the game's executable."""
|
||||
@@ -1147,13 +1081,13 @@ Categories=Game;
|
||||
QDesktopServices.openUrl(QUrl.fromLocalFile(folder_path))
|
||||
if self.parent.statusBar():
|
||||
self.parent.statusBar().showMessage(
|
||||
_("Opened folder for '{0}'").format(game_name), 3000
|
||||
_("Successfully opened folder for '{0}'").format(game_name), 3000
|
||||
)
|
||||
logger.debug("Direct status message: Opened folder for '%s'", game_name)
|
||||
logger.debug("Direct status message: Opened folder for '{0}'", game_name)
|
||||
else:
|
||||
logger.warning("Status bar not available when opening folder for '%s'", game_name)
|
||||
logger.warning("Status bar not available when opening folder for '{0}'", game_name)
|
||||
except Exception as e:
|
||||
self._show_warning_dialog(
|
||||
self.signals.show_warning_dialog.emit(
|
||||
_("Error"),
|
||||
_("Failed to open game folder: {0}").format(str(e))
|
||||
)
|
||||
|
Binary file not shown.
@@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2025-06-14 10:37+0500\n"
|
||||
"POT-Creation-Date: 2025-06-22 18:23+0500\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: de_DE\n"
|
||||
@@ -26,31 +26,70 @@ msgstr ""
|
||||
msgid "Add to Favorites"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import to Legendary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove from Steam"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add to Steam"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open Game Folder"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove from Desktop"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add to Desktop"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit Shortcut"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete from PortProton"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open Game Folder"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove from Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add to Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove from Steam"
|
||||
msgid "Edit Shortcut"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add to Steam"
|
||||
msgid "Delete from PortProton"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Legendary executable not found at {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Success"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "'{0}' was added to Steam. Please restart Steam for changes to take effect."
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Executable file not found for game: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Opened folder for EGS game '{0}'"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to open game folder: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select Game Installation Folder"
|
||||
msgstr ""
|
||||
|
||||
msgid "No folder selected"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Importing '{0}' to Legendary..."
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
@@ -61,14 +100,51 @@ msgstr ""
|
||||
msgid "Removed '{0}' from favorites"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "PortProton is not found."
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "No executable command found in .desktop for game: {0}"
|
||||
msgid "start.sh not found at {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to create .desktop file: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to desktop"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game to desktop: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game '{0}' from Desktop: {{0}}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Successfully removed game '{0}' from Desktop"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to menu"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game '{0}' to menu: {1}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game '{0}' from menu: {{0}}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Successfully removed game '{0}' from menu"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "No executable command found in .desktop file for game: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
@@ -76,7 +152,7 @@ msgid "Failed to parse .desktop file for game: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Error reading .desktop file: {0}"
|
||||
msgid "Failed to read .desktop file: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
@@ -105,7 +181,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Could not locate .desktop file for '{0}'"
|
||||
msgid "Could not locate .desktop file for game: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
@@ -121,35 +197,7 @@ msgid "Failed to delete custom data: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to menu"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game to menu: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game from menu: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' removed from menu"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to desktop"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game to desktop: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game from Desktop: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' removed from Desktop"
|
||||
msgid "Failed to add game '{0}' to desktop: {1}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game name and executable path are required."
|
||||
@@ -174,25 +222,54 @@ msgstr ""
|
||||
msgid "Failed to copy cover image: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restart Steam"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The game was added successfully.\n"
|
||||
"Please restart Steam for changes to take effect."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The game was removed successfully.\n"
|
||||
"Please restart Steam for changes to take effect."
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game '{0}' to Steam: {1}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Opened folder for '{0}'"
|
||||
msgid ""
|
||||
"'{0}' was removed from Steam. Please restart Steam for changes to take "
|
||||
"effect."
|
||||
msgstr ""
|
||||
|
||||
msgid "PortProton directory not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Steam directory not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to get Steam user ID"
|
||||
msgstr ""
|
||||
|
||||
msgid "Steam shortcuts file not found"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to open game folder: {0}"
|
||||
msgid "Failed to create backup of shortcuts.vdf: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to load shortcuts.vdf: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' not found in Steam shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to update shortcuts.vdf: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove EGS game '{0}' from Steam: {1}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game '{0}' from Steam: {1}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Successfully opened folder for '{0}'"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit Game"
|
||||
@@ -235,10 +312,10 @@ msgstr ""
|
||||
msgid "Loading Epic Games Store games..."
|
||||
msgstr ""
|
||||
|
||||
msgid "No description available"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgid "Never"
|
||||
msgid "No description available"
|
||||
msgstr ""
|
||||
|
||||
msgid "Supported"
|
||||
@@ -382,6 +459,21 @@ msgstr ""
|
||||
msgid "Gamepad haptic feedback:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open Legendary Login"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legendary Authentication:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter Legendary Authorization Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authorization Code:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save Settings"
|
||||
msgstr ""
|
||||
|
||||
@@ -397,6 +489,22 @@ msgstr ""
|
||||
msgid "Failed to open Legendary login page"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please enter an authorization code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Successfully authenticated with Legendary"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Legendary authentication failed: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legendary executable not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unexpected error during authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm Reset"
|
||||
msgstr ""
|
||||
|
||||
@@ -478,6 +586,20 @@ msgstr ""
|
||||
msgid "Play"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Executable not found for EGS game: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cannot launch game while another game is running"
|
||||
msgstr ""
|
||||
|
||||
msgid "Launching"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to launch game: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid command format (native)"
|
||||
msgstr ""
|
||||
|
||||
@@ -488,12 +610,6 @@ msgstr ""
|
||||
msgid "File not found: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cannot launch game while another game is running"
|
||||
msgstr ""
|
||||
|
||||
msgid "Launching"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
|
Binary file not shown.
@@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2025-06-14 10:37+0500\n"
|
||||
"POT-Creation-Date: 2025-06-22 18:23+0500\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: es_ES\n"
|
||||
@@ -26,31 +26,70 @@ msgstr ""
|
||||
msgid "Add to Favorites"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import to Legendary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove from Steam"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add to Steam"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open Game Folder"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove from Desktop"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add to Desktop"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit Shortcut"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete from PortProton"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open Game Folder"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove from Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add to Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove from Steam"
|
||||
msgid "Edit Shortcut"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add to Steam"
|
||||
msgid "Delete from PortProton"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Legendary executable not found at {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Success"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "'{0}' was added to Steam. Please restart Steam for changes to take effect."
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Executable file not found for game: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Opened folder for EGS game '{0}'"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to open game folder: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select Game Installation Folder"
|
||||
msgstr ""
|
||||
|
||||
msgid "No folder selected"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Importing '{0}' to Legendary..."
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
@@ -61,14 +100,51 @@ msgstr ""
|
||||
msgid "Removed '{0}' from favorites"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "PortProton is not found."
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "No executable command found in .desktop for game: {0}"
|
||||
msgid "start.sh not found at {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to create .desktop file: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to desktop"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game to desktop: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game '{0}' from Desktop: {{0}}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Successfully removed game '{0}' from Desktop"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to menu"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game '{0}' to menu: {1}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game '{0}' from menu: {{0}}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Successfully removed game '{0}' from menu"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "No executable command found in .desktop file for game: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
@@ -76,7 +152,7 @@ msgid "Failed to parse .desktop file for game: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Error reading .desktop file: {0}"
|
||||
msgid "Failed to read .desktop file: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
@@ -105,7 +181,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Could not locate .desktop file for '{0}'"
|
||||
msgid "Could not locate .desktop file for game: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
@@ -121,35 +197,7 @@ msgid "Failed to delete custom data: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to menu"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game to menu: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game from menu: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' removed from menu"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to desktop"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game to desktop: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game from Desktop: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' removed from Desktop"
|
||||
msgid "Failed to add game '{0}' to desktop: {1}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game name and executable path are required."
|
||||
@@ -174,25 +222,54 @@ msgstr ""
|
||||
msgid "Failed to copy cover image: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restart Steam"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The game was added successfully.\n"
|
||||
"Please restart Steam for changes to take effect."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The game was removed successfully.\n"
|
||||
"Please restart Steam for changes to take effect."
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game '{0}' to Steam: {1}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Opened folder for '{0}'"
|
||||
msgid ""
|
||||
"'{0}' was removed from Steam. Please restart Steam for changes to take "
|
||||
"effect."
|
||||
msgstr ""
|
||||
|
||||
msgid "PortProton directory not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Steam directory not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to get Steam user ID"
|
||||
msgstr ""
|
||||
|
||||
msgid "Steam shortcuts file not found"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to open game folder: {0}"
|
||||
msgid "Failed to create backup of shortcuts.vdf: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to load shortcuts.vdf: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' not found in Steam shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to update shortcuts.vdf: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove EGS game '{0}' from Steam: {1}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game '{0}' from Steam: {1}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Successfully opened folder for '{0}'"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit Game"
|
||||
@@ -235,10 +312,10 @@ msgstr ""
|
||||
msgid "Loading Epic Games Store games..."
|
||||
msgstr ""
|
||||
|
||||
msgid "No description available"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgid "Never"
|
||||
msgid "No description available"
|
||||
msgstr ""
|
||||
|
||||
msgid "Supported"
|
||||
@@ -382,6 +459,21 @@ msgstr ""
|
||||
msgid "Gamepad haptic feedback:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open Legendary Login"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legendary Authentication:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter Legendary Authorization Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authorization Code:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save Settings"
|
||||
msgstr ""
|
||||
|
||||
@@ -397,6 +489,22 @@ msgstr ""
|
||||
msgid "Failed to open Legendary login page"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please enter an authorization code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Successfully authenticated with Legendary"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Legendary authentication failed: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legendary executable not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unexpected error during authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm Reset"
|
||||
msgstr ""
|
||||
|
||||
@@ -478,6 +586,20 @@ msgstr ""
|
||||
msgid "Play"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Executable not found for EGS game: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cannot launch game while another game is running"
|
||||
msgstr ""
|
||||
|
||||
msgid "Launching"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to launch game: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid command format (native)"
|
||||
msgstr ""
|
||||
|
||||
@@ -488,12 +610,6 @@ msgstr ""
|
||||
msgid "File not found: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cannot launch game while another game is running"
|
||||
msgstr ""
|
||||
|
||||
msgid "Launching"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PortProtonQt 0.1.1\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2025-06-14 10:37+0500\n"
|
||||
"POT-Creation-Date: 2025-06-22 18:23+0500\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -24,31 +24,70 @@ msgstr ""
|
||||
msgid "Add to Favorites"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import to Legendary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove from Steam"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add to Steam"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open Game Folder"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove from Desktop"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add to Desktop"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit Shortcut"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete from PortProton"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open Game Folder"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove from Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add to Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove from Steam"
|
||||
msgid "Edit Shortcut"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add to Steam"
|
||||
msgid "Delete from PortProton"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Legendary executable not found at {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Success"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "'{0}' was added to Steam. Please restart Steam for changes to take effect."
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Executable file not found for game: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Opened folder for EGS game '{0}'"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to open game folder: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select Game Installation Folder"
|
||||
msgstr ""
|
||||
|
||||
msgid "No folder selected"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Importing '{0}' to Legendary..."
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
@@ -59,14 +98,51 @@ msgstr ""
|
||||
msgid "Removed '{0}' from favorites"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
msgid "PortProton is not found."
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "No executable command found in .desktop for game: {0}"
|
||||
msgid "start.sh not found at {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to create .desktop file: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to desktop"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game to desktop: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game '{0}' from Desktop: {{0}}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Successfully removed game '{0}' from Desktop"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to menu"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game '{0}' to menu: {1}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game '{0}' from menu: {{0}}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Successfully removed game '{0}' from menu"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "No executable command found in .desktop file for game: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
@@ -74,7 +150,7 @@ msgid "Failed to parse .desktop file for game: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Error reading .desktop file: {0}"
|
||||
msgid "Failed to read .desktop file: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
@@ -103,7 +179,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Could not locate .desktop file for '{0}'"
|
||||
msgid "Could not locate .desktop file for game: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
@@ -119,35 +195,7 @@ msgid "Failed to delete custom data: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to menu"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game to menu: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game from menu: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' removed from menu"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to desktop"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game to desktop: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game from Desktop: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' removed from Desktop"
|
||||
msgid "Failed to add game '{0}' to desktop: {1}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game name and executable path are required."
|
||||
@@ -172,25 +220,54 @@ msgstr ""
|
||||
msgid "Failed to copy cover image: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restart Steam"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The game was added successfully.\n"
|
||||
"Please restart Steam for changes to take effect."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The game was removed successfully.\n"
|
||||
"Please restart Steam for changes to take effect."
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game '{0}' to Steam: {1}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Opened folder for '{0}'"
|
||||
msgid ""
|
||||
"'{0}' was removed from Steam. Please restart Steam for changes to take "
|
||||
"effect."
|
||||
msgstr ""
|
||||
|
||||
msgid "PortProton directory not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Steam directory not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to get Steam user ID"
|
||||
msgstr ""
|
||||
|
||||
msgid "Steam shortcuts file not found"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to open game folder: {0}"
|
||||
msgid "Failed to create backup of shortcuts.vdf: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to load shortcuts.vdf: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' not found in Steam shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to update shortcuts.vdf: {0}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove EGS game '{0}' from Steam: {1}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game '{0}' from Steam: {1}"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Successfully opened folder for '{0}'"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit Game"
|
||||
@@ -233,10 +310,10 @@ msgstr ""
|
||||
msgid "Loading Epic Games Store games..."
|
||||
msgstr ""
|
||||
|
||||
msgid "No description available"
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
msgid "Never"
|
||||
msgid "No description available"
|
||||
msgstr ""
|
||||
|
||||
msgid "Supported"
|
||||
@@ -380,6 +457,21 @@ msgstr ""
|
||||
msgid "Gamepad haptic feedback:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open Legendary Login"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legendary Authentication:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter Legendary Authorization Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authorization Code:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save Settings"
|
||||
msgstr ""
|
||||
|
||||
@@ -395,6 +487,22 @@ msgstr ""
|
||||
msgid "Failed to open Legendary login page"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please enter an authorization code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Successfully authenticated with Legendary"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Legendary authentication failed: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legendary executable not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unexpected error during authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm Reset"
|
||||
msgstr ""
|
||||
|
||||
@@ -476,6 +584,20 @@ msgstr ""
|
||||
msgid "Play"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Executable not found for EGS game: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cannot launch game while another game is running"
|
||||
msgstr ""
|
||||
|
||||
msgid "Launching"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to launch game: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid command format (native)"
|
||||
msgstr ""
|
||||
|
||||
@@ -486,12 +608,6 @@ msgstr ""
|
||||
msgid "File not found: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cannot launch game while another game is running"
|
||||
msgstr ""
|
||||
|
||||
msgid "Launching"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
|
Binary file not shown.
@@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2025-06-14 10:37+0500\n"
|
||||
"PO-Revision-Date: 2025-06-14 10:37+0500\n"
|
||||
"POT-Creation-Date: 2025-06-22 18:23+0500\n"
|
||||
"PO-Revision-Date: 2025-06-22 18:22+0500\n"
|
||||
"Last-Translator: \n"
|
||||
"Language: ru_RU\n"
|
||||
"Language-Team: ru_RU <LL@li.org>\n"
|
||||
@@ -27,32 +27,73 @@ msgstr "Удалить из Избранного"
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Добавить в Избранное"
|
||||
|
||||
msgid "Import to Legendary"
|
||||
msgstr "Импортировать игру"
|
||||
|
||||
msgid "Remove from Steam"
|
||||
msgstr "Удалить из Steam"
|
||||
|
||||
msgid "Add to Steam"
|
||||
msgstr "Добавить в Steam"
|
||||
|
||||
msgid "Open Game Folder"
|
||||
msgstr "Открыть папку с игрой"
|
||||
|
||||
msgid "Remove from Desktop"
|
||||
msgstr "Удалить с рабочего стола"
|
||||
|
||||
msgid "Add to Desktop"
|
||||
msgstr "Добавить на рабочий стол"
|
||||
|
||||
msgid "Edit Shortcut"
|
||||
msgstr "Редактировать"
|
||||
|
||||
msgid "Delete from PortProton"
|
||||
msgstr "Удалить из PortProton"
|
||||
|
||||
msgid "Open Game Folder"
|
||||
msgstr "Открыть папку с игрой"
|
||||
|
||||
msgid "Remove from Menu"
|
||||
msgstr "Удалить из меню"
|
||||
|
||||
msgid "Add to Menu"
|
||||
msgstr "Добавить в меню"
|
||||
|
||||
msgid "Remove from Steam"
|
||||
msgstr "Удалить из Steam"
|
||||
msgid "Edit Shortcut"
|
||||
msgstr "Редактировать"
|
||||
|
||||
msgid "Add to Steam"
|
||||
msgstr "Добавить в Steam"
|
||||
msgid "Delete from PortProton"
|
||||
msgstr "Удалить из PortProton"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Ошибка"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Legendary executable not found at {0}"
|
||||
msgstr "Legendary не найден по пути {0}"
|
||||
|
||||
msgid "Success"
|
||||
msgstr "Успешно"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "'{0}' was added to Steam. Please restart Steam for changes to take effect."
|
||||
msgstr ""
|
||||
"'{0}' был добавлен в Steam. Пожалуйста, перезапустите Steam, чтобы "
|
||||
"изменения вступили в силу."
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Executable file not found for game: {0}"
|
||||
msgstr "Не найден исполняемый файл для игры: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Opened folder for EGS game '{0}'"
|
||||
msgstr "Открытие папки для игры EGS '{0}'"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to open game folder: {0}"
|
||||
msgstr "Не удалось открыть папку для игры: {0}"
|
||||
|
||||
msgid "Select Game Installation Folder"
|
||||
msgstr "Выберите папку установки игры"
|
||||
|
||||
msgid "No folder selected"
|
||||
msgstr "Не выбрана ни одна папка"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Importing '{0}' to Legendary..."
|
||||
msgstr "Игра '{0}' импортирована"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Added '{0}' to favorites"
|
||||
@@ -62,23 +103,60 @@ msgstr "Добавление '{0}' в избранное"
|
||||
msgid "Removed '{0}' from favorites"
|
||||
msgstr "Удаление '{0}' из избранного"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Ошибка"
|
||||
|
||||
msgid "PortProton is not found."
|
||||
msgstr "PortProton не найден."
|
||||
|
||||
#, python-brace-format
|
||||
msgid "No executable command found in .desktop for game: {0}"
|
||||
msgstr "Не найдено ни одной исполняемой команды для игры: {0}"
|
||||
msgid "start.sh not found at {0}"
|
||||
msgstr "start.sh не найден по адресу {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to create .desktop file: {0}"
|
||||
msgstr "Не удалось создать файл .desktop: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to desktop"
|
||||
msgstr "Игра '{0}' добавлена на рабочий стол"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game to desktop: {0}"
|
||||
msgstr "Не удалось добавить игру на рабочий стол: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game '{0}' from Desktop: {{0}}"
|
||||
msgstr "Не удалось удалить игру '{0}' с рабочего стола: {{0}}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Successfully removed game '{0}' from Desktop"
|
||||
msgstr "Успешно удалена игра '{0}' с рабочего стола"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to menu"
|
||||
msgstr "Игра '{0}' добавлена в меню"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game '{0}' to menu: {1}"
|
||||
msgstr "Не удалось добавить игру в меню: '{0}' в меню: {1}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game '{0}' from menu: {{0}}"
|
||||
msgstr "Не удалось удалить игру '{0}' из меню: {{0}}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Successfully removed game '{0}' from menu"
|
||||
msgstr "Успешно удалена игра '{0}' из меню"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "No executable command found in .desktop file for game: {0}"
|
||||
msgstr "В файле .desktop для игры не найдено ни одной исполняемой команды: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to parse .desktop file for game: {0}"
|
||||
msgstr "Не удалось удалить файл .desktop: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Error reading .desktop file: {0}"
|
||||
msgstr "Не удалось удалить файл .desktop: {0}"
|
||||
msgid "Failed to read .desktop file: {0}"
|
||||
msgstr "Не удалось прочитать файл .desktop: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid ".desktop file not found for game: {0}"
|
||||
@@ -108,8 +186,8 @@ msgstr ""
|
||||
".desktop и настраиваемых данных."
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Could not locate .desktop file for '{0}'"
|
||||
msgstr "Не удалось найти файл .desktop для '{0}'"
|
||||
msgid "Could not locate .desktop file for game: {0}"
|
||||
msgstr "Не удалось найти файл .desktop для игры: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to delete .desktop file: {0}"
|
||||
@@ -124,36 +202,8 @@ msgid "Failed to delete custom data: {0}"
|
||||
msgstr "Не удалось удалить настраиваемые данные: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to menu"
|
||||
msgstr "Игра '{0}' добавлена в меню"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game to menu: {0}"
|
||||
msgstr "Не удалось добавить игру в меню: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game from menu: {0}"
|
||||
msgstr "Не удалось удалить игру из меню: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' removed from menu"
|
||||
msgstr "Игра '{0}' удалена из меню"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' added to desktop"
|
||||
msgstr "Игра '{0}' добавлена на рабочий стол"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game to desktop: {0}"
|
||||
msgstr "Не удалось добавить игру на рабочий стол: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game from Desktop: {0}"
|
||||
msgstr "Не удалось удалить игру с рабочего стола: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' removed from Desktop"
|
||||
msgstr "Игра '{0}' удалена с рабочего стола"
|
||||
msgid "Failed to add game '{0}' to desktop: {1}"
|
||||
msgstr "Не удалось добавить игру '{0}' на рабочий стол: {1}"
|
||||
|
||||
msgid "Game name and executable path are required."
|
||||
msgstr "Необходимо указать название игры и путь к исполняемому файлу."
|
||||
@@ -177,30 +227,57 @@ msgstr "Не удалось удалить файл .desktop: {0}"
|
||||
msgid "Failed to copy cover image: {0}"
|
||||
msgstr "Не удалось удалить игру из меню: {0}"
|
||||
|
||||
msgid "Restart Steam"
|
||||
msgstr "Перезапустите Steam"
|
||||
|
||||
msgid ""
|
||||
"The game was added successfully.\n"
|
||||
"Please restart Steam for changes to take effect."
|
||||
msgstr ""
|
||||
"Игра была успешно добавлена.\n"
|
||||
"Пожалуйста, перезапустите Steam, чтобы изменения вступили в силу."
|
||||
|
||||
msgid ""
|
||||
"The game was removed successfully.\n"
|
||||
"Please restart Steam for changes to take effect."
|
||||
msgstr ""
|
||||
"Игра была успешно удалена..\n"
|
||||
"Пожалуйста, перезапустите Steam, чтобы изменения вступили в силу."
|
||||
#, python-brace-format
|
||||
msgid "Failed to add game '{0}' to Steam: {1}"
|
||||
msgstr "Не удалось добавить игру '{0}' в Steam: {1}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Opened folder for '{0}'"
|
||||
msgstr "Открытие папки для '{0}'"
|
||||
msgid ""
|
||||
"'{0}' was removed from Steam. Please restart Steam for changes to take "
|
||||
"effect."
|
||||
msgstr ""
|
||||
"'{0}' был удалён из Steam. Пожалуйста, перезапустите Steam, чтобы "
|
||||
"изменения вступили в силу."
|
||||
|
||||
msgid "PortProton directory not found"
|
||||
msgstr "PortProton не найден."
|
||||
|
||||
msgid "Steam directory not found"
|
||||
msgstr "Каталог Steam не найден"
|
||||
|
||||
msgid "Failed to get Steam user ID"
|
||||
msgstr "Не удалось получить ID пользователя Steam"
|
||||
|
||||
msgid "Steam shortcuts file not found"
|
||||
msgstr "Файл ярлыков Steam не найден"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to open game folder: {0}"
|
||||
msgstr "Не удалось открыть папку для игры: {0}"
|
||||
msgid "Failed to create backup of shortcuts.vdf: {0}"
|
||||
msgstr "Не удалось создать резервную копию shortcuts.vdf: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to load shortcuts.vdf: {0}"
|
||||
msgstr "Не удалось загрузить shortcuts.vdf: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Game '{0}' not found in Steam shortcuts"
|
||||
msgstr "Игра '{0}' не найдена в ярлыках Steam"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to update shortcuts.vdf: {0}"
|
||||
msgstr "Не удалось обновить shortcuts.vdf: {0}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove EGS game '{0}' from Steam: {1}"
|
||||
msgstr "Не удалось удалить игру EGS '{0}' из Steam: {1}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to remove game '{0}' from Steam: {1}"
|
||||
msgstr "Не удалось удалить игру '{0}' из Steam: {1}"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Successfully opened folder for '{0}'"
|
||||
msgstr "Успешно открыта папка для '{0}'"
|
||||
|
||||
msgid "Edit Game"
|
||||
msgstr "Редактировать игру"
|
||||
@@ -242,12 +319,12 @@ msgstr "Запустить игру \"{name}\" с помощью PortProton"
|
||||
msgid "Loading Epic Games Store games..."
|
||||
msgstr "Загрузка игр из Epic Games Store..."
|
||||
|
||||
msgid "No description available"
|
||||
msgstr "Описание не найдено"
|
||||
|
||||
msgid "Never"
|
||||
msgstr "Никогда"
|
||||
|
||||
msgid "No description available"
|
||||
msgstr "Описание не найдено"
|
||||
|
||||
msgid "Supported"
|
||||
msgstr "Поддерживается"
|
||||
|
||||
@@ -389,6 +466,21 @@ msgstr "Тактильная отдача на геймпаде"
|
||||
msgid "Gamepad haptic feedback:"
|
||||
msgstr "Тактильная отдача на геймпаде:"
|
||||
|
||||
msgid "Open Legendary Login"
|
||||
msgstr "Открыть браузер для входа в Legendary"
|
||||
|
||||
msgid "Legendary Authentication:"
|
||||
msgstr "Авторизация в Legendary:"
|
||||
|
||||
msgid "Enter Legendary Authorization Code"
|
||||
msgstr "Введите код авторизации Legendary"
|
||||
|
||||
msgid "Authorization Code:"
|
||||
msgstr "Код авторизации;"
|
||||
|
||||
msgid "Submit Code"
|
||||
msgstr "Отправить код"
|
||||
|
||||
msgid "Save Settings"
|
||||
msgstr "Сохранить настройки"
|
||||
|
||||
@@ -404,6 +496,22 @@ msgstr "Открытие страницы входа в Legendary в брауз
|
||||
msgid "Failed to open Legendary login page"
|
||||
msgstr "Не удалось открыть страницу входа в Legendary"
|
||||
|
||||
msgid "Please enter an authorization code"
|
||||
msgstr "Пожалуйста, введите код авторизации"
|
||||
|
||||
msgid "Successfully authenticated with Legendary"
|
||||
msgstr "Успешная аутентификация в Legendary"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Legendary authentication failed: {0}"
|
||||
msgstr "Не удалось выполнить аутентификацию Legendary: {0}"
|
||||
|
||||
msgid "Legendary executable not found"
|
||||
msgstr "Не найден исполняемый файл Legendary"
|
||||
|
||||
msgid "Unexpected error during authentication"
|
||||
msgstr "Неожиданная ошибка при аутентификации"
|
||||
|
||||
msgid "Confirm Reset"
|
||||
msgstr "Подтвердите удаление"
|
||||
|
||||
@@ -487,6 +595,20 @@ msgstr "Остановить"
|
||||
msgid "Play"
|
||||
msgstr "Играть"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Executable not found for EGS game: {0}"
|
||||
msgstr "Не найден исполняемый файл для игры EGS: {0}"
|
||||
|
||||
msgid "Cannot launch game while another game is running"
|
||||
msgstr "Невозможно запустить игру пока запущена другая"
|
||||
|
||||
msgid "Launching"
|
||||
msgstr "Идёт запуск"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Failed to launch game: {0}"
|
||||
msgstr "Не удалось запустить игру: {0}"
|
||||
|
||||
msgid "Invalid command format (native)"
|
||||
msgstr "Неправильный формат команды (нативная версия)"
|
||||
|
||||
@@ -497,12 +619,6 @@ msgstr "Неправильный формат команды (flatpak)"
|
||||
msgid "File not found: {0}"
|
||||
msgstr "Файл не найден: {0}"
|
||||
|
||||
msgid "Cannot launch game while another game is running"
|
||||
msgstr "Невозможно запустить игру пока запущена другая"
|
||||
|
||||
msgid "Launching"
|
||||
msgstr "Идёт запуск"
|
||||
|
||||
msgid "Reboot"
|
||||
msgstr "Перезагрузить"
|
||||
|
||||
|
Reference in New Issue
Block a user