Compare commits

...

38 Commits

Author SHA1 Message Date
Balló György
4331b0d8c0 Clear temporary files after conversion
convert_cover() now always return a temporary file, which needs to be
removed after the cover is saved. Without this, these files would remain on
the system until reboot. Also remove the downloaded temporary files after
save.
2024-11-02 20:07:38 +01:00
Balló György
117055bf64 Handle more error types when opening/saving images with PIL
Decoding/encoding errors sometimes raise an OSError or ValueError.
2024-11-02 18:24:11 +01:00
Balló György
fa86a25870 Make sure that image can be opened
Checking for file extension does not ensure that the image file can be
actually opened. Check if it can be loaded into a pixbuf, and convert it if
necessary.
2024-11-02 15:46:38 +01:00
Balló György
31c2a1dfee Save covers directly into covers dir
Instead of saving the pixbuf of the new cover into a temporary file and
then copy into covers dir, save it directly to there. Without this, a lot
of temporary files are created on import, which remain on the system even
after the application is closed.
2024-11-02 10:13:12 +01:00
kramo
95c101d55e Update translations 2024-10-31 14:25:18 +01:00
kramo
004c5985ec Update translations 2024-10-31 14:23:34 +01:00
kramo
cbffec6f13 Update translations 2024-10-31 14:23:08 +01:00
kramo
4ee3fe2473 Add an option to import games automatically (#302) 2024-10-31 14:12:33 +01:00
Weblate (bot)
1437a31658 Translations update from Hosted Weblate (#294)
* Translated using Weblate (Romanian)

Currently translated at 100.0% (140 of 140 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/ro/
Translation: Cartridges/Cartridges

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (140 of 140 strings)

Co-authored-by: Balázs Meskó <meskobalazs@mailbox.org>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/hu/
Translation: Cartridges/Cartridges

* Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (140 of 140 strings)

Co-authored-by: sunniva <schildkroteskoldpadda@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/nb_NO/
Translation: Cartridges/Cartridges

---------

Co-authored-by: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Co-authored-by: Balázs Meskó <meskobalazs@mailbox.org>
Co-authored-by: sunniva <schildkroteskoldpadda@gmail.com>
2024-10-24 18:44:26 +02:00
kramo
fbc4e05327 Add Liberapay to README and FUNDING.yml 2024-10-24 18:39:10 +02:00
kramo
ce584a09c2 v2.10.1 2024-10-11 19:33:47 +02:00
kramo
bb3780f048 Fix #292 2024-10-11 19:31:20 +02:00
Aryan Karamtoth
babe489676 feat(l10n): Added Telugu (te) Language Support 2024-10-08 11:57:02 +02:00
kramo
e32b30d343 Fix Flatpak source dir 2024-10-07 10:22:56 +02:00
kramo
863344b6ab Fix PyYAML Flatpak source 2024-10-07 10:18:10 +02:00
kramo
eee2a2f949 Update Python dependencies 2024-09-18 17:13:49 +02:00
kramo
03b9c8627f v2.10.0 2024-09-18 16:51:45 +02:00
kramo
46036c57b2 Merge pull request #289 from weblate/weblate-cartridges-cartridges
Translations update from Hosted Weblate
2024-09-18 16:49:14 +02:00
Hosted Weblate
61e9a29c6d Update translation files
Updated by "Squash Git commits" hook in Weblate.

Translation: Cartridges/Cartridges
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/
2024-09-18 14:48:07 +00:00
Hosted Weblate
83ae99ff8a Translated using Weblate (Occidental)
Currently translated at 94.2% (132 of 140 strings)

Added translation using Weblate (Occidental)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: OIS <mistresssilvara@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/ie/
Translation: Cartridges/Cartridges
2024-09-18 14:48:07 +00:00
kramo
e4ceac6392 Merge pull request #257 from jamiethecat/button-rows
Port to Libadwaita 1.6 widgets
2024-09-18 16:48:00 +02:00
kramo
8a8b0525b4 Use Adw.Spinner 2024-09-18 16:47:37 +02:00
kramo
256f6f2325 Merge branch 'main' into pr/257 2024-09-18 16:36:12 +02:00
kramo
4938bacd55 Update blueprint-compiler version 2024-09-18 16:32:47 +02:00
kramo
5050c4f6ca Add macOS files to gitignore 2024-09-18 16:29:26 +02:00
kramo
9e4644ab2f Use stable Flatpak repo 2024-09-18 16:25:27 +02:00
kramo
19d0e27e88 Use 47 runtime 2024-09-18 16:24:58 +02:00
kramo
2801e777f7 Merge pull request #287 from bragefuglseth/patch-2
metainfo: Change `recommends` to `requires`
2024-08-30 13:59:07 +02:00
Brage Fuglseth
fc5b5447fc metainfo: Change recommends to requires 2024-08-17 17:49:39 +02:00
dependabot[bot]
0a50072e2c Bump softprops/action-gh-release from 2.0.6 to 2.0.8 (#285)
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.0.6 to 2.0.8.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2.0.6...v2.0.8)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-02 14:52:41 +02:00
kramo
e5287c9d3f Type hint GTK template imports 2024-07-30 09:32:37 +02:00
kramo
22a755c2e4 Type hint shared module 2024-07-30 09:00:49 +02:00
kramo
239420148a Improve UX for COSMIC 2024-07-18 15:34:22 +02:00
kramo
35acb56a62 v2.9.3 2024-07-18 11:39:58 +02:00
Hosted Weblate
adacdefdb9 Translated using Weblate (Persian)
Currently translated at 100.0% (140 of 140 strings)

Co-authored-by: آوید <avds+git@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/cartridges/cartridges/fa/
Translation: Cartridges/Cartridges
2024-07-18 09:30:35 +00:00
kramo
7367e40cb3 Fix #281 2024-07-18 11:30:28 +02:00
kramo
ae7819a264 Use CSS variables 2024-05-17 13:54:35 +02:00
Jamie Gravendeel
38f85d2f4a Port to Libadwaita 1.6 widgets
Co-authored-by: kramo <contact@kramo.page>
2024-05-01 12:31:12 +02:00
35 changed files with 2124 additions and 743 deletions

1
.github/FUNDING.yml vendored
View File

@@ -1 +1,2 @@
github: [kra-mo]
liberapay: kramo

View File

@@ -38,7 +38,7 @@ jobs:
run: echo tag_name=${GITHUB_REF#refs/tags/} >> $GITHUB_OUTPUT
- name: Publish release
uses: softprops/action-gh-release@v2.0.6
uses: softprops/action-gh-release@v2.0.8
with:
files: |
Windows Installer/Cartridges Windows.exe

View File

@@ -57,7 +57,7 @@ Cartridges is an easy-to-use, elegant game launcher written in Python using GTK4
For updates and questions, join our [Discord server][discord-url] (bridged to [Matrix](https://matrix.to/#/#cartridges:matrix.org))!
## Donations
I accept donations through [GitHub Sponsors](https://github.com/sponsors/kra-mo).
I accept donations through [GitHub Sponsors](https://github.com/sponsors/kra-mo) and [Liberapay](https://liberapay.com/kramo).
Thank you for your generosity! 💜

View File

@@ -1,138 +1,134 @@
{
"id" : "page.kramo.Cartridges.Devel",
"runtime" : "org.gnome.Platform",
"runtime-version" : "46",
"sdk" : "org.gnome.Sdk",
"command" : "cartridges",
"finish-args" : [
"--share=network",
"--share=ipc",
"--socket=fallback-x11",
"--device=dri",
"--socket=wayland",
"--talk-name=org.freedesktop.Flatpak",
"--filesystem=host",
"--filesystem=~/.var/app/com.valvesoftware.Steam/data/Steam/:ro",
"--filesystem=~/.var/app/net.lutris.Lutris/:ro",
"--filesystem=~/.var/app/com.heroicgameslauncher.hgl/config/heroic/:ro",
"--filesystem=~/.var/app/com.heroicgameslauncher.hgl/config/legendary/:ro",
"--filesystem=~/.var/app/com.usebottles.bottles/data/bottles/:ro",
"--filesystem=~/.var/app/io.itch.itch/config/itch/:ro",
"--filesystem=~/.var/app/org.libretro.RetroArch/config/retroarch/:ro",
"--filesystem=/var/lib/flatpak/app:ro",
"--filesystem=/var/lib/flatpak/exports:ro",
"--filesystem=xdg-data/flatpak/app:ro",
"--filesystem=xdg-data/flatpak/exports:ro"
],
"cleanup" : [
"/include",
"/lib/pkgconfig",
"/man",
"/share/doc",
"/share/gtk-doc",
"/share/man",
"/share/pkgconfig",
"*.la",
"*.a"
],
"modules" : [
"id": "page.kramo.Cartridges.Devel",
"runtime": "org.gnome.Platform",
"runtime-version": "47",
"sdk": "org.gnome.Sdk",
"command": "cartridges",
"finish-args": [
"--share=network",
"--share=ipc",
"--socket=fallback-x11",
"--device=dri",
"--socket=wayland",
"--talk-name=org.freedesktop.Flatpak",
"--filesystem=host",
"--filesystem=~/.var/app/com.valvesoftware.Steam/data/Steam/:ro",
"--filesystem=~/.var/app/net.lutris.Lutris/:ro",
"--filesystem=~/.var/app/com.heroicgameslauncher.hgl/config/heroic/:ro",
"--filesystem=~/.var/app/com.heroicgameslauncher.hgl/config/legendary/:ro",
"--filesystem=~/.var/app/com.usebottles.bottles/data/bottles/:ro",
"--filesystem=~/.var/app/io.itch.itch/config/itch/:ro",
"--filesystem=~/.var/app/org.libretro.RetroArch/config/retroarch/:ro",
"--filesystem=/var/lib/flatpak/app:ro",
"--filesystem=/var/lib/flatpak/exports:ro",
"--filesystem=xdg-data/flatpak/app:ro",
"--filesystem=xdg-data/flatpak/exports:ro"
],
"cleanup": [
"/include",
"/lib/pkgconfig",
"/man",
"/share/doc",
"/share/gtk-doc",
"/share/man",
"/share/pkgconfig",
"*.la",
"*.a"
],
"modules": [
{
"name": "python3-modules",
"buildsystem": "simple",
"build-commands": [],
"modules": [
{
"name": "python3-modules",
"buildsystem": "simple",
"build-commands": [],
"modules": [
{
"name": "python3-pyyaml",
"buildsystem": "simple",
"build-commands": [
"pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"pyyaml\" --no-build-isolation"
],
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/36/2b/61d51a2c4f25ef062ae3f74576b01638bebad5e045f747ff12643df63844/PyYAML-6.0.tar.gz",
"sha256": "68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"
}
]
},
{
"name": "python3-requests",
"buildsystem": "simple",
"build-commands": [
"pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"requests\" --no-build-isolation"
],
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/71/4c/3db2b8021bd6f2f0ceb0e088d6b2d49147671f25832fb17970e9b583d742/certifi-2022.12.7-py3-none-any.whl",
"sha256": "4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/ff/d7/8d757f8bd45be079d76309248845a04f09619a7b17d6dfc8c9ff6433cac2/charset-normalizer-3.1.0.tar.gz",
"sha256": "34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl",
"sha256": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/d2/f4/274d1dbe96b41cf4e0efb70cbced278ffd61b5c7bb70338b62af94ccb25b/requests-2.28.2-py3-none-any.whl",
"sha256": "64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/7b/f5/890a0baca17a61c1f92f72b81d3c31523c99bec609e60c292ea55b387ae8/urllib3-1.26.15-py2.py3-none-any.whl",
"sha256": "aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"
}
]
},
{
"name": "python3-pillow",
"buildsystem": "simple",
"build-commands": [
"pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"pillow\" --no-build-isolation"
],
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/00/d5/4903f310765e0ff2b8e91ffe55031ac6af77d982f0156061e20a4d1a8b2d/Pillow-9.5.0.tar.gz",
"sha256": "bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"
}
]
}
]
"name": "python3-pyyaml",
"buildsystem": "simple",
"build-commands": [
"pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"pyyaml\" --no-build-isolation"
],
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz",
"sha256": "d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"
}
]
},
{
"name" : "blueprint-compiler",
"buildsystem" : "meson",
"sources" : [
{
"type" : "git",
"url" : "https://gitlab.gnome.org/jwestman/blueprint-compiler",
"tag" : "v0.12.0"
}
],
"cleanup" : [
"*"
]
"name": "python3-pillow",
"buildsystem": "simple",
"build-commands": [
"pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"pillow\" --no-build-isolation"
],
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/cd/74/ad3d526f3bf7b6d3f408b73fde271ec69dfac8b81341a318ce825f2b3812/pillow-10.4.0.tar.gz",
"sha256": "166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"
}
]
},
{
"name" : "cartridges",
"builddir" : true,
"buildsystem" : "meson",
"run-tests" : true,
"config-opts": [
"-Dprofile=development"
],
"sources" : [
{
"type" : "dir",
"path" : "../.."
}
]
"name": "python3-requests",
"buildsystem": "simple",
"build-commands": [
"pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"requests\" --no-build-isolation"
],
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl",
"sha256": "922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/63/09/c1bc53dab74b1816a00d8d030de5bf98f724c52c1635e07681d312f20be8/charset-normalizer-3.3.2.tar.gz",
"sha256": "f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl",
"sha256": "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl",
"sha256": "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl",
"sha256": "ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"
}
]
}
]
]
},
{
"name": "blueprint-compiler",
"buildsystem": "meson",
"sources": [
{
"type": "git",
"url": "https://gitlab.gnome.org/jwestman/blueprint-compiler",
"tag": "v0.14.0"
}
],
"cleanup": ["*"]
},
{
"name": "cartridges",
"builddir": true,
"buildsystem": "meson",
"run-tests": true,
"config-opts": ["-Dprofile=development"],
"sources": [
{
"type": "dir",
"path": "../.."
}
]
}
]
}

View File

@@ -17,6 +17,8 @@
#
# SPDX-License-Identifier: GPL-3.0-or-later
# pyright: reportAssignmentType=none
import shlex
from pathlib import Path
from sys import platform
@@ -40,35 +42,36 @@ from cartridges.utils.save_cover import convert_cover, save_cover
class DetailsDialog(Adw.Dialog):
__gtype_name__ = "DetailsDialog"
cover_overlay = Gtk.Template.Child()
cover = Gtk.Template.Child()
cover_button_edit = Gtk.Template.Child()
cover_button_delete_revealer = Gtk.Template.Child()
cover_button_delete = Gtk.Template.Child()
spinner = Gtk.Template.Child()
cover_overlay: Gtk.Overlay = Gtk.Template.Child()
cover: Gtk.Picture = Gtk.Template.Child()
cover_button_edit: Gtk.Button = Gtk.Template.Child()
cover_button_delete_revealer: Gtk.Revealer = Gtk.Template.Child()
cover_button_delete: Gtk.Button = Gtk.Template.Child()
spinner: Adw.Spinner = Gtk.Template.Child()
name = Gtk.Template.Child()
developer = Gtk.Template.Child()
executable = Gtk.Template.Child()
name: Adw.EntryRow = Gtk.Template.Child()
developer: Adw.EntryRow = Gtk.Template.Child()
executable: Adw.EntryRow = Gtk.Template.Child()
exec_info_label = Gtk.Template.Child()
exec_info_popover = Gtk.Template.Child()
file_chooser_button = Gtk.Template.Child()
exec_info_label: Gtk.Label = Gtk.Template.Child()
exec_info_popover: Gtk.Popover = Gtk.Template.Child()
file_chooser_button: Gtk.Button = Gtk.Template.Child()
apply_button = Gtk.Template.Child()
apply_button: Gtk.Button = Gtk.Template.Child()
cover_changed: bool = False
is_open = False
is_open: bool = False
def __init__(self, game: Optional[Game] = None, **kwargs: Any):
super().__init__(**kwargs)
# Make it so only one dialog can be open at a time
self.__class__.is_open = True
self.connect("closed", lambda *_: self.set_is_open(False))
self.tmp_cover_path = None
self.connect("closed", self.on_closed)
self.game: Game = game
self.game: Optional[Game] = game
self.game_cover: GameCover = GameCover({self.cover})
if self.game:
@@ -158,11 +161,20 @@ class DetailsDialog(Adw.Dialog):
self.set_focus(self.name)
def delete_pixbuf(self, *_args: Any) -> None:
if self.tmp_cover_path:
self.tmp_cover_path.unlink(missing_ok=True)
self.game_cover.new_cover()
self.cover_button_delete_revealer.set_reveal_child(False)
self.cover_changed = True
def on_closed(self, *args):
if self.tmp_cover_path:
self.tmp_cover_path.unlink(missing_ok=True)
self.set_is_open(False)
def apply_preferences(self, *_args: Any) -> None:
final_name = self.name.get_text()
final_developer = self.developer.get_text()
@@ -238,6 +250,7 @@ class DetailsDialog(Adw.Dialog):
save_cover(
self.game.game_id,
self.game_cover.path,
self.game_cover.pixbuf,
)
shared.store.add_game(self.game, {}, run_pipeline=False)
@@ -283,7 +296,7 @@ class DetailsDialog(Adw.Dialog):
def toggle_loading(self) -> None:
self.apply_button.set_sensitive(not self.apply_button.get_sensitive())
self.spinner.set_spinning(not self.spinner.get_spinning())
self.spinner.set_visible(not self.spinner.get_visible())
self.cover_overlay.set_opacity(not self.cover_overlay.get_opacity())
def set_cover(self, _source: Any, result: Gio.Task, *_args: Any) -> None:
@@ -293,26 +306,29 @@ class DetailsDialog(Adw.Dialog):
return
def thread_func() -> None:
new_path = None
is_animated = False
try:
with Image.open(path) as image:
if getattr(image, "is_animated", False):
new_path = convert_cover(path)
except UnidentifiedImageError:
is_animated = True
except (UnidentifiedImageError, OSError, ValueError):
pass
if not new_path:
new_path = convert_cover(
if is_animated:
if self.tmp_cover_path:
self.tmp_cover_path.unlink(missing_ok=True)
self.tmp_cover_path = convert_cover(path)
self.game_cover.new_cover(self.tmp_cover_path)
else:
self.game_cover.new_cover(
pixbuf=shared.store.managers[CoverManager].composite_cover(
Path(path)
)
)
if new_path:
self.game_cover.new_cover(new_path)
self.cover_button_delete_revealer.set_reveal_child(True)
self.cover_changed = True
self.cover_button_delete_revealer.set_reveal_child(True)
self.cover_changed = True
self.toggle_loading()

View File

@@ -157,7 +157,7 @@ class Game(Gtk.Box):
loading = self.loading > 0
self.cover.set_opacity(int(not loading))
self.spinner.set_spinning(loading)
self.spinner.set_visible(loading)
def get_cover_path(self) -> Optional[Path]:
cover_path = shared.covers_dir / f"{self.game_id}.gif"

View File

@@ -45,12 +45,22 @@ class GameCover:
self.pictures = pictures
self.new_cover(path)
def new_cover(self, path: Optional[Path] = None) -> None:
def new_cover(
self,
path: Optional[Path] = None,
pixbuf: Optional[GdkPixbuf.Pixbuf] = None
) -> None:
self.animation = None
self.texture = None
self.blurred = None
self.luminance = None
self.path = path
self.pixbuf = pixbuf
if pixbuf:
self.texture = Gdk.Texture.new_for_pixbuf(pixbuf)
self.set_texture(self.texture)
return
if path:
if path.suffix == ".gif":

View File

@@ -106,7 +106,6 @@ class Importer(ErrorProducer):
def run(self) -> None:
"""Use several Gio.Task to import games from added sources"""
shared.win.get_application().state = shared.AppState.IMPORT
if self.__class__.summary_toast:
@@ -137,6 +136,7 @@ class Importer(ErrorProducer):
)
self.progress_changed_callback()
GLib.timeout_add(100, self.__watchdog)
def create_dialog(self) -> None:
"""Create the import dialog"""
@@ -281,8 +281,7 @@ class Importer(ErrorProducer):
shared.store.duplicate_game_ids = set()
# Disconnect the close-attempt signal that closes the main window
self.import_dialog.disconnect(self.close_attempt_id)
# Stupid hack because stupid libadwaita is stupid
GLib.timeout_add(50, self.import_dialog.force_close)
self.import_dialog.force_close()
self.__class__.summary_toast = self.create_summary_toast()
self.create_error_dialog()
shared.win.get_application().lookup_action("import").set_enabled(True)
@@ -397,7 +396,13 @@ class Importer(ErrorProducer):
toast.set_title(toast_title)
shared.win.toast_overlay.add_toast(toast)
if not (
self.n_games_added == 0
and removed_length == 0
and shared.schema.get_boolean("auto-import")
):
shared.win.toast_overlay.add_toast(toast)
return toast
def open_preferences(
@@ -423,3 +428,11 @@ class Importer(ErrorProducer):
self.open_preferences(*args).connect("close-request", self.timeout_toast)
else:
self.timeout_toast()
def __watchdog(self) -> bool:
# This can help resolve a race condition where the dialog would stay open
if not self.finished:
return True
self.import_dialog.force_close()
return shared.win.get_visible_dialog() == self.import_dialog

View File

@@ -41,7 +41,7 @@ from cartridges.importer.bottles_source import BottlesSource
from cartridges.importer.desktop_source import DesktopSource
from cartridges.importer.flatpak_source import FlatpakSource
from cartridges.importer.heroic_source import HeroicSource
from cartridges.importer.importer import Importer
from cartridges.importer.importer import Importer # yo dawg
from cartridges.importer.itch_source import ItchSource
from cartridges.importer.legendary_source import LegendarySource
from cartridges.importer.lutris_source import LutrisSource
@@ -107,6 +107,10 @@ class CartridgesApplication(Adw.Application):
def do_activate(self) -> None: # pylint: disable=arguments-differ
"""Called on app creation"""
if os.getenv("XDG_CURRENT_DESKOP") == "COSMIC":
Gio.AppInfo.launch_default_for_uri("https://stopthemingmy.app")
self.quit()
try:
setup_logging()
except ValueError:
@@ -114,9 +118,6 @@ class CartridgesApplication(Adw.Application):
log_system_info()
# Set fallback icon-name
Gtk.Window.set_default_icon_name(shared.APP_ID)
# Create the main window
win = self.props.active_window # pylint: disable=no-member
if not win:
@@ -192,6 +193,9 @@ class CartridgesApplication(Adw.Application):
shared.win.present()
if shared.schema.get_boolean("auto-import"):
self.on_import_action()
def do_handle_local_options(self, options: GLib.VariantDict) -> int:
if search := options.lookup_value("search"):
self.init_search_term = search.get_string()
@@ -399,7 +403,11 @@ class CartridgesApplication(Adw.Application):
if action[1:2]:
self.set_accels_for_action(
f"app.{action[0]}" if scope == self else f"win.{action[0]}",
tuple(s.replace("<primary>", "<meta>") for s in action[1]),
(
tuple(s.replace("<primary>", "<meta>") for s in action[1])
if sys.platform == "darwin"
else action[1]
),
)
scope.add_action(simple_action)

View File

@@ -17,6 +17,8 @@
#
# SPDX-License-Identifier: GPL-3.0-or-later
# pyright: reportAssignmentType=none
import logging
import re
from pathlib import Path
@@ -48,74 +50,74 @@ from cartridges.utils.create_dialog import create_dialog
class CartridgesPreferences(Adw.PreferencesDialog):
__gtype_name__ = "CartridgesPreferences"
general_page = Gtk.Template.Child()
import_page = Gtk.Template.Child()
sgdb_page = Gtk.Template.Child()
general_page: Adw.PreferencesPage = Gtk.Template.Child()
import_page: Adw.PreferencesPage = Gtk.Template.Child()
sgdb_page: Adw.PreferencesPage = Gtk.Template.Child()
sources_group = Gtk.Template.Child()
sources_group: Adw.PreferencesGroup = Gtk.Template.Child()
exit_after_launch_switch = Gtk.Template.Child()
cover_launches_game_switch = Gtk.Template.Child()
high_quality_images_switch = Gtk.Template.Child()
exit_after_launch_switch: Adw.SwitchRow = Gtk.Template.Child()
cover_launches_game_switch: Adw.SwitchRow = Gtk.Template.Child()
high_quality_images_switch: Adw.SwitchRow = Gtk.Template.Child()
remove_missing_switch = Gtk.Template.Child()
auto_import_switch: Adw.SwitchRow = Gtk.Template.Child()
remove_missing_switch: Adw.SwitchRow = Gtk.Template.Child()
steam_expander_row = Gtk.Template.Child()
steam_data_action_row = Gtk.Template.Child()
steam_data_file_chooser_button = Gtk.Template.Child()
steam_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
steam_data_action_row: Adw.ActionRow = Gtk.Template.Child()
steam_data_file_chooser_button: Gtk.Button = Gtk.Template.Child()
lutris_expander_row = Gtk.Template.Child()
lutris_data_action_row = Gtk.Template.Child()
lutris_data_file_chooser_button = Gtk.Template.Child()
lutris_import_steam_switch = Gtk.Template.Child()
lutris_import_flatpak_switch = Gtk.Template.Child()
lutris_expander_row: Adw.ExpanderRowClass = Gtk.Template.Child()
lutris_data_action_row: Adw.ActionRow = Gtk.Template.Child()
lutris_data_file_chooser_button: Gtk.Button = Gtk.Template.Child()
lutris_import_steam_switch: Adw.SwitchRow = Gtk.Template.Child()
lutris_import_flatpak_switch: Adw.SwitchRow = Gtk.Template.Child()
heroic_expander_row = Gtk.Template.Child()
heroic_config_action_row = Gtk.Template.Child()
heroic_config_file_chooser_button = Gtk.Template.Child()
heroic_import_epic_switch = Gtk.Template.Child()
heroic_import_gog_switch = Gtk.Template.Child()
heroic_import_amazon_switch = Gtk.Template.Child()
heroic_import_sideload_switch = Gtk.Template.Child()
heroic_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
heroic_config_action_row: Adw.ActionRow = Gtk.Template.Child()
heroic_config_file_chooser_button: Gtk.Button = Gtk.Template.Child()
heroic_import_epic_switch: Adw.SwitchRow = Gtk.Template.Child()
heroic_import_gog_switch: Adw.SwitchRow = Gtk.Template.Child()
heroic_import_amazon_switch: Adw.SwitchRow = Gtk.Template.Child()
heroic_import_sideload_switch: Adw.SwitchRow = Gtk.Template.Child()
bottles_expander_row = Gtk.Template.Child()
bottles_data_action_row = Gtk.Template.Child()
bottles_data_file_chooser_button = Gtk.Template.Child()
bottles_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
bottles_data_action_row: Adw.ActionRow = Gtk.Template.Child()
bottles_data_file_chooser_button: Gtk.Button = Gtk.Template.Child()
itch_expander_row = Gtk.Template.Child()
itch_config_action_row = Gtk.Template.Child()
itch_config_file_chooser_button = Gtk.Template.Child()
itch_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
itch_config_action_row: Adw.ActionRow = Gtk.Template.Child()
itch_config_file_chooser_button: Gtk.Button = Gtk.Template.Child()
legendary_expander_row = Gtk.Template.Child()
legendary_config_action_row = Gtk.Template.Child()
legendary_config_file_chooser_button = Gtk.Template.Child()
legendary_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
legendary_config_action_row: Adw.ActionRow = Gtk.Template.Child()
legendary_config_file_chooser_button: Gtk.Button = Gtk.Template.Child()
retroarch_expander_row = Gtk.Template.Child()
retroarch_config_action_row = Gtk.Template.Child()
retroarch_config_file_chooser_button = Gtk.Template.Child()
retroarch_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
retroarch_config_action_row: Adw.ActionRow = Gtk.Template.Child()
retroarch_config_file_chooser_button: Gtk.Button = Gtk.Template.Child()
flatpak_expander_row = Gtk.Template.Child()
flatpak_system_data_action_row = Gtk.Template.Child()
flatpak_system_data_file_chooser_button = Gtk.Template.Child()
flatpak_user_data_action_row = Gtk.Template.Child()
flatpak_user_data_file_chooser_button = Gtk.Template.Child()
flatpak_import_launchers_switch = Gtk.Template.Child()
flatpak_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
flatpak_system_data_action_row: Adw.ActionRow = Gtk.Template.Child()
flatpak_system_data_file_chooser_button: Gtk.Button = Gtk.Template.Child()
flatpak_user_data_action_row: Adw.ActionRow = Gtk.Template.Child()
flatpak_user_data_file_chooser_button: Gtk.Button = Gtk.Template.Child()
flatpak_import_launchers_switch: Adw.SwitchRow = Gtk.Template.Child()
desktop_switch = Gtk.Template.Child()
desktop_switch: Adw.SwitchRow = Gtk.Template.Child()
sgdb_key_group = Gtk.Template.Child()
sgdb_key_entry_row = Gtk.Template.Child()
sgdb_switch = Gtk.Template.Child()
sgdb_prefer_switch = Gtk.Template.Child()
sgdb_animated_switch = Gtk.Template.Child()
sgdb_fetch_button = Gtk.Template.Child()
sgdb_stack = Gtk.Template.Child()
sgdb_spinner = Gtk.Template.Child()
sgdb_key_group: Adw.PreferencesGroup = Gtk.Template.Child()
sgdb_key_entry_row: Adw.EntryRow = Gtk.Template.Child()
sgdb_switch: Adw.SwitchRow = Gtk.Template.Child()
sgdb_prefer_switch: Adw.SwitchRow = Gtk.Template.Child()
sgdb_animated_switch: Adw.SwitchRow = Gtk.Template.Child()
sgdb_fetch_button: Gtk.Button = Gtk.Template.Child()
sgdb_stack: Gtk.Stack = Gtk.Template.Child()
sgdb_spinner: Adw.Spinner = Gtk.Template.Child()
danger_zone_group = Gtk.Template.Child()
remove_all_games_list_box = Gtk.Template.Child()
reset_list_box = Gtk.Template.Child()
reset_group = Gtk.Template.Child()
remove_all_games_button_row = Gtk.Template.Child()
reset_button_row = Gtk.Template.Child()
removed_games: set[Game] = set()
warning_menu_buttons: dict = {}
@@ -145,12 +147,12 @@ class CartridgesPreferences(Adw.PreferencesDialog):
self.add_controller(shortcut_controller)
# General
self.remove_all_games_list_box.connect("row-activated", self.remove_all_games)
self.remove_all_games_button_row.connect("activated", self.remove_all_games)
# Debug
if shared.PROFILE == "development":
self.reset_group.set_visible(True)
self.reset_list_box.connect("row-activated", self.reset_app)
self.reset_button_row.set_visible(True)
self.reset_button_row.connect("activated", self.reset_app)
# Sources settings
for source_class in (
@@ -195,7 +197,7 @@ class CartridgesPreferences(Adw.PreferencesDialog):
sgdb_manager = shared.store.managers[SgdbManager]
sgdb_manager.reset_cancellable()
self.sgdb_spinner.set_spinning(True)
self.sgdb_spinner.set_visible(True)
self.sgdb_stack.set_visible_child(self.sgdb_spinner)
self.add_toast(download_toast := Adw.Toast.new(_("Downloading covers…")))
@@ -222,7 +224,7 @@ class CartridgesPreferences(Adw.PreferencesDialog):
download_toast.dismiss()
self.add_toast(toast)
self.sgdb_spinner.set_spinning(False)
self.sgdb_spinner.set_visible(False)
self.sgdb_stack.set_visible_child(self.sgdb_fetch_button)
for game in shared.store:
@@ -236,6 +238,7 @@ class CartridgesPreferences(Adw.PreferencesDialog):
"exit-after-launch",
"cover-launches-game",
"high-quality-images",
"auto-import",
"remove-missing",
"lutris-import-steam",
"lutris-import-flatpak",
@@ -280,7 +283,7 @@ class CartridgesPreferences(Adw.PreferencesDialog):
) -> None:
self.file_chooser.select_folder(shared.win, None, callback, callback_data)
def undo_remove_all(self, *_args: Any) -> None:
def undo_remove_all(self, *_args: Any) -> bool:
shared.win.get_application().state = shared.AppState.UNDO_REMOVE_ALL_GAMES
for game in self.removed_games:
game.removed = False
@@ -292,6 +295,8 @@ class CartridgesPreferences(Adw.PreferencesDialog):
shared.win.get_application().state = shared.AppState.DEFAULT
shared.win.create_source_rows()
return True
def remove_all_games(self, *_args: Any) -> None:
shared.win.get_application().state = shared.AppState.REMOVE_ALL_GAMES
shared.win.row_selected(None, shared.win.all_games_row_box.get_parent())

78
cartridges/shared.pyi Normal file
View File

@@ -0,0 +1,78 @@
# shared.pyi
#
# Copyright 2024 kramo
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# SPDX-License-Identifier: GPL-3.0-or-later
from pathlib import Path
from typing import Optional
from gi.repository import Gio
from cartridges.importer.importer import Importer
from cartridges.store.store import Store
from cartridges.window import CartridgesWindow
class AppState:
DEFAULT: int
LOAD_FROM_DISK: int
IMPORT: int
REMOVE_ALL_GAMES: int
UNDO_REMOVE_ALL_GAMES: int
APP_ID: str
VERSION: str
PREFIX: str
PROFILE: str
TIFF_COMPRESSION: str
SPEC_VERSION: float
schema: Gio.Settings
state_schema: Gio.Settings
home: Path
data_dir: Path
host_data_dir: Path
config_dir: Path
host_config_dir: Path
cache_dir: Path
host_cache_dir: Path
flatpak_dir: Path
games_dir: Path
covers_dir: Path
appdata_dir: Path
local_appdata_dir: Path
programfiles32_dir: Path
app_support_dir: Path
scale_factor: int
image_size: int
win: Optional[CartridgesWindow]
importer: Optional[Importer]
import_time: Optional[int]
store = Optional[Store]
log_files: list[Path]

View File

@@ -19,10 +19,10 @@
# SPDX-License-Identifier: GPL-3.0-or-later
from pathlib import Path
from typing import NamedTuple
from typing import NamedTuple, Optional
import requests
from gi.repository import GdkPixbuf, Gio
from gi.repository import GdkPixbuf, Gio, GLib
from requests.exceptions import HTTPError, SSLError
from cartridges import shared
@@ -128,9 +128,21 @@ class CoverManager(Manager):
"""
# Load source image
source = GdkPixbuf.Pixbuf.new_from_file(
str(convert_cover(image_path, resize=False))
)
try:
source = GdkPixbuf.Pixbuf.new_from_file(
str(image_path)
)
except GLib.Error:
tmp_cover_path = convert_cover(image_path, resize=False)
if tmp_cover_path:
source = GdkPixbuf.Pixbuf.new_from_file(
str(tmp_cover_path)
)
tmp_cover_path.unlink(missing_ok=True)
else:
return None
source_size = ImageSize(source.get_width(), source.get_height())
cover_size = ImageSize._make(shared.image_size)
@@ -192,7 +204,8 @@ class CoverManager(Manager):
save_cover(
game.game_id,
convert_cover(
pixbuf=self.composite_cover(image_path, **composite_kwargs)
),
pixbuf=self.composite_cover(image_path, **composite_kwargs),
)
if key == "online_cover_url":
image_path.unlink(missing_ok=True)

View File

@@ -33,7 +33,7 @@ def create_dialog(
dialog.add_response("dismiss", _("Dismiss"))
if extra_option:
dialog.add_response(extra_option, _(extra_label))
dialog.add_response(extra_option, extra_label or "")
dialog.choose(win)
return dialog

View File

@@ -30,24 +30,11 @@ from cartridges import shared
def convert_cover(
cover_path: Optional[Path] = None,
pixbuf: Optional[GdkPixbuf.Pixbuf] = None,
resize: bool = True,
) -> Optional[Path]:
if not cover_path and not pixbuf:
return None
pixbuf_extensions = set()
for pixbuf_format in GdkPixbuf.Pixbuf.get_formats():
for pixbuf_extension in pixbuf_format.get_extensions():
pixbuf_extensions.add(pixbuf_extension)
if not resize and cover_path and cover_path.suffix.lower()[1:] in pixbuf_extensions:
return cover_path
if pixbuf:
cover_path = Path(Gio.File.new_tmp("XXXXXX.tiff")[0].get_path())
pixbuf.savev(str(cover_path), "tiff", ["compression"], ["1"])
try:
with Image.open(cover_path) as image:
if getattr(image, "is_animated", False):
@@ -76,7 +63,7 @@ def convert_cover(
if shared.schema.get_boolean("high-quality-images")
else shared.TIFF_COMPRESSION,
)
except UnidentifiedImageError:
except (UnidentifiedImageError, OSError, ValueError):
try:
Gdk.Texture.new_from_filename(str(cover_path)).save_to_tiff(
tmp_path := Gio.File.new_tmp("XXXXXX.tiff")[0].get_path()
@@ -88,7 +75,11 @@ def convert_cover(
return tmp_path
def save_cover(game_id: str, cover_path: Path) -> None:
def save_cover(
game_id: str,
cover_path: Optional[Path] = None,
pixbuf: Optional[GdkPixbuf.Pixbuf] = None,
) -> None:
shared.covers_dir.mkdir(parents=True, exist_ok=True)
animated_path = shared.covers_dir / f"{game_id}.gif"
@@ -98,7 +89,15 @@ def save_cover(game_id: str, cover_path: Path) -> None:
animated_path.unlink(missing_ok=True)
static_path.unlink(missing_ok=True)
if not cover_path:
if not cover_path and not pixbuf:
return
if pixbuf:
pixbuf.savev(str(static_path), "tiff", ["compression"], ["1"])
if game_id in shared.win.game_covers:
shared.win.game_covers[game_id].new_cover(static_path)
return
copyfile(

View File

@@ -134,7 +134,11 @@ class SgdbHelper:
tmp_file = Gio.File.new_tmp()[0]
tmp_file_path = tmp_file.get_path()
Path(tmp_file_path).write_bytes(response.content)
save_cover(game.game_id, convert_cover(tmp_file_path))
tmp_cover_path = convert_cover(tmp_file_path)
if tmp_cover_path:
save_cover(game.game_id, tmp_cover_path)
tmp_cover_path.unlink(missing_ok=True)
tmp_file_path.unlink(missing_ok=True)
except SgdbAuthError as error:
# Let caller handle auth errors
raise error

View File

@@ -17,8 +17,10 @@
#
# SPDX-License-Identifier: GPL-3.0-or-later
from typing import Any, Optional
# pyright: reportAssignmentType=none
from sys import platform
from typing import Any, Optional
from gi.repository import Adw, Gio, GLib, Gtk, Pango
@@ -32,52 +34,52 @@ from cartridges.utils.relative_date import relative_date
class CartridgesWindow(Adw.ApplicationWindow):
__gtype_name__ = "CartridgesWindow"
overlay_split_view = Gtk.Template.Child()
navigation_view = Gtk.Template.Child()
sidebar_navigation_page = Gtk.Template.Child()
sidebar = Gtk.Template.Child()
all_games_row_box = Gtk.Template.Child()
all_games_no_label = Gtk.Template.Child()
added_row_box = Gtk.Template.Child()
added_games_no_label = Gtk.Template.Child()
toast_overlay = Gtk.Template.Child()
primary_menu_button = Gtk.Template.Child()
show_sidebar_button = Gtk.Template.Child()
details_view = Gtk.Template.Child()
library_page = Gtk.Template.Child()
library_view = Gtk.Template.Child()
library = Gtk.Template.Child()
scrolledwindow = Gtk.Template.Child()
library_overlay = Gtk.Template.Child()
notice_empty = Gtk.Template.Child()
notice_no_results = Gtk.Template.Child()
search_bar = Gtk.Template.Child()
search_entry = Gtk.Template.Child()
search_button = Gtk.Template.Child()
overlay_split_view: Adw.OverlaySplitView = Gtk.Template.Child()
navigation_view: Adw.NavigationView = Gtk.Template.Child()
sidebar_navigation_page: Adw.NavigationPage = Gtk.Template.Child()
sidebar: Gtk.ListBox = Gtk.Template.Child()
all_games_row_box: Gtk.Box = Gtk.Template.Child()
all_games_no_label: Gtk.Label = Gtk.Template.Child()
added_row_box: Gtk.Box = Gtk.Template.Child()
added_games_no_label: Gtk.Label = Gtk.Template.Child()
toast_overlay: Adw.ToastOverlay = Gtk.Template.Child()
primary_menu_button: Gtk.MenuButton = Gtk.Template.Child()
show_sidebar_button: Gtk.Button = Gtk.Template.Child()
details_view: Gtk.Overlay = Gtk.Template.Child()
library_page: Adw.NavigationPage = Gtk.Template.Child()
library_view: Adw.ToolbarView = Gtk.Template.Child()
library: Gtk.FlowBox = Gtk.Template.Child()
scrolledwindow: Gtk.ScrolledWindow = Gtk.Template.Child()
library_overlay: Gtk.Overlay = Gtk.Template.Child()
notice_empty: Adw.StatusPage = Gtk.Template.Child()
notice_no_results: Adw.StatusPage = Gtk.Template.Child()
search_bar: Gtk.SearchBar = Gtk.Template.Child()
search_entry: Gtk.SearchEntry = Gtk.Template.Child()
search_button: Gtk.ToggleButton = Gtk.Template.Child()
details_page = Gtk.Template.Child()
details_view_toolbar_view = Gtk.Template.Child()
details_view_cover = Gtk.Template.Child()
details_view_spinner = Gtk.Template.Child()
details_view_title = Gtk.Template.Child()
details_view_blurred_cover = Gtk.Template.Child()
details_view_play_button = Gtk.Template.Child()
details_view_developer = Gtk.Template.Child()
details_view_added = Gtk.Template.Child()
details_view_last_played = Gtk.Template.Child()
details_view_hide_button = Gtk.Template.Child()
details_page: Adw.NavigationPage = Gtk.Template.Child()
details_view_toolbar_view: Adw.ToolbarView = Gtk.Template.Child()
details_view_cover: Gtk.Picture = Gtk.Template.Child()
details_view_spinner: Adw.Spinner = Gtk.Template.Child()
details_view_title: Gtk.Label = Gtk.Template.Child()
details_view_blurred_cover: Gtk.Picture = Gtk.Template.Child()
details_view_play_button: Gtk.Button = Gtk.Template.Child()
details_view_developer: Gtk.Label = Gtk.Template.Child()
details_view_added: Gtk.ShortcutLabel = Gtk.Template.Child()
details_view_last_played: Gtk.Label = Gtk.Template.Child()
details_view_hide_button: Gtk.Button = Gtk.Template.Child()
hidden_library_page = Gtk.Template.Child()
hidden_primary_menu_button = Gtk.Template.Child()
hidden_library = Gtk.Template.Child()
hidden_library_view = Gtk.Template.Child()
hidden_scrolledwindow = Gtk.Template.Child()
hidden_library_overlay = Gtk.Template.Child()
hidden_notice_empty = Gtk.Template.Child()
hidden_notice_no_results = Gtk.Template.Child()
hidden_search_bar = Gtk.Template.Child()
hidden_search_entry = Gtk.Template.Child()
hidden_search_button = Gtk.Template.Child()
hidden_library_page: Adw.NavigationPage = Gtk.Template.Child()
hidden_primary_menu_button: Gtk.MenuButton = Gtk.Template.Child()
hidden_library: Gtk.FlowBox = Gtk.Template.Child()
hidden_library_view: Adw.ToolbarView = Gtk.Template.Child()
hidden_scrolledwindow: Gtk.ScrolledWindow = Gtk.Template.Child()
hidden_library_overlay: Gtk.Overlay = Gtk.Template.Child()
hidden_notice_empty: Adw.StatusPage = Gtk.Template.Child()
hidden_notice_no_results: Adw.StatusPage = Gtk.Template.Child()
hidden_search_bar: Gtk.SearchBar = Gtk.Template.Child()
hidden_search_entry: Gtk.SearchEntry = Gtk.Template.Child()
hidden_search_button: Gtk.ToggleButton = Gtk.Template.Child()
game_covers: dict = {}
toasts: dict = {}
@@ -349,7 +351,7 @@ class CartridgesWindow(Adw.ApplicationWindow):
self.active_game = game
self.details_view_cover.set_opacity(int(not game.loading))
self.details_view_spinner.set_spinning(game.loading)
self.details_view_spinner.set_visible(game.loading)
self.details_view_developer.set_label(game.developer or "")
self.details_view_developer.set_visible(bool(game.developer))

View File

@@ -31,9 +31,8 @@ template $DetailsDialog: Adw.Dialog {
Overlay {
[overlay]
Spinner spinner {
margin-start: 72;
margin-end: 72;
Adw.Spinner spinner {
visible: false;
}
Overlay cover_overlay {

View File

@@ -64,9 +64,8 @@ template $Game: Box {
Overlay {
[overlay]
Spinner spinner {
margin-start: 72;
margin-end: 72;
Adw.Spinner spinner {
visible: false;
}
Picture cover {

View File

@@ -33,76 +33,21 @@ template $CartridgesPreferences: Adw.PreferencesDialog {
Adw.PreferencesGroup danger_zone_group {
title: _("Danger Zone");
separate-rows: true;
ListBox remove_all_games_list_box {
Adw.PreferencesRow {
activatable: true;
selectable: false;
Box {
spacing: 6;
valign: center;
halign: center;
Label {
label: _("Remove All Games");
ellipsize: end;
styles [
"heading",
]
}
styles [
"header",
]
}
styles [
"error",
]
}
Adw.ButtonRow remove_all_games_button_row {
title: _("Remove All Games");
styles [
"boxed-list",
"destructive-action"
]
}
}
Adw.PreferencesGroup reset_group {
visible: false;
ListBox reset_list_box {
Adw.PreferencesRow {
activatable: true;
selectable: false;
Box {
spacing: 6;
valign: center;
halign: center;
Label {
label: "Reset App";
ellipsize: end;
styles [
"heading",
]
}
styles [
"header",
]
}
styles [
"error",
]
}
Adw.ButtonRow reset_button_row {
title: "Reset App";
styles [
"boxed-list",
"destructive-action"
]
}
}
@@ -116,6 +61,10 @@ template $CartridgesPreferences: Adw.PreferencesDialog {
Adw.PreferencesGroup import_behavior_group {
title: _("Behavior");
Adw.SwitchRow auto_import_switch {
title: _("Import Games Automatically");
}
Adw.SwitchRow remove_missing_switch {
title: _("Remove Uninstalled Games");
}
@@ -123,6 +72,7 @@ template $CartridgesPreferences: Adw.PreferencesDialog {
Adw.PreferencesGroup sources_group {
title: _("Sources");
separate-rows: true;
Adw.ExpanderRow steam_expander_row {
title: _("Steam");
@@ -440,7 +390,8 @@ template $CartridgesPreferences: Adw.PreferencesDialog {
valign: center;
}
Spinner sgdb_spinner {
Adw.Spinner sgdb_spinner {
visible: false;
valign: center;
}
}

View File

@@ -1,5 +1,7 @@
@define-color accent_color @purple_1;
@define-color accent_bg_color @purple_4;
:root {
--accent-color: var(--purple-1);
--accent-bg-color: var(--purple-4);
}
#details_view {
background-color: black;
@@ -8,4 +10,4 @@
#details_view_play_button {
color: rgba(0, 0, 0, .8);
background-color: white;
}
}

View File

@@ -1,5 +1,7 @@
@define-color accent_color @purple_5;
@define-color accent_bg_color @purple_3;
:root {
--accent-color: var(--purple-5);
--accent-bg-color: var(--purple-3);
}
#details_view {
background-color: white;
@@ -8,4 +10,4 @@
#details_view_play_button {
color: white;
background-color: rgba(0, 0, 0, .8);
}
}

View File

@@ -341,9 +341,8 @@ Adw.NavigationPage details_page {
Overlay {
[overlay]
Spinner details_view_spinner {
margin-start: 72;
margin-end: 72;
Adw.Spinner details_view_spinner {
visible: false;
}
Picture details_view_cover {

View File

@@ -2,6 +2,9 @@
<schemalist gettext-domain="cartridges">
<schema id="@APP_ID@" path="@PREFIX@/">
<key name="auto-import" type="b">
<default>false</default>
</key>
<key name="exit-after-launch" type="b">
<default>false</default>
</key>

View File

@@ -31,9 +31,9 @@
<control>keyboard</control>
<control>touch</control>
</supports>
<recommends>
<requires>
<display_length compare="ge">360</display_length>
</recommends>
</requires>
<screenshots>
<screenshot type="default">
<image>https://raw.githubusercontent.com/kra-mo/cartridges/main/data/screenshots/1.png</image>
@@ -54,11 +54,20 @@
</screenshots>
<content_rating type="oars-1.1" />
<releases>
<release version="2.9.2" date="2024-07-11">
<release version="2.10.1" date="2024-10-11">
<description translate="no">
<p>Fixed an issue with manually changing game cover art</p>
</description>
</release>
<release version="2.10.0" date="2024-09-18">
<description translate="no">
<p>Updated for GNOME 47</p>
</description>
</release>
<release version="2.9.3" date="2024-07-18">
<description translate="no">
<ul>
<li>Cartridges now utilizes the menu bar on macOS</li>
<li>Various bug fixes</li>
<li>Fixed incorrect modifiers being used for keyboard shortcuts</li>
</ul>
</description>
</release>

View File

@@ -1,6 +1,6 @@
project(
'cartridges',
version: '2.9.2',
version: '2.10.1',
meson_version: '>= 0.59.0',
default_options: [
'warning_level=2',

View File

@@ -27,3 +27,5 @@ ca
ja
hi
en_GB
ie
te

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
"POT-Creation-Date: 2024-10-31 14:25+0100\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"
@@ -46,8 +46,8 @@ msgid ""
"SteamGridDB."
msgstr ""
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:318
#: cartridges/details_dialog.py:68
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:320
#: cartridges/details_dialog.py:77
msgid "Game Details"
msgstr ""
@@ -56,7 +56,7 @@ msgid "Edit Game Details"
msgstr ""
#: data/page.kramo.Cartridges.metainfo.xml.in:52 data/gtk/help-overlay.blp:19
#: data/gtk/window.blp:542 cartridges/details_dialog.py:267
#: data/gtk/window.blp:543 cartridges/details_dialog.py:276
#: cartridges/importer/importer.py:320 cartridges/importer/importer.py:370
msgid "Preferences"
msgstr ""
@@ -65,47 +65,47 @@ msgstr ""
msgid "Cancel"
msgstr ""
#: data/gtk/details-dialog.blp:46
#: data/gtk/details-dialog.blp:45
msgid "New Cover"
msgstr ""
#: data/gtk/details-dialog.blp:65
#: data/gtk/details-dialog.blp:64
msgid "Delete Cover"
msgstr ""
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
#: data/gtk/details-dialog.blp:92 data/gtk/game.blp:80
msgid "Title"
msgstr ""
#: data/gtk/details-dialog.blp:97
#: data/gtk/details-dialog.blp:96
msgid "Developer (optional)"
msgstr ""
#: data/gtk/details-dialog.blp:103
#: data/gtk/details-dialog.blp:102
msgid "Executable"
msgstr ""
#: data/gtk/details-dialog.blp:109
#: data/gtk/details-dialog.blp:108
msgid "Select File"
msgstr ""
#: data/gtk/details-dialog.blp:120
#: data/gtk/details-dialog.blp:119
msgid "More Info"
msgstr ""
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
#: data/gtk/game.blp:101 data/gtk/game.blp:109 data/gtk/window.blp:444
msgid "Edit"
msgstr ""
#: data/gtk/game.blp:103 cartridges/window.py:350
#: data/gtk/game.blp:102 cartridges/window.py:359
msgid "Hide"
msgstr ""
#: data/gtk/game.blp:104 data/gtk/game.blp:112 data/gtk/window.blp:463
#: data/gtk/game.blp:103 data/gtk/game.blp:111 data/gtk/window.blp:464
msgid "Remove"
msgstr ""
#: data/gtk/game.blp:111 cartridges/window.py:352
#: data/gtk/game.blp:110 cartridges/window.py:361
msgid "Unhide"
msgstr ""
@@ -113,17 +113,17 @@ msgstr ""
msgid "General"
msgstr ""
#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:205 data/gtk/window.blp:221
#: data/gtk/window.blp:272 data/gtk/window.blp:288 data/gtk/window.blp:474
#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:207 data/gtk/window.blp:223
#: data/gtk/window.blp:274 data/gtk/window.blp:290 data/gtk/window.blp:475
msgid "Search"
msgstr ""
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:544
msgid "Keyboard Shortcuts"
msgstr ""
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
#: cartridges/preferences.py:137 cartridges/importer/importer.py:394
msgid "Undo"
msgstr ""
@@ -131,11 +131,11 @@ msgstr ""
msgid "Quit"
msgstr ""
#: data/gtk/help-overlay.blp:39 data/gtk/window.blp:92 data/gtk/window.blp:185
#: data/gtk/help-overlay.blp:39 data/gtk/window.blp:92 data/gtk/window.blp:187
msgid "Toggle Sidebar"
msgstr ""
#: data/gtk/help-overlay.blp:44 data/gtk/window.blp:198 data/gtk/window.blp:265
#: data/gtk/help-overlay.blp:44 data/gtk/window.blp:200 data/gtk/window.blp:267
msgid "Main Menu"
msgstr ""
@@ -143,12 +143,12 @@ msgstr ""
msgid "Games"
msgstr ""
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:191 data/gtk/window.blp:550
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:193 data/gtk/window.blp:551
msgid "Add Game"
msgstr ""
#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:113
#: data/gtk/window.blp:27 data/gtk/window.blp:554
#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:58
#: data/gtk/window.blp:27 data/gtk/window.blp:555
msgid "Import"
msgstr ""
@@ -160,8 +160,8 @@ msgstr ""
msgid "Remove Game"
msgstr ""
#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:117
#: data/gtk/preferences.blp:415
#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:62
#: data/gtk/preferences.blp:365
msgid "Behavior"
msgstr ""
@@ -177,7 +177,7 @@ msgstr ""
msgid "Swaps the behavior of the cover image and the play button"
msgstr ""
#: data/gtk/preferences.blp:26 cartridges/details_dialog.py:82
#: data/gtk/preferences.blp:26 cartridges/details_dialog.py:91
msgid "Images"
msgstr ""
@@ -193,137 +193,141 @@ msgstr ""
msgid "Danger Zone"
msgstr ""
#: data/gtk/preferences.blp:48
#: data/gtk/preferences.blp:39
msgid "Remove All Games"
msgstr ""
#: data/gtk/preferences.blp:120
#: data/gtk/preferences.blp:65
msgid "Import Games Automatically"
msgstr ""
#: data/gtk/preferences.blp:69
msgid "Remove Uninstalled Games"
msgstr ""
#: data/gtk/preferences.blp:125
#: data/gtk/preferences.blp:74
msgid "Sources"
msgstr ""
#: data/gtk/preferences.blp:128 cartridges/importer/steam_source.py:114
#: data/gtk/preferences.blp:78 cartridges/importer/steam_source.py:114
msgid "Steam"
msgstr ""
#: data/gtk/preferences.blp:137 data/gtk/preferences.blp:164
#: data/gtk/preferences.blp:199 data/gtk/preferences.blp:242
#: data/gtk/preferences.blp:269 data/gtk/preferences.blp:296
#: data/gtk/preferences.blp:323
#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:114
#: data/gtk/preferences.blp:149 data/gtk/preferences.blp:192
#: data/gtk/preferences.blp:219 data/gtk/preferences.blp:246
#: data/gtk/preferences.blp:273
msgid "Install Location"
msgstr ""
#: data/gtk/preferences.blp:155 data/gtk/window.blp:564
#: cartridges/importer/lutris_source.py:96
#: data/gtk/preferences.blp:105 data/gtk/window.blp:565
#: cartridges/importer/lutris_source.py:107
msgid "Lutris"
msgstr ""
#: data/gtk/preferences.blp:181
#: data/gtk/preferences.blp:131
msgid "Import Steam Games"
msgstr ""
#: data/gtk/preferences.blp:185
#: data/gtk/preferences.blp:135
msgid "Import Flatpak Games"
msgstr ""
#: data/gtk/preferences.blp:190 cartridges/importer/heroic_source.py:355
#: data/gtk/preferences.blp:140 cartridges/importer/heroic_source.py:355
msgid "Heroic"
msgstr ""
#: data/gtk/preferences.blp:216
#: data/gtk/preferences.blp:166
msgid "Import Epic Games"
msgstr ""
#: data/gtk/preferences.blp:220
#: data/gtk/preferences.blp:170
msgid "Import GOG Games"
msgstr ""
#: data/gtk/preferences.blp:224
#: data/gtk/preferences.blp:174
msgid "Import Amazon Games"
msgstr ""
#: data/gtk/preferences.blp:228
#: data/gtk/preferences.blp:178
msgid "Import Sideloaded Games"
msgstr ""
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
#: data/gtk/preferences.blp:183 cartridges/importer/bottles_source.py:86
msgid "Bottles"
msgstr ""
#: data/gtk/preferences.blp:260 cartridges/importer/itch_source.py:81
#: data/gtk/preferences.blp:210 cartridges/importer/itch_source.py:81
msgid "itch"
msgstr ""
#: data/gtk/preferences.blp:287 cartridges/importer/legendary_source.py:97
#: data/gtk/preferences.blp:237 cartridges/importer/legendary_source.py:97
msgid "Legendary"
msgstr ""
#: data/gtk/preferences.blp:314 cartridges/importer/retroarch_source.py:142
#: data/gtk/preferences.blp:264 cartridges/importer/retroarch_source.py:142
msgid "RetroArch"
msgstr ""
#: data/gtk/preferences.blp:341 cartridges/importer/flatpak_source.py:143
#: data/gtk/preferences.blp:291 cartridges/importer/flatpak_source.py:143
msgid "Flatpak"
msgstr ""
#. The location of the system-wide data directory
#: data/gtk/preferences.blp:351
#: data/gtk/preferences.blp:301
msgid "System Location"
msgstr ""
#. The location of the user-specific data directory
#: data/gtk/preferences.blp:369
#: data/gtk/preferences.blp:319
msgid "User Location"
msgstr ""
#: data/gtk/preferences.blp:386
#: data/gtk/preferences.blp:336
msgid "Import Game Launchers"
msgstr ""
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
#: data/gtk/preferences.blp:341 cartridges/importer/desktop_source.py:215
msgid "Desktop Entries"
msgstr ""
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
#: data/gtk/preferences.blp:353 data/gtk/window.blp:563
msgid "SteamGridDB"
msgstr ""
#: data/gtk/preferences.blp:407
#: data/gtk/preferences.blp:357
msgid "Authentication"
msgstr ""
#: data/gtk/preferences.blp:410
#: data/gtk/preferences.blp:360
msgid "API Key"
msgstr ""
#: data/gtk/preferences.blp:418
#: data/gtk/preferences.blp:368
msgid "Use SteamGridDB"
msgstr ""
#: data/gtk/preferences.blp:419
#: data/gtk/preferences.blp:369
msgid "Download images when adding or importing games"
msgstr ""
#: data/gtk/preferences.blp:423
#: data/gtk/preferences.blp:373
msgid "Prefer Over Official Images"
msgstr ""
#: data/gtk/preferences.blp:427
#: data/gtk/preferences.blp:377
msgid "Prefer Animated Images"
msgstr ""
#: data/gtk/preferences.blp:433
#: data/gtk/preferences.blp:383
msgid "Update Covers"
msgstr ""
#: data/gtk/preferences.blp:434
#: data/gtk/preferences.blp:384
msgid "Fetch covers for games already in your library"
msgstr ""
#: data/gtk/preferences.blp:439
#: data/gtk/preferences.blp:389
msgid "Update"
msgstr ""
@@ -351,135 +355,135 @@ msgstr ""
msgid "Games you hide will appear here"
msgstr ""
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
#: data/gtk/window.blp:76 data/gtk/window.blp:113 cartridges/main.py:249
msgid "All Games"
msgstr ""
#: data/gtk/window.blp:136 cartridges/main.py:230
#: data/gtk/window.blp:140 cartridges/main.py:251
msgid "Added"
msgstr ""
#: data/gtk/window.blp:156
#: data/gtk/window.blp:162
msgid "Imported"
msgstr ""
#: data/gtk/window.blp:258
#: data/gtk/window.blp:260
msgid "Hidden Games"
msgstr ""
#: data/gtk/window.blp:367
#: data/gtk/window.blp:368
msgid "Game Title"
msgstr ""
#: data/gtk/window.blp:424
#: data/gtk/window.blp:425
msgid "Play"
msgstr ""
#: data/gtk/window.blp:501
#: data/gtk/window.blp:502
msgid "Sort"
msgstr ""
#: data/gtk/window.blp:504
#: data/gtk/window.blp:505
msgid "A-Z"
msgstr ""
#: data/gtk/window.blp:510
#: data/gtk/window.blp:511
msgid "Z-A"
msgstr ""
#: data/gtk/window.blp:516
#: data/gtk/window.blp:517
msgid "Newest"
msgstr ""
#: data/gtk/window.blp:522
#: data/gtk/window.blp:523
msgid "Oldest"
msgstr ""
#: data/gtk/window.blp:528
#: data/gtk/window.blp:529
msgid "Last Played"
msgstr ""
#: data/gtk/window.blp:535
#: data/gtk/window.blp:536
msgid "Show Hidden"
msgstr ""
#: data/gtk/window.blp:544
#: data/gtk/window.blp:545
msgid "About Cartridges"
msgstr ""
#: data/gtk/window.blp:561
#: data/gtk/window.blp:562
msgid "IGDB"
msgstr ""
#: data/gtk/window.blp:563
#: data/gtk/window.blp:564
msgid "ProtonDB"
msgstr ""
#: data/gtk/window.blp:565
#: data/gtk/window.blp:566
msgid "HowLongToBeat"
msgstr ""
#. The variable is the title of the game
#: cartridges/main.py:205 cartridges/game.py:125
#: cartridges/main.py:226 cartridges/game.py:125
msgid "{} launched"
msgstr ""
#. Translators: Replace this with your name for it to show up in the about window
#: cartridges/main.py:270
#: cartridges/main.py:291
msgid "translator_credits"
msgstr ""
#. The variable is the date when the game was added
#: cartridges/window.py:373
#: cartridges/window.py:382
msgid "Added: {}"
msgstr ""
#: cartridges/window.py:376
#: cartridges/window.py:385
msgid "Never"
msgstr ""
#. The variable is the date when the game was last played
#: cartridges/window.py:380
#: cartridges/window.py:389
msgid "Last played: {}"
msgstr ""
#: cartridges/details_dialog.py:73
#: cartridges/details_dialog.py:82
msgid "Apply"
msgstr ""
#: cartridges/details_dialog.py:79
#: cartridges/details_dialog.py:88
msgid "Add New Game"
msgstr ""
#: cartridges/details_dialog.py:80
#: cartridges/details_dialog.py:89
msgid "Add"
msgstr ""
#: cartridges/details_dialog.py:90
#: cartridges/details_dialog.py:99
msgid "Executables"
msgstr ""
#. Translate this string as you would translate "file"
#: cartridges/details_dialog.py:105
#: cartridges/details_dialog.py:114
msgid "file.txt"
msgstr ""
#. As in software
#: cartridges/details_dialog.py:107
#: cartridges/details_dialog.py:116
msgid "program"
msgstr ""
#. Translate this string as you would translate "path to {}"
#: cartridges/details_dialog.py:112 cartridges/details_dialog.py:114
#: cartridges/details_dialog.py:121 cartridges/details_dialog.py:123
msgid "C:\\path\\to\\{}"
msgstr ""
#. Translate this string as you would translate "path to {}"
#: cartridges/details_dialog.py:118 cartridges/details_dialog.py:120
#: cartridges/details_dialog.py:127 cartridges/details_dialog.py:129
msgid "/path/to/{}"
msgstr ""
#: cartridges/details_dialog.py:125
#: cartridges/details_dialog.py:134
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
@@ -492,19 +496,19 @@ msgid ""
"If the path contains spaces, make sure to wrap it in double quotes!"
msgstr ""
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
#: cartridges/details_dialog.py:176 cartridges/details_dialog.py:182
msgid "Couldn't Add Game"
msgstr ""
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:209
#: cartridges/details_dialog.py:176 cartridges/details_dialog.py:218
msgid "Game title cannot be empty."
msgstr ""
#: cartridges/details_dialog.py:173 cartridges/details_dialog.py:217
#: cartridges/details_dialog.py:182 cartridges/details_dialog.py:226
msgid "Executable cannot be empty."
msgstr ""
#: cartridges/details_dialog.py:208 cartridges/details_dialog.py:216
#: cartridges/details_dialog.py:217 cartridges/details_dialog.py:225
msgid "Couldn't Apply Preferences"
msgstr ""
@@ -523,40 +527,40 @@ msgstr ""
msgid "{} removed"
msgstr ""
#: cartridges/preferences.py:133
#: cartridges/preferences.py:136
msgid "All games removed"
msgstr ""
#: cartridges/preferences.py:181
#: cartridges/preferences.py:188
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
#: cartridges/preferences.py:196
#: cartridges/preferences.py:203
msgid "Downloading covers…"
msgstr ""
#: cartridges/preferences.py:215
#: cartridges/preferences.py:222
msgid "Covers updated"
msgstr ""
#: cartridges/preferences.py:360
#: cartridges/preferences.py:370
msgid "Installation Not Found"
msgstr ""
#: cartridges/preferences.py:361
#: cartridges/preferences.py:371
msgid "Select a valid directory"
msgstr ""
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
#: cartridges/preferences.py:407 cartridges/importer/importer.py:318
msgid "Warning"
msgstr ""
#: cartridges/preferences.py:431
#: cartridges/preferences.py:441
msgid "Invalid Directory"
msgstr ""
#: cartridges/preferences.py:437
#: cartridges/preferences.py:447
msgid "Set Location"
msgstr ""

View File

@@ -3,13 +3,14 @@
# This file is distributed under the same license as the Cartridges package.
# سید حسین موسوی فرد <shmf1385@protonmail.com>, 2023.
# Danial Behzadi <dani.behzi@ubuntu.com>, 2023.
# آوید <avds+git@disroot.org>, 2024.
msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
"PO-Revision-Date: 2023-09-24 16:04+0000\n"
"Last-Translator: Danial Behzadi <dani.behzi@ubuntu.com>\n"
"PO-Revision-Date: 2024-07-14 20:09+0000\n"
"Last-Translator: آوید <avds+git@disroot.org>\n"
"Language-Team: Persian <https://hosted.weblate.org/projects/cartridges/"
"cartridges/fa/>\n"
"Language: fa\n"
@@ -17,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.1-dev\n"
"X-Generator: Weblate 5.7-dev\n"
#: data/page.kramo.Cartridges.desktop.in:3
#: data/page.kramo.Cartridges.metainfo.xml.in:9
@@ -74,7 +75,7 @@ msgstr "لغو"
#: data/gtk/details-dialog.blp:46
msgid "New Cover"
msgstr "طرج جلد جدید"
msgstr "طرح جلد جدید"
#: data/gtk/details-dialog.blp:65
msgid "Delete Cover"
@@ -98,7 +99,7 @@ msgstr "گزینش پرونده"
#: data/gtk/details-dialog.blp:120
msgid "More Info"
msgstr "اطّلاعات بیشتر"
msgstr "اطلاعات بیشتر"
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
msgid "Edit"
@@ -127,7 +128,7 @@ msgstr "جست‌وجو"
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
msgid "Keyboard Shortcuts"
msgstr "میان‌برهیا صفحه‌کلید"
msgstr "میان‌برهای صفحه‌کلید"
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
@@ -182,7 +183,7 @@ msgstr "طرح جلد بازی را اجرا می‌کند"
#: data/gtk/preferences.blp:21
msgid "Swaps the behavior of the cover image and the play button"
msgstr "تعویض رفتار تصویر جلد و دکمهٔ بازی کردن"
msgstr "تغییر رفتار تصویر جلد و دکمهٔ بازی کردن"
#: data/gtk/preferences.blp:26 cartridges/details_dialog.py:82
msgid "Images"
@@ -194,7 +195,7 @@ msgstr "عکس‌های با کیفیت بالا"
#: data/gtk/preferences.blp:30
msgid "Save game covers losslessly at the cost of storage"
msgstr "ذخیرهٔ طرح جلدهای بدون اتلاف به فیمت ذخیره‌سازی"
msgstr "ذخیرهٔ طرح جلدهای بدون اتلاف به قیمت ذخیره‌سازی"
#: data/gtk/preferences.blp:35
msgid "Danger Zone"
@@ -206,7 +207,7 @@ msgstr "حذف کردن همهٔ بازی‌ها"
#: data/gtk/preferences.blp:120
msgid "Remove Uninstalled Games"
msgstr "برداشن بازی‌های نصب نشده"
msgstr "برداشتن بازی‌های نصبنشده"
#: data/gtk/preferences.blp:125
msgid "Sources"
@@ -254,7 +255,7 @@ msgstr "درون‌ریزی بازی‌های آمازون"
#: data/gtk/preferences.blp:228
msgid "Import Sideloaded Games"
msgstr "درون‌ریزی بازی‌های نصب شده"
msgstr "درون‌ریزی بازی‌های نصبشده"
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
msgid "Bottles"
@@ -278,15 +279,13 @@ msgstr "فلت‌پک"
#. The location of the system-wide data directory
#: data/gtk/preferences.blp:351
#, fuzzy
msgid "System Location"
msgstr "تنظیم مکان"
msgstr "مکان سامانه"
#. The location of the user-specific data directory
#: data/gtk/preferences.blp:369
#, fuzzy
msgid "User Location"
msgstr "تنظیم مکان"
msgstr "مکان کاربر"
#: data/gtk/preferences.blp:386
msgid "Import Game Launchers"
@@ -322,20 +321,19 @@ msgstr "ترجیح به تصویرهای رسمی"
#: data/gtk/preferences.blp:427
msgid "Prefer Animated Images"
msgstr "ترچیح تصویرهای پویا"
msgstr "ترجیح تصویرهای پویا"
#: data/gtk/preferences.blp:433
#, fuzzy
msgid "Update Covers"
msgstr "حذف طرح جلد"
msgstr "به‌روزرسانی طرح جلد"
#: data/gtk/preferences.blp:434
msgid "Fetch covers for games already in your library"
msgstr ""
msgstr "دریافت طرح جلد بازی‌های کنونی کتاب‌خانه‌تان"
#: data/gtk/preferences.blp:439
msgid "Update"
msgstr ""
msgstr "به‌روزرسانی"
#: data/gtk/window.blp:6 data/gtk/window.blp:14
msgid "No Games Found"
@@ -359,7 +357,7 @@ msgstr "بدون بازی نهفته"
#: data/gtk/window.blp:41
msgid "Games you hide will appear here"
msgstr "بازی‌هایی که پنهان می‌کنید، این‌جا ظاهر خواهند شد"
msgstr "بازی‌هایی که پنهان می‌کنید، این‌جا نمایان خواهند شد"
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
msgid "All Games"
@@ -407,7 +405,7 @@ msgstr "قدیمی‌ترین"
#: data/gtk/window.blp:528
msgid "Last Played"
msgstr "آخرین بازی شده"
msgstr "آخرین بازیشده"
#: data/gtk/window.blp:535
msgid "Show Hidden"
@@ -419,15 +417,15 @@ msgstr "دربارهٔ کارتریج‌ها"
#: data/gtk/window.blp:561
msgid "IGDB"
msgstr ""
msgstr "IGDB"
#: data/gtk/window.blp:563
msgid "ProtonDB"
msgstr ""
msgstr "ProtonDB"
#: data/gtk/window.blp:565
msgid "HowLongToBeat"
msgstr ""
msgstr "HowLongToBeat"
#. The variable is the title of the game
#: cartridges/main.py:205 cartridges/game.py:125
@@ -451,7 +449,7 @@ msgstr "هرگز"
#. The variable is the date when the game was last played
#: cartridges/window.py:380
msgid "Last played: {}"
msgstr "آخرین بازی شده: {}"
msgstr "آخرین بازیشده: {}"
#: cartridges/details_dialog.py:73
msgid "Apply"
@@ -505,7 +503,7 @@ msgstr ""
"\n"
"<tt>\"{}\"</tt>\n"
"\n"
"برای گشودن پروندهٔ {}‌با برنامهٔ پیش‌گزیده:\n"
"برای گشودن پروندهٔ {} با برنامهٔ پیش‌گزیده:\n"
"\n"
"<tt>{} \"{}\"</tt>\n"
"\n"
@@ -530,7 +528,7 @@ msgstr "نتوانست ترجیحات را اعمال کند"
#. The variable is the title of the game
#: cartridges/game.py:139
msgid "{} hidden"
msgstr "{}‌نهفته"
msgstr "{} نهفته"
#: cartridges/game.py:139
msgid "{} unhidden"
@@ -555,11 +553,11 @@ msgstr ""
#: cartridges/preferences.py:196
msgid "Downloading covers…"
msgstr ""
msgstr "در حال دریافت طرح‌های جلد…"
#: cartridges/preferences.py:215
msgid "Covers updated"
msgstr ""
msgstr "طرح‌های جلد به‌روزرسانی شد"
#: cartridges/preferences.py:360
msgid "Installation Not Found"
@@ -599,7 +597,7 @@ msgstr "هیچ بازی جدیدی پیدا نشد"
#: cartridges/importer/importer.py:379
msgid "1 game imported"
msgstr "۱ بازی درون‌ریخته شد"
msgstr "یک بازی درون‌ریخته شد"
#. The variable is the number of games
#: cartridges/importer/importer.py:383

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
"PO-Revision-Date: 2024-03-23 19:56+0000\n"
"PO-Revision-Date: 2024-10-22 10:56+0000\n"
"Last-Translator: Balázs Meskó <meskobalazs@mailbox.org>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/cartridges/"
"cartridges/hu/>\n"
@@ -19,7 +19,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.5-dev\n"
"X-Generator: Weblate 5.8-rc\n"
#: data/page.kramo.Cartridges.desktop.in:3
#: data/page.kramo.Cartridges.metainfo.xml.in:9
@@ -260,7 +260,7 @@ msgstr "Kézileg hozzáadott játékok importálása"
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
msgid "Bottles"
msgstr "Palackok"
msgstr "Bottles"
#: data/gtk/preferences.blp:260 cartridges/importer/itch_source.py:81
msgid "itch"

642
po/ie.po Normal file
View File

@@ -0,0 +1,642 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR kramo
# This file is distributed under the same license as the Cartridges package.
# OIS <mistresssilvara@hotmail.com>, 2024.
msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
"PO-Revision-Date: 2024-09-13 15:09+0000\n"
"Last-Translator: OIS <mistresssilvara@hotmail.com>\n"
"Language-Team: Occidental <https://hosted.weblate.org/projects/cartridges/"
"cartridges/ie/>\n"
"Language: ie\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.8-dev\n"
#: data/page.kramo.Cartridges.desktop.in:3
#: data/page.kramo.Cartridges.metainfo.xml.in:9
#: data/page.kramo.Cartridges.metainfo.xml.in:40 data/gtk/window.blp:47
#: data/gtk/window.blp:83
msgid "Cartridges"
msgstr "Cartridges"
#: data/page.kramo.Cartridges.desktop.in:4
msgid "Game Launcher"
msgstr "Lansator de ludes"
#: data/page.kramo.Cartridges.desktop.in:5
#: data/page.kramo.Cartridges.metainfo.xml.in:10
msgid "Launch all your games"
msgstr "Lansar vor ludes"
#: data/page.kramo.Cartridges.desktop.in:11
msgid ""
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
msgstr ""
"ludes;lansator;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
#: data/page.kramo.Cartridges.metainfo.xml.in:12
msgid ""
"Cartridges is a simple game launcher for all of your games. It has support "
"for importing games from Steam, Lutris, Heroic and more with no login "
"necessary. You can sort and hide games or download cover art from "
"SteamGridDB."
msgstr ""
"Cartridges es un simplic lansator por vor ludes. It supporta importation de "
"ludes de Steam, Lutris, Heroic e plu sin inregistration. On posse celar e "
"ordinar ludes o descargar covrimentes de SteamGridDB."
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:318
#: cartridges/details_dialog.py:68
msgid "Game Details"
msgstr "Detallies del lude"
#: data/page.kramo.Cartridges.metainfo.xml.in:48
msgid "Edit Game Details"
msgstr "Redacter li detallies del lude"
#: data/page.kramo.Cartridges.metainfo.xml.in:52 data/gtk/help-overlay.blp:19
#: data/gtk/window.blp:542 cartridges/details_dialog.py:267
#: cartridges/importer/importer.py:320 cartridges/importer/importer.py:370
msgid "Preferences"
msgstr "Preferenties"
#: data/gtk/details-dialog.blp:15
msgid "Cancel"
msgstr "Anullar"
#: data/gtk/details-dialog.blp:46
msgid "New Cover"
msgstr "Nov covriment"
#: data/gtk/details-dialog.blp:65
msgid "Delete Cover"
msgstr "Remover li covriment"
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
msgid "Title"
msgstr "Titul"
#: data/gtk/details-dialog.blp:97
msgid "Developer (optional)"
msgstr "Developator (facultativ)"
#: data/gtk/details-dialog.blp:103
msgid "Executable"
msgstr "Executibile"
#: data/gtk/details-dialog.blp:109
msgid "Select File"
msgstr "Selecter un file"
#: data/gtk/details-dialog.blp:120
msgid "More Info"
msgstr "Plu information"
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
msgid "Edit"
msgstr "Redacter"
#: data/gtk/game.blp:103 cartridges/window.py:350
msgid "Hide"
msgstr "Celar"
#: data/gtk/game.blp:104 data/gtk/game.blp:112 data/gtk/window.blp:463
msgid "Remove"
msgstr "Remover"
#: data/gtk/game.blp:111 cartridges/window.py:352
msgid "Unhide"
msgstr "Revelar"
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
msgid "General"
msgstr "General"
#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:205 data/gtk/window.blp:221
#: data/gtk/window.blp:272 data/gtk/window.blp:288 data/gtk/window.blp:474
msgid "Search"
msgstr "Serchar"
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
msgid "Keyboard Shortcuts"
msgstr "Rapid-tastes"
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
msgid "Undo"
msgstr "Defar"
#: data/gtk/help-overlay.blp:34
msgid "Quit"
msgstr "Surtir"
#: data/gtk/help-overlay.blp:39 data/gtk/window.blp:92 data/gtk/window.blp:185
msgid "Toggle Sidebar"
msgstr "Panel lateral"
#: data/gtk/help-overlay.blp:44 data/gtk/window.blp:198 data/gtk/window.blp:265
msgid "Main Menu"
msgstr "Menú principal"
#: data/gtk/help-overlay.blp:50
msgid "Games"
msgstr "Ludes"
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:191 data/gtk/window.blp:550
msgid "Add Game"
msgstr "Adjunter un lude"
#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:113
#: data/gtk/window.blp:27 data/gtk/window.blp:554
msgid "Import"
msgstr "Importar"
#: data/gtk/help-overlay.blp:63
msgid "Show Hidden Games"
msgstr "Monstrar celat ludes"
#: data/gtk/help-overlay.blp:68
msgid "Remove Game"
msgstr "Remover li lude"
#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:117
#: data/gtk/preferences.blp:415
msgid "Behavior"
msgstr "Conduida"
#: data/gtk/preferences.blp:16
msgid "Exit After Launching Games"
msgstr "Surtir pos que lansar un lude"
#: data/gtk/preferences.blp:20
msgid "Cover Image Launches Game"
msgstr ""
#: data/gtk/preferences.blp:21
msgid "Swaps the behavior of the cover image and the play button"
msgstr ""
#: data/gtk/preferences.blp:26 cartridges/details_dialog.py:82
msgid "Images"
msgstr "Images"
#: data/gtk/preferences.blp:29
msgid "High Quality Images"
msgstr ""
#: data/gtk/preferences.blp:30
msgid "Save game covers losslessly at the cost of storage"
msgstr ""
#: data/gtk/preferences.blp:35
msgid "Danger Zone"
msgstr ""
#: data/gtk/preferences.blp:48
msgid "Remove All Games"
msgstr "Remover omni ludes"
#: data/gtk/preferences.blp:120
msgid "Remove Uninstalled Games"
msgstr "Remover desinstallat ludes"
#: data/gtk/preferences.blp:125
msgid "Sources"
msgstr "Orígines"
#: data/gtk/preferences.blp:128 cartridges/importer/steam_source.py:114
msgid "Steam"
msgstr "Steam"
#: data/gtk/preferences.blp:137 data/gtk/preferences.blp:164
#: data/gtk/preferences.blp:199 data/gtk/preferences.blp:242
#: data/gtk/preferences.blp:269 data/gtk/preferences.blp:296
#: data/gtk/preferences.blp:323
msgid "Install Location"
msgstr "Localisation de installation"
#: data/gtk/preferences.blp:155 data/gtk/window.blp:564
#: cartridges/importer/lutris_source.py:96
msgid "Lutris"
msgstr "Lutris"
#: data/gtk/preferences.blp:181
msgid "Import Steam Games"
msgstr "Importar ludes de Steam"
#: data/gtk/preferences.blp:185
msgid "Import Flatpak Games"
msgstr "Importar ludes Flatpak"
#: data/gtk/preferences.blp:190 cartridges/importer/heroic_source.py:355
msgid "Heroic"
msgstr "Heroic"
#: data/gtk/preferences.blp:216
msgid "Import Epic Games"
msgstr "Importar ludes de Epic"
#: data/gtk/preferences.blp:220
msgid "Import GOG Games"
msgstr "Importar ludes de GOG"
#: data/gtk/preferences.blp:224
msgid "Import Amazon Games"
msgstr "Importar ludes de Amazon"
#: data/gtk/preferences.blp:228
msgid "Import Sideloaded Games"
msgstr ""
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
msgid "Bottles"
msgstr "Botelles"
#: data/gtk/preferences.blp:260 cartridges/importer/itch_source.py:81
msgid "itch"
msgstr "itch"
#: data/gtk/preferences.blp:287 cartridges/importer/legendary_source.py:97
msgid "Legendary"
msgstr "Legendary"
#: data/gtk/preferences.blp:314 cartridges/importer/retroarch_source.py:142
msgid "RetroArch"
msgstr "RetroArch"
#: data/gtk/preferences.blp:341 cartridges/importer/flatpak_source.py:143
msgid "Flatpak"
msgstr "Flatpak"
#. The location of the system-wide data directory
#: data/gtk/preferences.blp:351
msgid "System Location"
msgstr "Localisation del sistema"
#. The location of the user-specific data directory
#: data/gtk/preferences.blp:369
msgid "User Location"
msgstr "Localisation del usator"
#: data/gtk/preferences.blp:386
msgid "Import Game Launchers"
msgstr "Importar lansatores de ludes"
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
msgid "Desktop Entries"
msgstr "Files desktop"
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
msgid "SteamGridDB"
msgstr "SteamGridDB"
#: data/gtk/preferences.blp:407
msgid "Authentication"
msgstr "Autentication"
#: data/gtk/preferences.blp:410
msgid "API Key"
msgstr "Clave de API"
#: data/gtk/preferences.blp:418
msgid "Use SteamGridDB"
msgstr "Usar SteamGridDB"
#: data/gtk/preferences.blp:419
msgid "Download images when adding or importing games"
msgstr "Descargar images quande on adjunte o importa ludes"
#: data/gtk/preferences.blp:423
msgid "Prefer Over Official Images"
msgstr ""
#: data/gtk/preferences.blp:427
msgid "Prefer Animated Images"
msgstr ""
#: data/gtk/preferences.blp:433
msgid "Update Covers"
msgstr "Actualisar covrimentes"
#: data/gtk/preferences.blp:434
msgid "Fetch covers for games already in your library"
msgstr "Obtener covrimentes por ludes in vor biblioteca"
#: data/gtk/preferences.blp:439
msgid "Update"
msgstr "Actualisar"
#: data/gtk/window.blp:6 data/gtk/window.blp:14
msgid "No Games Found"
msgstr "Null ludes trovat"
#: data/gtk/window.blp:7 data/gtk/window.blp:15
msgid "Try a different search"
msgstr "Ples provar un altri sercha"
#: data/gtk/window.blp:21
msgid "No Games"
msgstr "Null ludes"
#: data/gtk/window.blp:22
msgid "Use the + button to add games"
msgstr "Usar li buton + por adjunter ludes"
#: data/gtk/window.blp:40
msgid "No Hidden Games"
msgstr "Null celat ludes"
#: data/gtk/window.blp:41
msgid "Games you hide will appear here"
msgstr "Ludes celat de vos va aparir ci ti"
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
msgid "All Games"
msgstr "Omni ludes"
#: data/gtk/window.blp:136 cartridges/main.py:230
msgid "Added"
msgstr "Adjuntet"
#: data/gtk/window.blp:156
msgid "Imported"
msgstr "Importat"
#: data/gtk/window.blp:258
msgid "Hidden Games"
msgstr "Celat ludes"
#: data/gtk/window.blp:367
msgid "Game Title"
msgstr "Titul del lude"
#: data/gtk/window.blp:424
msgid "Play"
msgstr "Luder"
#: data/gtk/window.blp:501
msgid "Sort"
msgstr "Ordinar"
#: data/gtk/window.blp:504
msgid "A-Z"
msgstr "A-Z"
#: data/gtk/window.blp:510
msgid "Z-A"
msgstr "Z-A"
#: data/gtk/window.blp:516
msgid "Newest"
msgstr "Plu recent"
#: data/gtk/window.blp:522
msgid "Oldest"
msgstr "Plu old"
#: data/gtk/window.blp:528
msgid "Last Played"
msgstr "Ludet"
#: data/gtk/window.blp:535
msgid "Show Hidden"
msgstr "Revelar celat"
#: data/gtk/window.blp:544
msgid "About Cartridges"
msgstr "Pri Cartridges"
#: data/gtk/window.blp:561
msgid "IGDB"
msgstr "IGDB"
#: data/gtk/window.blp:563
msgid "ProtonDB"
msgstr "ProtonDB"
#: data/gtk/window.blp:565
msgid "HowLongToBeat"
msgstr "HowLongToBeat"
#. The variable is the title of the game
#: cartridges/main.py:205 cartridges/game.py:125
msgid "{} launched"
msgstr "{} ea lansat"
#. Translators: Replace this with your name for it to show up in the about window
#: cartridges/main.py:270
msgid "translator_credits"
msgstr "OIS <mistresssilvara@hotmail.com>, 2024"
#. The variable is the date when the game was added
#: cartridges/window.py:373
msgid "Added: {}"
msgstr "Adjuntet: {}"
#: cartridges/window.py:376
msgid "Never"
msgstr "Nequande"
#. The variable is the date when the game was last played
#: cartridges/window.py:380
msgid "Last played: {}"
msgstr "Ludet: {}"
#: cartridges/details_dialog.py:73
msgid "Apply"
msgstr "Applicar"
#: cartridges/details_dialog.py:79
msgid "Add New Game"
msgstr "Adjunter un nov lude"
#: cartridges/details_dialog.py:80
msgid "Add"
msgstr "Adjunter"
#: cartridges/details_dialog.py:90
msgid "Executables"
msgstr "Executibiles"
#. Translate this string as you would translate "file"
#: cartridges/details_dialog.py:105
msgid "file.txt"
msgstr "file.txt"
#. As in software
#: cartridges/details_dialog.py:107
msgid "program"
msgstr "programma"
#. Translate this string as you would translate "path to {}"
#: cartridges/details_dialog.py:112 cartridges/details_dialog.py:114
msgid "C:\\path\\to\\{}"
msgstr "C:\\rute\\a\\{}"
#. Translate this string as you would translate "path to {}"
#: cartridges/details_dialog.py:118 cartridges/details_dialog.py:120
msgid "/path/to/{}"
msgstr "/rute/a/{}"
#: cartridges/details_dialog.py:125
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
"<tt>\"{}\"</tt>\n"
"\n"
"To open the file \"{}\" with the default application, use:\n"
"\n"
"<tt>{} \"{}\"</tt>\n"
"\n"
"If the path contains spaces, make sure to wrap it in double quotes!"
msgstr ""
"Por lansar li executibile «{}» usa li commande:\n"
"\n"
"<tt>\"{}\"</tt>\n"
"\n"
"Por aperter li file «{}» med li application predefinit, usa:\n"
"\n"
"<tt>{} \"{}\"</tt>\n"
"\n"
"Si li rute contene spacies, metter it in signes de citation (\"\")!"
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
msgid "Couldn't Add Game"
msgstr "Ne successat adjunter un lude"
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:209
msgid "Game title cannot be empty."
msgstr "Li titul ne posse esser vacui."
#: cartridges/details_dialog.py:173 cartridges/details_dialog.py:217
msgid "Executable cannot be empty."
msgstr "Li executibile es besonat."
#: cartridges/details_dialog.py:208 cartridges/details_dialog.py:216
msgid "Couldn't Apply Preferences"
msgstr "Ne successat adjunter li preferenties"
#. The variable is the title of the game
#: cartridges/game.py:139
msgid "{} hidden"
msgstr "{} celat"
#: cartridges/game.py:139
msgid "{} unhidden"
msgstr "{} revelat"
#. The variable is the title of the game
#. The variable is the number of games removed
#: cartridges/game.py:153 cartridges/importer/importer.py:391
msgid "{} removed"
msgstr "{} sta removet"
#: cartridges/preferences.py:133
msgid "All games removed"
msgstr "Omni ludes sta removet"
#: cartridges/preferences.py:181
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"Un clave de API es besonat por SteamGridDB. Vu posse generar ún {}ci ti{}."
#: cartridges/preferences.py:196
msgid "Downloading covers…"
msgstr "Descarga de covrimentes…"
#: cartridges/preferences.py:215
msgid "Covers updated"
msgstr "Li covrimentes sta actualisat"
#: cartridges/preferences.py:360
msgid "Installation Not Found"
msgstr "Installation ne es trovat"
#: cartridges/preferences.py:361
msgid "Select a valid directory"
msgstr "Ples selecter un valid categorie"
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
msgid "Warning"
msgstr "Avise"
#: cartridges/preferences.py:431
msgid "Invalid Directory"
msgstr "Ínvalid fólder"
#: cartridges/preferences.py:437
msgid "Set Location"
msgstr "Assignar li localisation"
#: cartridges/utils/create_dialog.py:33 cartridges/importer/importer.py:319
msgid "Dismiss"
msgstr "Demisser"
#: cartridges/importer/importer.py:145
msgid "Importing Games…"
msgstr "Importation de ludes…"
#: cartridges/importer/importer.py:338
msgid "The following errors occured during import:"
msgstr "Li sequent errorees evenit durante li importation:"
#: cartridges/importer/importer.py:367
msgid "No new games found"
msgstr "Null nov ludes trovat"
#: cartridges/importer/importer.py:379
msgid "1 game imported"
msgstr "1 lude sta importat"
#. The variable is the number of games
#: cartridges/importer/importer.py:383
msgid "{} games imported"
msgstr "{} ludes sta importat"
#. A single game removed
#: cartridges/importer/importer.py:387
msgid "1 removed"
msgstr "1 removet"
#. The variable is the name of the source
#: cartridges/importer/location.py:34
msgid "Select the {} cache directory."
msgstr "Selecte li fólder de cache de {}."
#. The variable is the name of the source
#: cartridges/importer/location.py:36
msgid "Select the {} configuration directory."
msgstr "Selecte li fólder de configuration de {}."
#. The variable is the name of the source
#: cartridges/importer/location.py:38
msgid "Select the {} data directory."
msgstr "Selecte li fólder de data de {}."
#: cartridges/importer/retroarch_source.py:129
msgid "No RetroArch Core Selected"
msgstr "Null nucleos de RetroArch es selectet"
#. The variable is a newline separated list of playlists
#: cartridges/importer/retroarch_source.py:131
msgid "The following playlists have no default core:"
msgstr "Li sequent playlistes ne have un predefinit nucleo:"
#: cartridges/importer/retroarch_source.py:133
msgid "Games with no core selected were not imported"
msgstr "Ludes sin selectet nucleo ne va esser importat"
#: cartridges/store/managers/sgdb_manager.py:46
msgid "Couldn't Authenticate SteamGridDB"
msgstr "Autentication ínvalid de SteamGridDB"
#: cartridges/store/managers/sgdb_manager.py:47
msgid "Verify your API key in preferences"
msgstr "Ples controlar vor clave de API in li preferenties"

View File

@@ -3,13 +3,14 @@
# This file is distributed under the same license as the cartridges package.
# kramo <contact@kramo.hu>, 2023.
# Allan Nordhøy <epost@anotheragency.no>, 2023.
# sunniva <schildkroteskoldpadda@gmail.com>, 2024.
msgid ""
msgstr ""
"Project-Id-Version: cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
"PO-Revision-Date: 2023-04-06 08:09+0000\n"
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
"PO-Revision-Date: 2024-10-22 10:56+0000\n"
"Last-Translator: sunniva <schildkroteskoldpadda@gmail.com>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/"
"cartridges/cartridges/nb_NO/>\n"
"Language: nb_NO\n"
@@ -17,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17-dev\n"
"X-Generator: Weblate 5.8-rc\n"
#: data/page.kramo.Cartridges.desktop.in:3
#: data/page.kramo.Cartridges.metainfo.xml.in:9
@@ -39,6 +40,8 @@ msgstr "Start alle spillene dine"
msgid ""
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
msgstr ""
"gaming;lansere;spillstartere;steam;lutris;heroic;bottles;flasker;flatpak;lege"
"ndary;retroarch;"
#: data/page.kramo.Cartridges.metainfo.xml.in:12
msgid ""
@@ -73,20 +76,19 @@ msgstr "Avbryt"
#: data/gtk/details-dialog.blp:46
msgid "New Cover"
msgstr ""
msgstr "Nytt omslag"
#: data/gtk/details-dialog.blp:65
msgid "Delete Cover"
msgstr ""
msgstr "Fjern omslag"
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
msgid "Title"
msgstr "Navn"
#: data/gtk/details-dialog.blp:97
#, fuzzy
msgid "Developer (optional)"
msgstr "Utvikler eller utgiver (valgfritt)"
msgstr "Utvikler (valgfritt)"
#: data/gtk/details-dialog.blp:103
msgid "Executable"
@@ -94,11 +96,11 @@ msgstr "Kjørbar"
#: data/gtk/details-dialog.blp:109
msgid "Select File"
msgstr ""
msgstr "Velg fil"
#: data/gtk/details-dialog.blp:120
msgid "More Info"
msgstr ""
msgstr "Mer informasjon"
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
msgid "Edit"
@@ -114,7 +116,7 @@ msgstr "Fjern"
#: data/gtk/game.blp:111 cartridges/window.py:352
msgid "Unhide"
msgstr "Opphev fjerning"
msgstr "Vis"
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
msgid "General"
@@ -122,7 +124,6 @@ msgstr "Generelt"
#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:205 data/gtk/window.blp:221
#: data/gtk/window.blp:272 data/gtk/window.blp:288 data/gtk/window.blp:474
#, fuzzy
msgid "Search"
msgstr "Søk"
@@ -141,7 +142,7 @@ msgstr "Avslutt"
#: data/gtk/help-overlay.blp:39 data/gtk/window.blp:92 data/gtk/window.blp:185
msgid "Toggle Sidebar"
msgstr ""
msgstr "Vis/skjul sidefelt"
#: data/gtk/help-overlay.blp:44 data/gtk/window.blp:198 data/gtk/window.blp:265
msgid "Main Menu"
@@ -161,20 +162,17 @@ msgid "Import"
msgstr "Importer"
#: data/gtk/help-overlay.blp:63
#, fuzzy
msgid "Show Hidden Games"
msgstr "Vis skjulte spill"
#: data/gtk/help-overlay.blp:68
#, fuzzy
msgid "Remove Game"
msgstr "Fjern spill"
#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:117
#: data/gtk/preferences.blp:415
#, fuzzy
msgid "Behavior"
msgstr "Adferd"
msgstr "Atferd"
#: data/gtk/preferences.blp:16
msgid "Exit After Launching Games"
@@ -209,9 +207,8 @@ msgid "Remove All Games"
msgstr "Fjern alle spill"
#: data/gtk/preferences.blp:120
#, fuzzy
msgid "Remove Uninstalled Games"
msgstr "Fjern alle spill"
msgstr "Fjern avinstallerte spill"
#: data/gtk/preferences.blp:125
msgid "Sources"
@@ -225,9 +222,8 @@ msgstr "Steam"
#: data/gtk/preferences.blp:199 data/gtk/preferences.blp:242
#: data/gtk/preferences.blp:269 data/gtk/preferences.blp:296
#: data/gtk/preferences.blp:323
#, fuzzy
msgid "Install Location"
msgstr "Installasjonssted for itch"
msgstr "Installasjonssted"
#: data/gtk/preferences.blp:155 data/gtk/window.blp:564
#: cartridges/importer/lutris_source.py:96
@@ -235,14 +231,12 @@ msgid "Lutris"
msgstr "Lutris"
#: data/gtk/preferences.blp:181
#, fuzzy
msgid "Import Steam Games"
msgstr "Importer sideinnlastede spill"
msgstr "Import Steam-spill"
#: data/gtk/preferences.blp:185
#, fuzzy
msgid "Import Flatpak Games"
msgstr "Importer sideinnlastede spill"
msgstr "Importer Flatpak-spill"
#: data/gtk/preferences.blp:190 cartridges/importer/heroic_source.py:355
msgid "Heroic"
@@ -269,42 +263,38 @@ msgid "Bottles"
msgstr "Bottles"
#: data/gtk/preferences.blp:260 cartridges/importer/itch_source.py:81
#, fuzzy
msgid "itch"
msgstr "itch"
#: data/gtk/preferences.blp:287 cartridges/importer/legendary_source.py:97
msgid "Legendary"
msgstr ""
msgstr "Legendary"
#: data/gtk/preferences.blp:314 cartridges/importer/retroarch_source.py:142
msgid "RetroArch"
msgstr ""
msgstr "RetroArch"
#: data/gtk/preferences.blp:341 cartridges/importer/flatpak_source.py:143
msgid "Flatpak"
msgstr ""
msgstr "Flatpak"
#. The location of the system-wide data directory
#: data/gtk/preferences.blp:351
#, fuzzy
msgid "System Location"
msgstr "Velg mappe"
msgstr "System-lagringssted"
#. The location of the user-specific data directory
#: data/gtk/preferences.blp:369
#, fuzzy
msgid "User Location"
msgstr "Velg mappe"
msgstr "Bruker-lagringssted"
#: data/gtk/preferences.blp:386
#, fuzzy
msgid "Import Game Launchers"
msgstr "Spillutvalgstarter"
msgstr "Importer spillstartere"
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
msgid "Desktop Entries"
msgstr ""
msgstr "Skrivebordsoppføringer"
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
msgid "SteamGridDB"
@@ -315,7 +305,6 @@ msgid "Authentication"
msgstr "Identitetsbekreftelse"
#: data/gtk/preferences.blp:410
#, fuzzy
msgid "API Key"
msgstr "API-nøkkel"
@@ -324,31 +313,28 @@ msgid "Use SteamGridDB"
msgstr "Bruk SteamGridDB"
#: data/gtk/preferences.blp:419
#, fuzzy
msgid "Download images when adding or importing games"
msgstr "Mappe å bruke ved import av spill"
msgstr "Last ned bilder når spill legges til eller importeres"
#: data/gtk/preferences.blp:423
#, fuzzy
msgid "Prefer Over Official Images"
msgstr "Foretrekk over offisielle bilder"
msgstr "Foretrekk fremfor offisielle bilder"
#: data/gtk/preferences.blp:427
#, fuzzy
msgid "Prefer Animated Images"
msgstr "Foretrekk over offisielle bilder"
msgstr "Foretrekk animerte bilder"
#: data/gtk/preferences.blp:433
msgid "Update Covers"
msgstr ""
msgstr "Oppdater omslag"
#: data/gtk/preferences.blp:434
msgid "Fetch covers for games already in your library"
msgstr ""
msgstr "Hente omslag til spill som allerede finnes i biblioteket ditt"
#: data/gtk/preferences.blp:439
msgid "Update"
msgstr ""
msgstr "Oppdater"
#: data/gtk/window.blp:6 data/gtk/window.blp:14
msgid "No Games Found"
@@ -375,19 +361,16 @@ msgid "Games you hide will appear here"
msgstr "Spill du skjuler vil vises her"
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
#, fuzzy
msgid "All Games"
msgstr "Fjern alle spill"
msgstr "Alle spill"
#: data/gtk/window.blp:136 cartridges/main.py:230
#, fuzzy
msgid "Added"
msgstr "Tillagt: {}"
msgstr "Tillagte"
#: data/gtk/window.blp:156
#, fuzzy
msgid "Imported"
msgstr "Importer"
msgstr "Importerte"
#: data/gtk/window.blp:258
msgid "Hidden Games"
@@ -435,15 +418,15 @@ msgstr "Om"
#: data/gtk/window.blp:561
msgid "IGDB"
msgstr ""
msgstr "IGDB"
#: data/gtk/window.blp:563
msgid "ProtonDB"
msgstr ""
msgstr "ProtonDB"
#: data/gtk/window.blp:565
msgid "HowLongToBeat"
msgstr ""
msgstr "HowLongToBeat"
#. The variable is the title of the game
#: cartridges/main.py:205 cartridges/game.py:125
@@ -479,12 +462,11 @@ msgstr "Legg til nytt spill"
#: cartridges/details_dialog.py:80
msgid "Add"
msgstr ""
msgstr "Legg til"
#: cartridges/details_dialog.py:90
#, fuzzy
msgid "Executables"
msgstr "Kjørbar"
msgstr "Kjørbare filer"
#. Translate this string as you would translate "file"
#: cartridges/details_dialog.py:105
@@ -526,7 +508,7 @@ msgstr ""
"\n"
"<tt>{} «{}»</tt>\n"
"\n"
"Hvis stien inneholder mellomrom må du pakke den inn i doble engelske "
"Hvis stien inneholder mellomrom, må du pakke den inn i doble engelske "
"sitattegn."
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
@@ -547,7 +529,6 @@ msgstr "Kunne ikke ta i bruk endringer"
#. The variable is the title of the game
#: cartridges/game.py:139
#, fuzzy
msgid "{} hidden"
msgstr "{} skjult"
@@ -572,36 +553,32 @@ msgstr ""
"En API-nøkkel kreves for å bruke SteamGridDB. Du kan generere en {}her{}."
#: cartridges/preferences.py:196
#, fuzzy
msgid "Downloading covers…"
msgstr "Importerer omslag …"
msgstr "Laster ned omslag…"
#: cartridges/preferences.py:215
msgid "Covers updated"
msgstr ""
msgstr "Omslag oppdaterte"
#: cartridges/preferences.py:360
#, fuzzy
msgid "Installation Not Found"
msgstr "Fant ikke installasjonen"
msgstr "Fant ikke installasjon"
#: cartridges/preferences.py:361
#, fuzzy
msgid "Select a valid directory"
msgstr "Velg {}-datamappen."
msgstr "Velg en gyldig datamappe"
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
msgid "Warning"
msgstr ""
msgstr "Advarsel"
#: cartridges/preferences.py:431
msgid "Invalid Directory"
msgstr ""
msgstr "Ugyldig filmappe"
#: cartridges/preferences.py:437
#, fuzzy
msgid "Set Location"
msgstr "Velg mappe"
msgstr "Angi lagringssted"
#: cartridges/utils/create_dialog.py:33 cartridges/importer/importer.py:319
msgid "Dismiss"
@@ -613,69 +590,61 @@ msgstr "Importerer spill …"
#: cartridges/importer/importer.py:338
msgid "The following errors occured during import:"
msgstr ""
msgstr "De følgende feilene oppsto under importering:"
#: cartridges/importer/importer.py:367
#, fuzzy
msgid "No new games found"
msgstr "Fant ingen spill"
msgstr "Fant ingen nye spill"
#: cartridges/importer/importer.py:379
#, fuzzy
msgid "1 game imported"
msgstr "Spill importert"
msgstr "Ett spill importert"
#. The variable is the number of games
#: cartridges/importer/importer.py:383
#, fuzzy
msgid "{} games imported"
msgstr "Spill importert"
msgstr "{} spill importert"
#. A single game removed
#: cartridges/importer/importer.py:387
#, fuzzy
msgid "1 removed"
msgstr "{} fjernet"
msgstr "Ett spill fjernet"
#. The variable is the name of the source
#: cartridges/importer/location.py:34
#, fuzzy
msgid "Select the {} cache directory."
msgstr "Velg {}-datamappen."
msgstr "Velg {}-hurtiglagermappen."
#. The variable is the name of the source
#: cartridges/importer/location.py:36
#, fuzzy
msgid "Select the {} configuration directory."
msgstr "Velg {}-oppsettsmappen."
#. The variable is the name of the source
#: cartridges/importer/location.py:38
#, fuzzy
msgid "Select the {} data directory."
msgstr "Velg {}-datamappen."
#: cartridges/importer/retroarch_source.py:129
msgid "No RetroArch Core Selected"
msgstr ""
msgstr "Ingen RetroArch-kjerne valgt"
#. The variable is a newline separated list of playlists
#: cartridges/importer/retroarch_source.py:131
msgid "The following playlists have no default core:"
msgstr ""
msgstr "De følgende spillelister har ingen standardkjerne:"
#: cartridges/importer/retroarch_source.py:133
msgid "Games with no core selected were not imported"
msgstr ""
msgstr "Spill med ingen kjerne valgt har ikke blitt importert"
#: cartridges/store/managers/sgdb_manager.py:46
#, fuzzy
msgid "Couldn't Authenticate SteamGridDB"
msgstr "Kunne ikke koble til SteamGridDB"
msgstr "Kunne ikke autentisere SteamGridDB"
#: cartridges/store/managers/sgdb_manager.py:47
msgid "Verify your API key in preferences"
msgstr ""
msgstr "Verifiser API-nøkkelen din i Brukervalg"
#, fuzzy
#~ msgid "Cache Location"

270
po/ro.po
View File

@@ -2,13 +2,14 @@
# Copyright (C) YEAR kramo
# This file is distributed under the same license as the Cartridges package.
# Matt C <matei.gurzu@gmail.com>, 2023.
# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2024.
msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
"PO-Revision-Date: 2023-04-04 17:12+0000\n"
"Last-Translator: Matt C <matei.gurzu@gmail.com>\n"
"PO-Revision-Date: 2024-10-14 00:15+0000\n"
"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/cartridges/"
"cartridges/ro/>\n"
"Language: ro\n"
@@ -17,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
"X-Generator: Weblate 4.17-dev\n"
"X-Generator: Weblate 5.8-dev\n"
#: data/page.kramo.Cartridges.desktop.in:3
#: data/page.kramo.Cartridges.metainfo.xml.in:9
@@ -39,18 +40,20 @@ msgstr "Lansați toate jocurile dvs"
msgid ""
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
msgstr ""
"jocuri;lansator;gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;lege"
"ndary;retroarch;"
#: data/page.kramo.Cartridges.metainfo.xml.in:12
#, fuzzy
msgid ""
"Cartridges is a simple game launcher for all of your games. It has support "
"for importing games from Steam, Lutris, Heroic and more with no login "
"necessary. You can sort and hide games or download cover art from "
"SteamGridDB."
msgstr ""
"Cartridges este un simplu lansator de jocuri. Are suport pentru importarea "
"jocurilor dvs. din Steam, Heroic și Bottles cu funcții de organizare, cum ar "
"fi ascunderea și sortarea după data adăugată sau ultima dată jucată."
"Cartușe este un lansator de jocuri simplu pentru toate jocurile tale. Acesta "
"are suport pentru importul de jocuri de pe Steam, Lutris, Heroic și multe "
"altele, fără a fi necesară autentificarea. Puteți sorta și ascunde jocurile "
"sau descărca coperta jocului din SteamGridDB."
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:318
#: cartridges/details_dialog.py:68
@@ -69,55 +72,55 @@ msgstr "Preferințe"
#: data/gtk/details-dialog.blp:15
msgid "Cancel"
msgstr ""
msgstr "Anulare"
#: data/gtk/details-dialog.blp:46
msgid "New Cover"
msgstr ""
msgstr "Copertă nouă"
#: data/gtk/details-dialog.blp:65
msgid "Delete Cover"
msgstr ""
msgstr "Șterge coperta"
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
msgid "Title"
msgstr ""
msgstr "Titlu"
#: data/gtk/details-dialog.blp:97
msgid "Developer (optional)"
msgstr ""
msgstr "Dezvoltator (opțional)"
#: data/gtk/details-dialog.blp:103
msgid "Executable"
msgstr ""
msgstr "Executabil"
#: data/gtk/details-dialog.blp:109
msgid "Select File"
msgstr ""
msgstr "Selectare fișier"
#: data/gtk/details-dialog.blp:120
msgid "More Info"
msgstr ""
msgstr "Mai multe informații"
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
msgid "Edit"
msgstr ""
msgstr "Editare"
#: data/gtk/game.blp:103 cartridges/window.py:350
msgid "Hide"
msgstr ""
msgstr "Ascunde"
#: data/gtk/game.blp:104 data/gtk/game.blp:112 data/gtk/window.blp:463
msgid "Remove"
msgstr ""
msgstr "Elimină"
#: data/gtk/game.blp:111 cartridges/window.py:352
msgid "Unhide"
msgstr ""
msgstr "Afișează"
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
msgid "General"
msgstr ""
msgstr "General"
#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:205 data/gtk/window.blp:221
#: data/gtk/window.blp:272 data/gtk/window.blp:288 data/gtk/window.blp:474
@@ -126,20 +129,20 @@ msgstr "Căutare"
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
msgid "Keyboard Shortcuts"
msgstr ""
msgstr "Taste de comenzi rapide"
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
msgid "Undo"
msgstr ""
msgstr "Anulează"
#: data/gtk/help-overlay.blp:34
msgid "Quit"
msgstr ""
msgstr "Ieșire"
#: data/gtk/help-overlay.blp:39 data/gtk/window.blp:92 data/gtk/window.blp:185
msgid "Toggle Sidebar"
msgstr ""
msgstr "Afișează/ascunde bara laterală"
#: data/gtk/help-overlay.blp:44 data/gtk/window.blp:198 data/gtk/window.blp:265
msgid "Main Menu"
@@ -147,7 +150,7 @@ msgstr "Meniu principal"
#: data/gtk/help-overlay.blp:50
msgid "Games"
msgstr ""
msgstr "Jocuri"
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:191 data/gtk/window.blp:550
msgid "Add Game"
@@ -156,186 +159,185 @@ msgstr "Adăugați joc"
#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:113
#: data/gtk/window.blp:27 data/gtk/window.blp:554
msgid "Import"
msgstr ""
msgstr "Import"
#: data/gtk/help-overlay.blp:63
#, fuzzy
msgid "Show Hidden Games"
msgstr "Fără jocuri ascunse"
msgstr "Afișează jocurile ascunse"
#: data/gtk/help-overlay.blp:68
#, fuzzy
msgid "Remove Game"
msgstr "Fără jocuri"
msgstr "Elimină jocul"
#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:117
#: data/gtk/preferences.blp:415
msgid "Behavior"
msgstr ""
msgstr "Comportament"
#: data/gtk/preferences.blp:16
msgid "Exit After Launching Games"
msgstr ""
msgstr "Ieșire din program după lansarea jocurilor"
#: data/gtk/preferences.blp:20
msgid "Cover Image Launches Game"
msgstr ""
msgstr "Imaginea de copertă lansează jocul"
#: data/gtk/preferences.blp:21
msgid "Swaps the behavior of the cover image and the play button"
msgstr ""
"Interschimbă comportamentul imaginii de copertă și al butonului de redare"
#: data/gtk/preferences.blp:26 cartridges/details_dialog.py:82
msgid "Images"
msgstr ""
msgstr "Imagini"
#: data/gtk/preferences.blp:29
msgid "High Quality Images"
msgstr ""
msgstr "Imagini de înaltă calitate"
#: data/gtk/preferences.blp:30
msgid "Save game covers losslessly at the cost of storage"
msgstr ""
"Salvează coperțile jocurilor fără pierderi, dar ocupă mai mult spațiu de "
"stocare"
#: data/gtk/preferences.blp:35
msgid "Danger Zone"
msgstr ""
msgstr "Zonă periculoasă"
#: data/gtk/preferences.blp:48
msgid "Remove All Games"
msgstr ""
msgstr "Elimină toate jocurile"
#: data/gtk/preferences.blp:120
msgid "Remove Uninstalled Games"
msgstr ""
msgstr "Elimină jocurile dezinstalate"
#: data/gtk/preferences.blp:125
msgid "Sources"
msgstr ""
msgstr "Surse"
#: data/gtk/preferences.blp:128 cartridges/importer/steam_source.py:114
msgid "Steam"
msgstr ""
msgstr "Steam"
#: data/gtk/preferences.blp:137 data/gtk/preferences.blp:164
#: data/gtk/preferences.blp:199 data/gtk/preferences.blp:242
#: data/gtk/preferences.blp:269 data/gtk/preferences.blp:296
#: data/gtk/preferences.blp:323
msgid "Install Location"
msgstr ""
msgstr "Locația de instalare"
#: data/gtk/preferences.blp:155 data/gtk/window.blp:564
#: cartridges/importer/lutris_source.py:96
msgid "Lutris"
msgstr ""
msgstr "Lutris"
#: data/gtk/preferences.blp:181
msgid "Import Steam Games"
msgstr ""
msgstr "Importă jocuri din Steam"
#: data/gtk/preferences.blp:185
msgid "Import Flatpak Games"
msgstr ""
msgstr "Importă jocuri din Flatpak"
#: data/gtk/preferences.blp:190 cartridges/importer/heroic_source.py:355
msgid "Heroic"
msgstr ""
msgstr "Heroic"
#: data/gtk/preferences.blp:216
msgid "Import Epic Games"
msgstr ""
msgstr "Importă jocuri din Epic"
#: data/gtk/preferences.blp:220
msgid "Import GOG Games"
msgstr ""
msgstr "Importă jocuri din GOG"
#: data/gtk/preferences.blp:224
#, fuzzy
msgid "Import Amazon Games"
msgstr "Lansator de jocuri"
msgstr "Importă jocuri din Amazon"
#: data/gtk/preferences.blp:228
msgid "Import Sideloaded Games"
msgstr ""
msgstr "Importă jocuri descărcate manual"
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
msgid "Bottles"
msgstr ""
msgstr "Bottles"
#: data/gtk/preferences.blp:260 cartridges/importer/itch_source.py:81
msgid "itch"
msgstr ""
msgstr "itch"
#: data/gtk/preferences.blp:287 cartridges/importer/legendary_source.py:97
msgid "Legendary"
msgstr ""
msgstr "Legendary"
#: data/gtk/preferences.blp:314 cartridges/importer/retroarch_source.py:142
msgid "RetroArch"
msgstr ""
msgstr "RetroArch"
#: data/gtk/preferences.blp:341 cartridges/importer/flatpak_source.py:143
msgid "Flatpak"
msgstr ""
msgstr "Flatpak"
#. The location of the system-wide data directory
#: data/gtk/preferences.blp:351
msgid "System Location"
msgstr ""
msgstr "Locația directorului de date la nivel de sistem"
#. The location of the user-specific data directory
#: data/gtk/preferences.blp:369
msgid "User Location"
msgstr ""
msgstr "Locația directorului de date specific utilizatorului"
#: data/gtk/preferences.blp:386
#, fuzzy
msgid "Import Game Launchers"
msgstr "Lansator de jocuri"
msgstr "Importare lansatoare de jocuri"
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
msgid "Desktop Entries"
msgstr ""
msgstr "Elemente de acces direct, pe birou"
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
msgid "SteamGridDB"
msgstr ""
msgstr "SteamGridDB"
#: data/gtk/preferences.blp:407
msgid "Authentication"
msgstr ""
msgstr "Autentificare"
#: data/gtk/preferences.blp:410
msgid "API Key"
msgstr ""
msgstr "Cheie API"
#: data/gtk/preferences.blp:418
msgid "Use SteamGridDB"
msgstr ""
msgstr "Utilizează SteamGridDB"
#: data/gtk/preferences.blp:419
msgid "Download images when adding or importing games"
msgstr ""
msgstr "Descarcă imagini atunci când se adaugă sau se importă jocuri"
#: data/gtk/preferences.blp:423
msgid "Prefer Over Official Images"
msgstr ""
msgstr "Preferă mai mult decât imaginile oficiale"
#: data/gtk/preferences.blp:427
msgid "Prefer Animated Images"
msgstr ""
msgstr "Preferă imaginile animate"
#: data/gtk/preferences.blp:433
msgid "Update Covers"
msgstr ""
msgstr "Actualizare coperți"
#: data/gtk/preferences.blp:434
msgid "Fetch covers for games already in your library"
msgstr ""
msgstr "Obține coperți pentru jocurile aflate deja în colecție"
#: data/gtk/preferences.blp:439
msgid "Update"
msgstr ""
msgstr "Actualizare"
#: data/gtk/window.blp:6 data/gtk/window.blp:14
msgid "No Games Found"
@@ -362,17 +364,16 @@ msgid "Games you hide will appear here"
msgstr "Jocurile pe care le ascundeți vor apărea aici"
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
#, fuzzy
msgid "All Games"
msgstr "Fără jocuri"
msgstr "Toate jocurile"
#: data/gtk/window.blp:136 cartridges/main.py:230
msgid "Added"
msgstr ""
msgstr "Adăugat"
#: data/gtk/window.blp:156
msgid "Imported"
msgstr ""
msgstr "Importat"
#: data/gtk/window.blp:258
msgid "Hidden Games"
@@ -388,107 +389,109 @@ msgstr "Joacă"
#: data/gtk/window.blp:501
msgid "Sort"
msgstr ""
msgstr "Sortează"
#: data/gtk/window.blp:504
msgid "A-Z"
msgstr ""
msgstr "A-Z"
#: data/gtk/window.blp:510
msgid "Z-A"
msgstr ""
msgstr "Z-A"
#: data/gtk/window.blp:516
msgid "Newest"
msgstr ""
msgstr "Cel mai noi"
#: data/gtk/window.blp:522
msgid "Oldest"
msgstr ""
msgstr "Cel mai vechi"
#: data/gtk/window.blp:528
msgid "Last Played"
msgstr ""
msgstr "Jucat ultima dată"
#: data/gtk/window.blp:535
msgid "Show Hidden"
msgstr ""
msgstr "Afișează pe cele ascunse"
#: data/gtk/window.blp:544
msgid "About Cartridges"
msgstr ""
msgstr "Despre Cartușe"
#: data/gtk/window.blp:561
msgid "IGDB"
msgstr ""
msgstr "IGDB"
#: data/gtk/window.blp:563
msgid "ProtonDB"
msgstr ""
msgstr "ProtonDB"
#: data/gtk/window.blp:565
msgid "HowLongToBeat"
msgstr ""
msgstr "HowLongToBeat"
#. The variable is the title of the game
#: cartridges/main.py:205 cartridges/game.py:125
msgid "{} launched"
msgstr ""
msgstr "{} lansat"
#. Translators: Replace this with your name for it to show up in the about window
#: cartridges/main.py:270
msgid "translator_credits"
msgstr ""
"Matt C <matei.gurzu@gmail.com>,\n"
"Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>"
#. The variable is the date when the game was added
#: cartridges/window.py:373
msgid "Added: {}"
msgstr ""
msgstr "Adăugat: {}"
#: cartridges/window.py:376
msgid "Never"
msgstr ""
msgstr "Niciodată"
#. The variable is the date when the game was last played
#: cartridges/window.py:380
msgid "Last played: {}"
msgstr ""
msgstr "Jucat ultima dată {}"
#: cartridges/details_dialog.py:73
msgid "Apply"
msgstr ""
msgstr "Aplică"
#: cartridges/details_dialog.py:79
msgid "Add New Game"
msgstr ""
msgstr "Adaugă un joc nou"
#: cartridges/details_dialog.py:80
msgid "Add"
msgstr ""
msgstr "Adaugă"
#: cartridges/details_dialog.py:90
msgid "Executables"
msgstr ""
msgstr "Executabili"
#. Translate this string as you would translate "file"
#: cartridges/details_dialog.py:105
msgid "file.txt"
msgstr ""
msgstr "fișier.txt"
#. As in software
#: cartridges/details_dialog.py:107
msgid "program"
msgstr ""
msgstr "program"
#. Translate this string as you would translate "path to {}"
#: cartridges/details_dialog.py:112 cartridges/details_dialog.py:114
msgid "C:\\path\\to\\{}"
msgstr ""
msgstr "C:\ruta\\către\\{}"
#. Translate this string as you would translate "path to {}"
#: cartridges/details_dialog.py:118 cartridges/details_dialog.py:120
msgid "/path/to/{}"
msgstr ""
msgstr "/ruta/către/{}"
#: cartridges/details_dialog.py:125
msgid ""
@@ -502,142 +505,151 @@ msgid ""
"\n"
"If the path contains spaces, make sure to wrap it in double quotes!"
msgstr ""
"Pentru a lansa executabilul „{}”, utilizați comanda:\n"
"\n"
"<tt>„{}”</tt>\n"
"\n"
"Pentru a deschide fișierul „{}” cu aplicația implicită, utilizați:\n"
"\n"
"<tt>{} „{}”</tt>\n"
"\n"
"Dacă ruta conține spații, asigurați-vă că o includeți între ghilimele duble!"
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
msgid "Couldn't Add Game"
msgstr ""
msgstr "Nu s-a putut adăuga jocul"
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:209
msgid "Game title cannot be empty."
msgstr ""
msgstr "Titlul jocului nu poate fi gol."
#: cartridges/details_dialog.py:173 cartridges/details_dialog.py:217
msgid "Executable cannot be empty."
msgstr ""
msgstr "Executabilul nu poate fi gol."
#: cartridges/details_dialog.py:208 cartridges/details_dialog.py:216
msgid "Couldn't Apply Preferences"
msgstr ""
msgstr "Nu s-au putut aplica preferințele"
#. The variable is the title of the game
#: cartridges/game.py:139
msgid "{} hidden"
msgstr ""
msgstr "{} ascuns"
#: cartridges/game.py:139
msgid "{} unhidden"
msgstr ""
msgstr "{} afișat"
#. The variable is the title of the game
#. The variable is the number of games removed
#: cartridges/game.py:153 cartridges/importer/importer.py:391
msgid "{} removed"
msgstr ""
msgstr "{} eliminat"
#: cartridges/preferences.py:133
msgid "All games removed"
msgstr ""
msgstr "Toate jocurile au fost eliminate"
#: cartridges/preferences.py:181
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr ""
"O cheie API este necesară pentru a utiliza SteamGridDB. Puteți genera una "
"{}aici{}."
#: cartridges/preferences.py:196
msgid "Downloading covers…"
msgstr ""
msgstr "Se descarcă coperțile…"
#: cartridges/preferences.py:215
msgid "Covers updated"
msgstr ""
msgstr "Coperți actualizate"
#: cartridges/preferences.py:360
msgid "Installation Not Found"
msgstr ""
msgstr "Instalarea nu a fost găsită"
#: cartridges/preferences.py:361
msgid "Select a valid directory"
msgstr ""
msgstr "Selectați un director valid"
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
msgid "Warning"
msgstr ""
msgstr "Atenţie"
#: cartridges/preferences.py:431
msgid "Invalid Directory"
msgstr ""
msgstr "Director nevalid"
#: cartridges/preferences.py:437
msgid "Set Location"
msgstr ""
msgstr "Stabilește locația"
#: cartridges/utils/create_dialog.py:33 cartridges/importer/importer.py:319
msgid "Dismiss"
msgstr ""
msgstr "Revocare"
#: cartridges/importer/importer.py:145
#, fuzzy
msgid "Importing Games…"
msgstr "Lansator de jocuri"
msgstr "Se importă jocurile…"
#: cartridges/importer/importer.py:338
msgid "The following errors occured during import:"
msgstr ""
msgstr "Au apărut următoarele erori în timpul importului:"
#: cartridges/importer/importer.py:367
#, fuzzy
msgid "No new games found"
msgstr "Nu s-au găsit jocuri"
msgstr "Nu s-au găsit jocuri noi"
#: cartridges/importer/importer.py:379
msgid "1 game imported"
msgstr ""
msgstr "un joc importat"
#. The variable is the number of games
#: cartridges/importer/importer.py:383
msgid "{} games imported"
msgstr ""
msgstr "{} jocuri importate"
#. A single game removed
#: cartridges/importer/importer.py:387
msgid "1 removed"
msgstr ""
msgstr "un joc eliminat"
#. The variable is the name of the source
#: cartridges/importer/location.py:34
msgid "Select the {} cache directory."
msgstr ""
msgstr "Selectați directorul cache {}."
#. The variable is the name of the source
#: cartridges/importer/location.py:36
msgid "Select the {} configuration directory."
msgstr ""
msgstr "Selectați directorul de configurare {}."
#. The variable is the name of the source
#: cartridges/importer/location.py:38
msgid "Select the {} data directory."
msgstr ""
msgstr "Selectați directorul de date {}."
#: cartridges/importer/retroarch_source.py:129
msgid "No RetroArch Core Selected"
msgstr ""
msgstr "Nu este selectat niciun nucleu RetroArch"
#. The variable is a newline separated list of playlists
#: cartridges/importer/retroarch_source.py:131
msgid "The following playlists have no default core:"
msgstr ""
msgstr "Următoarele liste de redare nu au un nucleu implicit:"
#: cartridges/importer/retroarch_source.py:133
msgid "Games with no core selected were not imported"
msgstr ""
msgstr "Jocurile fără un nucleu selectat nu au fost importate"
#: cartridges/store/managers/sgdb_manager.py:46
msgid "Couldn't Authenticate SteamGridDB"
msgstr ""
msgstr "Nu s-a putut autentifica SteamGridDB"
#: cartridges/store/managers/sgdb_manager.py:47
msgid "Verify your API key in preferences"
msgstr ""
msgstr "Verificați cheia API în preferințe"
#~ msgid "Library"
#~ msgstr "Bibliotecă"

641
po/te.po Normal file
View File

@@ -0,0 +1,641 @@
# Telugu Translation for Cartridges.
# Copyright (C) YEAR kramo
# This file is distributed under the same license as the Cartridges package.
# Aryan Karamtoth <aryankmmiv@outlook.com>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: Cartridges\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
"PO-Revision-Date: 2024-10-08 10:06+0530\n"
"Last-Translator: Aryan Karamtoth <aryankmmiv@outlook.com>\n"
"Language-Team: Telugu\n"
"Language: te\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Gtranslator 47.0\n"
#: data/page.kramo.Cartridges.desktop.in:3
#: data/page.kramo.Cartridges.metainfo.xml.in:9
#: data/page.kramo.Cartridges.metainfo.xml.in:40 data/gtk/window.blp:47
#: data/gtk/window.blp:83
msgid "Cartridges"
msgstr "కాట్రిడ్జ్‌లు"
#: data/page.kramo.Cartridges.desktop.in:4
msgid "Game Launcher"
msgstr "గేమ్ లాంచర్"
#: data/page.kramo.Cartridges.desktop.in:5
#: data/page.kramo.Cartridges.metainfo.xml.in:10
msgid "Launch all your games"
msgstr "మీ అన్ని ఆటలను ప్రారంభించండి"
#: data/page.kramo.Cartridges.desktop.in:11
msgid ""
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
msgstr ""
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
#: data/page.kramo.Cartridges.metainfo.xml.in:12
msgid ""
"Cartridges is a simple game launcher for all of your games. It has support "
"for importing games from Steam, Lutris, Heroic and more with no login "
"necessary. You can sort and hide games or download cover art from "
"SteamGridDB."
msgstr ""
"కాట్రిడ్జ్‌లు అనేది మీ అన్ని గేమ్‌ల కోసం ఒక సాధారణ గేమ్ లాంచర్. లాగిన్ అవసరం లేకుండా స్టీమ్, లుట్రిస్, హీరోయిక్ "
"మరియు మరిన్నింటి నుండి గేమ్‌లను దిగుమతి చేసుకోవడానికి ఇది మద్దతును కలిగి ఉంది. మీరు గేమ్‌లను "
"క్రమబద్ధీకరించవచ్చు మరియు దాచవచ్చు లేదా SteamGridDB నుండి కవర్ ఆర్ట్‌ని డౌన్‌లోడ్ చేసుకోవచ్చు."
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:318
#: cartridges/details_dialog.py:68
msgid "Game Details"
msgstr "గేమ్ వివరాలు"
#: data/page.kramo.Cartridges.metainfo.xml.in:48
msgid "Edit Game Details"
msgstr "గేమ్ వివరాలను సవరించండి"
#: data/page.kramo.Cartridges.metainfo.xml.in:52 data/gtk/help-overlay.blp:19
#: data/gtk/window.blp:542 cartridges/details_dialog.py:267
#: cartridges/importer/importer.py:320 cartridges/importer/importer.py:370
msgid "Preferences"
msgstr "ప్రాధాన్యతలు"
#: data/gtk/details-dialog.blp:15
msgid "Cancel"
msgstr "రద్దు చేయి"
#: data/gtk/details-dialog.blp:46
msgid "New Cover"
msgstr "కొత్త కవర్"
#: data/gtk/details-dialog.blp:65
msgid "Delete Cover"
msgstr "కవర్‌ని తొలగించండి"
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
msgid "Title"
msgstr "శీర్షిక"
#: data/gtk/details-dialog.blp:97
msgid "Developer (optional)"
msgstr "డెవలపర్ (ఐచ్ఛికం)"
#: data/gtk/details-dialog.blp:103
msgid "Executable"
msgstr "అమలు చేయదగినది"
#: data/gtk/details-dialog.blp:109
msgid "Select File"
msgstr "ఫైల్‌ని ఎంచుకోండి"
#: data/gtk/details-dialog.blp:120
msgid "More Info"
msgstr "మరింత సమాచారం"
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
msgid "Edit"
msgstr "సవరించు"
#: data/gtk/game.blp:103 cartridges/window.py:350
msgid "Hide"
msgstr "దాచు"
#: data/gtk/game.blp:104 data/gtk/game.blp:112 data/gtk/window.blp:463
msgid "Remove"
msgstr "తొలగించు"
#: data/gtk/game.blp:111 cartridges/window.py:352
msgid "Unhide"
msgstr "దాచిపెట్టు"
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
msgid "General"
msgstr "జనరల్"
#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:205 data/gtk/window.blp:221
#: data/gtk/window.blp:272 data/gtk/window.blp:288 data/gtk/window.blp:474
msgid "Search"
msgstr "శోధించండి"
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
msgid "Keyboard Shortcuts"
msgstr "కీబోర్డ్ సత్వరమార్గాలు"
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
msgid "Undo"
msgstr "అన్డు"
#: data/gtk/help-overlay.blp:34
msgid "Quit"
msgstr "నిష్క్రమించు"
#: data/gtk/help-overlay.blp:39 data/gtk/window.blp:92 data/gtk/window.blp:185
msgid "Toggle Sidebar"
msgstr "సైడ్‌బార్‌ని టోగుల్ చేయండి"
#: data/gtk/help-overlay.blp:44 data/gtk/window.blp:198 data/gtk/window.blp:265
msgid "Main Menu"
msgstr "ప్రధాన మెనూ"
#: data/gtk/help-overlay.blp:50
msgid "Games"
msgstr "ఆటలు"
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:191 data/gtk/window.blp:550
msgid "Add Game"
msgstr "గేమ్ జోడించండి"
#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:113
#: data/gtk/window.blp:27 data/gtk/window.blp:554
msgid "Import"
msgstr "దిగుమతి"
#: data/gtk/help-overlay.blp:63
msgid "Show Hidden Games"
msgstr "హిడెన్ గేమ్‌లను చూపించు"
#: data/gtk/help-overlay.blp:68
msgid "Remove Game"
msgstr "గేమ్‌ని తీసివేయండి"
#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:117
#: data/gtk/preferences.blp:415
msgid "Behavior"
msgstr "ప్రవర్తన"
#: data/gtk/preferences.blp:16
msgid "Exit After Launching Games"
msgstr "గేమ్‌లను ప్రారంభించిన తర్వాత నిష్క్రమించండి"
#: data/gtk/preferences.blp:20
msgid "Cover Image Launches Game"
msgstr "కవర్ ఇమేజ్ గేమ్ లాంచ్"
#: data/gtk/preferences.blp:21
msgid "Swaps the behavior of the cover image and the play button"
msgstr "కవర్ ఇమేజ్ మరియు ప్లే బటన్ యొక్క ప్రవర్తనను మారుస్తుంది"
#: data/gtk/preferences.blp:26 cartridges/details_dialog.py:82
msgid "Images"
msgstr "చిత్రాలు"
#: data/gtk/preferences.blp:29
msgid "High Quality Images"
msgstr "అధిక నాణ్యత చిత్రాలు"
#: data/gtk/preferences.blp:30
msgid "Save game covers losslessly at the cost of storage"
msgstr "నిల్వ ఖర్చుతో గేమ్ కవర్‌లను నష్టపోకుండా సేవ్ చేయండి"
#: data/gtk/preferences.blp:35
msgid "Danger Zone"
msgstr "డేంజర్ జోన్"
#: data/gtk/preferences.blp:48
msgid "Remove All Games"
msgstr "అన్ని ఆటలను తీసివేయండి"
#: data/gtk/preferences.blp:120
msgid "Remove Uninstalled Games"
msgstr "అన్‌ఇన్‌స్టాల్ చేసిన గేమ్‌లను తీసివేయండి"
#: data/gtk/preferences.blp:125
msgid "Sources"
msgstr "మూలాలు"
#: data/gtk/preferences.blp:128 cartridges/importer/steam_source.py:114
msgid "Steam"
msgstr "స్టిం"
#: data/gtk/preferences.blp:137 data/gtk/preferences.blp:164
#: data/gtk/preferences.blp:199 data/gtk/preferences.blp:242
#: data/gtk/preferences.blp:269 data/gtk/preferences.blp:296
#: data/gtk/preferences.blp:323
msgid "Install Location"
msgstr "స్థానాన్ని ఇన్‌స్టాల్ చేయండి"
#: data/gtk/preferences.blp:155 data/gtk/window.blp:564
#: cartridges/importer/lutris_source.py:96
msgid "Lutris"
msgstr "లుట్రిస్"
#: data/gtk/preferences.blp:181
msgid "Import Steam Games"
msgstr "స్టిం గేమ్‌లను దిగుమతి చేయండి"
#: data/gtk/preferences.blp:185
msgid "Import Flatpak Games"
msgstr "ఫ్లాట్‌పాక్ గేమ్‌లను దిగుమతి చేయండి"
#: data/gtk/preferences.blp:190 cartridges/importer/heroic_source.py:355
msgid "Heroic"
msgstr "హిరోఇక్"
#: data/gtk/preferences.blp:216
msgid "Import Epic Games"
msgstr "ఎపిక్ గేమ్‌లను దిగుమతి చేయండి"
#: data/gtk/preferences.blp:220
msgid "Import GOG Games"
msgstr "GOG గేమ్‌లను దిగుమతి చేయండి"
#: data/gtk/preferences.blp:224
msgid "Import Amazon Games"
msgstr "అమెజాన్ గేమ్‌లను దిగుమతి చేయండి"
#: data/gtk/preferences.blp:228
msgid "Import Sideloaded Games"
msgstr "సైడ్‌లోడెడ్ గేమ్‌లను దిగుమతి చేయండి"
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
msgid "Bottles"
msgstr "బాటిల్స్"
#: data/gtk/preferences.blp:260 cartridges/importer/itch_source.py:81
msgid "itch"
msgstr "ఇచ్చ్"
#: data/gtk/preferences.blp:287 cartridges/importer/legendary_source.py:97
msgid "Legendary"
msgstr "లెజెండరీ"
#: data/gtk/preferences.blp:314 cartridges/importer/retroarch_source.py:142
msgid "RetroArch"
msgstr "RetroArch"
#: data/gtk/preferences.blp:341 cartridges/importer/flatpak_source.py:143
msgid "Flatpak"
msgstr "ఫ్లాట్‌పాక్"
#. The location of the system-wide data directory
#: data/gtk/preferences.blp:351
msgid "System Location"
msgstr "సిస్టమ్ స్థానం"
#. The location of the user-specific data directory
#: data/gtk/preferences.blp:369
msgid "User Location"
msgstr "వినియోగదారు స్థానం"
#: data/gtk/preferences.blp:386
msgid "Import Game Launchers"
msgstr "దిగుమతి గేమ్ లాంచర్లు"
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
msgid "Desktop Entries"
msgstr "డెస్క్‌టాప్ ఎంట్రీలు"
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
msgid "SteamGridDB"
msgstr "SteamGridDB"
#: data/gtk/preferences.blp:407
msgid "Authentication"
msgstr "ప్రమాణీకరణ"
#: data/gtk/preferences.blp:410
msgid "API Key"
msgstr "API కీ"
#: data/gtk/preferences.blp:418
msgid "Use SteamGridDB"
msgstr "SteamGridDBని ఉపయోగించండి"
#: data/gtk/preferences.blp:419
msgid "Download images when adding or importing games"
msgstr "గేమ్‌లను జోడించేటప్పుడు లేదా దిగుమతి చేస్తున్నప్పుడు చిత్రాలను డౌన్‌లోడ్ చేయండి"
#: data/gtk/preferences.blp:423
msgid "Prefer Over Official Images"
msgstr "అధికారిక చిత్రాల కంటే ప్రాధాన్యత ఇవ్వండి"
#: data/gtk/preferences.blp:427
msgid "Prefer Animated Images"
msgstr "యానిమేటెడ్ చిత్రాలకు ప్రాధాన్యత ఇవ్వండి"
#: data/gtk/preferences.blp:433
msgid "Update Covers"
msgstr "కవర్‌లను నవీకరించండి"
#: data/gtk/preferences.blp:434
msgid "Fetch covers for games already in your library"
msgstr "ఇప్పటికే మీ లైబ్రరీలో ఉన్న గేమ్‌ల కోసం కవర్‌లను పొందండి"
#: data/gtk/preferences.blp:439
msgid "Update"
msgstr "నవీకరించు"
#: data/gtk/window.blp:6 data/gtk/window.blp:14
msgid "No Games Found"
msgstr "గేమ్‌లు ఏవీ కనుగొనబడలేదు"
#: data/gtk/window.blp:7 data/gtk/window.blp:15
msgid "Try a different search"
msgstr "వేరొక శోధనను ప్రయత్నించండి"
#: data/gtk/window.blp:21
msgid "No Games"
msgstr "ఆటలు లేవు"
#: data/gtk/window.blp:22
msgid "Use the + button to add games"
msgstr "గేమ్‌లను జోడించడానికి + బటన్‌ను ఉపయోగించండి"
#: data/gtk/window.blp:40
msgid "No Hidden Games"
msgstr "హిడెన్ గేమ్‌లు లేవు"
#: data/gtk/window.blp:41
msgid "Games you hide will appear here"
msgstr "మీరు దాచిన గేమ్‌లు ఇక్కడ కనిపిస్తాయి"
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
msgid "All Games"
msgstr "అన్ని ఆటలు"
#: data/gtk/window.blp:136 cartridges/main.py:230
msgid "Added"
msgstr "చేర్చబడింది"
#: data/gtk/window.blp:156
msgid "Imported"
msgstr "దిగుమతి చేయబడింది"
#: data/gtk/window.blp:258
msgid "Hidden Games"
msgstr "దాచిన ఆటలు"
#: data/gtk/window.blp:367
msgid "Game Title"
msgstr "గేమ్ శీర్షిక"
#: data/gtk/window.blp:424
msgid "Play"
msgstr "ఆడండి"
#: data/gtk/window.blp:501
msgid "Sort"
msgstr "క్రమబద్ధీకరించు"
#: data/gtk/window.blp:504
msgid "A-Z"
msgstr "A-Z"
#: data/gtk/window.blp:510
msgid "Z-A"
msgstr "Z-A"
#: data/gtk/window.blp:516
msgid "Newest"
msgstr "సరికొత్త"
#: data/gtk/window.blp:522
msgid "Oldest"
msgstr "అతి పురాతనమైనది"
#: data/gtk/window.blp:528
msgid "Last Played"
msgstr "చివరిగా ఆడినది"
#: data/gtk/window.blp:535
msgid "Show Hidden"
msgstr "దాచిన చూపు"
#: data/gtk/window.blp:544
msgid "About Cartridges"
msgstr "గుళికల గురించి"
#: data/gtk/window.blp:561
msgid "IGDB"
msgstr "IGDB"
#: data/gtk/window.blp:563
msgid "ProtonDB"
msgstr "ProtonDB"
#: data/gtk/window.blp:565
msgid "HowLongToBeat"
msgstr "HowLongToBeat"
#. The variable is the title of the game
#: cartridges/main.py:205 cartridges/game.py:125
msgid "{} launched"
msgstr "{} ప్రారంభించబడింది"
#. Translators: Replace this with your name for it to show up in the about window
#: cartridges/main.py:270
msgid "translator_credits"
msgstr "Aryan Karamtoth"
#. The variable is the date when the game was added
#: cartridges/window.py:373
msgid "Added: {}"
msgstr "జోడించబడింది: {}"
#: cartridges/window.py:376
msgid "Never"
msgstr "ఎప్పుడూ"
#. The variable is the date when the game was last played
#: cartridges/window.py:380
msgid "Last played: {}"
msgstr "చివరిగా ఆడినది: {}"
#: cartridges/details_dialog.py:73
msgid "Apply"
msgstr "దరఖాస్తు చేసుకోండి"
#: cartridges/details_dialog.py:79
msgid "Add New Game"
msgstr "కొత్త గేమ్‌ని జోడించండి"
#: cartridges/details_dialog.py:80
msgid "Add"
msgstr "జోడించు"
#: cartridges/details_dialog.py:90
msgid "Executables"
msgstr "ఎక్జిక్యూటబుల్స్"
#. Translate this string as you would translate "file"
#: cartridges/details_dialog.py:105
msgid "file.txt"
msgstr "file.txt"
#. As in software
#: cartridges/details_dialog.py:107
msgid "program"
msgstr "ప్రోగ్రామ్"
#. Translate this string as you would translate "path to {}"
#: cartridges/details_dialog.py:112 cartridges/details_dialog.py:114
msgid "C:\\path\\to\\{}"
msgstr "C:\\path\\to\\{}"
#. Translate this string as you would translate "path to {}"
#: cartridges/details_dialog.py:118 cartridges/details_dialog.py:120
msgid "/path/to/{}"
msgstr "/path/to/{}"
#: cartridges/details_dialog.py:125
msgid ""
"To launch the executable \"{}\", use the command:\n"
"\n"
"<tt>\"{}\"</tt>\n"
"\n"
"To open the file \"{}\" with the default application, use:\n"
"\n"
"<tt>{} \"{}\"</tt>\n"
"\n"
"If the path contains spaces, make sure to wrap it in double quotes!"
msgstr ""
"ఎక్జిక్యూటబుల్ \"{}\"ని ప్రారంభించడానికి, ఆదేశాన్ని ఉపయోగించండి:\n"
"\n"
"<tt>\"{}\"</tt>\n"
"\n"
"డిఫాల్ట్ అప్లికేషన్‌తో \"{}\" ఫైల్‌ని తెరవడానికి, ఉపయోగించండి:\n"
"\n"
"<tt>{} \"{}\"</tt>\n"
"\n"
"మార్గం ఖాళీలను కలిగి ఉన్నట్లయితే, దానిని డబుల్ కోట్‌లలో చుట్టేలా చూసుకోండి!"
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
msgid "Couldn't Add Game"
msgstr "గేమ్‌ని జోడించడం సాధ్యపడలేదు"
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:209
msgid "Game title cannot be empty."
msgstr "గేమ్ శీర్షిక ఖాళీగా ఉండకూడదు."
#: cartridges/details_dialog.py:173 cartridges/details_dialog.py:217
msgid "Executable cannot be empty."
msgstr "ఎక్జిక్యూటబుల్ ఖాళీగా ఉండకూడదు."
#: cartridges/details_dialog.py:208 cartridges/details_dialog.py:216
msgid "Couldn't Apply Preferences"
msgstr "ప్రాధాన్యతలను వర్తింపజేయడం సాధ్యపడలేదు"
#. The variable is the title of the game
#: cartridges/game.py:139
msgid "{} hidden"
msgstr "{} దాచబడింది"
#: cartridges/game.py:139
msgid "{} unhidden"
msgstr "{} దాచబడలేదు"
#. The variable is the title of the game
#. The variable is the number of games removed
#: cartridges/game.py:153 cartridges/importer/importer.py:391
msgid "{} removed"
msgstr "{} తీసివేయబడింది"
#: cartridges/preferences.py:133
msgid "All games removed"
msgstr "అన్ని గేమ్‌లు తీసివేయబడ్డాయి"
#: cartridges/preferences.py:181
msgid ""
"An API key is required to use SteamGridDB. You can generate one {}here{}."
msgstr "SteamGridDBని ఉపయోగించడానికి API కీ అవసరం. మీరు {}ఇక్కడ{} ఒకదాన్ని రూపొందించవచ్చు."
#: cartridges/preferences.py:196
msgid "Downloading covers…"
msgstr "కవర్‌లను డౌన్‌లోడ్ చేస్తోంది…"
#: cartridges/preferences.py:215
msgid "Covers updated"
msgstr "కవర్లు నవీకరించబడ్డాయి"
#: cartridges/preferences.py:360
msgid "Installation Not Found"
msgstr "ఇన్‌స్టాలేషన్ కనుగొనబడలేదు"
#: cartridges/preferences.py:361
msgid "Select a valid directory"
msgstr "చెల్లుబాటు అయ్యే డైరెక్టరీని ఎంచుకోండి"
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
msgid "Warning"
msgstr "హెచ్చరిక"
#: cartridges/preferences.py:431
msgid "Invalid Directory"
msgstr "చెల్లని డైరెక్టరీ"
#: cartridges/preferences.py:437
msgid "Set Location"
msgstr "స్థానాన్ని సెట్ చేయండి"
#: cartridges/utils/create_dialog.py:33 cartridges/importer/importer.py:319
msgid "Dismiss"
msgstr "తొలగించు"
#: cartridges/importer/importer.py:145
msgid "Importing Games…"
msgstr "గేమ్‌లను దిగుమతి చేస్తోంది..."
#: cartridges/importer/importer.py:338
msgid "The following errors occured during import:"
msgstr "దిగుమతి సమయంలో క్రింది లోపాలు సంభవించాయి:"
#: cartridges/importer/importer.py:367
msgid "No new games found"
msgstr "కొత్త గేమ్‌లు ఏవీ కనుగొనబడలేదు"
#: cartridges/importer/importer.py:379
msgid "1 game imported"
msgstr "1 గేమ్ దిగుమతి చేయబడింది"
#. The variable is the number of games
#: cartridges/importer/importer.py:383
msgid "{} games imported"
msgstr "{} గేమ్‌లు దిగుమతి చేయబడ్డాయి"
#. A single game removed
#: cartridges/importer/importer.py:387
msgid "1 removed"
msgstr "1 తీసివేయబడింది"
#. The variable is the name of the source
#: cartridges/importer/location.py:34
msgid "Select the {} cache directory."
msgstr "{} కాష్ డైరెక్టరీని ఎంచుకోండి."
#. The variable is the name of the source
#: cartridges/importer/location.py:36
msgid "Select the {} configuration directory."
msgstr "{} కాన్ఫిగరేషన్ డైరెక్టరీని ఎంచుకోండి."
#. The variable is the name of the source
#: cartridges/importer/location.py:38
msgid "Select the {} data directory."
msgstr "{} డేటా డైరెక్టరీని ఎంచుకోండి."
#: cartridges/importer/retroarch_source.py:129
msgid "No RetroArch Core Selected"
msgstr "రెట్రోఆర్చ్ కోర్ ఎంచుకోబడలేదు"
#. The variable is a newline separated list of playlists
#: cartridges/importer/retroarch_source.py:131
msgid "The following playlists have no default core:"
msgstr "కింది ప్లేజాబితాలకు డిఫాల్ట్ కోర్ లేదు:"
#: cartridges/importer/retroarch_source.py:133
msgid "Games with no core selected were not imported"
msgstr "ఎంపిక చేయబడిన కోర్ లేని గేమ్‌లు దిగుమతి చేయబడలేదు"
#: cartridges/store/managers/sgdb_manager.py:46
msgid "Couldn't Authenticate SteamGridDB"
msgstr "SteamGridDB ని ప్రమాణీకరించడం సాధ్యపడలేదు"
#: cartridges/store/managers/sgdb_manager.py:47
msgid "Verify your API key in preferences"
msgstr "ప్రాధాన్యతలలో మీ API కీని ధృవీకరించండి"

4
pyrightconfig.json Normal file
View File

@@ -0,0 +1,4 @@
{
"reportRedeclaration": "none",
"reportMissingModuleSource": "none"
}

View File

@@ -1,7 +1,7 @@
[wrap-git]
directory = blueprint-compiler
url = https://gitlab.gnome.org/jwestman/blueprint-compiler.git
revision = v0.12.0
revision = v0.14.0
depth = 1
[provide]