Compare commits
202 Commits
v2.4
...
auto-impor
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
37e24ea8b1 | ||
|
|
fbc4e05327 | ||
|
|
ce584a09c2 | ||
|
|
bb3780f048 | ||
|
|
babe489676 | ||
|
|
e32b30d343 | ||
|
|
863344b6ab | ||
|
|
eee2a2f949 | ||
|
|
03b9c8627f | ||
|
|
46036c57b2 | ||
|
|
61e9a29c6d | ||
|
|
83ae99ff8a | ||
|
|
e4ceac6392 | ||
|
|
8a8b0525b4 | ||
|
|
256f6f2325 | ||
|
|
4938bacd55 | ||
|
|
5050c4f6ca | ||
|
|
9e4644ab2f | ||
|
|
19d0e27e88 | ||
|
|
2801e777f7 | ||
|
|
fc5b5447fc | ||
|
|
0a50072e2c | ||
|
|
e5287c9d3f | ||
|
|
22a755c2e4 | ||
|
|
239420148a | ||
|
|
35acb56a62 | ||
|
|
adacdefdb9 | ||
|
|
7367e40cb3 | ||
|
|
7efa17915f | ||
|
|
bdcded93f3 | ||
|
|
b3a65c3d23 | ||
|
|
06730248a9 | ||
|
|
b46faa951f | ||
|
|
43a04e7d44 | ||
|
|
d74c8aba1a | ||
|
|
eac6d63010 | ||
|
|
beda52b575 | ||
|
|
13cefac34d | ||
|
|
d79686b9a1 | ||
|
|
eff60d5990 | ||
|
|
823641d909 | ||
|
|
6c2ab8099b | ||
|
|
d8137871c5 | ||
|
|
f396a4679c | ||
|
|
c1226197f8 | ||
|
|
8504689426 | ||
|
|
aafc64023c | ||
|
|
eab96edfc7 | ||
|
|
72f15ba7fd | ||
|
|
63a797ce33 | ||
|
|
8640e37252 | ||
|
|
57db530af5 | ||
|
|
bfff596c39 | ||
|
|
d09d27517e | ||
|
|
33c83b65d9 | ||
|
|
942be92a9e | ||
|
|
ae7819a264 | ||
|
|
ed31a2f61e | ||
|
|
38f85d2f4a | ||
|
|
e8db732868 | ||
|
|
7d937c7027 | ||
|
|
2eef3344a2 | ||
|
|
f3bd8b898b | ||
|
|
ee9422feae | ||
|
|
8244b16c17 | ||
|
|
4a530ce92e | ||
|
|
40d6b45291 | ||
|
|
ac57f1d0b6 | ||
|
|
05c6851d40 | ||
|
|
9f2228e7c8 | ||
|
|
5671597089 | ||
|
|
eee4e3e2f2 | ||
|
|
6b1fe1bd8d | ||
|
|
4198810cca | ||
|
|
451819a005 | ||
|
|
a0fe463f03 | ||
|
|
d9384308fe | ||
|
|
f4b44477e9 | ||
|
|
fc3dac6586 | ||
|
|
ffd293a92d | ||
|
|
34ae366772 | ||
|
|
3e5b914ed6 | ||
|
|
c847560e0c | ||
|
|
1623a35e63 | ||
|
|
92c81293b4 | ||
|
|
ce7cb797bb | ||
|
|
fe7fe0fefa | ||
|
|
10c6f5704c | ||
|
|
f2e5e5b03f | ||
|
|
afd1972a76 | ||
|
|
8a7875b843 | ||
|
|
aec8a4efa7 | ||
|
|
2b93a1feeb | ||
|
|
5306b7c81c | ||
|
|
c5675efa48 | ||
|
|
83399c7882 | ||
|
|
04900c7acf | ||
|
|
3ae6b40773 | ||
|
|
4a5ebb3221 | ||
|
|
778caead01 | ||
|
|
2b7f520f2a | ||
|
|
c80f5271da | ||
|
|
f7cf7c4a3b | ||
|
|
c4aa903752 | ||
|
|
4559516b5a | ||
|
|
d4dbf9e589 | ||
|
|
1f7c9a8b0b | ||
|
|
725267c7b9 | ||
|
|
78d6416285 | ||
|
|
c86f14c4f5 | ||
|
|
97e8f93744 | ||
|
|
6d47629bd0 | ||
|
|
ccd97c73ea | ||
|
|
8ec776a04c | ||
|
|
8efce829ca | ||
|
|
6155ace0ec | ||
|
|
35d85a607f | ||
|
|
7ed7814e51 | ||
|
|
b086766b77 | ||
|
|
389b904455 | ||
|
|
303f2a2063 | ||
|
|
3e1ef88a1f | ||
|
|
124d2c8ec7 | ||
|
|
f741b9f100 | ||
|
|
7c9d9a317b | ||
|
|
b707f90a3f | ||
|
|
06e4dadf3c | ||
|
|
80c8566535 | ||
|
|
3f5d3eb3b1 | ||
|
|
64ae27a8a4 | ||
|
|
0482167237 | ||
|
|
2c9c9febfc | ||
|
|
8825c09ae8 | ||
|
|
ec69361826 | ||
|
|
f8bc23991a | ||
|
|
29da7feba9 | ||
|
|
93049f3908 | ||
|
|
5ab3085083 | ||
|
|
7d0b9854d3 | ||
|
|
bcc3c57117 | ||
|
|
08a90365a8 | ||
|
|
a6884b5c3c | ||
|
|
f7a3e01cee | ||
|
|
9bce2190f7 | ||
|
|
8f4ddb37b2 | ||
|
|
551acccbd9 | ||
|
|
b521ea6daf | ||
|
|
248cd10367 | ||
|
|
387430d5cd | ||
|
|
6017c57e6c | ||
|
|
50bc67bb1b | ||
|
|
76fd2f97ef | ||
|
|
e5f8e81c2e | ||
|
|
b574439328 | ||
|
|
2b52391229 | ||
|
|
9b24f7c473 | ||
|
|
644bf10713 | ||
|
|
2962988727 | ||
|
|
6d3d6e6a8f | ||
|
|
9557caecbc | ||
|
|
a48841e5cb | ||
|
|
59966e9198 | ||
|
|
69394d01ec | ||
|
|
684f457713 | ||
|
|
baa4d6f0c4 | ||
|
|
2662d66058 | ||
|
|
2cd670fcfe | ||
|
|
38bed27c61 | ||
|
|
815c1ec088 | ||
|
|
89ba4aecaa | ||
|
|
82ff5b3b46 | ||
|
|
3a052b6367 | ||
|
|
6a78f6d55e | ||
|
|
a352d21864 | ||
|
|
6f51f8ad7a | ||
|
|
cfbd68bf12 | ||
|
|
ad545921b7 | ||
|
|
69928a8b4f | ||
|
|
61e7e0274c | ||
|
|
406d0c281c | ||
|
|
27bc40e6f6 | ||
|
|
ac36118d57 | ||
|
|
38e71e32b9 | ||
|
|
c3226e33e8 | ||
|
|
3513f29435 | ||
|
|
bd7cda12e3 | ||
|
|
0c7f2f2800 | ||
|
|
5f9c990b25 | ||
|
|
29a3e6e9d3 | ||
|
|
bebc8f3d7f | ||
|
|
df2b8c40c9 | ||
|
|
69b168ca01 | ||
|
|
8e01f125f1 | ||
|
|
6d3762b31b | ||
|
|
8df64c4d05 | ||
|
|
42927032c1 | ||
|
|
d3b2615bce | ||
|
|
bb41fc5345 | ||
|
|
22ba068bd3 | ||
|
|
294a846374 | ||
|
|
2982129bfe | ||
|
|
2d9c954932 |
2
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
github: [kra-mo]
|
||||||
|
liberapay: kramo
|
||||||
6
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "monthly"
|
||||||
61
.github/workflows/ci.yml
vendored
@@ -1,8 +1,9 @@
|
|||||||
|
name: CI
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
pull_request:
|
pull_request:
|
||||||
name: CI
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: release-${{ github.sha }}
|
group: release-${{ github.sha }}
|
||||||
jobs:
|
jobs:
|
||||||
@@ -10,24 +11,24 @@ jobs:
|
|||||||
name: Flatpak
|
name: Flatpak
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
image: bilelmoussaoui/flatpak-github-actions:gnome-44
|
image: bilelmoussaoui/flatpak-github-actions:gnome-46
|
||||||
options: --privileged
|
options: --privileged
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Flatpak Builder
|
- name: Flatpak Builder
|
||||||
uses: flatpak/flatpak-github-actions/flatpak-builder@v6.1
|
uses: flatpak/flatpak-github-actions/flatpak-builder@v6.3
|
||||||
with:
|
with:
|
||||||
bundle: hu.kramo.Cartridges.Devel.flatpak
|
bundle: page.kramo.Cartridges.Devel.flatpak
|
||||||
manifest-path: flatpak/hu.kramo.Cartridges.Devel.json
|
manifest-path: build-aux/flatpak/page.kramo.Cartridges.Devel.json
|
||||||
|
|
||||||
windows:
|
windows:
|
||||||
name: Windows
|
name: Windows
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup MSYS2
|
- name: Setup MSYS2
|
||||||
uses: msys2/setup-msys2@v2
|
uses: msys2/setup-msys2@v2
|
||||||
@@ -42,7 +43,6 @@ jobs:
|
|||||||
meson setup _build
|
meson setup _build
|
||||||
ninja -C _build install
|
ninja -C _build install
|
||||||
pacman --noconfirm -Rs mingw-w64-ucrt-x86_64-desktop-file-utils mingw-w64-ucrt-x86_64-meson git
|
pacman --noconfirm -Rs mingw-w64-ucrt-x86_64-desktop-file-utils mingw-w64-ucrt-x86_64-meson git
|
||||||
find /ucrt64/share/locale/ -type f ! -name "*cartridges.mo" -delete
|
|
||||||
|
|
||||||
- name: Test
|
- name: Test
|
||||||
shell: msys2 {0}
|
shell: msys2 {0}
|
||||||
@@ -51,10 +51,49 @@ jobs:
|
|||||||
timeout 2 cartridges; [ "$?" -eq "124" ]
|
timeout 2 cartridges; [ "$?" -eq "124" ]
|
||||||
|
|
||||||
- name: Inno Setup
|
- name: Inno Setup
|
||||||
run: iscc ".\_build\windows\Cartridges.iss"
|
run: iscc ".\_build\build-aux\windows\Cartridges.iss"
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: Windows Installer
|
name: Windows Installer
|
||||||
path: _build/windows/Output/Cartridges Setup.exe
|
path: _build/build-aux/windows/Output/Cartridges Windows.exe
|
||||||
|
|
||||||
|
macos:
|
||||||
|
name: macOS
|
||||||
|
runs-on: macos-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Homebrew
|
||||||
|
id: set-up-homebrew
|
||||||
|
uses: Homebrew/actions/setup-homebrew@master
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: |
|
||||||
|
brew install meson pygobject3 libadwaita adwaita-icon-theme desktop-file-utils pyinstaller pillow
|
||||||
|
pip3 install --break-system-packages requests PyYAML pyobjc
|
||||||
|
|
||||||
|
- name: Meson Build
|
||||||
|
run: |
|
||||||
|
meson setup _build -Dtiff_compression=jpeg
|
||||||
|
ninja install -C _build
|
||||||
|
|
||||||
|
- name: PyInstaller
|
||||||
|
env:
|
||||||
|
PYTHONPATH: /opt/homebrew/opt/homebrew/lib/python3.12/site-packages
|
||||||
|
run: |
|
||||||
|
cd build-aux/macos
|
||||||
|
pyinstaller ./cartridges.spec
|
||||||
|
|
||||||
|
- name: Zip
|
||||||
|
run: |
|
||||||
|
cd build-aux/macos/dist
|
||||||
|
zip -yr Cartridges\ macOS.zip Cartridges.app
|
||||||
|
|
||||||
|
- name: Upload Artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
path: build-aux/macos/dist/Cartridges macOS.zip
|
||||||
|
name: macOS Application
|
||||||
|
|||||||
19
.github/workflows/publish-release.yml
vendored
@@ -1,20 +1,21 @@
|
|||||||
|
name: Publish Release
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags: "*"
|
||||||
"*"
|
|
||||||
name: Publish Release
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: release-${{ github.sha }}
|
group: release-${{ github.sha }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
publish-release:
|
publish-release:
|
||||||
name: Publish Release
|
name: Publish Release
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Download workflow artifact
|
- name: Download workflow artifact
|
||||||
uses: dawidd6/action-download-artifact@v2.27.0
|
uses: dawidd6/action-download-artifact@v6
|
||||||
with:
|
with:
|
||||||
workflow: ci.yml
|
workflow: ci.yml
|
||||||
commit: ${{ github.sha }}
|
commit: ${{ github.sha }}
|
||||||
@@ -23,7 +24,7 @@ jobs:
|
|||||||
shell: python
|
shell: python
|
||||||
run: |
|
run: |
|
||||||
import re, textwrap
|
import re, textwrap
|
||||||
open_file = open("./data/hu.kramo.Cartridges.metainfo.xml.in", "r", encoding="utf-8")
|
open_file = open("./data/page.kramo.Cartridges.metainfo.xml.in", "r", encoding="utf-8")
|
||||||
string = open_file.read()
|
string = open_file.read()
|
||||||
open_file.close()
|
open_file.close()
|
||||||
string = re.findall("<release.*>\s*<description.*>\n([\s\S]*?)\s*</description>\s*<\/release>", string)[0]
|
string = re.findall("<release.*>\s*<description.*>\n([\s\S]*?)\s*</description>\s*<\/release>", string)[0]
|
||||||
@@ -37,9 +38,11 @@ jobs:
|
|||||||
run: echo tag_name=${GITHUB_REF#refs/tags/} >> $GITHUB_OUTPUT
|
run: echo tag_name=${GITHUB_REF#refs/tags/} >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Publish release
|
- name: Publish release
|
||||||
uses: softprops/action-gh-release@v0.1.15
|
uses: softprops/action-gh-release@v2.0.8
|
||||||
with:
|
with:
|
||||||
files: Windows Installer/Cartridges Setup.exe
|
files: |
|
||||||
|
Windows Installer/Cartridges Windows.exe
|
||||||
|
macOS Application/Cartridges macOS.zip
|
||||||
fail_on_unmatched_files: true
|
fail_on_unmatched_files: true
|
||||||
tag_name: ${{ steps.get_tag_name.outputs.tag_name }}
|
tag_name: ${{ steps.get_tag_name.outputs.tag_name }}
|
||||||
body_path: release_notes
|
body_path: release_notes
|
||||||
3
.gitignore
vendored
@@ -1,4 +1,7 @@
|
|||||||
/subprojects/blueprint-compiler
|
/subprojects/blueprint-compiler
|
||||||
|
/build-aux/macos/build
|
||||||
|
/build-aux/macos/dist
|
||||||
/.flatpak
|
/.flatpak
|
||||||
/.flatpak-builder
|
/.flatpak-builder
|
||||||
/.vscode
|
/.vscode
|
||||||
|
.DS_Store
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
ignore=importers
|
ignore=importers
|
||||||
|
|
||||||
[MESSAGES CONTROL]
|
|
||||||
|
|
||||||
|
[MESSAGES CONTROL]
|
||||||
|
|
||||||
disable=raw-checker-failed,
|
disable=raw-checker-failed,
|
||||||
bad-inline-option,
|
bad-inline-option,
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
The project follows the [GNOME Code of Conduct](https://wiki.gnome.org/Foundation/CodeOfConduct).
|
The project follows the [GNOME Code of Conduct](https://conduct.gnome.org/).
|
||||||
|
|
||||||
If you believe that someone is violating the Code of Conduct, or have any other concerns, please contact us via [cartridges-community@kramo.hu](mailto:cartridges-community@kramo.hu).
|
If you believe that someone is violating the Code of Conduct, or have any other concerns, please contact us via [cartridges-community@kramo.page](mailto:cartridges-community@kramo.page).
|
||||||
|
|||||||
@@ -33,6 +33,11 @@ The project can be translated on [Weblate](https://hosted.weblate.org/engage/car
|
|||||||
2. From the MSYS2 shell, install the required dependencies listed [here](https://github.com/kra-mo/cartridges/blob/main/.github/workflows/ci.yml).
|
2. From the MSYS2 shell, install the required dependencies listed [here](https://github.com/kra-mo/cartridges/blob/main/.github/workflows/ci.yml).
|
||||||
3. Build it via Meson.
|
3. Build it via Meson.
|
||||||
|
|
||||||
|
## For macOS
|
||||||
|
1. Install [Homebrew](https://brew.sh/).
|
||||||
|
2. Using `brew` and `pip3`, install the required dependencies listed [here](https://github.com/kra-mo/cartridges/blob/main/.github/workflows/ci.yml).
|
||||||
|
3. Build it via Meson.
|
||||||
|
|
||||||
## Meson
|
## Meson
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/kra-mo/cartridges.git
|
git clone https://github.com/kra-mo/cartridges.git
|
||||||
@@ -59,4 +64,4 @@ VSCode extensions are available for all of these and you can set them up with th
|
|||||||
"isort.args":["--profile", "black"],
|
"isort.args":["--profile", "black"],
|
||||||
```
|
```
|
||||||
|
|
||||||
For other code editors, you can install them via `pip` and invoke them via the command line.
|
For other code editors, you can install them via `pip` and invoke them from the command line.
|
||||||
|
|||||||
29
README.md
@@ -7,12 +7,12 @@
|
|||||||
[discord-image]: https://img.shields.io/discord/1088155799299313754?color=%235865F2&label=discord&logo=discord&logoColor=%23FFFFFF&style=for-the-badge
|
[discord-image]: https://img.shields.io/discord/1088155799299313754?color=%235865F2&label=discord&logo=discord&logoColor=%23FFFFFF&style=for-the-badge
|
||||||
[matrix-url]: https://matrix.to/#/#cartridges:matrix.org
|
[matrix-url]: https://matrix.to/#/#cartridges:matrix.org
|
||||||
[matrix-image]: https://img.shields.io/matrix/cartridges:matrix.org?label=Matrix&logo=matrix&color=%230dbd8b&style=for-the-badge
|
[matrix-image]: https://img.shields.io/matrix/cartridges:matrix.org?label=Matrix&logo=matrix&color=%230dbd8b&style=for-the-badge
|
||||||
[flathub-url]: https://flathub.org/apps/hu.kramo.Cartridges
|
[flathub-url]: https://flathub.org/apps/page.kramo.Cartridges
|
||||||
[flathub-image]: https://img.shields.io/flathub/v/hu.kramo.Cartridges?logo=flathub&style=for-the-badge
|
[flathub-image]: https://img.shields.io/flathub/v/page.kramo.Cartridges?logo=flathub&style=for-the-badge
|
||||||
[installs-image]: https://img.shields.io/flathub/downloads/hu.kramo.Cartridges?style=for-the-badge
|
[installs-image]: https://img.shields.io/flathub/downloads/page.kramo.Cartridges?style=for-the-badge
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="data/icons/hicolor/scalable/apps/hu.kramo.Cartridges.svg" width="128" height="128">
|
<img src="data/icons/hicolor/scalable/apps/page.kramo.Cartridges.svg" width="128" height="128">
|
||||||
|
|
||||||
# Cartridges
|
# Cartridges
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
# The Project
|
# The Project
|
||||||
|
|
||||||
Cartridges is a simple game launcher written in Python using GTK4 and Libadwaita.
|
Cartridges is an easy-to-use, elegant game launcher written in Python using GTK4 and Libadwaita.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
@@ -52,18 +52,22 @@ Cartridges is a simple game launcher written in Python using GTK4 and Libadwaita
|
|||||||
- Automatically downloading cover art from [SteamGridDB](https://www.steamgriddb.com/)
|
- Automatically downloading cover art from [SteamGridDB](https://www.steamgriddb.com/)
|
||||||
- Searching for games on various databases
|
- Searching for games on various databases
|
||||||
- Animated covers
|
- Animated covers
|
||||||
|
- A search provider for GNOME
|
||||||
|
|
||||||
For updates and questions, join our [Discord server][discord-url] (bridged to [Matrix](https://matrix.to/#/#cartridges:matrix.org))!
|
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) and [Liberapay](https://liberapay.com/kramo).
|
||||||
|
|
||||||
|
Thank you for your generosity! 💜
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
## Linux
|
## Linux
|
||||||
|
|
||||||
### Flathub
|
|
||||||
|
|
||||||
The app is available on Flathub.
|
The app is available on Flathub.
|
||||||
|
|
||||||
<a href=https://flathub.org/apps/hu.kramo.Cartridges><img width='240' alt='Download on Flathub' src='https://dl.flathub.org/assets/badges/flathub-badge-en.png'/></a>
|
<a href=https://flathub.org/apps/page.kramo.Cartridges><img alt='Download on Flathub' src='https://flathub.org/api/badge?svg&locale=en'/></a>
|
||||||
|
|
||||||
## Windows
|
## Windows
|
||||||
|
|
||||||
@@ -78,6 +82,13 @@ Note: Windows might present you with a warning when trying to install the app. T
|
|||||||
|
|
||||||
Install the latest release with the command: `winget install cartridges`.
|
Install the latest release with the command: `winget install cartridges`.
|
||||||
|
|
||||||
|
## macOS
|
||||||
|
|
||||||
|
1. Download the latest release from [Releases](https://github.com/kra-mo/cartridges/releases).
|
||||||
|
2. Move the app into your Applications folder.
|
||||||
|
|
||||||
|
Note: macOS might tell you that the application could not be checked for malicious software or something similar. In this case, open System Settings > Privacy & Security, scroll down, find the warning about Cartridges and click "Open Anyway". More information can be found [here](https://support.apple.com/en-us/102445).
|
||||||
|
|
||||||
## Building manually
|
## Building manually
|
||||||
|
|
||||||
See [Building](https://github.com/kra-mo/cartridges/blob/main/CONTRIBUTING.md#building).
|
See [Building](https://github.com/kra-mo/cartridges/blob/main/CONTRIBUTING.md#building).
|
||||||
@@ -90,6 +101,6 @@ Thanks to [Weblate](https://weblate.org/) for hosting our translations!
|
|||||||
|
|
||||||
# Code of Conduct
|
# Code of Conduct
|
||||||
|
|
||||||
The project follows the [GNOME Code of Conduct](https://wiki.gnome.org/Foundation/CodeOfConduct).
|
The project follows the [GNOME Code of Conduct](https://conduct.gnome.org/).
|
||||||
|
|
||||||
See [CODE_OF_CONDUCT.md](https://github.com/kra-mo/cartridges/blob/main/CODE_OF_CONDUCT.md).
|
See [CODE_OF_CONDUCT.md](https://github.com/kra-mo/cartridges/blob/main/CODE_OF_CONDUCT.md).
|
||||||
|
|||||||
134
build-aux/flatpak/page.kramo.Cartridges.Devel.json
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
{
|
||||||
|
"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-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": "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": "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": "../.."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
59
build-aux/macos/cartridges.spec
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
# -*- mode: python ; coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
a = Analysis(
|
||||||
|
["../../_build/cartridges/cartridges"],
|
||||||
|
pathex=[],
|
||||||
|
binaries=[],
|
||||||
|
datas=[("../../_build/data/cartridges.gresource", "Resources")],
|
||||||
|
hiddenimports=[],
|
||||||
|
hookspath=[],
|
||||||
|
hooksconfig={
|
||||||
|
"gi": {
|
||||||
|
"module-versions": {
|
||||||
|
"Gtk": "4.0",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
runtime_hooks=[],
|
||||||
|
excludes=[],
|
||||||
|
noarchive=False,
|
||||||
|
optimize=0,
|
||||||
|
)
|
||||||
|
pyz = PYZ(a.pure)
|
||||||
|
|
||||||
|
exe = EXE(
|
||||||
|
pyz,
|
||||||
|
a.scripts,
|
||||||
|
[],
|
||||||
|
exclude_binaries=True,
|
||||||
|
name="Cartridges",
|
||||||
|
debug=False,
|
||||||
|
bootloader_ignore_signals=False,
|
||||||
|
strip=False,
|
||||||
|
upx=True,
|
||||||
|
console=False,
|
||||||
|
disable_windowed_traceback=False,
|
||||||
|
argv_emulation=False,
|
||||||
|
target_arch=None,
|
||||||
|
codesign_identity=None,
|
||||||
|
entitlements_file=None,
|
||||||
|
)
|
||||||
|
coll = COLLECT(
|
||||||
|
exe,
|
||||||
|
a.binaries,
|
||||||
|
a.datas,
|
||||||
|
strip=False,
|
||||||
|
upx=True,
|
||||||
|
upx_exclude=[],
|
||||||
|
name="Cartridges",
|
||||||
|
)
|
||||||
|
app = BUNDLE(
|
||||||
|
coll,
|
||||||
|
name="Cartridges.app",
|
||||||
|
icon="./icon.icns",
|
||||||
|
bundle_identifier="page.kramo.Cartridges",
|
||||||
|
info_plist={
|
||||||
|
"LSApplicationCategoryType": "public.app-category.games",
|
||||||
|
},
|
||||||
|
)
|
||||||
BIN
build-aux/macos/icon.icns
Normal file
@@ -15,10 +15,10 @@ AppSupportURL=https://github.com/kra-mo/cartridges/issues
|
|||||||
AppUpdatesURL={#MyAppURL}
|
AppUpdatesURL={#MyAppURL}
|
||||||
DefaultDirName={autopf64}\{#MyAppName}
|
DefaultDirName={autopf64}\{#MyAppName}
|
||||||
DisableProgramGroupPage=yes
|
DisableProgramGroupPage=yes
|
||||||
LicenseFile=..\..\LICENSE
|
LicenseFile=..\..\..\LICENSE
|
||||||
PrivilegesRequiredOverridesAllowed=dialog
|
PrivilegesRequiredOverridesAllowed=dialog
|
||||||
OutputBaseFilename=Cartridges Setup
|
OutputBaseFilename=Cartridges Windows
|
||||||
SetupIconFile=..\..\windows\icon.ico
|
SetupIconFile=..\..\..\build-aux\windows\icon.ico
|
||||||
Compression=lzma
|
Compression=lzma
|
||||||
SolidCompression=yes
|
SolidCompression=yes
|
||||||
WizardStyle=modern
|
WizardStyle=modern
|
||||||
@@ -48,9 +48,8 @@ Source: "D:\a\_temp\msys64\ucrt64\share\cartridges\*"; DestDir: "{app}\share\car
|
|||||||
Source: "D:\a\_temp\msys64\ucrt64\share\icons\*"; DestDir: "{app}\share\icons"; Excludes: "*.png,cursors\*"; Flags: recursesubdirs ignoreversion
|
Source: "D:\a\_temp\msys64\ucrt64\share\icons\*"; DestDir: "{app}\share\icons"; Excludes: "*.png,cursors\*"; Flags: recursesubdirs ignoreversion
|
||||||
Source: "D:\a\_temp\msys64\ucrt64\share\glib-2.0\*"; DestDir: "{app}\share\glib-2.0"; Flags: recursesubdirs ignoreversion
|
Source: "D:\a\_temp\msys64\ucrt64\share\glib-2.0\*"; DestDir: "{app}\share\glib-2.0"; Flags: recursesubdirs ignoreversion
|
||||||
Source: "D:\a\_temp\msys64\ucrt64\share\gtk-4.0\*"; DestDir: "{app}\share\gtk-4.0"; Flags: recursesubdirs ignoreversion
|
Source: "D:\a\_temp\msys64\ucrt64\share\gtk-4.0\*"; DestDir: "{app}\share\gtk-4.0"; Flags: recursesubdirs ignoreversion
|
||||||
Source: "D:\a\_temp\msys64\ucrt64\share\locale\*"; DestDir: "{app}\share\locale"; Flags: recursesubdirs ignoreversion
|
|
||||||
|
|
||||||
Source: "..\..\windows\icon.ico"; DestDir: "{app}"; Flags: recursesubdirs ignoreversion
|
Source: "..\..\..\build-aux\windows\icon.ico"; DestDir: "{app}"; Flags: recursesubdirs ignoreversion
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\bin\{#MyAppExeName}"; Parameters: """{app}\bin\cartridges"""; IconFilename: "{app}\icon.ico"
|
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\bin\{#MyAppExeName}"; Parameters: """{app}\bin\cartridges"""; IconFilename: "{app}\icon.ico"
|
||||||
|
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 169 KiB |
@@ -3,5 +3,5 @@ configure_file(
|
|||||||
output: 'Cartridges.iss',
|
output: 'Cartridges.iss',
|
||||||
configuration: conf,
|
configuration: conf,
|
||||||
install: true,
|
install: true,
|
||||||
install_dir: '.'
|
install_dir: '.',
|
||||||
)
|
)
|
||||||
@@ -22,7 +22,7 @@ Cartridges is a simple game launcher for all of your games. It has support for i
|
|||||||
<maintainer>
|
<maintainer>
|
||||||
<foaf:Person>
|
<foaf:Person>
|
||||||
<foaf:name>kramo</foaf:name>
|
<foaf:name>kramo</foaf:name>
|
||||||
<foaf:mbox rdf:resource="mailto:contact@kramo.hu" />
|
<foaf:mbox rdf:resource="mailto:contact@kramo.page" />
|
||||||
<foaf:account>
|
<foaf:account>
|
||||||
<foaf:OnlineAccount>
|
<foaf:OnlineAccount>
|
||||||
<foaf:accountServiceHomepage rdf:resource="https://github.com"/>
|
<foaf:accountServiceHomepage rdf:resource="https://github.com"/>
|
||||||
@@ -37,23 +37,5 @@ Cartridges is a simple game launcher for all of your games. It has support for i
|
|||||||
</foaf:account>
|
</foaf:account>
|
||||||
</foaf:Person>
|
</foaf:Person>
|
||||||
</maintainer>
|
</maintainer>
|
||||||
<maintainer>
|
|
||||||
<foaf:Person>
|
|
||||||
<foaf:name>Geoffrey Coulaud</foaf:name>
|
|
||||||
<foaf:mbox rdf:resource="mailto:geoffrey.coulaud@gmail.com" />
|
|
||||||
<foaf:account>
|
|
||||||
<foaf:OnlineAccount>
|
|
||||||
<foaf:accountServiceHomepage rdf:resource="https://github.com"/>
|
|
||||||
<foaf:accountName>GeoffreyCoulaud</foaf:accountName>
|
|
||||||
</foaf:OnlineAccount>
|
|
||||||
</foaf:account>
|
|
||||||
<foaf:account>
|
|
||||||
<foaf:OnlineAccount>
|
|
||||||
<foaf:accountServiceHomepage rdf:resource="https://gitlab.gnome.org"/>
|
|
||||||
<foaf:accountName>GeoffreyCoulaud</foaf:accountName>
|
|
||||||
</foaf:OnlineAccount>
|
|
||||||
</foaf:account>
|
|
||||||
</foaf:Person>
|
|
||||||
</maintainer>
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
121
cartridges/application_delegate.py
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
# application_delegate.py
|
||||||
|
#
|
||||||
|
# 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 <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
"""A set of methods that manage your app’s life cycle and its interaction
|
||||||
|
with common system services."""
|
||||||
|
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from AppKit import NSApp, NSApplication, NSMenu, NSMenuItem # type: ignore
|
||||||
|
from Foundation import NSObject # type: ignore
|
||||||
|
from gi.repository import Gio # type: ignore
|
||||||
|
|
||||||
|
from cartridges import shared
|
||||||
|
|
||||||
|
|
||||||
|
class ApplicationDelegate(NSObject): # type: ignore
|
||||||
|
"""A set of methods that manage your app’s life cycle and its interaction
|
||||||
|
with common system services."""
|
||||||
|
|
||||||
|
def applicationDidFinishLaunching_(self, *_args: Any) -> None:
|
||||||
|
main_menu = NSApp.mainMenu()
|
||||||
|
|
||||||
|
add_game_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
|
||||||
|
"Add Game", "add:", "n"
|
||||||
|
)
|
||||||
|
|
||||||
|
import_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
|
||||||
|
"Import", "import:", "i"
|
||||||
|
)
|
||||||
|
|
||||||
|
file_menu = NSMenu.alloc().init()
|
||||||
|
file_menu.addItem_(add_game_menu_item)
|
||||||
|
file_menu.addItem_(import_menu_item)
|
||||||
|
|
||||||
|
file_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
|
||||||
|
"File", None, ""
|
||||||
|
)
|
||||||
|
file_menu_item.setSubmenu_(file_menu)
|
||||||
|
main_menu.addItem_(file_menu_item)
|
||||||
|
|
||||||
|
show_hidden_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
|
||||||
|
"Show Hidden", "hidden:", "h"
|
||||||
|
)
|
||||||
|
|
||||||
|
windows_menu = NSMenu.alloc().init()
|
||||||
|
|
||||||
|
view_menu = NSMenu.alloc().init()
|
||||||
|
view_menu.addItem_(show_hidden_menu_item)
|
||||||
|
|
||||||
|
view_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
|
||||||
|
"View", None, ""
|
||||||
|
)
|
||||||
|
view_menu_item.setSubmenu_(view_menu)
|
||||||
|
main_menu.addItem_(view_menu_item)
|
||||||
|
|
||||||
|
windows_menu = NSMenu.alloc().init()
|
||||||
|
|
||||||
|
windows_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
|
||||||
|
"Window", None, ""
|
||||||
|
)
|
||||||
|
windows_menu_item.setSubmenu_(windows_menu)
|
||||||
|
main_menu.addItem_(windows_menu_item)
|
||||||
|
|
||||||
|
NSApp.setWindowsMenu_(windows_menu)
|
||||||
|
|
||||||
|
keyboard_shortcuts_menu_item = (
|
||||||
|
NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
|
||||||
|
"Keyboard Shortcuts", "shortcuts:", "?"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
help_menu = NSMenu.alloc().init()
|
||||||
|
help_menu.addItem_(keyboard_shortcuts_menu_item)
|
||||||
|
|
||||||
|
help_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
|
||||||
|
"Help", None, ""
|
||||||
|
)
|
||||||
|
help_menu_item.setSubmenu_(help_menu)
|
||||||
|
main_menu.addItem_(help_menu_item)
|
||||||
|
|
||||||
|
NSApp.setHelpMenu_(help_menu)
|
||||||
|
|
||||||
|
def add_(self, *_args: Any) -> None:
|
||||||
|
if (not shared.win) or (not (app := shared.win.get_application())):
|
||||||
|
return
|
||||||
|
|
||||||
|
app.lookup_action("add_game").activate()
|
||||||
|
|
||||||
|
def import_(self, *_args: Any) -> None:
|
||||||
|
if (not shared.win) or (not (app := shared.win.get_application())):
|
||||||
|
return
|
||||||
|
|
||||||
|
app.lookup_action("import").activate()
|
||||||
|
|
||||||
|
def hidden_(self, *_args: Any) -> None:
|
||||||
|
if not shared.win:
|
||||||
|
return
|
||||||
|
|
||||||
|
shared.win.lookup_action("show_hidden").activate()
|
||||||
|
|
||||||
|
def shortcuts_(self, *_args: Any) -> None:
|
||||||
|
if (not shared.win) or (not (overlay := shared.win.get_help_overlay())):
|
||||||
|
return
|
||||||
|
|
||||||
|
overlay.present()
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# cartridges.in
|
# cartridges.in
|
||||||
#
|
#
|
||||||
# Copyright 2022-2023 kramo
|
# Copyright 2022-2024 kramo
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -19,42 +19,44 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import signal
|
|
||||||
import locale
|
|
||||||
import gettext
|
import gettext
|
||||||
|
import locale
|
||||||
|
import os
|
||||||
|
import signal
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
from platform import system
|
||||||
|
|
||||||
VERSION = "@VERSION@"
|
VERSION = "@VERSION@"
|
||||||
|
|
||||||
if os.name == "nt":
|
if os.name == "nt":
|
||||||
from ctypes import windll
|
PKGDATADIR = os.path.join(os.path.dirname(__file__), "..", "share", "cartridges")
|
||||||
|
|
||||||
os.environ["LANGUAGE"] = locale.windows_locale[
|
|
||||||
windll.kernel32.GetUserDefaultUILanguage()
|
|
||||||
]
|
|
||||||
pkgdatadir = os.path.join(os.path.dirname(__file__), "..", "share", "cartridges")
|
|
||||||
localedir = os.path.join(os.path.dirname(__file__), "..", "share", "locale")
|
|
||||||
else:
|
else:
|
||||||
pkgdatadir = "@pkgdatadir@"
|
PKGDATADIR = "@pkgdatadir@"
|
||||||
localedir = "@localedir@"
|
LOCALEDIR = "@localedir@"
|
||||||
|
|
||||||
sys.path.insert(1, pkgdatadir)
|
sys.path.insert(1, PKGDATADIR)
|
||||||
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
||||||
|
|
||||||
if os.name != "nt":
|
if system() == "Linux":
|
||||||
locale.bindtextdomain("cartridges", localedir)
|
locale.bindtextdomain("cartridges", LOCALEDIR)
|
||||||
locale.textdomain("cartridges")
|
locale.textdomain("cartridges")
|
||||||
|
gettext.install("cartridges", LOCALEDIR)
|
||||||
gettext.install("cartridges", localedir)
|
else:
|
||||||
|
gettext.install("cartridges")
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import gi
|
from gi.repository import Gio, GLib
|
||||||
|
|
||||||
from gi.repository import Gio
|
try:
|
||||||
|
# For a macOS application bundle
|
||||||
|
resource = Gio.Resource.load(
|
||||||
|
str(Path(__file__).parent / "Resources" / "cartridges.gresource")
|
||||||
|
)
|
||||||
|
except GLib.GError:
|
||||||
|
resource = Gio.Resource.load(os.path.join(PKGDATADIR, "cartridges.gresource"))
|
||||||
|
resource._register() # pylint: disable=protected-access
|
||||||
|
|
||||||
resource = Gio.Resource.load(os.path.join(pkgdatadir, "cartridges.gresource"))
|
from cartridges import main
|
||||||
resource._register()
|
|
||||||
|
|
||||||
from src import main
|
|
||||||
|
|
||||||
sys.exit(main.main(VERSION))
|
sys.exit(main.main(VERSION))
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# details_window.py
|
# details_window.py
|
||||||
#
|
#
|
||||||
# Copyright 2022-2023 kramo
|
# Copyright 2022-2024 kramo
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -17,55 +17,61 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
import os
|
# pyright: reportAssignmentType=none
|
||||||
|
|
||||||
import shlex
|
import shlex
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from sys import platform
|
||||||
from time import time
|
from time import time
|
||||||
from typing import Any, Optional
|
from typing import Any, Optional
|
||||||
|
|
||||||
from gi.repository import Adw, Gio, GLib, Gtk
|
from gi.repository import Adw, Gio, GLib, Gtk
|
||||||
from PIL import Image, UnidentifiedImageError
|
from PIL import Image, UnidentifiedImageError
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.errors.friendly_error import FriendlyError
|
from cartridges.errors.friendly_error import FriendlyError
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.game_cover import GameCover
|
from cartridges.game_cover import GameCover
|
||||||
from src.store.managers.cover_manager import CoverManager
|
from cartridges.store.managers.cover_manager import CoverManager
|
||||||
from src.store.managers.sgdb_manager import SGDBManager
|
from cartridges.store.managers.sgdb_manager import SgdbManager
|
||||||
from src.utils.create_dialog import create_dialog
|
from cartridges.utils.create_dialog import create_dialog
|
||||||
from src.utils.save_cover import convert_cover, save_cover
|
from cartridges.utils.save_cover import convert_cover, save_cover
|
||||||
|
|
||||||
|
|
||||||
@Gtk.Template(resource_path=shared.PREFIX + "/gtk/details-window.ui")
|
@Gtk.Template(resource_path=shared.PREFIX + "/gtk/details-dialog.ui")
|
||||||
class DetailsWindow(Adw.Window):
|
class DetailsDialog(Adw.Dialog):
|
||||||
__gtype_name__ = "DetailsWindow"
|
__gtype_name__ = "DetailsDialog"
|
||||||
|
|
||||||
cover_overlay = Gtk.Template.Child()
|
cover_overlay: Gtk.Overlay = Gtk.Template.Child()
|
||||||
cover = Gtk.Template.Child()
|
cover: Gtk.Picture = Gtk.Template.Child()
|
||||||
cover_button_edit = Gtk.Template.Child()
|
cover_button_edit: Gtk.Button = Gtk.Template.Child()
|
||||||
cover_button_delete_revealer = Gtk.Template.Child()
|
cover_button_delete_revealer: Gtk.Revealer = Gtk.Template.Child()
|
||||||
cover_button_delete = Gtk.Template.Child()
|
cover_button_delete: Gtk.Button = Gtk.Template.Child()
|
||||||
spinner = Gtk.Template.Child()
|
spinner: Adw.Spinner = Gtk.Template.Child()
|
||||||
|
|
||||||
name = Gtk.Template.Child()
|
name: Adw.EntryRow = Gtk.Template.Child()
|
||||||
developer = Gtk.Template.Child()
|
developer: Adw.EntryRow = Gtk.Template.Child()
|
||||||
executable = Gtk.Template.Child()
|
executable: Adw.EntryRow = Gtk.Template.Child()
|
||||||
|
|
||||||
exec_info_label = Gtk.Template.Child()
|
exec_info_label: Gtk.Label = Gtk.Template.Child()
|
||||||
exec_info_popover = Gtk.Template.Child()
|
exec_info_popover: Gtk.Popover = Gtk.Template.Child()
|
||||||
file_chooser_button = 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
|
cover_changed: bool = False
|
||||||
|
|
||||||
|
is_open: bool = False
|
||||||
|
|
||||||
def __init__(self, game: Optional[Game] = None, **kwargs: Any):
|
def __init__(self, game: Optional[Game] = None, **kwargs: Any):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
self.game: Game = game
|
# Make it so only one dialog can be open at a time
|
||||||
self.game_cover: GameCover = GameCover({self.cover})
|
self.__class__.is_open = True
|
||||||
|
self.connect("closed", lambda *_: self.set_is_open(False))
|
||||||
|
|
||||||
self.set_transient_for(shared.win)
|
self.game: Optional[Game] = game
|
||||||
|
self.game_cover: GameCover = GameCover({self.cover})
|
||||||
|
|
||||||
if self.game:
|
if self.game:
|
||||||
self.set_title(_("Game Details"))
|
self.set_title(_("Game Details"))
|
||||||
@@ -109,7 +115,7 @@ class DetailsWindow(Adw.Window):
|
|||||||
# As in software
|
# As in software
|
||||||
exe_name = _("program")
|
exe_name = _("program")
|
||||||
|
|
||||||
if os.name == "nt":
|
if platform == "win32":
|
||||||
exe_name += ".exe"
|
exe_name += ".exe"
|
||||||
# Translate this string as you would translate "path to {}"
|
# Translate this string as you would translate "path to {}"
|
||||||
exe_path = _("C:\\path\\to\\{}").format(exe_name)
|
exe_path = _("C:\\path\\to\\{}").format(exe_name)
|
||||||
@@ -121,7 +127,7 @@ class DetailsWindow(Adw.Window):
|
|||||||
exe_path = _("/path/to/{}").format(exe_name)
|
exe_path = _("/path/to/{}").format(exe_name)
|
||||||
# Translate this string as you would translate "path to {}"
|
# Translate this string as you would translate "path to {}"
|
||||||
file_path = _("/path/to/{}").format(file_name)
|
file_path = _("/path/to/{}").format(file_name)
|
||||||
command = "xdg-open"
|
command = "open" if platform == "darwin" else "xdg-open"
|
||||||
|
|
||||||
# pylint: disable=line-too-long
|
# pylint: disable=line-too-long
|
||||||
exec_info_text = _(
|
exec_info_text = _(
|
||||||
@@ -152,7 +158,6 @@ class DetailsWindow(Adw.Window):
|
|||||||
self.executable.connect("entry-activated", self.apply_preferences)
|
self.executable.connect("entry-activated", self.apply_preferences)
|
||||||
|
|
||||||
self.set_focus(self.name)
|
self.set_focus(self.name)
|
||||||
self.present()
|
|
||||||
|
|
||||||
def delete_pixbuf(self, *_args: Any) -> None:
|
def delete_pixbuf(self, *_args: Any) -> None:
|
||||||
self.game_cover.new_cover()
|
self.game_cover.new_cover()
|
||||||
@@ -245,7 +250,7 @@ class DetailsWindow(Adw.Window):
|
|||||||
# Get a cover from SGDB if none is present
|
# Get a cover from SGDB if none is present
|
||||||
if not self.game_cover.get_texture():
|
if not self.game_cover.get_texture():
|
||||||
self.game.set_loading(1)
|
self.game.set_loading(1)
|
||||||
sgdb_manager: SGDBManager = shared.store.managers[SGDBManager]
|
sgdb_manager = shared.store.managers[SgdbManager]
|
||||||
sgdb_manager.reset_cancellable()
|
sgdb_manager.reset_cancellable()
|
||||||
sgdb_manager.process_game(self.game, {}, self.update_cover_callback)
|
sgdb_manager.process_game(self.game, {}, self.update_cover_callback)
|
||||||
|
|
||||||
@@ -254,7 +259,7 @@ class DetailsWindow(Adw.Window):
|
|||||||
self.close()
|
self.close()
|
||||||
shared.win.show_details_page(self.game)
|
shared.win.show_details_page(self.game)
|
||||||
|
|
||||||
def update_cover_callback(self, manager: SGDBManager) -> None:
|
def update_cover_callback(self, manager: SgdbManager) -> None:
|
||||||
# Set the game as not loading
|
# Set the game as not loading
|
||||||
self.game.set_loading(-1)
|
self.game.set_loading(-1)
|
||||||
self.game.update()
|
self.game.update()
|
||||||
@@ -280,13 +285,13 @@ class DetailsWindow(Adw.Window):
|
|||||||
|
|
||||||
def toggle_loading(self) -> None:
|
def toggle_loading(self) -> None:
|
||||||
self.apply_button.set_sensitive(not self.apply_button.get_sensitive())
|
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())
|
self.cover_overlay.set_opacity(not self.cover_overlay.get_opacity())
|
||||||
|
|
||||||
def set_cover(self, _source: Any, result: Gio.Task, *_args: Any) -> None:
|
def set_cover(self, _source: Any, result: Gio.Task, *_args: Any) -> None:
|
||||||
try:
|
try:
|
||||||
path = self.image_file_dialog.open_finish(result).get_path()
|
path = self.image_file_dialog.open_finish(result).get_path()
|
||||||
except GLib.GError:
|
except GLib.Error:
|
||||||
return
|
return
|
||||||
|
|
||||||
def thread_func() -> None:
|
def thread_func() -> None:
|
||||||
@@ -319,13 +324,16 @@ class DetailsWindow(Adw.Window):
|
|||||||
def set_executable(self, _source: Any, result: Gio.Task, *_args: Any) -> None:
|
def set_executable(self, _source: Any, result: Gio.Task, *_args: Any) -> None:
|
||||||
try:
|
try:
|
||||||
path = self.exec_file_dialog.open_finish(result).get_path()
|
path = self.exec_file_dialog.open_finish(result).get_path()
|
||||||
except GLib.GError:
|
except GLib.Error:
|
||||||
return
|
return
|
||||||
|
|
||||||
self.executable.set_text(shlex.quote(path))
|
self.executable.set_text(shlex.quote(path))
|
||||||
|
|
||||||
def choose_executable(self, *_args: Any) -> None:
|
def choose_executable(self, *_args: Any) -> None:
|
||||||
self.exec_file_dialog.open(self, None, self.set_executable)
|
self.exec_file_dialog.open(self.get_root(), None, self.set_executable)
|
||||||
|
|
||||||
def choose_cover(self, *_args: Any) -> None:
|
def choose_cover(self, *_args: Any) -> None:
|
||||||
self.image_file_dialog.open(self, None, self.set_cover)
|
self.image_file_dialog.open(self.get_root(), None, self.set_cover)
|
||||||
|
|
||||||
|
def set_is_open(self, is_open: bool) -> None:
|
||||||
|
self.__class__.is_open = is_open
|
||||||
@@ -17,18 +17,16 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
import logging
|
|
||||||
import os
|
|
||||||
import shlex
|
import shlex
|
||||||
import subprocess
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from time import time
|
from time import time
|
||||||
from typing import Any, Optional
|
from typing import Any, Optional
|
||||||
|
|
||||||
from gi.repository import Adw, GObject, Gtk
|
from gi.repository import Adw, GObject, Gtk
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game_cover import GameCover
|
from cartridges.game_cover import GameCover
|
||||||
|
from cartridges.utils.run_executable import run_executable
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=too-many-instance-attributes
|
# pylint: disable=too-many-instance-attributes
|
||||||
@@ -118,21 +116,7 @@ class Game(Gtk.Box):
|
|||||||
self.save()
|
self.save()
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
args = (
|
run_executable(self.executable)
|
||||||
"flatpak-spawn --host /bin/sh -c " + shlex.quote(self.executable) # Flatpak
|
|
||||||
if os.getenv("FLATPAK_ID") == shared.APP_ID
|
|
||||||
else self.executable # Others
|
|
||||||
)
|
|
||||||
|
|
||||||
logging.info("Starting %s: %s", self.name, str(args))
|
|
||||||
# pylint: disable=consider-using-with
|
|
||||||
subprocess.Popen(
|
|
||||||
args,
|
|
||||||
cwd=shared.home,
|
|
||||||
shell=True,
|
|
||||||
start_new_session=True,
|
|
||||||
creationflags=subprocess.CREATE_NEW_PROCESS_GROUP if os.name == "nt" else 0, # type: ignore
|
|
||||||
)
|
|
||||||
|
|
||||||
if shared.schema.get_boolean("exit-after-launch"):
|
if shared.schema.get_boolean("exit-after-launch"):
|
||||||
self.app.quit()
|
self.app.quit()
|
||||||
@@ -173,7 +157,7 @@ class Game(Gtk.Box):
|
|||||||
loading = self.loading > 0
|
loading = self.loading > 0
|
||||||
|
|
||||||
self.cover.set_opacity(int(not loading))
|
self.cover.set_opacity(int(not loading))
|
||||||
self.spinner.set_spinning(loading)
|
self.spinner.set_visible(loading)
|
||||||
|
|
||||||
def get_cover_path(self) -> Optional[Path]:
|
def get_cover_path(self) -> Optional[Path]:
|
||||||
cover_path = shared.covers_dir / f"{self.game_id}.gif"
|
cover_path = shared.covers_dir / f"{self.game_id}.gif"
|
||||||
@@ -23,7 +23,7 @@ from typing import Optional
|
|||||||
from gi.repository import Gdk, GdkPixbuf, Gio, GLib, Gtk
|
from gi.repository import Gdk, GdkPixbuf, Gio, GLib, Gtk
|
||||||
from PIL import Image, ImageFilter, ImageStat
|
from PIL import Image, ImageFilter, ImageStat
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
|
|
||||||
|
|
||||||
class GameCover:
|
class GameCover:
|
||||||
@@ -23,10 +23,10 @@ from typing import NamedTuple
|
|||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.importer.sources.location import Location, LocationSubPath
|
from cartridges.importer.location import Location, LocationSubPath
|
||||||
from src.importer.sources.source import SourceIterable, URLExecutableSource
|
from cartridges.importer.source import SourceIterable, URLExecutableSource
|
||||||
|
|
||||||
|
|
||||||
class BottlesSourceIterable(SourceIterable):
|
class BottlesSourceIterable(SourceIterable):
|
||||||
@@ -98,7 +98,7 @@ class BottlesSource(URLExecutableSource):
|
|||||||
candidates=(
|
candidates=(
|
||||||
shared.flatpak_dir / "com.usebottles.bottles" / "data" / "bottles",
|
shared.flatpak_dir / "com.usebottles.bottles" / "data" / "bottles",
|
||||||
shared.data_dir / "bottles/",
|
shared.data_dir / "bottles/",
|
||||||
shared.home / ".local" / "share" / "bottles",
|
shared.host_data_dir / "bottles",
|
||||||
),
|
),
|
||||||
paths={
|
paths={
|
||||||
"library.yml": LocationSubPath("library.yml"),
|
"library.yml": LocationSubPath("library.yml"),
|
||||||
@@ -25,9 +25,9 @@ from typing import NamedTuple
|
|||||||
|
|
||||||
from gi.repository import GLib, Gtk
|
from gi.repository import GLib, Gtk
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.importer.sources.source import Source, SourceIterable
|
from cartridges.importer.source import Source, SourceIterable
|
||||||
|
|
||||||
|
|
||||||
class DesktopSourceIterable(SourceIterable):
|
class DesktopSourceIterable(SourceIterable):
|
||||||
@@ -39,7 +39,7 @@ class DesktopSourceIterable(SourceIterable):
|
|||||||
icon_theme = Gtk.IconTheme.new()
|
icon_theme = Gtk.IconTheme.new()
|
||||||
|
|
||||||
search_paths = [
|
search_paths = [
|
||||||
shared.home / ".local" / "share",
|
shared.host_data_dir,
|
||||||
"/run/host/usr/local/share",
|
"/run/host/usr/local/share",
|
||||||
"/run/host/usr/share",
|
"/run/host/usr/share",
|
||||||
"/run/host/usr/share/pixmaps",
|
"/run/host/usr/share/pixmaps",
|
||||||
@@ -93,17 +93,15 @@ class DesktopSourceIterable(SourceIterable):
|
|||||||
executable = keyfile.get_string("Desktop Entry", "Exec").split(
|
executable = keyfile.get_string("Desktop Entry", "Exec").split(
|
||||||
" %"
|
" %"
|
||||||
)[0]
|
)[0]
|
||||||
except GLib.GError:
|
except GLib.Error:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
try_exec = "which " + (
|
try_exec = "which " + keyfile.get_string("Desktop Entry", "TryExec")
|
||||||
keyfile.get_string("Desktop Entry", "TryExec").split(" %")[0]
|
|
||||||
)
|
|
||||||
if not self.check_command(try_exec):
|
if not self.check_command(try_exec):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
except GLib.GError:
|
except GLib.Error:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Skip Steam games
|
# Skip Steam games
|
||||||
@@ -121,13 +119,13 @@ class DesktopSourceIterable(SourceIterable):
|
|||||||
try:
|
try:
|
||||||
if keyfile.get_boolean("Desktop Entry", "NoDisplay"):
|
if keyfile.get_boolean("Desktop Entry", "NoDisplay"):
|
||||||
continue
|
continue
|
||||||
except GLib.GError:
|
except GLib.Error:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if keyfile.get_boolean("Desktop Entry", "Hidden"):
|
if keyfile.get_boolean("Desktop Entry", "Hidden"):
|
||||||
continue
|
continue
|
||||||
except GLib.GError:
|
except GLib.Error:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Strip /run/host from Flatpak paths
|
# Strip /run/host from Flatpak paths
|
||||||
@@ -149,7 +147,7 @@ class DesktopSourceIterable(SourceIterable):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
icon_str = keyfile.get_string("Desktop Entry", "Icon")
|
icon_str = keyfile.get_string("Desktop Entry", "Icon")
|
||||||
except GLib.GError:
|
except GLib.Error:
|
||||||
yield game
|
yield game
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
@@ -172,7 +170,7 @@ class DesktopSourceIterable(SourceIterable):
|
|||||||
.get_path()
|
.get_path()
|
||||||
):
|
):
|
||||||
additional_data = {"local_icon_path": Path(icon_path)}
|
additional_data = {"local_icon_path": Path(icon_path)}
|
||||||
except GLib.GError:
|
except GLib.Error:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
yield (game, additional_data)
|
yield (game, additional_data)
|
||||||
@@ -17,15 +17,16 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
from itertools import chain
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import NamedTuple
|
from typing import NamedTuple
|
||||||
|
|
||||||
from gi.repository import GLib, Gtk
|
from gi.repository import GLib, Gtk
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.importer.sources.location import Location, LocationSubPath
|
from cartridges.importer.location import Location, LocationSubPath
|
||||||
from src.importer.sources.source import ExecutableFormatSource, SourceIterable
|
from cartridges.importer.source import ExecutableFormatSource, SourceIterable
|
||||||
|
|
||||||
|
|
||||||
class FlatpakSourceIterable(SourceIterable):
|
class FlatpakSourceIterable(SourceIterable):
|
||||||
@@ -35,14 +36,28 @@ class FlatpakSourceIterable(SourceIterable):
|
|||||||
"""Generator method producing games"""
|
"""Generator method producing games"""
|
||||||
|
|
||||||
icon_theme = Gtk.IconTheme.new()
|
icon_theme = Gtk.IconTheme.new()
|
||||||
icon_theme.add_search_path(str(self.source.locations.data["icons"]))
|
if user_data := self.source.locations.user_data["icons"]:
|
||||||
|
icon_theme.add_search_path(str(user_data))
|
||||||
|
|
||||||
|
if system_data := self.source.locations.system_data["icons"]:
|
||||||
|
icon_theme.add_search_path(str(system_data))
|
||||||
|
|
||||||
|
if not (system_data or user_data):
|
||||||
|
return
|
||||||
|
|
||||||
blacklist = (
|
blacklist = (
|
||||||
{"hu.kramo.Cartridges", "hu.kramo.Cartridges.Devel"}
|
{
|
||||||
|
"hu.kramo.Cartridges",
|
||||||
|
"hu.kramo.Cartridges.Devel",
|
||||||
|
"page.kramo.Cartridges",
|
||||||
|
"page.kramo.Cartridges.Devel",
|
||||||
|
}
|
||||||
if shared.schema.get_boolean("flatpak-import-launchers")
|
if shared.schema.get_boolean("flatpak-import-launchers")
|
||||||
else {
|
else {
|
||||||
"hu.kramo.Cartridges",
|
"hu.kramo.Cartridges",
|
||||||
"hu.kramo.Cartridges.Devel",
|
"hu.kramo.Cartridges.Devel",
|
||||||
|
"page.kramo.Cartridges",
|
||||||
|
"page.kramo.Cartridges.Devel",
|
||||||
"com.valvesoftware.Steam",
|
"com.valvesoftware.Steam",
|
||||||
"net.lutris.Lutris",
|
"net.lutris.Lutris",
|
||||||
"com.heroicgameslauncher.hgl",
|
"com.heroicgameslauncher.hgl",
|
||||||
@@ -52,7 +67,16 @@ class FlatpakSourceIterable(SourceIterable):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
for entry in (self.source.locations.data["applications"]).iterdir():
|
generators = set(
|
||||||
|
location.iterdir()
|
||||||
|
for location in (
|
||||||
|
self.source.locations.user_data["applications"],
|
||||||
|
self.source.locations.system_data["applications"],
|
||||||
|
)
|
||||||
|
if location
|
||||||
|
)
|
||||||
|
|
||||||
|
for entry in chain(*generators):
|
||||||
if entry.suffix != ".desktop":
|
if entry.suffix != ".desktop":
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -71,7 +95,7 @@ class FlatpakSourceIterable(SourceIterable):
|
|||||||
|
|
||||||
name = keyfile.get_string("Desktop Entry", "Name")
|
name = keyfile.get_string("Desktop Entry", "Name")
|
||||||
|
|
||||||
except GLib.GError:
|
except GLib.Error:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
values = {
|
values = {
|
||||||
@@ -101,14 +125,15 @@ class FlatpakSourceIterable(SourceIterable):
|
|||||||
additional_data = {"local_icon_path": Path(icon_path)}
|
additional_data = {"local_icon_path": Path(icon_path)}
|
||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
except GLib.GError:
|
except GLib.Error:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
yield (game, additional_data)
|
yield (game, additional_data)
|
||||||
|
|
||||||
|
|
||||||
class FlatpakLocations(NamedTuple):
|
class FlatpakLocations(NamedTuple):
|
||||||
data: Location
|
system_data: Location
|
||||||
|
user_data: Location
|
||||||
|
|
||||||
|
|
||||||
class FlatpakSource(ExecutableFormatSource):
|
class FlatpakSource(ExecutableFormatSource):
|
||||||
@@ -126,15 +151,23 @@ class FlatpakSource(ExecutableFormatSource):
|
|||||||
super().__init__()
|
super().__init__()
|
||||||
self.locations = FlatpakLocations(
|
self.locations = FlatpakLocations(
|
||||||
Location(
|
Location(
|
||||||
schema_key="flatpak-location",
|
schema_key="flatpak-system-location",
|
||||||
candidates=(
|
candidates=("/var/lib/flatpak/",),
|
||||||
"/var/lib/flatpak/",
|
|
||||||
shared.data_dir / "flatpak",
|
|
||||||
),
|
|
||||||
paths={
|
paths={
|
||||||
"applications": LocationSubPath("exports/share/applications", True),
|
"applications": LocationSubPath("exports/share/applications", True),
|
||||||
"icons": LocationSubPath("exports/share/icons", True),
|
"icons": LocationSubPath("exports/share/icons", True),
|
||||||
},
|
},
|
||||||
invalid_subtitle=Location.DATA_INVALID_SUBTITLE,
|
invalid_subtitle=Location.DATA_INVALID_SUBTITLE,
|
||||||
)
|
optional=True,
|
||||||
|
),
|
||||||
|
Location(
|
||||||
|
schema_key="flatpak-user-location",
|
||||||
|
candidates=(shared.data_dir / "flatpak",),
|
||||||
|
paths={
|
||||||
|
"applications": LocationSubPath("exports/share/applications", True),
|
||||||
|
"icons": LocationSubPath("exports/share/icons", True),
|
||||||
|
},
|
||||||
|
invalid_subtitle=Location.DATA_INVALID_SUBTITLE,
|
||||||
|
optional=True,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
@@ -27,10 +27,10 @@ from json import JSONDecodeError
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Iterable, NamedTuple, Optional, TypedDict
|
from typing import Iterable, NamedTuple, Optional, TypedDict
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.importer.sources.location import Location, LocationSubPath
|
from cartridges.importer.location import Location, LocationSubPath
|
||||||
from src.importer.sources.source import (
|
from cartridges.importer.source import (
|
||||||
SourceIterable,
|
SourceIterable,
|
||||||
SourceIterationResult,
|
SourceIterationResult,
|
||||||
URLExecutableSource,
|
URLExecutableSource,
|
||||||
@@ -233,7 +233,7 @@ class LegendaryIterable(StoreSubSourceIterable):
|
|||||||
else:
|
else:
|
||||||
# Heroic native
|
# Heroic native
|
||||||
logging.debug("Using Heroic native <= 2.8 legendary file")
|
logging.debug("Using Heroic native <= 2.8 legendary file")
|
||||||
path = shared.home / ".config"
|
path = shared.host_config_dir
|
||||||
|
|
||||||
path = path / "legendary" / "installed.json"
|
path = path / "legendary" / "installed.json"
|
||||||
logging.debug("Using Heroic %s installed.json path %s", self.name, path)
|
logging.debug("Using Heroic %s installed.json path %s", self.name, path)
|
||||||
@@ -355,7 +355,7 @@ class HeroicSource(URLExecutableSource):
|
|||||||
name = _("Heroic")
|
name = _("Heroic")
|
||||||
iterable_class = HeroicSourceIterable
|
iterable_class = HeroicSourceIterable
|
||||||
url_format = "heroic://launch/{runner}/{app_name}"
|
url_format = "heroic://launch/{runner}/{app_name}"
|
||||||
available_on = {"linux", "win32"}
|
available_on = {"linux", "win32", "darwin"}
|
||||||
|
|
||||||
locations: HeroicLocations
|
locations: HeroicLocations
|
||||||
|
|
||||||
@@ -371,12 +371,13 @@ class HeroicSource(URLExecutableSource):
|
|||||||
schema_key="heroic-location",
|
schema_key="heroic-location",
|
||||||
candidates=(
|
candidates=(
|
||||||
shared.config_dir / "heroic",
|
shared.config_dir / "heroic",
|
||||||
shared.home / ".config" / "heroic",
|
shared.host_config_dir / "heroic",
|
||||||
shared.flatpak_dir
|
shared.flatpak_dir
|
||||||
/ "com.heroicgameslauncher.hgl"
|
/ "com.heroicgameslauncher.hgl"
|
||||||
/ "config"
|
/ "config"
|
||||||
/ "heroic",
|
/ "heroic",
|
||||||
shared.appdata_dir / "heroic",
|
shared.appdata_dir / "heroic",
|
||||||
|
shared.app_support_dir / "heroic",
|
||||||
),
|
),
|
||||||
paths={
|
paths={
|
||||||
"config.json": LocationSubPath("config.json"),
|
"config.json": LocationSubPath("config.json"),
|
||||||
@@ -24,14 +24,14 @@ from typing import Any, Optional
|
|||||||
|
|
||||||
from gi.repository import Adw, Gio, GLib, Gtk
|
from gi.repository import Adw, Gio, GLib, Gtk
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.errors.error_producer import ErrorProducer
|
from cartridges.errors.error_producer import ErrorProducer
|
||||||
from src.errors.friendly_error import FriendlyError
|
from cartridges.errors.friendly_error import FriendlyError
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.importer.sources.location import UnresolvableLocationError
|
from cartridges.importer.location import UnresolvableLocationError
|
||||||
from src.importer.sources.source import Source
|
from cartridges.importer.source import Source
|
||||||
from src.store.managers.async_manager import AsyncManager
|
from cartridges.store.managers.async_manager import AsyncManager
|
||||||
from src.store.pipeline import Pipeline
|
from cartridges.store.pipeline import Pipeline
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=too-many-instance-attributes
|
# pylint: disable=too-many-instance-attributes
|
||||||
@@ -40,7 +40,7 @@ class Importer(ErrorProducer):
|
|||||||
|
|
||||||
progressbar: Gtk.ProgressBar
|
progressbar: Gtk.ProgressBar
|
||||||
import_statuspage: Adw.StatusPage
|
import_statuspage: Adw.StatusPage
|
||||||
import_dialog: Adw.MessageDialog
|
import_dialog: Adw.AlertDialog
|
||||||
summary_toast: Optional[Adw.Toast] = None
|
summary_toast: Optional[Adw.Toast] = None
|
||||||
|
|
||||||
sources: set[Source]
|
sources: set[Source]
|
||||||
@@ -53,7 +53,7 @@ class Importer(ErrorProducer):
|
|||||||
removed_game_ids: set[str]
|
removed_game_ids: set[str]
|
||||||
imported_game_ids: set[str]
|
imported_game_ids: set[str]
|
||||||
|
|
||||||
close_req_id: int
|
close_attempt_id: int
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@@ -106,7 +106,6 @@ class Importer(ErrorProducer):
|
|||||||
|
|
||||||
def run(self) -> None:
|
def run(self) -> None:
|
||||||
"""Use several Gio.Task to import games from added sources"""
|
"""Use several Gio.Task to import games from added sources"""
|
||||||
|
|
||||||
shared.win.get_application().state = shared.AppState.IMPORT
|
shared.win.get_application().state = shared.AppState.IMPORT
|
||||||
|
|
||||||
if self.__class__.summary_toast:
|
if self.__class__.summary_toast:
|
||||||
@@ -137,6 +136,7 @@ class Importer(ErrorProducer):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.progress_changed_callback()
|
self.progress_changed_callback()
|
||||||
|
GLib.timeout_add(100, self.__watchdog)
|
||||||
|
|
||||||
def create_dialog(self) -> None:
|
def create_dialog(self) -> None:
|
||||||
"""Create the import dialog"""
|
"""Create the import dialog"""
|
||||||
@@ -145,20 +145,17 @@ class Importer(ErrorProducer):
|
|||||||
title=_("Importing Games…"),
|
title=_("Importing Games…"),
|
||||||
child=self.progressbar,
|
child=self.progressbar,
|
||||||
)
|
)
|
||||||
self.import_dialog = Adw.Window(
|
self.import_dialog = Adw.Dialog(
|
||||||
content=self.import_statuspage,
|
child=self.import_statuspage,
|
||||||
modal=True,
|
content_width=350,
|
||||||
default_width=350,
|
can_close=False,
|
||||||
default_height=-1,
|
|
||||||
transient_for=shared.win,
|
|
||||||
deletable=False,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
self.close_req_id = self.import_dialog.connect(
|
self.close_attempt_id = self.import_dialog.connect(
|
||||||
"close-request", lambda *_: shared.win.close()
|
"close-attempt", lambda *_: shared.win.close()
|
||||||
)
|
)
|
||||||
|
|
||||||
self.import_dialog.present()
|
self.import_dialog.present(shared.win)
|
||||||
|
|
||||||
def source_task_thread_func(self, data: tuple) -> None:
|
def source_task_thread_func(self, data: tuple) -> None:
|
||||||
"""Source import task code"""
|
"""Source import task code"""
|
||||||
@@ -211,7 +208,11 @@ class Importer(ErrorProducer):
|
|||||||
pipeline: Pipeline = shared.store.add_game(game, additional_data)
|
pipeline: Pipeline = shared.store.add_game(game, additional_data)
|
||||||
if pipeline is not None:
|
if pipeline is not None:
|
||||||
logging.info("Imported %s (%s)", game.name, game.game_id)
|
logging.info("Imported %s (%s)", game.name, game.game_id)
|
||||||
pipeline.connect("advanced", self.pipeline_advanced_callback)
|
pipeline.connect(
|
||||||
|
"advanced",
|
||||||
|
# I'm not sure idle_add is needed here, but a widget is updated in the callback
|
||||||
|
lambda *args: GLib.idle_add(self.pipeline_advanced_callback, *args),
|
||||||
|
)
|
||||||
self.game_pipelines.add(pipeline)
|
self.game_pipelines.add(pipeline)
|
||||||
|
|
||||||
def update_progressbar(self) -> None:
|
def update_progressbar(self) -> None:
|
||||||
@@ -278,9 +279,9 @@ class Importer(ErrorProducer):
|
|||||||
self.imported_game_ids = shared.store.new_game_ids
|
self.imported_game_ids = shared.store.new_game_ids
|
||||||
shared.store.new_game_ids = set()
|
shared.store.new_game_ids = set()
|
||||||
shared.store.duplicate_game_ids = set()
|
shared.store.duplicate_game_ids = set()
|
||||||
# Disconnect the close-request signal that closes the main window
|
# Disconnect the close-attempt signal that closes the main window
|
||||||
self.import_dialog.disconnect(self.close_req_id)
|
self.import_dialog.disconnect(self.close_attempt_id)
|
||||||
self.import_dialog.close()
|
self.import_dialog.force_close()
|
||||||
self.__class__.summary_toast = self.create_summary_toast()
|
self.__class__.summary_toast = self.create_summary_toast()
|
||||||
self.create_error_dialog()
|
self.create_error_dialog()
|
||||||
shared.win.get_application().lookup_action("import").set_enabled(True)
|
shared.win.get_application().lookup_action("import").set_enabled(True)
|
||||||
@@ -313,13 +314,12 @@ class Importer(ErrorProducer):
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Create error dialog
|
# Create error dialog
|
||||||
dialog = Adw.MessageDialog()
|
dialog = Adw.AlertDialog()
|
||||||
dialog.set_heading(_("Warning"))
|
dialog.set_heading(_("Warning"))
|
||||||
dialog.add_response("close", _("Dismiss"))
|
dialog.add_response("close", _("Dismiss"))
|
||||||
dialog.add_response("open_preferences_import", _("Preferences"))
|
dialog.add_response("open_preferences_import", _("Preferences"))
|
||||||
dialog.set_default_response("open_preferences_import")
|
dialog.set_default_response("open_preferences_import")
|
||||||
dialog.connect("response", self.dialog_response_callback)
|
dialog.connect("response", self.dialog_response_callback)
|
||||||
dialog.set_transient_for(shared.win)
|
|
||||||
|
|
||||||
if len(errors) == 1:
|
if len(errors) == 1:
|
||||||
dialog.set_heading((error := next(iter(errors)))[0])
|
dialog.set_heading((error := next(iter(errors)))[0])
|
||||||
@@ -338,7 +338,7 @@ class Importer(ErrorProducer):
|
|||||||
dialog.set_body(_("The following errors occured during import:"))
|
dialog.set_body(_("The following errors occured during import:"))
|
||||||
dialog.set_extra_child(list_box)
|
dialog.set_extra_child(list_box)
|
||||||
|
|
||||||
dialog.present()
|
dialog.present(shared.win)
|
||||||
|
|
||||||
def undo_import(self, *_args: Any) -> None:
|
def undo_import(self, *_args: Any) -> None:
|
||||||
for game_id in self.imported_game_ids:
|
for game_id in self.imported_game_ids:
|
||||||
@@ -396,14 +396,20 @@ class Importer(ErrorProducer):
|
|||||||
|
|
||||||
toast.set_title(toast_title)
|
toast.set_title(toast_title)
|
||||||
|
|
||||||
|
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)
|
shared.win.toast_overlay.add_toast(toast)
|
||||||
|
|
||||||
return toast
|
return toast
|
||||||
|
|
||||||
def open_preferences(
|
def open_preferences(
|
||||||
self,
|
self,
|
||||||
page_name: Optional[str] = None,
|
page_name: Optional[str] = None,
|
||||||
expander_row: Optional[Adw.ExpanderRow] = None,
|
expander_row: Optional[Adw.ExpanderRow] = None,
|
||||||
) -> Adw.PreferencesWindow:
|
) -> Adw.PreferencesDialog:
|
||||||
return shared.win.get_application().on_preferences_action(
|
return shared.win.get_application().on_preferences_action(
|
||||||
page_name=page_name, expander_row=expander_row
|
page_name=page_name, expander_row=expander_row
|
||||||
)
|
)
|
||||||
@@ -422,3 +428,11 @@ class Importer(ErrorProducer):
|
|||||||
self.open_preferences(*args).connect("close-request", self.timeout_toast)
|
self.open_preferences(*args).connect("close-request", self.timeout_toast)
|
||||||
else:
|
else:
|
||||||
self.timeout_toast()
|
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
|
||||||
@@ -22,11 +22,11 @@ from shutil import rmtree
|
|||||||
from sqlite3 import connect
|
from sqlite3 import connect
|
||||||
from typing import NamedTuple
|
from typing import NamedTuple
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.importer.sources.location import Location, LocationSubPath
|
from cartridges.importer.location import Location, LocationSubPath
|
||||||
from src.importer.sources.source import SourceIterable, URLExecutableSource
|
from cartridges.importer.source import SourceIterable, URLExecutableSource
|
||||||
from src.utils.sqlite import copy_db
|
from cartridges.utils.sqlite import copy_db
|
||||||
|
|
||||||
|
|
||||||
class ItchSourceIterable(SourceIterable):
|
class ItchSourceIterable(SourceIterable):
|
||||||
@@ -81,7 +81,7 @@ class ItchSource(URLExecutableSource):
|
|||||||
name = _("itch")
|
name = _("itch")
|
||||||
iterable_class = ItchSourceIterable
|
iterable_class = ItchSourceIterable
|
||||||
url_format = "itch://caves/{cave_id}/launch"
|
url_format = "itch://caves/{cave_id}/launch"
|
||||||
available_on = {"linux", "win32"}
|
available_on = {"linux", "win32", "darwin"}
|
||||||
|
|
||||||
locations: ItchLocations
|
locations: ItchLocations
|
||||||
|
|
||||||
@@ -93,8 +93,9 @@ class ItchSource(URLExecutableSource):
|
|||||||
candidates=(
|
candidates=(
|
||||||
shared.flatpak_dir / "io.itch.itch" / "config" / "itch",
|
shared.flatpak_dir / "io.itch.itch" / "config" / "itch",
|
||||||
shared.config_dir / "itch",
|
shared.config_dir / "itch",
|
||||||
shared.home / ".config" / "itch",
|
shared.host_config_dir / "itch",
|
||||||
shared.appdata_dir / "itch",
|
shared.appdata_dir / "itch",
|
||||||
|
shared.app_support_dir / "itch",
|
||||||
),
|
),
|
||||||
paths={
|
paths={
|
||||||
"butler.db": LocationSubPath("db/butler.db"),
|
"butler.db": LocationSubPath("db/butler.db"),
|
||||||
@@ -22,10 +22,10 @@ import logging
|
|||||||
from json import JSONDecodeError
|
from json import JSONDecodeError
|
||||||
from typing import NamedTuple
|
from typing import NamedTuple
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.importer.sources.location import Location, LocationSubPath
|
from cartridges.importer.location import Location, LocationSubPath
|
||||||
from src.importer.sources.source import (
|
from cartridges.importer.source import (
|
||||||
ExecutableFormatSource,
|
ExecutableFormatSource,
|
||||||
SourceIterable,
|
SourceIterable,
|
||||||
SourceIterationResult,
|
SourceIterationResult,
|
||||||
@@ -108,7 +108,7 @@ class LegendarySource(ExecutableFormatSource):
|
|||||||
schema_key="legendary-location",
|
schema_key="legendary-location",
|
||||||
candidates=(
|
candidates=(
|
||||||
shared.config_dir / "legendary",
|
shared.config_dir / "legendary",
|
||||||
shared.home / ".config" / "legendary",
|
shared.host_config_dir / "legendary",
|
||||||
),
|
),
|
||||||
paths={
|
paths={
|
||||||
"installed.json": LocationSubPath("installed.json"),
|
"installed.json": LocationSubPath("installed.json"),
|
||||||
@@ -3,7 +3,7 @@ from os import PathLike
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Iterable, Mapping, NamedTuple, Optional
|
from typing import Iterable, Mapping, NamedTuple, Optional
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
|
|
||||||
PathSegment = str | PathLike | Path
|
PathSegment = str | PathLike | Path
|
||||||
PathSegments = Iterable[PathSegment]
|
PathSegments = Iterable[PathSegment]
|
||||||
@@ -16,7 +16,8 @@ class LocationSubPath(NamedTuple):
|
|||||||
|
|
||||||
|
|
||||||
class UnresolvableLocationError(Exception):
|
class UnresolvableLocationError(Exception):
|
||||||
pass
|
def __init__(self, optional: Optional[bool] = False):
|
||||||
|
self.optional = optional
|
||||||
|
|
||||||
|
|
||||||
class Location:
|
class Location:
|
||||||
@@ -49,12 +50,14 @@ class Location:
|
|||||||
candidates: Iterable[Candidate],
|
candidates: Iterable[Candidate],
|
||||||
paths: Mapping[str, LocationSubPath],
|
paths: Mapping[str, LocationSubPath],
|
||||||
invalid_subtitle: str,
|
invalid_subtitle: str,
|
||||||
|
optional: Optional[bool] = False,
|
||||||
) -> None:
|
) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.schema_key = schema_key
|
self.schema_key = schema_key
|
||||||
self.candidates = candidates
|
self.candidates = candidates
|
||||||
self.paths = paths
|
self.paths = paths
|
||||||
self.invalid_subtitle = invalid_subtitle
|
self.invalid_subtitle = invalid_subtitle
|
||||||
|
self.optional = optional
|
||||||
|
|
||||||
def check_candidate(self, candidate: Path) -> bool:
|
def check_candidate(self, candidate: Path) -> bool:
|
||||||
"""Check if a candidate root has the necessary files and directories"""
|
"""Check if a candidate root has the necessary files and directories"""
|
||||||
@@ -87,7 +90,7 @@ class Location:
|
|||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
# No good candidate found
|
# No good candidate found
|
||||||
raise UnresolvableLocationError()
|
raise UnresolvableLocationError(self.optional)
|
||||||
|
|
||||||
# Update the schema with the found candidate
|
# Update the schema with the found candidate
|
||||||
value = str(candidate)
|
value = str(candidate)
|
||||||
@@ -96,7 +99,13 @@ class Location:
|
|||||||
|
|
||||||
def __getitem__(self, key: str) -> Optional[Path]:
|
def __getitem__(self, key: str) -> Optional[Path]:
|
||||||
"""Get the computed path from its key for the location"""
|
"""Get the computed path from its key for the location"""
|
||||||
|
try:
|
||||||
self.resolve()
|
self.resolve()
|
||||||
|
except UnresolvableLocationError as error:
|
||||||
|
if error.optional:
|
||||||
|
return None
|
||||||
|
raise UnresolvableLocationError from error
|
||||||
|
|
||||||
if self.root:
|
if self.root:
|
||||||
return self.root / self.paths[key].segment
|
return self.root / self.paths[key].segment
|
||||||
return None
|
return None
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# lutris_source.py
|
# lutris_source.py
|
||||||
#
|
#
|
||||||
# Copyright 2022-2023 kramo
|
# Copyright 2022-2024 kramo
|
||||||
# Copyright 2023 Geoffrey Coulaud
|
# Copyright 2023 Geoffrey Coulaud
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
@@ -21,11 +21,11 @@ from shutil import rmtree
|
|||||||
from sqlite3 import connect
|
from sqlite3 import connect
|
||||||
from typing import NamedTuple
|
from typing import NamedTuple
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.importer.sources.location import Location, LocationSubPath
|
from cartridges.importer.location import Location, LocationSubPath
|
||||||
from src.importer.sources.source import SourceIterable, URLExecutableSource
|
from cartridges.importer.source import SourceIterable, URLExecutableSource
|
||||||
from src.utils.sqlite import copy_db
|
from cartridges.utils.sqlite import copy_db
|
||||||
|
|
||||||
|
|
||||||
class LutrisSourceIterable(SourceIterable):
|
class LutrisSourceIterable(SourceIterable):
|
||||||
@@ -36,24 +36,38 @@ class LutrisSourceIterable(SourceIterable):
|
|||||||
|
|
||||||
# Query the database
|
# Query the database
|
||||||
request = """
|
request = """
|
||||||
SELECT id, name, slug, runner, hidden
|
SELECT
|
||||||
FROM 'games'
|
games.id,
|
||||||
|
games.name,
|
||||||
|
games.slug,
|
||||||
|
games.runner,
|
||||||
|
categories.name = ".hidden" as hidden
|
||||||
|
FROM
|
||||||
|
games
|
||||||
|
LEFT JOIN
|
||||||
|
games_categories ON games_categories.game_id = games.id
|
||||||
|
FULL JOIN
|
||||||
|
categories ON games_categories.category_id = categories.id
|
||||||
WHERE
|
WHERE
|
||||||
name IS NOT NULL
|
games.name IS NOT NULL
|
||||||
AND slug IS NOT NULL
|
AND games.slug IS NOT NULL
|
||||||
AND configPath IS NOT NULL
|
AND games.configPath IS NOT NULL
|
||||||
AND installed
|
AND games.installed
|
||||||
AND (runner IS NOT "steam" OR :import_steam)
|
AND (games.runner IS NOT "steam" OR :import_steam)
|
||||||
AND (runner IS NOT "flatpak" OR :import_flatpak)
|
AND (games.runner IS NOT "flatpak" OR :import_flatpak)
|
||||||
;
|
;
|
||||||
"""
|
"""
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
"import_steam": shared.schema.get_boolean("lutris-import-steam"),
|
"import_steam": shared.schema.get_boolean("lutris-import-steam"),
|
||||||
"import_flatpak": shared.schema.get_boolean("lutris-import-flatpak"),
|
"import_flatpak": shared.schema.get_boolean("lutris-import-flatpak"),
|
||||||
}
|
}
|
||||||
db_path = copy_db(self.source.locations.config["pga.db"])
|
db_path = copy_db(self.source.locations.data["pga.db"])
|
||||||
connection = connect(db_path)
|
connection = connect(db_path)
|
||||||
cursor = connection.execute(request, params)
|
cursor = connection.execute(request, params)
|
||||||
|
coverart_is_dir = (
|
||||||
|
coverart_path := self.source.locations.data.root / "coverart"
|
||||||
|
).is_dir()
|
||||||
|
|
||||||
# Create games from the DB results
|
# Create games from the DB results
|
||||||
for row in cursor:
|
for row in cursor:
|
||||||
@@ -69,10 +83,12 @@ class LutrisSourceIterable(SourceIterable):
|
|||||||
"executable": self.source.make_executable(game_id=row[0]),
|
"executable": self.source.make_executable(game_id=row[0]),
|
||||||
}
|
}
|
||||||
game = Game(values)
|
game = Game(values)
|
||||||
|
additional_data = {}
|
||||||
|
|
||||||
# Get official image path
|
# Get official image path
|
||||||
image_path = self.source.locations.cache["coverart"] / f"{row[2]}.jpg"
|
if coverart_is_dir:
|
||||||
additional_data = {"local_image_path": image_path}
|
image_path = coverart_path / f"{row[2]}.jpg"
|
||||||
|
additional_data["local_image_path"] = image_path
|
||||||
|
|
||||||
yield (game, additional_data)
|
yield (game, additional_data)
|
||||||
|
|
||||||
@@ -81,8 +97,7 @@ class LutrisSourceIterable(SourceIterable):
|
|||||||
|
|
||||||
|
|
||||||
class LutrisLocations(NamedTuple):
|
class LutrisLocations(NamedTuple):
|
||||||
config: Location
|
data: Location
|
||||||
cache: Location
|
|
||||||
|
|
||||||
|
|
||||||
class LutrisSource(URLExecutableSource):
|
class LutrisSource(URLExecutableSource):
|
||||||
@@ -94,8 +109,6 @@ class LutrisSource(URLExecutableSource):
|
|||||||
url_format = "lutris:rungameid/{game_id}"
|
url_format = "lutris:rungameid/{game_id}"
|
||||||
available_on = {"linux"}
|
available_on = {"linux"}
|
||||||
|
|
||||||
# FIXME possible bug: config picks ~/.var... and cache picks ~/.local...
|
|
||||||
|
|
||||||
locations: LutrisLocations
|
locations: LutrisLocations
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -110,23 +123,11 @@ class LutrisSource(URLExecutableSource):
|
|||||||
candidates=(
|
candidates=(
|
||||||
shared.flatpak_dir / "net.lutris.Lutris" / "data" / "lutris",
|
shared.flatpak_dir / "net.lutris.Lutris" / "data" / "lutris",
|
||||||
shared.data_dir / "lutris",
|
shared.data_dir / "lutris",
|
||||||
shared.home / ".local" / "share" / "lutris",
|
shared.host_data_dir / "lutris",
|
||||||
),
|
),
|
||||||
paths={
|
paths={
|
||||||
"pga.db": LocationSubPath("pga.db"),
|
"pga.db": LocationSubPath("pga.db"),
|
||||||
},
|
},
|
||||||
invalid_subtitle=Location.DATA_INVALID_SUBTITLE,
|
invalid_subtitle=Location.DATA_INVALID_SUBTITLE,
|
||||||
),
|
)
|
||||||
Location(
|
|
||||||
schema_key="lutris-cache-location",
|
|
||||||
candidates=(
|
|
||||||
shared.flatpak_dir / "net.lutris.Lutris" / "cache" / "lutris",
|
|
||||||
shared.cache_dir / "lutris",
|
|
||||||
shared.home / ".cache" / "lutris",
|
|
||||||
),
|
|
||||||
paths={
|
|
||||||
"coverart": LocationSubPath("coverart", True),
|
|
||||||
},
|
|
||||||
invalid_subtitle=Location.CACHE_INVALID_SUBTITLE,
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
@@ -26,16 +26,16 @@ from pathlib import Path
|
|||||||
from shlex import quote as shell_quote
|
from shlex import quote as shell_quote
|
||||||
from typing import NamedTuple
|
from typing import NamedTuple
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.errors.friendly_error import FriendlyError
|
from cartridges.errors.friendly_error import FriendlyError
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.importer.sources.location import (
|
from cartridges.importer.location import (
|
||||||
Location,
|
Location,
|
||||||
LocationSubPath,
|
LocationSubPath,
|
||||||
UnresolvableLocationError,
|
UnresolvableLocationError,
|
||||||
)
|
)
|
||||||
from src.importer.sources.source import Source, SourceIterable
|
from cartridges.importer.source import Source, SourceIterable
|
||||||
from src.importer.sources.steam_source import SteamSource
|
from cartridges.importer.steam_source import SteamSource
|
||||||
|
|
||||||
|
|
||||||
class RetroarchSourceIterable(SourceIterable):
|
class RetroarchSourceIterable(SourceIterable):
|
||||||
@@ -157,7 +157,7 @@ class RetroarchSource(Source):
|
|||||||
/ "config"
|
/ "config"
|
||||||
/ "retroarch",
|
/ "retroarch",
|
||||||
shared.config_dir / "retroarch",
|
shared.config_dir / "retroarch",
|
||||||
shared.home / ".config" / "retroarch",
|
shared.host_config_dir / "retroarch",
|
||||||
# TODO: Windows support, waiting for executable path setting improvement
|
# TODO: Windows support, waiting for executable path setting improvement
|
||||||
# Path("C:\\RetroArch-Win64"),
|
# Path("C:\\RetroArch-Win64"),
|
||||||
# Path("C:\\RetroArch-Win32"),
|
# Path("C:\\RetroArch-Win32"),
|
||||||
@@ -22,8 +22,8 @@ from abc import abstractmethod
|
|||||||
from collections.abc import Iterable
|
from collections.abc import Iterable
|
||||||
from typing import Any, Collection, Generator, Optional
|
from typing import Any, Collection, Generator, Optional
|
||||||
|
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.importer.sources.location import Location
|
from cartridges.importer.location import Location, UnresolvableLocationError
|
||||||
|
|
||||||
# Type of the data returned by iterating on a Source
|
# Type of the data returned by iterating on a Source
|
||||||
SourceIterationResult = Optional[Game | tuple[Game, tuple[Any]]]
|
SourceIterationResult = Optional[Game | tuple[Game, tuple[Any]]]
|
||||||
@@ -87,10 +87,15 @@ class Source(Iterable):
|
|||||||
def __iter__(self) -> Generator[SourceIterationResult, None, None]:
|
def __iter__(self) -> Generator[SourceIterationResult, None, None]:
|
||||||
"""
|
"""
|
||||||
Get an iterator for the source
|
Get an iterator for the source
|
||||||
:raises UnresolvableLocationError: Not iterable if any of the locations are unresolvable
|
:raises UnresolvableLocationError: Not iterable
|
||||||
|
if any of the mandatory locations are unresolvable
|
||||||
"""
|
"""
|
||||||
for location in self.locations:
|
for location in self.locations:
|
||||||
|
try:
|
||||||
location.resolve()
|
location.resolve()
|
||||||
|
except UnresolvableLocationError as error:
|
||||||
|
if not error.optional:
|
||||||
|
raise UnresolvableLocationError from error
|
||||||
return iter(self.iterable_class(self))
|
return iter(self.iterable_class(self))
|
||||||
|
|
||||||
|
|
||||||
@@ -120,6 +125,8 @@ class URLExecutableSource(ExecutableFormatSource):
|
|||||||
return "start " + self.url_format
|
return "start " + self.url_format
|
||||||
case "linux":
|
case "linux":
|
||||||
return "xdg-open " + self.url_format
|
return "xdg-open " + self.url_format
|
||||||
|
case "darwin":
|
||||||
|
return "open " + self.url_format
|
||||||
case other:
|
case other:
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
f"No URL handler command available for {other}"
|
f"No URL handler command available for {other}"
|
||||||
@@ -23,11 +23,11 @@ import re
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Iterable, NamedTuple
|
from typing import Iterable, NamedTuple
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.importer.sources.location import Location, LocationSubPath
|
from cartridges.importer.location import Location, LocationSubPath
|
||||||
from src.importer.sources.source import SourceIterable, URLExecutableSource
|
from cartridges.importer.source import SourceIterable, URLExecutableSource
|
||||||
from src.utils.steam import SteamFileHelper, SteamInvalidManifestError
|
from cartridges.utils.steam import SteamFileHelper, SteamInvalidManifestError
|
||||||
|
|
||||||
|
|
||||||
class SteamSourceIterable(SourceIterable):
|
class SteamSourceIterable(SourceIterable):
|
||||||
@@ -112,7 +112,7 @@ class SteamLocations(NamedTuple):
|
|||||||
class SteamSource(URLExecutableSource):
|
class SteamSource(URLExecutableSource):
|
||||||
source_id = "steam"
|
source_id = "steam"
|
||||||
name = _("Steam")
|
name = _("Steam")
|
||||||
available_on = {"linux", "win32"}
|
available_on = {"linux", "win32", "darwin"}
|
||||||
iterable_class = SteamSourceIterable
|
iterable_class = SteamSourceIterable
|
||||||
url_format = "steam://rungameid/{game_id}"
|
url_format = "steam://rungameid/{game_id}"
|
||||||
|
|
||||||
@@ -128,6 +128,7 @@ class SteamSource(URLExecutableSource):
|
|||||||
shared.data_dir / "Steam",
|
shared.data_dir / "Steam",
|
||||||
shared.flatpak_dir / "com.valvesoftware.Steam" / "data" / "Steam",
|
shared.flatpak_dir / "com.valvesoftware.Steam" / "data" / "Steam",
|
||||||
shared.programfiles32_dir / "Steam",
|
shared.programfiles32_dir / "Steam",
|
||||||
|
shared.app_support_dir / "Steam",
|
||||||
),
|
),
|
||||||
paths={
|
paths={
|
||||||
"libraryfolders.vdf": LocationSubPath(
|
"libraryfolders.vdf": LocationSubPath(
|
||||||
@@ -25,7 +25,7 @@ from os import PathLike
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
|
|
||||||
|
|
||||||
class SessionFileHandler(StreamHandler):
|
class SessionFileHandler(StreamHandler):
|
||||||
@@ -24,7 +24,7 @@ import platform
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
|
|
||||||
|
|
||||||
def setup_logging() -> None:
|
def setup_logging() -> None:
|
||||||
@@ -47,12 +47,12 @@ def setup_logging() -> None:
|
|||||||
},
|
},
|
||||||
"console_formatter": {
|
"console_formatter": {
|
||||||
"format": "%(name)s %(levelname)s - %(message)s",
|
"format": "%(name)s %(levelname)s - %(message)s",
|
||||||
"class": "src.logging.color_log_formatter.ColorLogFormatter",
|
"class": "cartridges.logging.color_log_formatter.ColorLogFormatter",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"handlers": {
|
"handlers": {
|
||||||
"file_handler": {
|
"file_handler": {
|
||||||
"class": "src.logging.session_file_handler.SessionFileHandler",
|
"class": "cartridges.logging.session_file_handler.SessionFileHandler",
|
||||||
"formatter": "file_formatter",
|
"formatter": "file_formatter",
|
||||||
"level": "DEBUG",
|
"level": "DEBUG",
|
||||||
"filename": log_filename,
|
"filename": log_filename,
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# main.py
|
# main.py
|
||||||
#
|
#
|
||||||
# Copyright 2022-2023 kramo
|
# Copyright 2022-2024 kramo
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -21,9 +21,10 @@ import json
|
|||||||
import lzma
|
import lzma
|
||||||
import os
|
import os
|
||||||
import shlex
|
import shlex
|
||||||
import subprocess
|
|
||||||
import sys
|
import sys
|
||||||
|
from time import time
|
||||||
from typing import Any, Optional
|
from typing import Any, Optional
|
||||||
|
from urllib.parse import quote
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
|
|
||||||
@@ -33,53 +34,90 @@ gi.require_version("Adw", "1")
|
|||||||
# pylint: disable=wrong-import-position
|
# pylint: disable=wrong-import-position
|
||||||
from gi.repository import Adw, Gio, GLib, Gtk
|
from gi.repository import Adw, Gio, GLib, Gtk
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.details_window import DetailsWindow
|
from cartridges.details_dialog import DetailsDialog
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.importer.importer import Importer
|
from cartridges.importer.bottles_source import BottlesSource
|
||||||
from src.importer.sources.bottles_source import BottlesSource
|
from cartridges.importer.desktop_source import DesktopSource
|
||||||
from src.importer.sources.desktop_source import DesktopSource
|
from cartridges.importer.flatpak_source import FlatpakSource
|
||||||
from src.importer.sources.flatpak_source import FlatpakSource
|
from cartridges.importer.heroic_source import HeroicSource
|
||||||
from src.importer.sources.heroic_source import HeroicSource
|
from cartridges.importer.importer import Importer # yo dawg
|
||||||
from src.importer.sources.itch_source import ItchSource
|
from cartridges.importer.itch_source import ItchSource
|
||||||
from src.importer.sources.legendary_source import LegendarySource
|
from cartridges.importer.legendary_source import LegendarySource
|
||||||
from src.importer.sources.lutris_source import LutrisSource
|
from cartridges.importer.lutris_source import LutrisSource
|
||||||
from src.importer.sources.retroarch_source import RetroarchSource
|
from cartridges.importer.retroarch_source import RetroarchSource
|
||||||
from src.importer.sources.steam_source import SteamSource
|
from cartridges.importer.steam_source import SteamSource
|
||||||
from src.logging.setup import log_system_info, setup_logging
|
from cartridges.logging.setup import log_system_info, setup_logging
|
||||||
from src.preferences import PreferencesWindow
|
from cartridges.preferences import CartridgesPreferences
|
||||||
from src.store.managers.cover_manager import CoverManager
|
from cartridges.store.managers.cover_manager import CoverManager
|
||||||
from src.store.managers.display_manager import DisplayManager
|
from cartridges.store.managers.display_manager import DisplayManager
|
||||||
from src.store.managers.file_manager import FileManager
|
from cartridges.store.managers.file_manager import FileManager
|
||||||
from src.store.managers.sgdb_manager import SGDBManager
|
from cartridges.store.managers.sgdb_manager import SgdbManager
|
||||||
from src.store.managers.steam_api_manager import SteamAPIManager
|
from cartridges.store.managers.steam_api_manager import SteamAPIManager
|
||||||
from src.store.store import Store
|
from cartridges.store.store import Store
|
||||||
from src.utils.migrate_files_v1_to_v2 import migrate_files_v1_to_v2
|
from cartridges.utils.run_executable import run_executable
|
||||||
from src.window import CartridgesWindow
|
from cartridges.window import CartridgesWindow
|
||||||
|
|
||||||
|
if sys.platform == "darwin":
|
||||||
|
from AppKit import NSApp # type: ignore
|
||||||
|
from PyObjCTools import AppHelper
|
||||||
|
|
||||||
|
from cartridges.application_delegate import ApplicationDelegate
|
||||||
|
|
||||||
|
|
||||||
class CartridgesApplication(Adw.Application):
|
class CartridgesApplication(Adw.Application):
|
||||||
state = shared.AppState.DEFAULT
|
state = shared.AppState.DEFAULT
|
||||||
win: CartridgesWindow
|
win: CartridgesWindow
|
||||||
|
init_search_term: Optional[str] = None
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
shared.store = Store()
|
shared.store = Store()
|
||||||
super().__init__(
|
super().__init__(application_id=shared.APP_ID)
|
||||||
application_id=shared.APP_ID, flags=Gio.ApplicationFlags.FLAGS_NONE
|
|
||||||
)
|
search = GLib.OptionEntry()
|
||||||
|
search.long_name = "search"
|
||||||
|
search.short_name = ord("s")
|
||||||
|
search.flags = 0
|
||||||
|
search.arg = int(GLib.OptionArg.STRING)
|
||||||
|
search.arg_data = None
|
||||||
|
search.description = "Open the app with this term in the search entry"
|
||||||
|
search.arg_description = "TERM"
|
||||||
|
|
||||||
|
launch = GLib.OptionEntry()
|
||||||
|
launch.long_name = "launch"
|
||||||
|
launch.short_name = ord("l")
|
||||||
|
launch.flags = int(GLib.OptionFlags.NONE)
|
||||||
|
launch.arg = int(GLib.OptionArg.STRING)
|
||||||
|
launch.arg_data = None
|
||||||
|
launch.description = "Run a game with the given game_id"
|
||||||
|
launch.arg_description = "GAME_ID"
|
||||||
|
|
||||||
|
self.add_main_option_entries((search, launch))
|
||||||
|
|
||||||
|
if sys.platform == "darwin":
|
||||||
|
if settings := Gtk.Settings.get_default():
|
||||||
|
settings.props.gtk_decoration_layout = "close,minimize,maximize:"
|
||||||
|
|
||||||
|
def setup_app_delegate() -> None:
|
||||||
|
NSApp.setDelegate_(ApplicationDelegate.alloc().init()) # type: ignore
|
||||||
|
AppHelper.runEventLoop() # type: ignore
|
||||||
|
|
||||||
|
GLib.Thread.new(None, setup_app_delegate)
|
||||||
|
|
||||||
def do_activate(self) -> None: # pylint: disable=arguments-differ
|
def do_activate(self) -> None: # pylint: disable=arguments-differ
|
||||||
"""Called on app creation"""
|
"""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()
|
setup_logging()
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
log_system_info()
|
log_system_info()
|
||||||
|
|
||||||
if os.name == "nt":
|
|
||||||
migrate_files_v1_to_v2()
|
|
||||||
|
|
||||||
# Set fallback icon-name
|
|
||||||
Gtk.Window.set_default_icon_name(shared.APP_ID)
|
|
||||||
|
|
||||||
# Create the main window
|
# Create the main window
|
||||||
win = self.props.active_window # pylint: disable=no-member
|
win = self.props.active_window # pylint: disable=no-member
|
||||||
if not win:
|
if not win:
|
||||||
@@ -107,7 +145,7 @@ class CartridgesApplication(Adw.Application):
|
|||||||
# Add rest of the managers for game imports
|
# Add rest of the managers for game imports
|
||||||
shared.store.add_manager(CoverManager())
|
shared.store.add_manager(CoverManager())
|
||||||
shared.store.add_manager(SteamAPIManager())
|
shared.store.add_manager(SteamAPIManager())
|
||||||
shared.store.add_manager(SGDBManager())
|
shared.store.add_manager(SgdbManager())
|
||||||
shared.store.toggle_manager_in_pipelines(FileManager, True)
|
shared.store.toggle_manager_in_pipelines(FileManager, True)
|
||||||
|
|
||||||
# Create actions
|
# Create actions
|
||||||
@@ -133,7 +171,6 @@ class CartridgesApplication(Adw.Application):
|
|||||||
("go_to_parent", ("<alt>Up",), shared.win),
|
("go_to_parent", ("<alt>Up",), shared.win),
|
||||||
("go_home", ("<alt>Home",), shared.win),
|
("go_home", ("<alt>Home",), shared.win),
|
||||||
("toggle_search", ("<primary>f",), shared.win),
|
("toggle_search", ("<primary>f",), shared.win),
|
||||||
("escape", ("Escape",), shared.win),
|
|
||||||
("undo", ("<primary>z",), shared.win),
|
("undo", ("<primary>z",), shared.win),
|
||||||
("open_menu", ("F10",), shared.win),
|
("open_menu", ("F10",), shared.win),
|
||||||
("close", ("<primary>w",), shared.win),
|
("close", ("<primary>w",), shared.win),
|
||||||
@@ -141,16 +178,62 @@ class CartridgesApplication(Adw.Application):
|
|||||||
)
|
)
|
||||||
|
|
||||||
sort_action = Gio.SimpleAction.new_stateful(
|
sort_action = Gio.SimpleAction.new_stateful(
|
||||||
"sort_by", GLib.VariantType.new("s"), GLib.Variant("s", "a-z")
|
"sort_by",
|
||||||
|
GLib.VariantType.new("s"),
|
||||||
|
sort_mode := GLib.Variant("s", shared.state_schema.get_string("sort-mode")),
|
||||||
)
|
)
|
||||||
sort_action.connect("activate", shared.win.on_sort_action)
|
sort_action.connect("activate", shared.win.on_sort_action)
|
||||||
shared.win.add_action(sort_action)
|
shared.win.add_action(sort_action)
|
||||||
shared.win.on_sort_action(
|
shared.win.on_sort_action(sort_action, sort_mode)
|
||||||
sort_action, shared.state_schema.get_value("sort-mode")
|
|
||||||
)
|
if self.init_search_term: # For command line activation
|
||||||
|
shared.win.search_bar.set_search_mode(True)
|
||||||
|
shared.win.search_entry.set_text(self.init_search_term)
|
||||||
|
shared.win.search_entry.set_position(-1)
|
||||||
|
|
||||||
shared.win.present()
|
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()
|
||||||
|
elif game_id := options.lookup_value("launch"):
|
||||||
|
try:
|
||||||
|
data = json.load(
|
||||||
|
(path := shared.games_dir / (game_id.get_string() + ".json")).open(
|
||||||
|
"r", encoding="utf-8"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
executable = (
|
||||||
|
shlex.join(data["executable"])
|
||||||
|
if isinstance(data["executable"], list)
|
||||||
|
else data["executable"]
|
||||||
|
)
|
||||||
|
name = data["name"]
|
||||||
|
|
||||||
|
run_executable(executable)
|
||||||
|
|
||||||
|
data["last_played"] = int(time())
|
||||||
|
json.dump(data, path.open("w", encoding="utf-8"))
|
||||||
|
|
||||||
|
except (IndexError, KeyError, OSError, json.decoder.JSONDecodeError):
|
||||||
|
return 1
|
||||||
|
|
||||||
|
self.register()
|
||||||
|
self.send_notification(
|
||||||
|
"launch", Gio.Notification.new(_("{} launched").format(name))
|
||||||
|
)
|
||||||
|
|
||||||
|
# Sleep for 6 seconds before withdrawing the notification
|
||||||
|
# The amount a notification stays up is ~5, so leave an extra second for the animation
|
||||||
|
GLib.usleep(6000000)
|
||||||
|
self.withdraw_notification("launch")
|
||||||
|
|
||||||
|
return 0
|
||||||
|
return -1
|
||||||
|
|
||||||
def load_games_from_disk(self) -> None:
|
def load_games_from_disk(self) -> None:
|
||||||
if shared.games_dir.is_dir():
|
if shared.games_dir.is_dir():
|
||||||
for game_file in shared.games_dir.iterdir():
|
for game_file in shared.games_dir.iterdir():
|
||||||
@@ -186,23 +269,24 @@ class CartridgesApplication(Adw.Application):
|
|||||||
debug_str += log_file.read()
|
debug_str += log_file.read()
|
||||||
log_file.close()
|
log_file.close()
|
||||||
|
|
||||||
about = Adw.AboutWindow.new_from_appdata(
|
about = Adw.AboutDialog.new_from_appdata(
|
||||||
shared.PREFIX + "/" + shared.APP_ID + ".metainfo.xml", shared.VERSION
|
shared.PREFIX + "/" + shared.APP_ID + ".metainfo.xml", shared.VERSION
|
||||||
)
|
)
|
||||||
about.set_transient_for(shared.win)
|
|
||||||
about.set_developers(
|
about.set_developers(
|
||||||
(
|
(
|
||||||
"kramo https://kramo.hu",
|
"kramo https://kramo.page",
|
||||||
"Geoffrey Coulaud https://geoffrey-coulaud.fr",
|
"Geoffrey Coulaud https://geoffrey-coulaud.fr",
|
||||||
"Rilic https://rilic.red",
|
"Rilic https://rilic.red",
|
||||||
"Arcitec https://github.com/Arcitec",
|
"Arcitec https://github.com/Arcitec",
|
||||||
"Paweł Lidwin https://github.com/imLinguin",
|
"Paweł Lidwin https://github.com/imLinguin",
|
||||||
"Domenico https://github.com/Domefemia",
|
"Domenico https://github.com/Domefemia",
|
||||||
"Rafael Mardojai CM https://mardojai.com",
|
"Rafael Mardojai CM https://mardojai.com",
|
||||||
|
"Clara Hobbs https://github.com/Ratfink",
|
||||||
|
"Sabri Ünal https://github.com/sabriunal",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
about.set_designers(("kramo https://kramo.hu",))
|
about.set_designers(("kramo https://kramo.page",))
|
||||||
about.set_copyright("© 2022-2023 kramo")
|
about.set_copyright("© 2022-2024 kramo")
|
||||||
# Translators: Replace this with your name for it to show up in the about window
|
# Translators: Replace this with your name for it to show up in the about window
|
||||||
about.set_translator_credits = (_("translator_credits"),)
|
about.set_translator_credits = (_("translator_credits"),)
|
||||||
about.set_debug_info(debug_str)
|
about.set_debug_info(debug_str)
|
||||||
@@ -213,7 +297,7 @@ class CartridgesApplication(Adw.Application):
|
|||||||
Gtk.License.CUSTOM,
|
Gtk.License.CUSTOM,
|
||||||
"Steam and the Steam logo are trademarks and/or registered trademarks of Valve Corporation in the U.S. and/or other countries.", # pylint: disable=line-too-long
|
"Steam and the Steam logo are trademarks and/or registered trademarks of Valve Corporation in the U.S. and/or other countries.", # pylint: disable=line-too-long
|
||||||
)
|
)
|
||||||
about.present()
|
about.present(shared.win)
|
||||||
|
|
||||||
def on_preferences_action(
|
def on_preferences_action(
|
||||||
self,
|
self,
|
||||||
@@ -221,13 +305,16 @@ class CartridgesApplication(Adw.Application):
|
|||||||
_parameter: Any = None,
|
_parameter: Any = None,
|
||||||
page_name: Optional[str] = None,
|
page_name: Optional[str] = None,
|
||||||
expander_row: Optional[str] = None,
|
expander_row: Optional[str] = None,
|
||||||
) -> CartridgesWindow:
|
) -> Optional[CartridgesPreferences]:
|
||||||
win = PreferencesWindow()
|
if CartridgesPreferences.is_open:
|
||||||
|
return
|
||||||
|
|
||||||
|
win = CartridgesPreferences()
|
||||||
if page_name:
|
if page_name:
|
||||||
win.set_visible_page_name(page_name)
|
win.set_visible_page_name(page_name)
|
||||||
if expander_row:
|
if expander_row:
|
||||||
getattr(win, expander_row).set_expanded(True)
|
getattr(win, expander_row).set_expanded(True)
|
||||||
win.present()
|
win.present(shared.win)
|
||||||
|
|
||||||
return win
|
return win
|
||||||
|
|
||||||
@@ -238,10 +325,13 @@ class CartridgesApplication(Adw.Application):
|
|||||||
shared.win.active_game.toggle_hidden()
|
shared.win.active_game.toggle_hidden()
|
||||||
|
|
||||||
def on_edit_game_action(self, *_args: Any) -> None:
|
def on_edit_game_action(self, *_args: Any) -> None:
|
||||||
DetailsWindow(shared.win.active_game)
|
DetailsDialog(shared.win.active_game).present(shared.win)
|
||||||
|
|
||||||
def on_add_game_action(self, *_args: Any) -> None:
|
def on_add_game_action(self, *_args: Any) -> None:
|
||||||
DetailsWindow()
|
if DetailsDialog.is_open:
|
||||||
|
return
|
||||||
|
|
||||||
|
DetailsDialog().present(shared.win)
|
||||||
|
|
||||||
def on_import_action(self, *_args: Any) -> None:
|
def on_import_action(self, *_args: Any) -> None:
|
||||||
shared.importer = Importer()
|
shared.importer = Importer()
|
||||||
@@ -283,7 +373,7 @@ class CartridgesApplication(Adw.Application):
|
|||||||
self.on_remove_game_action()
|
self.on_remove_game_action()
|
||||||
|
|
||||||
def search(self, uri: str) -> None:
|
def search(self, uri: str) -> None:
|
||||||
Gio.AppInfo.launch_default_for_uri(f"{uri}{shared.win.active_game.name}")
|
Gio.AppInfo.launch_default_for_uri(f"{uri}{quote(shared.win.active_game.name)}")
|
||||||
|
|
||||||
def on_igdb_search_action(self, *_args: Any) -> None:
|
def on_igdb_search_action(self, *_args: Any) -> None:
|
||||||
self.search("https://www.igdb.com/search?type=1&q=")
|
self.search("https://www.igdb.com/search?type=1&q=")
|
||||||
@@ -313,7 +403,11 @@ class CartridgesApplication(Adw.Application):
|
|||||||
if action[1:2]:
|
if action[1:2]:
|
||||||
self.set_accels_for_action(
|
self.set_accels_for_action(
|
||||||
f"app.{action[0]}" if scope == self else f"win.{action[0]}",
|
f"app.{action[0]}" if scope == self else f"win.{action[0]}",
|
||||||
action[1],
|
(
|
||||||
|
tuple(s.replace("<primary>", "<meta>") for s in action[1])
|
||||||
|
if sys.platform == "darwin"
|
||||||
|
else action[1]
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
scope.add_action(simple_action)
|
scope.add_action(simple_action)
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
moduledir = join_paths(pkgdatadir, 'src')
|
moduledir = python_dir / 'cartridges'
|
||||||
|
|
||||||
configure_file(
|
configure_file(
|
||||||
input: 'cartridges.in',
|
input: 'cartridges.in',
|
||||||
output: 'cartridges',
|
output: 'cartridges',
|
||||||
configuration: conf,
|
configuration: conf,
|
||||||
install: true,
|
install: true,
|
||||||
install_dir: get_option('bindir')
|
install_dir: get_option('bindir'),
|
||||||
)
|
)
|
||||||
|
|
||||||
install_subdir('importer', install_dir: moduledir)
|
install_subdir('importer', install_dir: moduledir)
|
||||||
@@ -15,17 +15,14 @@ install_subdir('logging', install_dir: moduledir)
|
|||||||
install_subdir('errors', install_dir: moduledir)
|
install_subdir('errors', install_dir: moduledir)
|
||||||
install_data(
|
install_data(
|
||||||
[
|
[
|
||||||
|
'application_delegate.py',
|
||||||
'main.py',
|
'main.py',
|
||||||
'window.py',
|
'window.py',
|
||||||
'preferences.py',
|
'preferences.py',
|
||||||
'details_window.py',
|
'details_dialog.py',
|
||||||
'game.py',
|
'game.py',
|
||||||
'game_cover.py',
|
'game_cover.py',
|
||||||
configure_file(
|
configure_file(input: 'shared.py.in', output: 'shared.py', configuration: conf),
|
||||||
input: 'shared.py.in',
|
|
||||||
output: 'shared.py',
|
|
||||||
configuration: conf
|
|
||||||
)
|
|
||||||
],
|
],
|
||||||
install_dir: moduledir
|
install_dir: moduledir,
|
||||||
)
|
)
|
||||||
@@ -17,106 +17,121 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
# pyright: reportAssignmentType=none
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from shutil import rmtree
|
from shutil import rmtree
|
||||||
|
from sys import platform
|
||||||
from typing import Any, Callable, Optional
|
from typing import Any, Callable, Optional
|
||||||
|
|
||||||
from gi.repository import Adw, Gio, GLib, Gtk
|
from gi.repository import Adw, Gio, GLib, Gtk
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.errors.friendly_error import FriendlyError
|
||||||
from src.importer.sources.bottles_source import BottlesSource
|
from cartridges.game import Game
|
||||||
from src.importer.sources.flatpak_source import FlatpakSource
|
from cartridges.importer.bottles_source import BottlesSource
|
||||||
from src.importer.sources.heroic_source import HeroicSource
|
from cartridges.importer.desktop_source import DesktopSource
|
||||||
from src.importer.sources.itch_source import ItchSource
|
from cartridges.importer.flatpak_source import FlatpakSource
|
||||||
from src.importer.sources.legendary_source import LegendarySource
|
from cartridges.importer.heroic_source import HeroicSource
|
||||||
from src.importer.sources.location import UnresolvableLocationError
|
from cartridges.importer.itch_source import ItchSource
|
||||||
from src.importer.sources.lutris_source import LutrisSource
|
from cartridges.importer.legendary_source import LegendarySource
|
||||||
from src.importer.sources.retroarch_source import RetroarchSource
|
from cartridges.importer.location import UnresolvableLocationError
|
||||||
from src.importer.sources.source import Source
|
from cartridges.importer.lutris_source import LutrisSource
|
||||||
from src.importer.sources.steam_source import SteamSource
|
from cartridges.importer.retroarch_source import RetroarchSource
|
||||||
from src.utils.create_dialog import create_dialog
|
from cartridges.importer.source import Source
|
||||||
|
from cartridges.importer.steam_source import SteamSource
|
||||||
|
from cartridges.store.managers.sgdb_manager import SgdbManager
|
||||||
|
from cartridges.utils.create_dialog import create_dialog
|
||||||
|
|
||||||
|
|
||||||
@Gtk.Template(resource_path=shared.PREFIX + "/gtk/preferences.ui")
|
@Gtk.Template(resource_path=shared.PREFIX + "/gtk/preferences.ui")
|
||||||
class PreferencesWindow(Adw.PreferencesWindow):
|
class CartridgesPreferences(Adw.PreferencesDialog):
|
||||||
__gtype_name__ = "PreferencesWindow"
|
__gtype_name__ = "CartridgesPreferences"
|
||||||
|
|
||||||
general_page = Gtk.Template.Child()
|
general_page: Adw.PreferencesPage = Gtk.Template.Child()
|
||||||
import_page = Gtk.Template.Child()
|
import_page: Adw.PreferencesPage = Gtk.Template.Child()
|
||||||
sgdb_page = 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()
|
exit_after_launch_switch: Adw.SwitchRow = Gtk.Template.Child()
|
||||||
cover_launches_game_switch = Gtk.Template.Child()
|
cover_launches_game_switch: Adw.SwitchRow = Gtk.Template.Child()
|
||||||
high_quality_images_switch = 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_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
|
||||||
steam_data_action_row = Gtk.Template.Child()
|
steam_data_action_row: Adw.ActionRow = Gtk.Template.Child()
|
||||||
steam_data_file_chooser_button = Gtk.Template.Child()
|
steam_data_file_chooser_button: Gtk.Button = Gtk.Template.Child()
|
||||||
|
|
||||||
lutris_expander_row = Gtk.Template.Child()
|
lutris_expander_row: Adw.ExpanderRowClass = Gtk.Template.Child()
|
||||||
lutris_data_action_row = Gtk.Template.Child()
|
lutris_data_action_row: Adw.ActionRow = Gtk.Template.Child()
|
||||||
lutris_data_file_chooser_button = Gtk.Template.Child()
|
lutris_data_file_chooser_button: Gtk.Button = Gtk.Template.Child()
|
||||||
lutris_cache_action_row = Gtk.Template.Child()
|
lutris_import_steam_switch: Adw.SwitchRow = Gtk.Template.Child()
|
||||||
lutris_cache_file_chooser_button = Gtk.Template.Child()
|
lutris_import_flatpak_switch: Adw.SwitchRow = Gtk.Template.Child()
|
||||||
lutris_import_steam_switch = Gtk.Template.Child()
|
|
||||||
lutris_import_flatpak_switch = Gtk.Template.Child()
|
|
||||||
|
|
||||||
heroic_expander_row = Gtk.Template.Child()
|
heroic_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
|
||||||
heroic_config_action_row = Gtk.Template.Child()
|
heroic_config_action_row: Adw.ActionRow = Gtk.Template.Child()
|
||||||
heroic_config_file_chooser_button = Gtk.Template.Child()
|
heroic_config_file_chooser_button: Gtk.Button = Gtk.Template.Child()
|
||||||
heroic_import_epic_switch = Gtk.Template.Child()
|
heroic_import_epic_switch: Adw.SwitchRow = Gtk.Template.Child()
|
||||||
heroic_import_gog_switch = Gtk.Template.Child()
|
heroic_import_gog_switch: Adw.SwitchRow = Gtk.Template.Child()
|
||||||
heroic_import_amazon_switch = Gtk.Template.Child()
|
heroic_import_amazon_switch: Adw.SwitchRow = Gtk.Template.Child()
|
||||||
heroic_import_sideload_switch = Gtk.Template.Child()
|
heroic_import_sideload_switch: Adw.SwitchRow = Gtk.Template.Child()
|
||||||
|
|
||||||
bottles_expander_row = Gtk.Template.Child()
|
bottles_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
|
||||||
bottles_data_action_row = Gtk.Template.Child()
|
bottles_data_action_row: Adw.ActionRow = Gtk.Template.Child()
|
||||||
bottles_data_file_chooser_button = Gtk.Template.Child()
|
bottles_data_file_chooser_button: Gtk.Button = Gtk.Template.Child()
|
||||||
|
|
||||||
itch_expander_row = Gtk.Template.Child()
|
itch_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
|
||||||
itch_config_action_row = Gtk.Template.Child()
|
itch_config_action_row: Adw.ActionRow = Gtk.Template.Child()
|
||||||
itch_config_file_chooser_button = Gtk.Template.Child()
|
itch_config_file_chooser_button: Gtk.Button = Gtk.Template.Child()
|
||||||
|
|
||||||
legendary_expander_row = Gtk.Template.Child()
|
legendary_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
|
||||||
legendary_config_action_row = Gtk.Template.Child()
|
legendary_config_action_row: Adw.ActionRow = Gtk.Template.Child()
|
||||||
legendary_config_file_chooser_button = Gtk.Template.Child()
|
legendary_config_file_chooser_button: Gtk.Button = Gtk.Template.Child()
|
||||||
|
|
||||||
retroarch_expander_row = Gtk.Template.Child()
|
retroarch_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
|
||||||
retroarch_config_action_row = Gtk.Template.Child()
|
retroarch_config_action_row: Adw.ActionRow = Gtk.Template.Child()
|
||||||
retroarch_config_file_chooser_button = Gtk.Template.Child()
|
retroarch_config_file_chooser_button: Gtk.Button = Gtk.Template.Child()
|
||||||
|
|
||||||
flatpak_expander_row = Gtk.Template.Child()
|
flatpak_expander_row: Adw.ExpanderRow = Gtk.Template.Child()
|
||||||
flatpak_data_action_row = Gtk.Template.Child()
|
flatpak_system_data_action_row: Adw.ActionRow = Gtk.Template.Child()
|
||||||
flatpak_data_file_chooser_button = Gtk.Template.Child()
|
flatpak_system_data_file_chooser_button: Gtk.Button = Gtk.Template.Child()
|
||||||
flatpak_import_launchers_switch = 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_group: Adw.PreferencesGroup = Gtk.Template.Child()
|
||||||
sgdb_key_entry_row = Gtk.Template.Child()
|
sgdb_key_entry_row: Adw.EntryRow = Gtk.Template.Child()
|
||||||
sgdb_switch = Gtk.Template.Child()
|
sgdb_switch: Adw.SwitchRow = Gtk.Template.Child()
|
||||||
sgdb_prefer_switch = Gtk.Template.Child()
|
sgdb_prefer_switch: Adw.SwitchRow = Gtk.Template.Child()
|
||||||
sgdb_animated_switch = 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()
|
danger_zone_group = Gtk.Template.Child()
|
||||||
reset_action_row = Gtk.Template.Child()
|
remove_all_games_button_row = Gtk.Template.Child()
|
||||||
reset_button = Gtk.Template.Child()
|
reset_button_row = Gtk.Template.Child()
|
||||||
remove_all_games_button = Gtk.Template.Child()
|
|
||||||
|
|
||||||
removed_games: set[Game] = set()
|
removed_games: set[Game] = set()
|
||||||
warning_menu_buttons: dict = {}
|
warning_menu_buttons: dict = {}
|
||||||
|
|
||||||
|
is_open = False
|
||||||
|
|
||||||
def __init__(self, **kwargs: Any) -> None:
|
def __init__(self, **kwargs: Any) -> None:
|
||||||
super().__init__(**kwargs)
|
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.file_chooser = Gtk.FileDialog()
|
self.file_chooser = Gtk.FileDialog()
|
||||||
self.set_transient_for(shared.win)
|
|
||||||
|
|
||||||
self.toast = Adw.Toast.new(_("All games removed"))
|
self.toast = Adw.Toast.new(_("All games removed"))
|
||||||
self.toast.set_button_label(_("Undo"))
|
self.toast.set_button_label(_("Undo"))
|
||||||
@@ -132,12 +147,12 @@ class PreferencesWindow(Adw.PreferencesWindow):
|
|||||||
self.add_controller(shortcut_controller)
|
self.add_controller(shortcut_controller)
|
||||||
|
|
||||||
# General
|
# General
|
||||||
self.remove_all_games_button.connect("clicked", self.remove_all_games)
|
self.remove_all_games_button_row.connect("activated", self.remove_all_games)
|
||||||
|
|
||||||
# Debug
|
# Debug
|
||||||
if shared.PROFILE == "development":
|
if shared.PROFILE == "development":
|
||||||
self.reset_action_row.set_visible(True)
|
self.reset_button_row.set_visible(True)
|
||||||
self.reset_button.connect("clicked", self.reset_app)
|
self.reset_button_row.connect("activated", self.reset_app)
|
||||||
|
|
||||||
# Sources settings
|
# Sources settings
|
||||||
for source_class in (
|
for source_class in (
|
||||||
@@ -157,6 +172,10 @@ class PreferencesWindow(Adw.PreferencesWindow):
|
|||||||
else:
|
else:
|
||||||
self.init_source_row(source)
|
self.init_source_row(source)
|
||||||
|
|
||||||
|
# Special case for the desktop source
|
||||||
|
if not DesktopSource().is_available:
|
||||||
|
self.desktop_switch.set_visible(False)
|
||||||
|
|
||||||
# SteamGridDB
|
# SteamGridDB
|
||||||
def sgdb_key_changed(*_args: Any) -> None:
|
def sgdb_key_changed(*_args: Any) -> None:
|
||||||
shared.schema.set_string("sgdb-key", self.sgdb_key_entry_row.get_text())
|
shared.schema.set_string("sgdb-key", self.sgdb_key_entry_row.get_text())
|
||||||
@@ -172,12 +191,54 @@ class PreferencesWindow(Adw.PreferencesWindow):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def update_sgdb(*_args: Any) -> None:
|
||||||
|
counter = 0
|
||||||
|
games_len = len(shared.store)
|
||||||
|
sgdb_manager = shared.store.managers[SgdbManager]
|
||||||
|
sgdb_manager.reset_cancellable()
|
||||||
|
|
||||||
|
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…")))
|
||||||
|
|
||||||
|
def update_cover_callback(manager: SgdbManager) -> None:
|
||||||
|
nonlocal counter
|
||||||
|
nonlocal games_len
|
||||||
|
nonlocal download_toast
|
||||||
|
|
||||||
|
counter += 1
|
||||||
|
if counter != games_len:
|
||||||
|
return
|
||||||
|
|
||||||
|
for error in manager.collect_errors():
|
||||||
|
if isinstance(error, FriendlyError):
|
||||||
|
create_dialog(self, error.title, error.subtitle)
|
||||||
|
break
|
||||||
|
|
||||||
|
for game in shared.store:
|
||||||
|
game.update()
|
||||||
|
|
||||||
|
toast = Adw.Toast.new(_("Covers updated"))
|
||||||
|
toast.set_priority(Adw.ToastPriority.HIGH)
|
||||||
|
download_toast.dismiss()
|
||||||
|
self.add_toast(toast)
|
||||||
|
|
||||||
|
self.sgdb_spinner.set_visible(False)
|
||||||
|
self.sgdb_stack.set_visible_child(self.sgdb_fetch_button)
|
||||||
|
|
||||||
|
for game in shared.store:
|
||||||
|
sgdb_manager.process_game(game, {}, update_cover_callback)
|
||||||
|
|
||||||
|
self.sgdb_fetch_button.connect("clicked", update_sgdb)
|
||||||
|
|
||||||
# Switches
|
# Switches
|
||||||
self.bind_switches(
|
self.bind_switches(
|
||||||
{
|
{
|
||||||
"exit-after-launch",
|
"exit-after-launch",
|
||||||
"cover-launches-game",
|
"cover-launches-game",
|
||||||
"high-quality-images",
|
"high-quality-images",
|
||||||
|
"auto-import",
|
||||||
"remove-missing",
|
"remove-missing",
|
||||||
"lutris-import-steam",
|
"lutris-import-steam",
|
||||||
"lutris-import-flatpak",
|
"lutris-import-flatpak",
|
||||||
@@ -202,6 +263,9 @@ class PreferencesWindow(Adw.PreferencesWindow):
|
|||||||
self.sgdb_key_entry_row.connect("changed", set_sgdb_sensitive)
|
self.sgdb_key_entry_row.connect("changed", set_sgdb_sensitive)
|
||||||
set_sgdb_sensitive(self.sgdb_key_entry_row)
|
set_sgdb_sensitive(self.sgdb_key_entry_row)
|
||||||
|
|
||||||
|
def set_is_open(self, is_open: bool) -> None:
|
||||||
|
self.__class__.is_open = is_open
|
||||||
|
|
||||||
def get_switch(self, setting: str) -> Any:
|
def get_switch(self, setting: str) -> Any:
|
||||||
return getattr(self, f'{setting.replace("-", "_")}_switch')
|
return getattr(self, f'{setting.replace("-", "_")}_switch')
|
||||||
|
|
||||||
@@ -219,7 +283,7 @@ class PreferencesWindow(Adw.PreferencesWindow):
|
|||||||
) -> None:
|
) -> None:
|
||||||
self.file_chooser.select_folder(shared.win, None, callback, callback_data)
|
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
|
shared.win.get_application().state = shared.AppState.UNDO_REMOVE_ALL_GAMES
|
||||||
for game in self.removed_games:
|
for game in self.removed_games:
|
||||||
game.removed = False
|
game.removed = False
|
||||||
@@ -231,6 +295,8 @@ class PreferencesWindow(Adw.PreferencesWindow):
|
|||||||
shared.win.get_application().state = shared.AppState.DEFAULT
|
shared.win.get_application().state = shared.AppState.DEFAULT
|
||||||
shared.win.create_source_rows()
|
shared.win.create_source_rows()
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
def remove_all_games(self, *_args: Any) -> None:
|
def remove_all_games(self, *_args: Any) -> None:
|
||||||
shared.win.get_application().state = shared.AppState.REMOVE_ALL_GAMES
|
shared.win.get_application().state = shared.AppState.REMOVE_ALL_GAMES
|
||||||
shared.win.row_selected(None, shared.win.all_games_row_box.get_parent())
|
shared.win.row_selected(None, shared.win.all_games_row_box.get_parent())
|
||||||
@@ -275,9 +341,16 @@ class PreferencesWindow(Adw.PreferencesWindow):
|
|||||||
)
|
)
|
||||||
if not action_row:
|
if not action_row:
|
||||||
continue
|
continue
|
||||||
path = Path(shared.schema.get_string(location.schema_key)).expanduser()
|
|
||||||
|
subtitle = str(Path(shared.schema.get_string(location.schema_key)))
|
||||||
|
|
||||||
|
if platform == "linux":
|
||||||
# Remove the path prefix if picked via Flatpak portal
|
# Remove the path prefix if picked via Flatpak portal
|
||||||
subtitle = re.sub("/run/user/\\d*/doc/.*/", "", str(path))
|
subtitle = re.sub("/run/user/\\d*/doc/.*/", "", subtitle)
|
||||||
|
|
||||||
|
# Replace the home directory with "~"
|
||||||
|
subtitle = re.sub(f"^{str(shared.home)}", "~", subtitle)
|
||||||
|
|
||||||
action_row.set_subtitle(subtitle)
|
action_row.set_subtitle(subtitle)
|
||||||
|
|
||||||
def resolve_locations(self, source: Source) -> None:
|
def resolve_locations(self, source: Source) -> None:
|
||||||
@@ -295,7 +368,7 @@ class PreferencesWindow(Adw.PreferencesWindow):
|
|||||||
|
|
||||||
except UnresolvableLocationError:
|
except UnresolvableLocationError:
|
||||||
title = _("Installation Not Found")
|
title = _("Installation Not Found")
|
||||||
description = _("Select a valid directory.")
|
description = _("Select a valid directory")
|
||||||
format_start = '<span rise="12pt"><b><big>'
|
format_start = '<span rise="12pt"><b><big>'
|
||||||
format_end = "</big></b></span>\n"
|
format_end = "</big></b></span>\n"
|
||||||
|
|
||||||
@@ -345,7 +418,7 @@ class PreferencesWindow(Adw.PreferencesWindow):
|
|||||||
"""Callback called when a dir picker button is clicked"""
|
"""Callback called when a dir picker button is clicked"""
|
||||||
try:
|
try:
|
||||||
path = Path(self.file_chooser.select_folder_finish(result).get_path())
|
path = Path(self.file_chooser.select_folder_finish(result).get_path())
|
||||||
except GLib.GError:
|
except GLib.Error:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Good picked location
|
# Good picked location
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
import os
|
|
||||||
from enum import IntEnum, auto
|
from enum import IntEnum, auto
|
||||||
|
from os import getenv
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from gi.repository import Gdk, Gio, GLib
|
from gi.repository import Gdk, Gio, GLib
|
||||||
@@ -36,27 +36,44 @@ APP_ID = "@APP_ID@"
|
|||||||
VERSION = "@VERSION@"
|
VERSION = "@VERSION@"
|
||||||
PREFIX = "@PREFIX@"
|
PREFIX = "@PREFIX@"
|
||||||
PROFILE = "@PROFILE@"
|
PROFILE = "@PROFILE@"
|
||||||
|
TIFF_COMPRESSION = "@TIFF_COMPRESSION@"
|
||||||
SPEC_VERSION = 1.5 # The version of the game_id.json spec
|
SPEC_VERSION = 1.5 # The version of the game_id.json spec
|
||||||
|
|
||||||
schema = Gio.Settings.new(APP_ID)
|
schema = Gio.Settings.new(APP_ID)
|
||||||
state_schema = Gio.Settings.new(APP_ID + ".State")
|
state_schema = Gio.Settings.new(APP_ID + ".State")
|
||||||
|
|
||||||
home = Path.home()
|
home = Path.home()
|
||||||
|
|
||||||
data_dir = Path(GLib.get_user_data_dir())
|
data_dir = Path(GLib.get_user_data_dir())
|
||||||
|
host_data_dir = Path(getenv("HOST_XDG_DATA_HOME", Path.home() / ".local" / "share"))
|
||||||
|
|
||||||
config_dir = Path(GLib.get_user_config_dir())
|
config_dir = Path(GLib.get_user_config_dir())
|
||||||
|
host_config_dir = Path(getenv("HOST_XDG_CONFIG_HOME", Path.home() / ".config"))
|
||||||
|
|
||||||
cache_dir = Path(GLib.get_user_cache_dir())
|
cache_dir = Path(GLib.get_user_cache_dir())
|
||||||
|
host_cache_dir = Path(getenv("HOST_XDG_CACHE_HOME", Path.home() / ".cache"))
|
||||||
|
|
||||||
flatpak_dir = home / ".var" / "app"
|
flatpak_dir = home / ".var" / "app"
|
||||||
|
|
||||||
games_dir = data_dir / "cartridges" / "games"
|
games_dir = data_dir / "cartridges" / "games"
|
||||||
covers_dir = data_dir / "cartridges" / "covers"
|
covers_dir = data_dir / "cartridges" / "covers"
|
||||||
|
|
||||||
appdata_dir = Path(os.getenv("appdata") or "C:\\Users\\Default\\AppData\\Roaming")
|
appdata_dir = Path(getenv("appdata") or r"C:\Users\Default\AppData\Roaming")
|
||||||
local_appdata_dir = Path(os.getenv("csidl_local_appdata") or "C:\\Users\\Default\\AppData\\Local")
|
local_appdata_dir = Path(
|
||||||
programfiles32_dir = Path(os.getenv("programfiles(x86)") or "C:\\Program Files (x86)")
|
getenv("csidl_local_appdata") or r"C:\Users\Default\AppData\Local"
|
||||||
|
|
||||||
scale_factor = max(
|
|
||||||
monitor.get_scale_factor() for monitor in Gdk.Display.get_default().get_monitors()
|
|
||||||
)
|
)
|
||||||
|
programfiles32_dir = Path(getenv("programfiles(x86)") or r"C:\Program Files (x86)")
|
||||||
|
|
||||||
|
app_support_dir = home / "Library" / "Application Support"
|
||||||
|
|
||||||
|
try:
|
||||||
|
scale_factor = max(
|
||||||
|
monitor.get_scale_factor()
|
||||||
|
for monitor in Gdk.Display.get_default().get_monitors()
|
||||||
|
)
|
||||||
|
except AttributeError: # If shared.py is imported by the search provider
|
||||||
|
pass
|
||||||
|
else:
|
||||||
image_size = (200 * scale_factor, 300 * scale_factor)
|
image_size = (200 * scale_factor, 300 * scale_factor)
|
||||||
|
|
||||||
# pylint: disable=invalid-name
|
# pylint: disable=invalid-name
|
||||||
@@ -64,4 +81,4 @@ win = None
|
|||||||
importer = None
|
importer = None
|
||||||
import_time = None
|
import_time = None
|
||||||
store = None
|
store = None
|
||||||
log_files = None
|
log_files = []
|
||||||
78
cartridges/shared.pyi
Normal 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]
|
||||||
@@ -21,8 +21,8 @@ from typing import Any, Callable
|
|||||||
|
|
||||||
from gi.repository import Gio
|
from gi.repository import Gio
|
||||||
|
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.store.managers.manager import Manager
|
from cartridges.store.managers.manager import Manager
|
||||||
|
|
||||||
|
|
||||||
class AsyncManager(Manager):
|
class AsyncManager(Manager):
|
||||||
@@ -25,11 +25,11 @@ import requests
|
|||||||
from gi.repository import GdkPixbuf, Gio
|
from gi.repository import GdkPixbuf, Gio
|
||||||
from requests.exceptions import HTTPError, SSLError
|
from requests.exceptions import HTTPError, SSLError
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.store.managers.manager import Manager
|
from cartridges.store.managers.manager import Manager
|
||||||
from src.store.managers.steam_api_manager import SteamAPIManager
|
from cartridges.store.managers.steam_api_manager import SteamAPIManager
|
||||||
from src.utils.save_cover import convert_cover, save_cover
|
from cartridges.utils.save_cover import convert_cover, save_cover
|
||||||
|
|
||||||
|
|
||||||
class ImageSize(NamedTuple):
|
class ImageSize(NamedTuple):
|
||||||
@@ -17,18 +17,18 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.game_cover import GameCover
|
from cartridges.game_cover import GameCover
|
||||||
from src.store.managers.manager import Manager
|
from cartridges.store.managers.manager import Manager
|
||||||
from src.store.managers.sgdb_manager import SGDBManager
|
from cartridges.store.managers.sgdb_manager import SgdbManager
|
||||||
from src.store.managers.steam_api_manager import SteamAPIManager
|
from cartridges.store.managers.steam_api_manager import SteamAPIManager
|
||||||
|
|
||||||
|
|
||||||
class DisplayManager(Manager):
|
class DisplayManager(Manager):
|
||||||
"""Manager in charge of adding a game to the UI"""
|
"""Manager in charge of adding a game to the UI"""
|
||||||
|
|
||||||
run_after = (SteamAPIManager, SGDBManager)
|
run_after = (SteamAPIManager, SgdbManager)
|
||||||
signals = {"update-ready"}
|
signals = {"update-ready"}
|
||||||
|
|
||||||
def main(self, game: Game, _additional_data: dict) -> None:
|
def main(self, game: Game, _additional_data: dict) -> None:
|
||||||
@@ -19,10 +19,10 @@
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.store.managers.async_manager import AsyncManager
|
from cartridges.store.managers.async_manager import AsyncManager
|
||||||
from src.store.managers.steam_api_manager import SteamAPIManager
|
from cartridges.store.managers.steam_api_manager import SteamAPIManager
|
||||||
|
|
||||||
|
|
||||||
class FileManager(AsyncManager):
|
class FileManager(AsyncManager):
|
||||||
@@ -53,7 +53,7 @@ class FileManager(AsyncManager):
|
|||||||
|
|
||||||
json.dump(
|
json.dump(
|
||||||
{attr: getattr(game, attr) for attr in attrs if attr},
|
{attr: getattr(game, attr) for attr in attrs if attr},
|
||||||
(shared.games_dir / f"{game.game_id}.json").open("w"),
|
(shared.games_dir / f"{game.game_id}.json").open("w", encoding="utf-8"),
|
||||||
indent=4,
|
indent=4,
|
||||||
sort_keys=True,
|
sort_keys=True,
|
||||||
)
|
)
|
||||||
@@ -22,9 +22,9 @@ from abc import abstractmethod
|
|||||||
from time import sleep
|
from time import sleep
|
||||||
from typing import Any, Callable, Container
|
from typing import Any, Callable, Container
|
||||||
|
|
||||||
from src.errors.error_producer import ErrorProducer
|
from cartridges.errors.error_producer import ErrorProducer
|
||||||
from src.errors.friendly_error import FriendlyError
|
from cartridges.errors.friendly_error import FriendlyError
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
|
|
||||||
|
|
||||||
class Manager(ErrorProducer):
|
class Manager(ErrorProducer):
|
||||||
@@ -21,15 +21,15 @@ from json import JSONDecodeError
|
|||||||
|
|
||||||
from requests.exceptions import HTTPError, SSLError
|
from requests.exceptions import HTTPError, SSLError
|
||||||
|
|
||||||
from src.errors.friendly_error import FriendlyError
|
from cartridges.errors.friendly_error import FriendlyError
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.store.managers.async_manager import AsyncManager
|
from cartridges.store.managers.async_manager import AsyncManager
|
||||||
from src.store.managers.cover_manager import CoverManager
|
from cartridges.store.managers.cover_manager import CoverManager
|
||||||
from src.store.managers.steam_api_manager import SteamAPIManager
|
from cartridges.store.managers.steam_api_manager import SteamAPIManager
|
||||||
from src.utils.steamgriddb import SGDBAuthError, SGDBHelper
|
from cartridges.utils.steamgriddb import SgdbAuthError, SgdbHelper
|
||||||
|
|
||||||
|
|
||||||
class SGDBManager(AsyncManager):
|
class SgdbManager(AsyncManager):
|
||||||
"""Manager in charge of downloading a game's cover from SteamGridDB"""
|
"""Manager in charge of downloading a game's cover from SteamGridDB"""
|
||||||
|
|
||||||
run_after = (SteamAPIManager, CoverManager)
|
run_after = (SteamAPIManager, CoverManager)
|
||||||
@@ -37,9 +37,9 @@ class SGDBManager(AsyncManager):
|
|||||||
|
|
||||||
def main(self, game: Game, _additional_data: dict) -> None:
|
def main(self, game: Game, _additional_data: dict) -> None:
|
||||||
try:
|
try:
|
||||||
sgdb = SGDBHelper()
|
sgdb = SgdbHelper()
|
||||||
sgdb.conditionaly_update_cover(game)
|
sgdb.conditionaly_update_cover(game)
|
||||||
except SGDBAuthError as error:
|
except SgdbAuthError as error:
|
||||||
# If invalid auth, cancel all SGDBManager tasks
|
# If invalid auth, cancel all SGDBManager tasks
|
||||||
self.cancellable.cancel()
|
self.cancellable.cancel()
|
||||||
raise FriendlyError(
|
raise FriendlyError(
|
||||||
@@ -20,9 +20,9 @@
|
|||||||
from requests.exceptions import HTTPError, SSLError
|
from requests.exceptions import HTTPError, SSLError
|
||||||
from urllib3.exceptions import ConnectionError as Urllib3ConnectionError
|
from urllib3.exceptions import ConnectionError as Urllib3ConnectionError
|
||||||
|
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.store.managers.async_manager import AsyncManager
|
from cartridges.store.managers.async_manager import AsyncManager
|
||||||
from src.utils.steam import (
|
from cartridges.utils.steam import (
|
||||||
SteamAPIHelper,
|
SteamAPIHelper,
|
||||||
SteamGameNotFoundError,
|
SteamGameNotFoundError,
|
||||||
SteamNotAGameError,
|
SteamNotAGameError,
|
||||||
@@ -22,8 +22,8 @@ from typing import Iterable
|
|||||||
|
|
||||||
from gi.repository import GObject
|
from gi.repository import GObject
|
||||||
|
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.store.managers.manager import Manager
|
from cartridges.store.managers.manager import Manager
|
||||||
|
|
||||||
|
|
||||||
class Pipeline(GObject.Object):
|
class Pipeline(GObject.Object):
|
||||||
@@ -20,10 +20,10 @@
|
|||||||
import logging
|
import logging
|
||||||
from typing import Any, Generator, MutableMapping, Optional
|
from typing import Any, Generator, MutableMapping, Optional
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.store.managers.manager import Manager
|
from cartridges.store.managers.manager import Manager
|
||||||
from src.store.pipeline import Pipeline
|
from cartridges.store.pipeline import Pipeline
|
||||||
|
|
||||||
|
|
||||||
class Store:
|
class Store:
|
||||||
@@ -60,7 +60,7 @@ class Store:
|
|||||||
|
|
||||||
def __len__(self) -> int:
|
def __len__(self) -> int:
|
||||||
"""Get the number of games in the store with the `len` builtin"""
|
"""Get the number of games in the store with the `len` builtin"""
|
||||||
return sum(len(source_mapping) for source_mapping in self.source_games)
|
return sum(len(source_mapping) for source_mapping in self.source_games.values())
|
||||||
|
|
||||||
def __getitem__(self, game_id: str) -> Game:
|
def __getitem__(self, game_id: str) -> Game:
|
||||||
"""Get a game by its id with `store["game_id_goes_here"]`"""
|
"""Get a game by its id with `store["game_id_goes_here"]`"""
|
||||||
@@ -28,12 +28,12 @@ def create_dialog(
|
|||||||
body: str,
|
body: str,
|
||||||
extra_option: Optional[str] = None,
|
extra_option: Optional[str] = None,
|
||||||
extra_label: Optional[str] = None,
|
extra_label: Optional[str] = None,
|
||||||
) -> Adw.MessageDialog:
|
) -> Adw.AlertDialog:
|
||||||
dialog = Adw.MessageDialog.new(win, heading, body)
|
dialog = Adw.AlertDialog.new(heading, body)
|
||||||
dialog.add_response("dismiss", _("Dismiss"))
|
dialog.add_response("dismiss", _("Dismiss"))
|
||||||
|
|
||||||
if extra_option:
|
if extra_option:
|
||||||
dialog.add_response(extra_option, _(extra_label))
|
dialog.add_response(extra_option, extra_label or "")
|
||||||
|
|
||||||
dialog.present()
|
dialog.choose(win)
|
||||||
return dialog
|
return dialog
|
||||||
43
cartridges/utils/run_executable.py
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# run_executable.py
|
||||||
|
#
|
||||||
|
# Copyright 2023 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
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
from shlex import quote
|
||||||
|
|
||||||
|
from cartridges import shared
|
||||||
|
|
||||||
|
|
||||||
|
def run_executable(executable) -> None:
|
||||||
|
args = (
|
||||||
|
"flatpak-spawn --host /bin/sh -c " + quote(executable) # Flatpak
|
||||||
|
if os.getenv("FLATPAK_ID") == shared.APP_ID
|
||||||
|
else executable # Others
|
||||||
|
)
|
||||||
|
|
||||||
|
logging.info("Launching `%s`", str(args))
|
||||||
|
# pylint: disable=consider-using-with
|
||||||
|
subprocess.Popen(
|
||||||
|
args,
|
||||||
|
cwd=shared.home,
|
||||||
|
shell=True,
|
||||||
|
start_new_session=True,
|
||||||
|
creationflags=subprocess.CREATE_NEW_PROCESS_GROUP if os.name == "nt" else 0, # type: ignore
|
||||||
|
)
|
||||||
@@ -25,7 +25,7 @@ from typing import Optional
|
|||||||
from gi.repository import Gdk, GdkPixbuf, Gio, GLib
|
from gi.repository import Gdk, GdkPixbuf, Gio, GLib
|
||||||
from PIL import Image, ImageSequence, UnidentifiedImageError
|
from PIL import Image, ImageSequence, UnidentifiedImageError
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
|
|
||||||
|
|
||||||
def convert_cover(
|
def convert_cover(
|
||||||
@@ -74,7 +74,7 @@ def convert_cover(
|
|||||||
tmp_path,
|
tmp_path,
|
||||||
compression="tiff_adobe_deflate"
|
compression="tiff_adobe_deflate"
|
||||||
if shared.schema.get_boolean("high-quality-images")
|
if shared.schema.get_boolean("high-quality-images")
|
||||||
else "webp",
|
else shared.TIFF_COMPRESSION,
|
||||||
)
|
)
|
||||||
except UnidentifiedImageError:
|
except UnidentifiedImageError:
|
||||||
try:
|
try:
|
||||||
@@ -82,7 +82,7 @@ def convert_cover(
|
|||||||
tmp_path := Gio.File.new_tmp("XXXXXX.tiff")[0].get_path()
|
tmp_path := Gio.File.new_tmp("XXXXXX.tiff")[0].get_path()
|
||||||
)
|
)
|
||||||
return convert_cover(tmp_path)
|
return convert_cover(tmp_path)
|
||||||
except GLib.GError:
|
except GLib.Error:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return tmp_path
|
return tmp_path
|
||||||
@@ -27,8 +27,8 @@ from typing import TypedDict
|
|||||||
import requests
|
import requests
|
||||||
from requests.exceptions import HTTPError
|
from requests.exceptions import HTTPError
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.utils.rate_limiter import RateLimiter
|
from cartridges.utils.rate_limiter import RateLimiter
|
||||||
|
|
||||||
|
|
||||||
class SteamError(Exception):
|
class SteamError(Exception):
|
||||||
@@ -26,32 +26,32 @@ import requests
|
|||||||
from gi.repository import Gio
|
from gi.repository import Gio
|
||||||
from requests.exceptions import HTTPError
|
from requests.exceptions import HTTPError
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.utils.save_cover import convert_cover, save_cover
|
from cartridges.utils.save_cover import convert_cover, save_cover
|
||||||
|
|
||||||
|
|
||||||
class SGDBError(Exception):
|
class SgdbError(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class SGDBAuthError(SGDBError):
|
class SgdbAuthError(SgdbError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class SGDBGameNotFoundError(SGDBError):
|
class SgdbGameNotFound(SgdbError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class SGDBBadRequestError(SGDBError):
|
class SgdbBadRequest(SgdbError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class SGDBNoImageFoundError(SGDBError):
|
class SgdbNoImageFound(SgdbError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class SGDBHelper:
|
class SgdbHelper:
|
||||||
"""Helper class to make queries to SteamGridDB"""
|
"""Helper class to make queries to SteamGridDB"""
|
||||||
|
|
||||||
base_url = "https://www.steamgriddb.com/api/v2/"
|
base_url = "https://www.steamgriddb.com/api/v2/"
|
||||||
@@ -70,9 +70,9 @@ class SGDBHelper:
|
|||||||
case 200:
|
case 200:
|
||||||
return res.json()["data"][0]["id"]
|
return res.json()["data"][0]["id"]
|
||||||
case 401:
|
case 401:
|
||||||
raise SGDBAuthError(res.json()["errors"][0])
|
raise SgdbAuthError(res.json()["errors"][0])
|
||||||
case 404:
|
case 404:
|
||||||
raise SGDBGameNotFoundError(res.status_code)
|
raise SgdbGameNotFound(res.status_code)
|
||||||
case _:
|
case _:
|
||||||
res.raise_for_status()
|
res.raise_for_status()
|
||||||
|
|
||||||
@@ -86,12 +86,12 @@ class SGDBHelper:
|
|||||||
case 200:
|
case 200:
|
||||||
data = res.json()["data"]
|
data = res.json()["data"]
|
||||||
if len(data) == 0:
|
if len(data) == 0:
|
||||||
raise SGDBNoImageFoundError()
|
raise SgdbNoImageFound()
|
||||||
return data[0]["url"]
|
return data[0]["url"]
|
||||||
case 401:
|
case 401:
|
||||||
raise SGDBAuthError(res.json()["errors"][0])
|
raise SgdbAuthError(res.json()["errors"][0])
|
||||||
case 404:
|
case 404:
|
||||||
raise SGDBGameNotFoundError(res.status_code)
|
raise SgdbGameNotFound(res.status_code)
|
||||||
case _:
|
case _:
|
||||||
res.raise_for_status()
|
res.raise_for_status()
|
||||||
|
|
||||||
@@ -115,7 +115,7 @@ class SGDBHelper:
|
|||||||
# Get ID for the game
|
# Get ID for the game
|
||||||
try:
|
try:
|
||||||
sgdb_id = self.get_game_id(game)
|
sgdb_id = self.get_game_id(game)
|
||||||
except (HTTPError, SGDBError) as error:
|
except (HTTPError, SgdbError) as error:
|
||||||
logging.warning(
|
logging.warning(
|
||||||
"%s while getting SGDB ID for %s", type(error).__name__, game.name
|
"%s while getting SGDB ID for %s", type(error).__name__, game.name
|
||||||
)
|
)
|
||||||
@@ -135,10 +135,10 @@ class SGDBHelper:
|
|||||||
tmp_file_path = tmp_file.get_path()
|
tmp_file_path = tmp_file.get_path()
|
||||||
Path(tmp_file_path).write_bytes(response.content)
|
Path(tmp_file_path).write_bytes(response.content)
|
||||||
save_cover(game.game_id, convert_cover(tmp_file_path))
|
save_cover(game.game_id, convert_cover(tmp_file_path))
|
||||||
except SGDBAuthError as error:
|
except SgdbAuthError as error:
|
||||||
# Let caller handle auth errors
|
# Let caller handle auth errors
|
||||||
raise error
|
raise error
|
||||||
except (HTTPError, SGDBError) as error:
|
except (HTTPError, SgdbError) as error:
|
||||||
logging.warning(
|
logging.warning(
|
||||||
"%s while getting image for %s kwargs=%s",
|
"%s while getting image for %s kwargs=%s",
|
||||||
type(error).__name__,
|
type(error).__name__,
|
||||||
@@ -156,4 +156,4 @@ class SGDBHelper:
|
|||||||
game.name,
|
game.name,
|
||||||
sgdb_id,
|
sgdb_id,
|
||||||
)
|
)
|
||||||
raise SGDBNoImageFoundError()
|
raise SgdbNoImageFound()
|
||||||
@@ -17,71 +17,75 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
# pyright: reportAssignmentType=none
|
||||||
|
|
||||||
|
from sys import platform
|
||||||
from typing import Any, Optional
|
from typing import Any, Optional
|
||||||
|
|
||||||
from gi.repository import Adw, Gio, GLib, Gtk
|
from gi.repository import Adw, Gio, GLib, Gtk, Pango
|
||||||
|
|
||||||
from src import shared
|
from cartridges import shared
|
||||||
from src.game import Game
|
from cartridges.game import Game
|
||||||
from src.game_cover import GameCover
|
from cartridges.game_cover import GameCover
|
||||||
from src.utils.relative_date import relative_date
|
from cartridges.utils.relative_date import relative_date
|
||||||
|
|
||||||
|
|
||||||
@Gtk.Template(resource_path=shared.PREFIX + "/gtk/window.ui")
|
@Gtk.Template(resource_path=shared.PREFIX + "/gtk/window.ui")
|
||||||
class CartridgesWindow(Adw.ApplicationWindow):
|
class CartridgesWindow(Adw.ApplicationWindow):
|
||||||
__gtype_name__ = "CartridgesWindow"
|
__gtype_name__ = "CartridgesWindow"
|
||||||
|
|
||||||
overlay_split_view = Gtk.Template.Child()
|
overlay_split_view: Adw.OverlaySplitView = Gtk.Template.Child()
|
||||||
navigation_view = Gtk.Template.Child()
|
navigation_view: Adw.NavigationView = Gtk.Template.Child()
|
||||||
sidebar = Gtk.Template.Child()
|
sidebar_navigation_page: Adw.NavigationPage = Gtk.Template.Child()
|
||||||
all_games_row_box = Gtk.Template.Child()
|
sidebar: Gtk.ListBox = Gtk.Template.Child()
|
||||||
all_games_no_label = Gtk.Template.Child()
|
all_games_row_box: Gtk.Box = Gtk.Template.Child()
|
||||||
added_row_box = Gtk.Template.Child()
|
all_games_no_label: Gtk.Label = Gtk.Template.Child()
|
||||||
added_games_no_label = Gtk.Template.Child()
|
added_row_box: Gtk.Box = Gtk.Template.Child()
|
||||||
toast_overlay = Gtk.Template.Child()
|
added_games_no_label: Gtk.Label = Gtk.Template.Child()
|
||||||
primary_menu_button = Gtk.Template.Child()
|
toast_overlay: Adw.ToastOverlay = Gtk.Template.Child()
|
||||||
show_sidebar_button = Gtk.Template.Child()
|
primary_menu_button: Gtk.MenuButton = Gtk.Template.Child()
|
||||||
details_view = Gtk.Template.Child()
|
show_sidebar_button: Gtk.Button = Gtk.Template.Child()
|
||||||
library_page = Gtk.Template.Child()
|
details_view: Gtk.Overlay = Gtk.Template.Child()
|
||||||
library_view = Gtk.Template.Child()
|
library_page: Adw.NavigationPage = Gtk.Template.Child()
|
||||||
library = Gtk.Template.Child()
|
library_view: Adw.ToolbarView = Gtk.Template.Child()
|
||||||
scrolledwindow = Gtk.Template.Child()
|
library: Gtk.FlowBox = Gtk.Template.Child()
|
||||||
library_overlay = Gtk.Template.Child()
|
scrolledwindow: Gtk.ScrolledWindow = Gtk.Template.Child()
|
||||||
notice_empty = Gtk.Template.Child()
|
library_overlay: Gtk.Overlay = Gtk.Template.Child()
|
||||||
notice_no_results = Gtk.Template.Child()
|
notice_empty: Adw.StatusPage = Gtk.Template.Child()
|
||||||
search_bar = Gtk.Template.Child()
|
notice_no_results: Adw.StatusPage = Gtk.Template.Child()
|
||||||
search_entry = Gtk.Template.Child()
|
search_bar: Gtk.SearchBar = Gtk.Template.Child()
|
||||||
search_button = Gtk.Template.Child()
|
search_entry: Gtk.SearchEntry = Gtk.Template.Child()
|
||||||
|
search_button: Gtk.ToggleButton = Gtk.Template.Child()
|
||||||
|
|
||||||
details_page = Gtk.Template.Child()
|
details_page: Adw.NavigationPage = Gtk.Template.Child()
|
||||||
details_view_toolbar_view = Gtk.Template.Child()
|
details_view_toolbar_view: Adw.ToolbarView = Gtk.Template.Child()
|
||||||
details_view_cover = Gtk.Template.Child()
|
details_view_cover: Gtk.Picture = Gtk.Template.Child()
|
||||||
details_view_spinner = Gtk.Template.Child()
|
details_view_spinner: Adw.Spinner = Gtk.Template.Child()
|
||||||
details_view_title = Gtk.Template.Child()
|
details_view_title: Gtk.Label = Gtk.Template.Child()
|
||||||
details_view_blurred_cover = Gtk.Template.Child()
|
details_view_blurred_cover: Gtk.Picture = Gtk.Template.Child()
|
||||||
details_view_play_button = Gtk.Template.Child()
|
details_view_play_button: Gtk.Button = Gtk.Template.Child()
|
||||||
details_view_developer = Gtk.Template.Child()
|
details_view_developer: Gtk.Label = Gtk.Template.Child()
|
||||||
details_view_added = Gtk.Template.Child()
|
details_view_added: Gtk.ShortcutLabel = Gtk.Template.Child()
|
||||||
details_view_last_played = Gtk.Template.Child()
|
details_view_last_played: Gtk.Label = Gtk.Template.Child()
|
||||||
details_view_hide_button = Gtk.Template.Child()
|
details_view_hide_button: Gtk.Button = Gtk.Template.Child()
|
||||||
|
|
||||||
hidden_library_page = Gtk.Template.Child()
|
hidden_library_page: Adw.NavigationPage = Gtk.Template.Child()
|
||||||
hidden_primary_menu_button = Gtk.Template.Child()
|
hidden_primary_menu_button: Gtk.MenuButton = Gtk.Template.Child()
|
||||||
hidden_library = Gtk.Template.Child()
|
hidden_library: Gtk.FlowBox = Gtk.Template.Child()
|
||||||
hidden_library_view = Gtk.Template.Child()
|
hidden_library_view: Adw.ToolbarView = Gtk.Template.Child()
|
||||||
hidden_scrolledwindow = Gtk.Template.Child()
|
hidden_scrolledwindow: Gtk.ScrolledWindow = Gtk.Template.Child()
|
||||||
hidden_library_overlay = Gtk.Template.Child()
|
hidden_library_overlay: Gtk.Overlay = Gtk.Template.Child()
|
||||||
hidden_notice_empty = Gtk.Template.Child()
|
hidden_notice_empty: Adw.StatusPage = Gtk.Template.Child()
|
||||||
hidden_notice_no_results = Gtk.Template.Child()
|
hidden_notice_no_results: Adw.StatusPage = Gtk.Template.Child()
|
||||||
hidden_search_bar = Gtk.Template.Child()
|
hidden_search_bar: Gtk.SearchBar = Gtk.Template.Child()
|
||||||
hidden_search_entry = Gtk.Template.Child()
|
hidden_search_entry: Gtk.SearchEntry = Gtk.Template.Child()
|
||||||
hidden_search_button = Gtk.Template.Child()
|
hidden_search_button: Gtk.ToggleButton = Gtk.Template.Child()
|
||||||
|
|
||||||
game_covers: dict = {}
|
game_covers: dict = {}
|
||||||
toasts: dict = {}
|
toasts: dict = {}
|
||||||
active_game: Game
|
active_game: Game
|
||||||
details_view_game_cover: Optional[GameCover] = None
|
details_view_game_cover: Optional[GameCover] = None
|
||||||
sort_state: str = "a-z"
|
sort_state: str = "last_played"
|
||||||
filter_state: str = "all"
|
filter_state: str = "all"
|
||||||
source_rows: dict = {}
|
source_rows: dict = {}
|
||||||
|
|
||||||
@@ -152,6 +156,8 @@ class CartridgesWindow(Adw.ApplicationWindow):
|
|||||||
Gtk.Label(
|
Gtk.Label(
|
||||||
label=self.get_application().get_source_name(source_id),
|
label=self.get_application().get_source_name(source_id),
|
||||||
halign=Gtk.Align.START,
|
halign=Gtk.Align.START,
|
||||||
|
wrap=True,
|
||||||
|
wrap_mode=Pango.WrapMode.CHAR,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -213,6 +219,9 @@ class CartridgesWindow(Adw.ApplicationWindow):
|
|||||||
def __init__(self, **kwargs: Any) -> None:
|
def __init__(self, **kwargs: Any) -> None:
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
|
if platform == "darwin":
|
||||||
|
self.sidebar_navigation_page.set_title("")
|
||||||
|
|
||||||
self.details_view.set_measure_overlay(self.details_view_toolbar_view, True)
|
self.details_view.set_measure_overlay(self.details_view_toolbar_view, True)
|
||||||
self.details_view.set_clip_overlay(self.details_view_toolbar_view, False)
|
self.details_view.set_clip_overlay(self.details_view_toolbar_view, False)
|
||||||
|
|
||||||
@@ -342,7 +351,7 @@ class CartridgesWindow(Adw.ApplicationWindow):
|
|||||||
self.active_game = game
|
self.active_game = game
|
||||||
|
|
||||||
self.details_view_cover.set_opacity(int(not game.loading))
|
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_label(game.developer or "")
|
||||||
self.details_view_developer.set_visible(bool(game.developer))
|
self.details_view_developer.set_visible(bool(game.developer))
|
||||||
@@ -413,9 +422,11 @@ class CartridgesWindow(Adw.ApplicationWindow):
|
|||||||
order = False
|
order = False
|
||||||
|
|
||||||
def get_value(index: int) -> str:
|
def get_value(index: int) -> str:
|
||||||
return str(
|
return (
|
||||||
getattr((child1.get_child(), child2.get_child())[index], var)
|
str(getattr((child1.get_child(), child2.get_child())[index], var))
|
||||||
).lower()
|
.lower()
|
||||||
|
.removeprefix("the ")
|
||||||
|
)
|
||||||
|
|
||||||
if var != "name" and get_value(0) == get_value(1):
|
if var != "name" and get_value(0) == get_value(1):
|
||||||
var, order = "name", False
|
var, order = "name", False
|
||||||
@@ -441,6 +452,9 @@ class CartridgesWindow(Adw.ApplicationWindow):
|
|||||||
self.navigation_view.pop_to_page(self.library_page)
|
self.navigation_view.pop_to_page(self.library_page)
|
||||||
|
|
||||||
def on_show_hidden_action(self, *_args: Any) -> None:
|
def on_show_hidden_action(self, *_args: Any) -> None:
|
||||||
|
if self.navigation_view.get_visible_page() == self.hidden_library_page:
|
||||||
|
return
|
||||||
|
|
||||||
self.navigation_view.push(self.hidden_library_page)
|
self.navigation_view.push(self.hidden_library_page)
|
||||||
|
|
||||||
def on_sort_action(self, action: Gio.SimpleAction, state: GLib.Variant) -> None:
|
def on_sort_action(self, action: Gio.SimpleAction, state: GLib.Variant) -> None:
|
||||||
@@ -467,15 +481,6 @@ class CartridgesWindow(Adw.ApplicationWindow):
|
|||||||
|
|
||||||
search_entry.set_text("")
|
search_entry.set_text("")
|
||||||
|
|
||||||
def on_escape_action(self, *_args: Any) -> None:
|
|
||||||
if (
|
|
||||||
self.get_focus() == self.search_entry.get_focus_child()
|
|
||||||
or self.hidden_search_entry.get_focus_child()
|
|
||||||
):
|
|
||||||
self.on_toggle_search_action()
|
|
||||||
else:
|
|
||||||
self.navigation_view.pop()
|
|
||||||
|
|
||||||
def show_details_page_search(self, widget: Gtk.Widget) -> None:
|
def show_details_page_search(self, widget: Gtk.Widget) -> None:
|
||||||
library = (
|
library = (
|
||||||
self.hidden_library if widget == self.hidden_search_entry else self.library
|
self.hidden_library if widget == self.hidden_search_entry else self.library
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
<file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
|
<file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
|
||||||
<file preprocess="xml-stripblanks">gtk/game.ui</file>
|
<file preprocess="xml-stripblanks">gtk/game.ui</file>
|
||||||
<file preprocess="xml-stripblanks">gtk/preferences.ui</file>
|
<file preprocess="xml-stripblanks">gtk/preferences.ui</file>
|
||||||
<file preprocess="xml-stripblanks">gtk/details-window.ui</file>
|
<file preprocess="xml-stripblanks">gtk/details-dialog.ui</file>
|
||||||
<file alias="style.css">gtk/style.css</file>
|
<file alias="style.css">gtk/style.css</file>
|
||||||
<file alias="style-dark.css">gtk/style-dark.css</file>
|
<file alias="style-dark.css">gtk/style-dark.css</file>
|
||||||
<file>library_placeholder.svg</file>
|
<file>library_placeholder.svg</file>
|
||||||
|
|||||||
145
data/gtk/details-dialog.blp
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
using Gtk 4.0;
|
||||||
|
using Adw 1;
|
||||||
|
|
||||||
|
template $DetailsDialog: Adw.Dialog {
|
||||||
|
content-width: 480;
|
||||||
|
|
||||||
|
Adw.ToolbarView {
|
||||||
|
[top]
|
||||||
|
Adw.HeaderBar HeaderBar {
|
||||||
|
show-start-title-buttons: false;
|
||||||
|
show-end-title-buttons: false;
|
||||||
|
|
||||||
|
[start]
|
||||||
|
Button cancel_button {
|
||||||
|
label: _("Cancel");
|
||||||
|
action-name: "window.close";
|
||||||
|
}
|
||||||
|
|
||||||
|
[end]
|
||||||
|
Button apply_button {
|
||||||
|
styles [
|
||||||
|
"suggested-action"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Adw.PreferencesPage {
|
||||||
|
Adw.PreferencesGroup cover_group {
|
||||||
|
Adw.Clamp cover_clamp {
|
||||||
|
maximum-size: 200;
|
||||||
|
|
||||||
|
Overlay {
|
||||||
|
[overlay]
|
||||||
|
Adw.Spinner spinner {
|
||||||
|
visible: false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Overlay cover_overlay {
|
||||||
|
halign: center;
|
||||||
|
valign: center;
|
||||||
|
|
||||||
|
[overlay]
|
||||||
|
Button cover_button_edit {
|
||||||
|
icon-name: "document-edit-symbolic";
|
||||||
|
tooltip-text: _("New Cover");
|
||||||
|
halign: end;
|
||||||
|
valign: end;
|
||||||
|
margin-bottom: 6;
|
||||||
|
margin-end: 6;
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"circular",
|
||||||
|
"osd"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
[overlay]
|
||||||
|
Revealer cover_button_delete_revealer {
|
||||||
|
transition-type: crossfade;
|
||||||
|
margin-end: 40;
|
||||||
|
|
||||||
|
Button cover_button_delete {
|
||||||
|
icon-name: "user-trash-symbolic";
|
||||||
|
tooltip-text: _("Delete Cover");
|
||||||
|
halign: end;
|
||||||
|
valign: end;
|
||||||
|
margin-bottom: 6;
|
||||||
|
margin-end: 6;
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"circular",
|
||||||
|
"osd"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Picture cover {
|
||||||
|
width-request: 200;
|
||||||
|
height-request: 300;
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"card"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Adw.PreferencesGroup {
|
||||||
|
Adw.EntryRow name {
|
||||||
|
title: _("Title");
|
||||||
|
}
|
||||||
|
|
||||||
|
Adw.EntryRow developer {
|
||||||
|
title: _("Developer (optional)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Adw.PreferencesGroup {
|
||||||
|
Adw.EntryRow executable {
|
||||||
|
title: _("Executable");
|
||||||
|
|
||||||
|
[suffix]
|
||||||
|
Button file_chooser_button {
|
||||||
|
valign: center;
|
||||||
|
icon-name: "document-open-symbolic";
|
||||||
|
tooltip-text: _("Select File");
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"flat",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
[suffix]
|
||||||
|
MenuButton exec_info_button {
|
||||||
|
valign: center;
|
||||||
|
icon-name: "help-about-symbolic";
|
||||||
|
tooltip-text: _("More Info");
|
||||||
|
|
||||||
|
popover: Popover exec_info_popover {
|
||||||
|
focusable: true;
|
||||||
|
|
||||||
|
Label exec_info_label {
|
||||||
|
use-markup: true;
|
||||||
|
wrap: true;
|
||||||
|
max-width-chars: 50;
|
||||||
|
halign: center;
|
||||||
|
valign: center;
|
||||||
|
margin-top: 6;
|
||||||
|
margin-bottom: 6;
|
||||||
|
margin-start: 6;
|
||||||
|
margin-end: 6;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"flat"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,152 +0,0 @@
|
|||||||
using Gtk 4.0;
|
|
||||||
using Adw 1;
|
|
||||||
|
|
||||||
template $DetailsWindow : Adw.Window {
|
|
||||||
default-width: 480; // Same as Nautilus' properties window
|
|
||||||
default-height: -1;
|
|
||||||
modal: true;
|
|
||||||
|
|
||||||
ShortcutController {
|
|
||||||
Shortcut {
|
|
||||||
trigger: "Escape";
|
|
||||||
action: "action(window.close)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Adw.ToolbarView {
|
|
||||||
|
|
||||||
[top]
|
|
||||||
Adw.HeaderBar HeaderBar {
|
|
||||||
show-start-title-buttons: false;
|
|
||||||
show-end-title-buttons: false;
|
|
||||||
|
|
||||||
[start]
|
|
||||||
Button cancel_button {
|
|
||||||
label: _("Cancel");
|
|
||||||
action-name: "window.close";
|
|
||||||
}
|
|
||||||
|
|
||||||
[end]
|
|
||||||
Button apply_button {
|
|
||||||
styles [
|
|
||||||
"suggested-action"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Adw.PreferencesPage {
|
|
||||||
Adw.PreferencesGroup cover_group {
|
|
||||||
Adw.Clamp cover_clamp {
|
|
||||||
maximum-size: 200;
|
|
||||||
Overlay {
|
|
||||||
[overlay]
|
|
||||||
Spinner spinner {
|
|
||||||
margin-start: 72;
|
|
||||||
margin-end: 72;
|
|
||||||
}
|
|
||||||
|
|
||||||
Overlay cover_overlay {
|
|
||||||
halign: center;
|
|
||||||
valign: center;
|
|
||||||
|
|
||||||
[overlay]
|
|
||||||
Button cover_button_edit {
|
|
||||||
icon-name: "document-edit-symbolic";
|
|
||||||
tooltip-text: _("New Cover");
|
|
||||||
halign: end;
|
|
||||||
valign: end;
|
|
||||||
margin-bottom: 6;
|
|
||||||
margin-end: 6;
|
|
||||||
|
|
||||||
styles [
|
|
||||||
"circular", "osd"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
[overlay]
|
|
||||||
Revealer cover_button_delete_revealer {
|
|
||||||
transition-type: crossfade;
|
|
||||||
margin-end: 40;
|
|
||||||
|
|
||||||
Button cover_button_delete {
|
|
||||||
icon-name: "user-trash-symbolic";
|
|
||||||
tooltip-text: _("Delete Cover");
|
|
||||||
halign: end;
|
|
||||||
valign: end;
|
|
||||||
margin-bottom: 6;
|
|
||||||
margin-end: 6;
|
|
||||||
|
|
||||||
styles [
|
|
||||||
"circular", "osd"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Picture cover {
|
|
||||||
width-request: 200;
|
|
||||||
height-request: 300;
|
|
||||||
|
|
||||||
styles [
|
|
||||||
"card"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Adw.PreferencesGroup {
|
|
||||||
Adw.EntryRow name {
|
|
||||||
title: _("Title");
|
|
||||||
}
|
|
||||||
Adw.EntryRow developer {
|
|
||||||
title: _("Developer (optional)");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Adw.PreferencesGroup {
|
|
||||||
Adw.EntryRow executable {
|
|
||||||
title: _("Executable");
|
|
||||||
|
|
||||||
[suffix]
|
|
||||||
Button file_chooser_button {
|
|
||||||
valign: center;
|
|
||||||
icon-name: "document-open-symbolic";
|
|
||||||
tooltip-text: _("Select File");
|
|
||||||
|
|
||||||
styles [
|
|
||||||
"flat",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
[suffix]
|
|
||||||
MenuButton exec_info_button {
|
|
||||||
valign: center;
|
|
||||||
icon-name: "help-about-symbolic";
|
|
||||||
tooltip-text: _("More Info");
|
|
||||||
|
|
||||||
popover: Popover exec_info_popover {
|
|
||||||
focusable: true;
|
|
||||||
|
|
||||||
Label exec_info_label {
|
|
||||||
use-markup: true;
|
|
||||||
wrap: true;
|
|
||||||
max-width-chars: 50;
|
|
||||||
halign: center;
|
|
||||||
valign: center;
|
|
||||||
margin-top: 6;
|
|
||||||
margin-bottom: 6;
|
|
||||||
margin-start: 6;
|
|
||||||
margin-end: 6;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
styles [
|
|
||||||
"flat"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -8,6 +8,7 @@ template $Game : Box {
|
|||||||
|
|
||||||
Adw.Clamp {
|
Adw.Clamp {
|
||||||
maximum-size: 200;
|
maximum-size: 200;
|
||||||
|
unit: px;
|
||||||
|
|
||||||
Overlay {
|
Overlay {
|
||||||
[overlay]
|
[overlay]
|
||||||
@@ -63,9 +64,8 @@ template $Game : Box {
|
|||||||
|
|
||||||
Overlay {
|
Overlay {
|
||||||
[overlay]
|
[overlay]
|
||||||
Spinner spinner {
|
Adw.Spinner spinner {
|
||||||
margin-start: 72;
|
visible: false;
|
||||||
margin-end: 72;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Picture cover {
|
Picture cover {
|
||||||
@@ -98,38 +98,16 @@ template $Game : Box {
|
|||||||
|
|
||||||
menu game_options {
|
menu game_options {
|
||||||
section {
|
section {
|
||||||
item {
|
item (_("Edit"), "app.edit_game")
|
||||||
label: _("Edit");
|
item (_("Hide"), "app.hide_game")
|
||||||
action: "app.edit_game";
|
item (_("Remove"), "app.remove_game")
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
|
||||||
label: _("Hide");
|
|
||||||
action: "app.hide_game";
|
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
|
||||||
label: _("Remove");
|
|
||||||
action: "app.remove_game";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
menu hidden_game_options {
|
menu hidden_game_options {
|
||||||
section {
|
section {
|
||||||
item {
|
item (_("Edit"), "app.edit_game")
|
||||||
label: _("Edit");
|
item (_("Unhide"), "app.hide_game")
|
||||||
action: "app.edit_game";
|
item (_("Remove"), "app.remove_game")
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
|
||||||
label: _("Unhide");
|
|
||||||
action: "app.hide_game";
|
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
|
||||||
label: _("Remove");
|
|
||||||
action: "app.remove_game";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,23 +10,18 @@ ShortcutsWindow help_overlay {
|
|||||||
ShortcutsGroup {
|
ShortcutsGroup {
|
||||||
title: _("General");
|
title: _("General");
|
||||||
|
|
||||||
ShortcutsShortcut {
|
|
||||||
title: _("Quit");
|
|
||||||
action-name: "app.quit";
|
|
||||||
}
|
|
||||||
|
|
||||||
ShortcutsShortcut {
|
ShortcutsShortcut {
|
||||||
title: _("Search");
|
title: _("Search");
|
||||||
action-name: "win.toggle_search";
|
action-name: "win.toggle_search";
|
||||||
}
|
}
|
||||||
|
|
||||||
ShortcutsShortcut {
|
ShortcutsShortcut {
|
||||||
title: _("Show preferences");
|
title: _("Preferences");
|
||||||
action-name: "app.preferences";
|
action-name: "app.preferences";
|
||||||
}
|
}
|
||||||
|
|
||||||
ShortcutsShortcut {
|
ShortcutsShortcut {
|
||||||
title: _("Shortcuts");
|
title: _("Keyboard Shortcuts");
|
||||||
action-name: "win.show-help-overlay";
|
action-name: "win.show-help-overlay";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,7 +31,17 @@ ShortcutsWindow help_overlay {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ShortcutsShortcut {
|
ShortcutsShortcut {
|
||||||
title: _("Open menu");
|
title: _("Quit");
|
||||||
|
action-name: "app.quit";
|
||||||
|
}
|
||||||
|
|
||||||
|
ShortcutsShortcut {
|
||||||
|
title: _("Toggle Sidebar");
|
||||||
|
action-name: "win.show_sidebar";
|
||||||
|
}
|
||||||
|
|
||||||
|
ShortcutsShortcut {
|
||||||
|
title: _("Main Menu");
|
||||||
action-name: "win.open_menu";
|
action-name: "win.open_menu";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -45,22 +50,22 @@ ShortcutsWindow help_overlay {
|
|||||||
title: _("Games");
|
title: _("Games");
|
||||||
|
|
||||||
ShortcutsShortcut {
|
ShortcutsShortcut {
|
||||||
title: _("Add new game");
|
title: _("Add Game");
|
||||||
action-name: "app.add_game";
|
action-name: "app.add_game";
|
||||||
}
|
}
|
||||||
|
|
||||||
ShortcutsShortcut {
|
ShortcutsShortcut {
|
||||||
title: _("Import games");
|
title: _("Import");
|
||||||
action-name: "app.import";
|
action-name: "app.import";
|
||||||
}
|
}
|
||||||
|
|
||||||
ShortcutsShortcut {
|
ShortcutsShortcut {
|
||||||
title: _("Show hidden games");
|
title: _("Show Hidden Games");
|
||||||
action-name: "win.show_hidden";
|
action-name: "win.show_hidden";
|
||||||
}
|
}
|
||||||
|
|
||||||
ShortcutsShortcut {
|
ShortcutsShortcut {
|
||||||
title: _("Remove game");
|
title: _("Remove Game");
|
||||||
action-name: "app.remove_game_details_view";
|
action-name: "app.remove_game_details_view";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
using Gtk 4.0;
|
using Gtk 4.0;
|
||||||
using Adw 1;
|
using Adw 1;
|
||||||
|
|
||||||
template $PreferencesWindow : Adw.PreferencesWindow {
|
template $CartridgesPreferences: Adw.PreferencesDialog {
|
||||||
|
search-enabled: true;
|
||||||
|
|
||||||
Adw.PreferencesPage general_page {
|
Adw.PreferencesPage general_page {
|
||||||
name: "general";
|
name: "general";
|
||||||
@@ -32,36 +33,25 @@ template $PreferencesWindow : Adw.PreferencesWindow {
|
|||||||
|
|
||||||
Adw.PreferencesGroup danger_zone_group {
|
Adw.PreferencesGroup danger_zone_group {
|
||||||
title: _("Danger Zone");
|
title: _("Danger Zone");
|
||||||
|
separate-rows: true;
|
||||||
|
|
||||||
Adw.ActionRow {
|
Adw.ButtonRow remove_all_games_button_row {
|
||||||
title: _("Remove All Games");
|
title: _("Remove All Games");
|
||||||
|
|
||||||
Button remove_all_games_button {
|
|
||||||
label: _("Remove");
|
|
||||||
valign: center;
|
|
||||||
|
|
||||||
styles [
|
styles [
|
||||||
"destructive-action",
|
"destructive-action"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Adw.ActionRow reset_action_row {
|
Adw.ButtonRow reset_button_row {
|
||||||
title: "Reset App";
|
title: _("Reset App");
|
||||||
subtitle: "Completely resets and quits Cartridges";
|
|
||||||
visible: false;
|
|
||||||
|
|
||||||
Button reset_button {
|
|
||||||
label: "Reset";
|
|
||||||
valign: center;
|
|
||||||
|
|
||||||
styles [
|
styles [
|
||||||
"destructive-action",
|
"destructive-action"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Adw.PreferencesPage import_page {
|
Adw.PreferencesPage import_page {
|
||||||
name: "import";
|
name: "import";
|
||||||
@@ -71,6 +61,10 @@ template $PreferencesWindow : Adw.PreferencesWindow {
|
|||||||
Adw.PreferencesGroup import_behavior_group {
|
Adw.PreferencesGroup import_behavior_group {
|
||||||
title: _("Behavior");
|
title: _("Behavior");
|
||||||
|
|
||||||
|
Adw.SwitchRow auto_import_switch {
|
||||||
|
title: _("Import Games Automatically");
|
||||||
|
}
|
||||||
|
|
||||||
Adw.SwitchRow remove_missing_switch {
|
Adw.SwitchRow remove_missing_switch {
|
||||||
title: _("Remove Uninstalled Games");
|
title: _("Remove Uninstalled Games");
|
||||||
}
|
}
|
||||||
@@ -78,21 +72,32 @@ template $PreferencesWindow : Adw.PreferencesWindow {
|
|||||||
|
|
||||||
Adw.PreferencesGroup sources_group {
|
Adw.PreferencesGroup sources_group {
|
||||||
title: _("Sources");
|
title: _("Sources");
|
||||||
|
separate-rows: true;
|
||||||
|
|
||||||
Adw.ExpanderRow steam_expander_row {
|
Adw.ExpanderRow steam_expander_row {
|
||||||
title: _("Steam");
|
title: _("Steam");
|
||||||
show-enable-switch: true;
|
show-enable-switch: true;
|
||||||
|
|
||||||
|
[prefix]
|
||||||
|
Image {
|
||||||
|
icon-name: "steam-source-symbolic";
|
||||||
|
}
|
||||||
|
|
||||||
Adw.ActionRow steam_data_action_row {
|
Adw.ActionRow steam_data_action_row {
|
||||||
title: _("Install Location");
|
title: _("Install Location");
|
||||||
|
|
||||||
Button steam_data_file_chooser_button {
|
Button steam_data_file_chooser_button {
|
||||||
icon-name: "folder-symbolic";
|
icon-name: "folder-symbolic";
|
||||||
valign: center;
|
valign: center;
|
||||||
|
|
||||||
styles [
|
styles [
|
||||||
"flat"
|
"flat"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"property"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,29 +105,27 @@ template $PreferencesWindow : Adw.PreferencesWindow {
|
|||||||
title: _("Lutris");
|
title: _("Lutris");
|
||||||
show-enable-switch: true;
|
show-enable-switch: true;
|
||||||
|
|
||||||
|
[prefix]
|
||||||
|
Image {
|
||||||
|
icon-name: "lutris-source-symbolic";
|
||||||
|
}
|
||||||
|
|
||||||
Adw.ActionRow lutris_data_action_row {
|
Adw.ActionRow lutris_data_action_row {
|
||||||
title: _("Install Location");
|
title: _("Install Location");
|
||||||
|
|
||||||
Button lutris_data_file_chooser_button {
|
Button lutris_data_file_chooser_button {
|
||||||
icon-name: "folder-symbolic";
|
icon-name: "folder-symbolic";
|
||||||
valign: center;
|
valign: center;
|
||||||
|
|
||||||
styles [
|
styles [
|
||||||
"flat"
|
"flat"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Adw.ActionRow lutris_cache_action_row {
|
|
||||||
title: _("Cache Location");
|
|
||||||
|
|
||||||
Button lutris_cache_file_chooser_button {
|
|
||||||
icon-name: "folder-symbolic";
|
|
||||||
valign: center;
|
|
||||||
styles [
|
styles [
|
||||||
"flat"
|
"property"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Adw.SwitchRow lutris_import_steam_switch {
|
Adw.SwitchRow lutris_import_steam_switch {
|
||||||
title: _("Import Steam Games");
|
title: _("Import Steam Games");
|
||||||
@@ -137,16 +140,26 @@ template $PreferencesWindow : Adw.PreferencesWindow {
|
|||||||
title: _("Heroic");
|
title: _("Heroic");
|
||||||
show-enable-switch: true;
|
show-enable-switch: true;
|
||||||
|
|
||||||
|
[prefix]
|
||||||
|
Image {
|
||||||
|
icon-name: "heroic-source-symbolic";
|
||||||
|
}
|
||||||
|
|
||||||
Adw.ActionRow heroic_config_action_row {
|
Adw.ActionRow heroic_config_action_row {
|
||||||
title: _("Install Location");
|
title: _("Install Location");
|
||||||
|
|
||||||
Button heroic_config_file_chooser_button {
|
Button heroic_config_file_chooser_button {
|
||||||
icon-name: "folder-symbolic";
|
icon-name: "folder-symbolic";
|
||||||
valign: center;
|
valign: center;
|
||||||
|
|
||||||
styles [
|
styles [
|
||||||
"flat"
|
"flat"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"property"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
Adw.SwitchRow heroic_import_epic_switch {
|
Adw.SwitchRow heroic_import_epic_switch {
|
||||||
@@ -170,16 +183,26 @@ template $PreferencesWindow : Adw.PreferencesWindow {
|
|||||||
title: _("Bottles");
|
title: _("Bottles");
|
||||||
show-enable-switch: true;
|
show-enable-switch: true;
|
||||||
|
|
||||||
|
[prefix]
|
||||||
|
Image {
|
||||||
|
icon-name: "bottles-source-symbolic";
|
||||||
|
}
|
||||||
|
|
||||||
Adw.ActionRow bottles_data_action_row {
|
Adw.ActionRow bottles_data_action_row {
|
||||||
title: _("Install Location");
|
title: _("Install Location");
|
||||||
|
|
||||||
Button bottles_data_file_chooser_button {
|
Button bottles_data_file_chooser_button {
|
||||||
icon-name: "folder-symbolic";
|
icon-name: "folder-symbolic";
|
||||||
valign: center;
|
valign: center;
|
||||||
|
|
||||||
styles [
|
styles [
|
||||||
"flat"
|
"flat"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"property"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,16 +210,26 @@ template $PreferencesWindow : Adw.PreferencesWindow {
|
|||||||
title: _("itch");
|
title: _("itch");
|
||||||
show-enable-switch: true;
|
show-enable-switch: true;
|
||||||
|
|
||||||
|
[prefix]
|
||||||
|
Image {
|
||||||
|
icon-name: "itch-source-symbolic";
|
||||||
|
}
|
||||||
|
|
||||||
Adw.ActionRow itch_config_action_row {
|
Adw.ActionRow itch_config_action_row {
|
||||||
title: _("Install Location");
|
title: _("Install Location");
|
||||||
|
|
||||||
Button itch_config_file_chooser_button {
|
Button itch_config_file_chooser_button {
|
||||||
icon-name: "folder-symbolic";
|
icon-name: "folder-symbolic";
|
||||||
valign: center;
|
valign: center;
|
||||||
|
|
||||||
styles [
|
styles [
|
||||||
"flat"
|
"flat"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"property"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,16 +237,26 @@ template $PreferencesWindow : Adw.PreferencesWindow {
|
|||||||
title: _("Legendary");
|
title: _("Legendary");
|
||||||
show-enable-switch: true;
|
show-enable-switch: true;
|
||||||
|
|
||||||
|
[prefix]
|
||||||
|
Image {
|
||||||
|
icon-name: "legendary-source-symbolic";
|
||||||
|
}
|
||||||
|
|
||||||
Adw.ActionRow legendary_config_action_row {
|
Adw.ActionRow legendary_config_action_row {
|
||||||
title: _("Install Location");
|
title: _("Install Location");
|
||||||
|
|
||||||
Button legendary_config_file_chooser_button {
|
Button legendary_config_file_chooser_button {
|
||||||
icon-name: "folder-symbolic";
|
icon-name: "folder-symbolic";
|
||||||
valign: center;
|
valign: center;
|
||||||
|
|
||||||
styles [
|
styles [
|
||||||
"flat"
|
"flat"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"property"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,16 +264,26 @@ template $PreferencesWindow : Adw.PreferencesWindow {
|
|||||||
title: _("RetroArch");
|
title: _("RetroArch");
|
||||||
show-enable-switch: true;
|
show-enable-switch: true;
|
||||||
|
|
||||||
|
[prefix]
|
||||||
|
Image {
|
||||||
|
icon-name: "retroarch-source-symbolic";
|
||||||
|
}
|
||||||
|
|
||||||
Adw.ActionRow retroarch_config_action_row {
|
Adw.ActionRow retroarch_config_action_row {
|
||||||
title: _("Install Location");
|
title: _("Install Location");
|
||||||
|
|
||||||
Button retroarch_config_file_chooser_button {
|
Button retroarch_config_file_chooser_button {
|
||||||
icon-name: "folder-symbolic";
|
icon-name: "folder-symbolic";
|
||||||
valign: center;
|
valign: center;
|
||||||
|
|
||||||
styles [
|
styles [
|
||||||
"flat"
|
"flat"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"property"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,16 +291,45 @@ template $PreferencesWindow : Adw.PreferencesWindow {
|
|||||||
title: _("Flatpak");
|
title: _("Flatpak");
|
||||||
show-enable-switch: true;
|
show-enable-switch: true;
|
||||||
|
|
||||||
Adw.ActionRow flatpak_data_action_row {
|
[prefix]
|
||||||
title: _("Install Location");
|
Image {
|
||||||
|
icon-name: "flatpak-source-symbolic";
|
||||||
|
}
|
||||||
|
|
||||||
Button flatpak_data_file_chooser_button {
|
Adw.ActionRow flatpak_system_data_action_row {
|
||||||
|
// The location of the system-wide data directory
|
||||||
|
title: _("System Location");
|
||||||
|
|
||||||
|
Button flatpak_system_data_file_chooser_button {
|
||||||
icon-name: "folder-symbolic";
|
icon-name: "folder-symbolic";
|
||||||
valign: center;
|
valign: center;
|
||||||
|
|
||||||
styles [
|
styles [
|
||||||
"flat"
|
"flat"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"property"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
Adw.ActionRow flatpak_user_data_action_row {
|
||||||
|
// The location of the user-specific data directory
|
||||||
|
title: _("User Location");
|
||||||
|
|
||||||
|
Button flatpak_user_data_file_chooser_button {
|
||||||
|
icon-name: "folder-symbolic";
|
||||||
|
valign: center;
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"flat"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"property"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
Adw.SwitchRow flatpak_import_launchers_switch {
|
Adw.SwitchRow flatpak_import_launchers_switch {
|
||||||
@@ -257,6 +339,11 @@ template $PreferencesWindow : Adw.PreferencesWindow {
|
|||||||
|
|
||||||
Adw.SwitchRow desktop_switch {
|
Adw.SwitchRow desktop_switch {
|
||||||
title: _("Desktop Entries");
|
title: _("Desktop Entries");
|
||||||
|
|
||||||
|
[prefix]
|
||||||
|
Image {
|
||||||
|
icon-name: "user-desktop-symbolic";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -290,5 +377,25 @@ template $PreferencesWindow : Adw.PreferencesWindow {
|
|||||||
title: _("Prefer Animated Images");
|
title: _("Prefer Animated Images");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Adw.PreferencesGroup {
|
||||||
|
Adw.ActionRow {
|
||||||
|
title: _("Update Covers");
|
||||||
|
subtitle: _("Fetch covers for games already in your library");
|
||||||
|
sensitive: bind sgdb_switch.active;
|
||||||
|
|
||||||
|
Stack sgdb_stack {
|
||||||
|
Button sgdb_fetch_button {
|
||||||
|
label: _("Update");
|
||||||
|
valign: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
Adw.Spinner sgdb_spinner {
|
||||||
|
visible: false;
|
||||||
|
valign: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
@define-color accent_color @purple_1;
|
:root {
|
||||||
@define-color accent_bg_color @purple_4;
|
--accent-color: var(--purple-1);
|
||||||
|
--accent-bg-color: var(--purple-4);
|
||||||
|
}
|
||||||
|
|
||||||
#details_view {
|
#details_view {
|
||||||
background-color: black;
|
background-color: black;
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
@define-color accent_color @purple_5;
|
:root {
|
||||||
@define-color accent_bg_color @purple_3;
|
--accent-color: var(--purple-5);
|
||||||
|
--accent-bg-color: var(--purple-3);
|
||||||
|
}
|
||||||
|
|
||||||
#details_view {
|
#details_view {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using Adw 1;
|
|||||||
Adw.StatusPage notice_no_results {
|
Adw.StatusPage notice_no_results {
|
||||||
icon-name: "system-search-symbolic";
|
icon-name: "system-search-symbolic";
|
||||||
title: _("No Games Found");
|
title: _("No Games Found");
|
||||||
description: _("Try a different search.");
|
description: _("Try a different search");
|
||||||
vexpand: true;
|
vexpand: true;
|
||||||
valign: center;
|
valign: center;
|
||||||
}
|
}
|
||||||
@@ -12,14 +12,14 @@ Adw.StatusPage notice_no_results {
|
|||||||
Adw.StatusPage hidden_notice_no_results {
|
Adw.StatusPage hidden_notice_no_results {
|
||||||
icon-name: "system-search-symbolic";
|
icon-name: "system-search-symbolic";
|
||||||
title: _("No Games Found");
|
title: _("No Games Found");
|
||||||
description: _("Try a different search.");
|
description: _("Try a different search");
|
||||||
vexpand: true;
|
vexpand: true;
|
||||||
valign: center;
|
valign: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
Adw.StatusPage notice_empty {
|
Adw.StatusPage notice_empty {
|
||||||
title: _("No Games");
|
title: _("No Games");
|
||||||
description: _("Use the + button to add games.");
|
description: _("Use the + button to add games");
|
||||||
vexpand: true;
|
vexpand: true;
|
||||||
valign: center;
|
valign: center;
|
||||||
|
|
||||||
@@ -38,18 +38,19 @@ Adw.StatusPage notice_empty {
|
|||||||
Adw.StatusPage hidden_notice_empty {
|
Adw.StatusPage hidden_notice_empty {
|
||||||
icon-name: "view-conceal-symbolic";
|
icon-name: "view-conceal-symbolic";
|
||||||
title: _("No Hidden Games");
|
title: _("No Hidden Games");
|
||||||
description: _("Games you hide will appear here.");
|
description: _("Games you hide will appear here");
|
||||||
vexpand: true;
|
vexpand: true;
|
||||||
valign: center;
|
valign: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
template $CartridgesWindow: Adw.ApplicationWindow {
|
template $CartridgesWindow: Adw.ApplicationWindow {
|
||||||
title: _("Cartridges");
|
title: _("Cartridges");
|
||||||
width-request: 281;
|
width-request: 360;
|
||||||
height-request: 100;
|
height-request: 100;
|
||||||
|
|
||||||
Adw.Breakpoint {
|
Adw.Breakpoint {
|
||||||
condition ("max-width: 564px")
|
condition ("max-width: 564px")
|
||||||
|
|
||||||
setters {
|
setters {
|
||||||
overlay_split_view.collapsed: true;
|
overlay_split_view.collapsed: true;
|
||||||
details_view_box.orientation: vertical;
|
details_view_box.orientation: vertical;
|
||||||
@@ -75,9 +76,12 @@ template $CartridgesWindow : Adw.ApplicationWindow {
|
|||||||
title: _("All Games");
|
title: _("All Games");
|
||||||
|
|
||||||
Adw.OverlaySplitView overlay_split_view {
|
Adw.OverlaySplitView overlay_split_view {
|
||||||
|
sidebar-width-fraction: .2;
|
||||||
|
|
||||||
[sidebar]
|
[sidebar]
|
||||||
Adw.NavigationPage {
|
Adw.NavigationPage sidebar_navigation_page {
|
||||||
title: _("Cartridges");
|
title: _("Cartridges");
|
||||||
|
|
||||||
Adw.ToolbarView {
|
Adw.ToolbarView {
|
||||||
[top]
|
[top]
|
||||||
Adw.HeaderBar {
|
Adw.HeaderBar {
|
||||||
@@ -89,6 +93,9 @@ template $CartridgesWindow : Adw.ApplicationWindow {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ScrolledWindow {
|
||||||
|
hscrollbar-policy: never;
|
||||||
|
|
||||||
ListBox sidebar {
|
ListBox sidebar {
|
||||||
Box all_games_row_box {
|
Box all_games_row_box {
|
||||||
margin-top: 12;
|
margin-top: 12;
|
||||||
@@ -100,17 +107,24 @@ template $CartridgesWindow : Adw.ApplicationWindow {
|
|||||||
Image {
|
Image {
|
||||||
icon-name: "view-grid-symbolic";
|
icon-name: "view-grid-symbolic";
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
halign: start;
|
halign: start;
|
||||||
label: _("All Games");
|
label: _("All Games");
|
||||||
|
wrap: true;
|
||||||
|
wrap-mode: char;
|
||||||
}
|
}
|
||||||
|
|
||||||
Label all_games_no_label {
|
Label all_games_no_label {
|
||||||
hexpand: true;
|
hexpand: true;
|
||||||
halign: end;
|
halign: end;
|
||||||
|
|
||||||
styles ["dim-label"]
|
styles [
|
||||||
|
"dim-label"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Box added_row_box {
|
Box added_row_box {
|
||||||
margin-top: 12;
|
margin-top: 12;
|
||||||
margin-bottom: 12;
|
margin-bottom: 12;
|
||||||
@@ -120,47 +134,58 @@ template $CartridgesWindow : Adw.ApplicationWindow {
|
|||||||
Image {
|
Image {
|
||||||
icon-name: "list-add-symbolic";
|
icon-name: "list-add-symbolic";
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
halign: start;
|
halign: start;
|
||||||
label: _("Added");
|
label: _("Added");
|
||||||
margin-end: 6;
|
margin-end: 6;
|
||||||
|
wrap: true;
|
||||||
|
wrap-mode: char;
|
||||||
}
|
}
|
||||||
|
|
||||||
Label added_games_no_label {
|
Label added_games_no_label {
|
||||||
hexpand: true;
|
hexpand: true;
|
||||||
halign: end;
|
halign: end;
|
||||||
margin-end: 6;
|
margin-end: 6;
|
||||||
|
|
||||||
styles ["dim-label"]
|
styles [
|
||||||
|
"dim-label"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ListBoxRow {
|
ListBoxRow {
|
||||||
selectable: false;
|
selectable: false;
|
||||||
activatable: false;
|
activatable: false;
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
label: _("Imported");
|
label: _("Imported");
|
||||||
styles ["heading"]
|
|
||||||
|
styles [
|
||||||
|
"heading"
|
||||||
|
]
|
||||||
|
|
||||||
halign: start;
|
halign: start;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
styles ["navigation-sidebar"]
|
|
||||||
|
styles [
|
||||||
|
"navigation-sidebar"
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Adw.ToolbarView library_view {
|
Adw.ToolbarView library_view {
|
||||||
|
|
||||||
[top]
|
[top]
|
||||||
Adw.HeaderBar header_bar {
|
Adw.HeaderBar header_bar {
|
||||||
|
|
||||||
[start]
|
[start]
|
||||||
Revealer {
|
|
||||||
transition-type: slide_right;
|
|
||||||
reveal-child: bind overlay_split_view.show-sidebar inverted;
|
|
||||||
Button show_sidebar_button {
|
Button show_sidebar_button {
|
||||||
icon-name: "sidebar-show-symbolic";
|
icon-name: "sidebar-show-symbolic";
|
||||||
action-name: "win.show_sidebar";
|
action-name: "win.show_sidebar";
|
||||||
tooltip-text: _("Toggle Sidebar");
|
tooltip-text: _("Toggle Sidebar");
|
||||||
}
|
visible: bind overlay_split_view.show-sidebar inverted;
|
||||||
}
|
}
|
||||||
|
|
||||||
[start]
|
[start]
|
||||||
@@ -195,7 +220,15 @@ template $CartridgesWindow : Adw.ApplicationWindow {
|
|||||||
tightening-threshold: 500;
|
tightening-threshold: 500;
|
||||||
|
|
||||||
SearchEntry search_entry {
|
SearchEntry search_entry {
|
||||||
|
placeholder-text: _("Search");
|
||||||
hexpand: true;
|
hexpand: true;
|
||||||
|
|
||||||
|
ShortcutController {
|
||||||
|
Shortcut {
|
||||||
|
trigger: "Escape";
|
||||||
|
action: "action(win.toggle_search)";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -254,6 +287,7 @@ Adw.NavigationPage hidden_library_page {
|
|||||||
tightening-threshold: 500;
|
tightening-threshold: 500;
|
||||||
|
|
||||||
SearchEntry hidden_search_entry {
|
SearchEntry hidden_search_entry {
|
||||||
|
placeholder-text: _("Search");
|
||||||
hexpand: true;
|
hexpand: true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -290,10 +324,8 @@ Adw.NavigationPage details_page {
|
|||||||
|
|
||||||
[overlay]
|
[overlay]
|
||||||
Adw.ToolbarView details_view_toolbar_view {
|
Adw.ToolbarView details_view_toolbar_view {
|
||||||
|
|
||||||
[top]
|
[top]
|
||||||
Adw.HeaderBar {
|
Adw.HeaderBar {}
|
||||||
}
|
|
||||||
|
|
||||||
ScrolledWindow {
|
ScrolledWindow {
|
||||||
Box details_view_box {
|
Box details_view_box {
|
||||||
@@ -309,9 +341,8 @@ Adw.NavigationPage details_page {
|
|||||||
|
|
||||||
Overlay {
|
Overlay {
|
||||||
[overlay]
|
[overlay]
|
||||||
Spinner details_view_spinner {
|
Adw.Spinner details_view_spinner {
|
||||||
margin-start: 72;
|
visible: false;
|
||||||
margin-end: 72;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Picture details_view_cover {
|
Picture details_view_cover {
|
||||||
@@ -509,66 +540,29 @@ menu primary_menu {
|
|||||||
}
|
}
|
||||||
|
|
||||||
section {
|
section {
|
||||||
item {
|
item (_("Preferences"), "app.preferences")
|
||||||
label: _("Preferences");
|
item (_("Keyboard Shortcuts"), "win.show-help-overlay")
|
||||||
action: "app.preferences";
|
item (_("About Cartridges"), "app.about")
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
|
||||||
label: _("Keyboard Shortcuts");
|
|
||||||
action: "win.show-help-overlay";
|
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
|
||||||
label: _("About Cartridges");
|
|
||||||
action: "app.about";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
menu add_games {
|
menu add_games {
|
||||||
section {
|
section {
|
||||||
item {
|
item (_("Add Game"), "app.add_game")
|
||||||
label: _("Add Game");
|
|
||||||
action: "app.add_game";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
section {
|
section {
|
||||||
item {
|
item (_("Import"), "app.import")
|
||||||
label: _("Import");
|
|
||||||
action: "app.import";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
menu search {
|
menu search {
|
||||||
section {
|
section {
|
||||||
label: "Search on…";
|
label: "Search on…";
|
||||||
|
item (_("IGDB"), "app.igdb_search")
|
||||||
item {
|
item (_("SteamGridDB"), "app.sgdb_search")
|
||||||
label: "IGDB";
|
item (_("ProtonDB"), "app.protondb_search")
|
||||||
action: "app.igdb_search";
|
item (_("Lutris"), "app.lutris_search")
|
||||||
}
|
item (_("HowLongToBeat"), "app.hltb_search")
|
||||||
|
|
||||||
item {
|
|
||||||
label: "SteamGridDB";
|
|
||||||
action: "app.sgdb_search";
|
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
|
||||||
label: "ProtonDB";
|
|
||||||
action: "app.protondb_search";
|
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
|
||||||
label: "Lutris";
|
|
||||||
action: "app.lutris_search";
|
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
|
||||||
label: "HowLongToBeat";
|
|
||||||
action: "app.hltb_search";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 618 B After Width: | Height: | Size: 618 B |
|
Before Width: | Height: | Size: 618 B After Width: | Height: | Size: 618 B |
@@ -1,11 +1,11 @@
|
|||||||
scalable_dir = join_paths('hicolor', 'scalable', 'apps')
|
scalable_dir = join_paths('hicolor', 'scalable', 'apps')
|
||||||
install_data(
|
install_data(
|
||||||
join_paths(scalable_dir, ('@0@.svg').format(app_id)),
|
join_paths(scalable_dir, ('@0@.svg').format(app_id)),
|
||||||
install_dir: join_paths(get_option('datadir'), 'icons', scalable_dir)
|
install_dir: join_paths(get_option('datadir'), 'icons', scalable_dir),
|
||||||
)
|
)
|
||||||
|
|
||||||
symbolic_dir = join_paths('hicolor', 'symbolic', 'apps')
|
symbolic_dir = join_paths('hicolor', 'symbolic', 'apps')
|
||||||
install_data(
|
install_data(
|
||||||
join_paths(symbolic_dir, ('@0@-symbolic.svg').format(app_id)),
|
join_paths(symbolic_dir, ('@0@-symbolic.svg').format(app_id)),
|
||||||
install_dir: join_paths(get_option('datadir'), 'icons', symbolic_dir)
|
install_dir: join_paths(get_option('datadir'), 'icons', symbolic_dir),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,20 +1,28 @@
|
|||||||
blueprints = custom_target('blueprints',
|
blueprints = custom_target(
|
||||||
|
'blueprints',
|
||||||
input: files(
|
input: files(
|
||||||
'gtk/help-overlay.blp',
|
'gtk/details-dialog.blp',
|
||||||
'gtk/window.blp',
|
|
||||||
'gtk/game.blp',
|
'gtk/game.blp',
|
||||||
|
'gtk/help-overlay.blp',
|
||||||
'gtk/preferences.blp',
|
'gtk/preferences.blp',
|
||||||
'gtk/details-window.blp'
|
'gtk/window.blp',
|
||||||
),
|
),
|
||||||
output: '.',
|
output: '.',
|
||||||
command: [find_program('blueprint-compiler'), 'batch-compile', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@'],
|
command: [
|
||||||
|
find_program('blueprint-compiler'),
|
||||||
|
'batch-compile',
|
||||||
|
'@OUTPUT@',
|
||||||
|
'@CURRENT_SOURCE_DIR@',
|
||||||
|
'@INPUT@',
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
gnome.compile_resources('cartridges',
|
gnome.compile_resources(
|
||||||
|
'cartridges',
|
||||||
configure_file(
|
configure_file(
|
||||||
input: 'cartridges.gresource.xml.in',
|
input: 'cartridges.gresource.xml.in',
|
||||||
output: 'cartridges.gresource.xml',
|
output: 'cartridges.gresource.xml',
|
||||||
configuration: conf
|
configuration: conf,
|
||||||
),
|
),
|
||||||
gresource_bundle: true,
|
gresource_bundle: true,
|
||||||
install: true,
|
install: true,
|
||||||
@@ -22,55 +30,86 @@ gnome.compile_resources('cartridges',
|
|||||||
dependencies: blueprints,
|
dependencies: blueprints,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if host_machine.system() == 'windows'
|
||||||
|
desktop_file = configure_file(
|
||||||
|
input: 'page.kramo.Cartridges.desktop.in',
|
||||||
|
output: app_id + '.desktop.in',
|
||||||
|
configuration: conf,
|
||||||
|
install: true,
|
||||||
|
install_dir: join_paths(get_option('datadir'), 'applications'),
|
||||||
|
)
|
||||||
|
else
|
||||||
desktop_file = i18n.merge_file(
|
desktop_file = i18n.merge_file(
|
||||||
input: configure_file(
|
input: configure_file(
|
||||||
input: 'hu.kramo.Cartridges.desktop.in',
|
input: 'page.kramo.Cartridges.desktop.in',
|
||||||
output: app_id + '.desktop.in',
|
output: app_id + '.desktop.in',
|
||||||
configuration: conf
|
configuration: conf,
|
||||||
),
|
),
|
||||||
output: app_id + '.desktop',
|
output: app_id + '.desktop',
|
||||||
type: 'desktop',
|
type: 'desktop',
|
||||||
po_dir: '../po',
|
po_dir: '../po',
|
||||||
install: true,
|
install: true,
|
||||||
install_dir: join_paths(get_option('datadir'), 'applications')
|
install_dir: join_paths(get_option('datadir'), 'applications'),
|
||||||
)
|
)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if host_machine.system() != 'windows'
|
||||||
desktop_utils = find_program('desktop-file-validate', required: false)
|
desktop_utils = find_program('desktop-file-validate', required: false)
|
||||||
if desktop_utils.found()
|
if desktop_utils.found()
|
||||||
test('Validate desktop file', desktop_utils, args: [desktop_file])
|
test('Validate desktop file', desktop_utils, args: [desktop_file])
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if host_machine.system() == 'windows'
|
||||||
|
appstream_file = configure_file(
|
||||||
|
input: 'page.kramo.Cartridges.metainfo.xml.in',
|
||||||
|
output: app_id + '.metainfo.xml',
|
||||||
|
configuration: conf,
|
||||||
|
install: true,
|
||||||
|
install_dir: join_paths(get_option('datadir'), 'metainfo'),
|
||||||
|
)
|
||||||
|
else
|
||||||
appstream_file = i18n.merge_file(
|
appstream_file = i18n.merge_file(
|
||||||
input: configure_file(
|
input: configure_file(
|
||||||
input: 'hu.kramo.Cartridges.metainfo.xml.in',
|
input: 'page.kramo.Cartridges.metainfo.xml.in',
|
||||||
output: app_id + '.metainfo.xml.in',
|
output: app_id + '.metainfo.xml.in',
|
||||||
configuration: conf
|
configuration: conf,
|
||||||
),
|
),
|
||||||
output: app_id + '.metainfo.xml',
|
output: app_id + '.metainfo.xml',
|
||||||
po_dir: '../po',
|
po_dir: '../po',
|
||||||
install: true,
|
install: true,
|
||||||
install_dir: join_paths(get_option('datadir'), 'metainfo')
|
install_dir: join_paths(get_option('datadir'), 'metainfo'),
|
||||||
)
|
)
|
||||||
|
endif
|
||||||
|
|
||||||
appstream_util = find_program('appstream-util', required: false)
|
if host_machine.system() != 'windows'
|
||||||
if appstream_util.found()
|
appstreamcli = find_program('appstreamcli', required: false)
|
||||||
test('Validate appstream file', appstream_util, args: ['validate', appstream_file])
|
if appstreamcli.found()
|
||||||
|
test(
|
||||||
|
'Validate appstream file',
|
||||||
|
appstreamcli,
|
||||||
|
args: ['validate', '--no-net', '--explain', appstream_file],
|
||||||
|
workdir: meson.current_build_dir(),
|
||||||
|
)
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
install_data(
|
install_data(
|
||||||
configure_file(
|
configure_file(
|
||||||
input: 'hu.kramo.Cartridges.gschema.xml.in',
|
input: 'page.kramo.Cartridges.gschema.xml.in',
|
||||||
output: app_id + '.gschema.xml',
|
output: app_id + '.gschema.xml',
|
||||||
configuration: conf
|
configuration: conf,
|
||||||
),
|
),
|
||||||
install_dir: join_paths(get_option('datadir'), 'glib-2.0/schemas')
|
install_dir: join_paths(get_option('datadir'), 'glib-2.0/schemas'),
|
||||||
)
|
)
|
||||||
|
|
||||||
compile_schemas = find_program('glib-compile-schemas', required: false)
|
compile_schemas = find_program('glib-compile-schemas', required: false)
|
||||||
if compile_schemas.found()
|
if compile_schemas.found()
|
||||||
test('Validate schema file',
|
test(
|
||||||
|
'Validate schema file',
|
||||||
compile_schemas,
|
compile_schemas,
|
||||||
args: ['--strict', '--dry-run', meson.current_source_dir()])
|
args: ['--strict', '--dry-run', meson.current_source_dir()],
|
||||||
|
)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
subdir('icons')
|
subdir('icons')
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
<schemalist gettext-domain="cartridges">
|
<schemalist gettext-domain="cartridges">
|
||||||
|
|
||||||
<schema id="@APP_ID@" path="@PREFIX@/">
|
<schema id="@APP_ID@" path="@PREFIX@/">
|
||||||
|
<key name="auto-import" type="b">
|
||||||
|
<default>false</default>
|
||||||
|
</key>
|
||||||
<key name="exit-after-launch" type="b">
|
<key name="exit-after-launch" type="b">
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
</key>
|
</key>
|
||||||
@@ -83,9 +86,12 @@
|
|||||||
<key name="flatpak" type="b">
|
<key name="flatpak" type="b">
|
||||||
<default>true</default>
|
<default>true</default>
|
||||||
</key>
|
</key>
|
||||||
<key name="flatpak-location" type="s">
|
<key name="flatpak-system-location" type="s">
|
||||||
<default>"/var/lib/flatpak/"</default>
|
<default>"/var/lib/flatpak/"</default>
|
||||||
</key>
|
</key>
|
||||||
|
<key name="flatpak-user-location" type="s">
|
||||||
|
<default>"~/.local/share/flatpak/"</default>
|
||||||
|
</key>
|
||||||
<key name="flatpak-import-launchers" type="b">
|
<key name="flatpak-import-launchers" type="b">
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
</key>
|
</key>
|
||||||
@@ -124,7 +130,7 @@
|
|||||||
<choice value="oldest" />
|
<choice value="oldest" />
|
||||||
<choice value="last_played" />
|
<choice value="last_played" />
|
||||||
</choices>
|
</choices>
|
||||||
<default>"a-z"</default>
|
<default>"last_played"</default>
|
||||||
</key>
|
</key>
|
||||||
<key name="show-sidebar" type="b">
|
<key name="show-sidebar" type="b">
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<component type="desktop-application">
|
<component type="desktop-application">
|
||||||
<id>@APP_ID@</id>
|
<id>@APP_ID@</id>
|
||||||
|
<replaces>
|
||||||
|
<id>hu.kramo.Cartridges</id>
|
||||||
|
</replaces>
|
||||||
<metadata_license>CC0-1.0</metadata_license>
|
<metadata_license>CC0-1.0</metadata_license>
|
||||||
<project_license>GPL-3.0-or-later</project_license>
|
<project_license>GPL-3.0-or-later</project_license>
|
||||||
<name>Cartridges</name>
|
<name>Cartridges</name>
|
||||||
@@ -11,19 +14,26 @@
|
|||||||
<url type="homepage">https://github.com/kra-mo/cartridges</url>
|
<url type="homepage">https://github.com/kra-mo/cartridges</url>
|
||||||
<url type="bugtracker">https://github.com/kra-mo/cartridges/issues</url>
|
<url type="bugtracker">https://github.com/kra-mo/cartridges/issues</url>
|
||||||
<url type="translate">https://hosted.weblate.org/engage/cartridges/</url>
|
<url type="translate">https://hosted.weblate.org/engage/cartridges/</url>
|
||||||
<url type="contact">https://www.kramo.hu/about/</url>
|
<url type="contact">https://www.kramo.page/about/</url>
|
||||||
<url type="vcs-browser">https://github.com/kra-mo/cartridges</url>
|
<url type="vcs-browser">https://github.com/kra-mo/cartridges</url>
|
||||||
<url type="contribute">https://github.com/kra-mo/cartridges/blob/main/CONTRIBUTING.md</url>
|
<url type="contribute">https://github.com/kra-mo/cartridges/blob/main/CONTRIBUTING.md</url>
|
||||||
<developer_name translatable="no">kramo</developer_name>
|
<developer id="page.kramo">
|
||||||
|
<name translate="no">kramo</name>
|
||||||
|
</developer>
|
||||||
<launchable type="desktop-id">@APP_ID@.desktop</launchable>
|
<launchable type="desktop-id">@APP_ID@.desktop</launchable>
|
||||||
|
<translation type="gettext">cartridges</translation>
|
||||||
|
<branding>
|
||||||
|
<color type="primary" scheme_preference="light">#d5b0e7</color>
|
||||||
|
<color type="primary" scheme_preference="dark">#501a5c</color>
|
||||||
|
</branding>
|
||||||
<supports>
|
<supports>
|
||||||
<control>pointing</control>
|
<control>pointing</control>
|
||||||
<control>keyboard</control>
|
<control>keyboard</control>
|
||||||
<control>touch</control>
|
<control>touch</control>
|
||||||
</supports>
|
</supports>
|
||||||
<recommends>
|
<requires>
|
||||||
<display_length compare="gt">280</display_length>
|
<display_length compare="ge">360</display_length>
|
||||||
</recommends>
|
</requires>
|
||||||
<screenshots>
|
<screenshots>
|
||||||
<screenshot type="default">
|
<screenshot type="default">
|
||||||
<image>https://raw.githubusercontent.com/kra-mo/cartridges/main/data/screenshots/1.png</image>
|
<image>https://raw.githubusercontent.com/kra-mo/cartridges/main/data/screenshots/1.png</image>
|
||||||
@@ -39,17 +49,68 @@
|
|||||||
</screenshot>
|
</screenshot>
|
||||||
<screenshot>
|
<screenshot>
|
||||||
<image>https://raw.githubusercontent.com/kra-mo/cartridges/main/data/screenshots/4.png</image>
|
<image>https://raw.githubusercontent.com/kra-mo/cartridges/main/data/screenshots/4.png</image>
|
||||||
<caption>All Games</caption>
|
|
||||||
</screenshot>
|
|
||||||
<screenshot>
|
|
||||||
<image>https://raw.githubusercontent.com/kra-mo/cartridges/main/data/screenshots/5.png</image>
|
|
||||||
<caption>Preferences</caption>
|
<caption>Preferences</caption>
|
||||||
</screenshot>
|
</screenshot>
|
||||||
</screenshots>
|
</screenshots>
|
||||||
<content_rating type="oars-1.1" />
|
<content_rating type="oars-1.1" />
|
||||||
<releases>
|
<releases>
|
||||||
|
<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>Fixed incorrect modifiers being used for keyboard shortcuts</li>
|
||||||
|
</ul>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
|
<release version="2.9" date="2024-07-10">
|
||||||
|
<description translate="no">
|
||||||
|
<ul>
|
||||||
|
<li>Cartridges is now available on macOS! You can download it from GitHub.</li>
|
||||||
|
<li>Updated translations</li>
|
||||||
|
</ul>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
|
<release version="2.8" date="2024-03-20">
|
||||||
|
<description translate="no">
|
||||||
|
<ul>
|
||||||
|
<li>The app features new adaptive widgets taking advantage of developments in GNOME 46</li>
|
||||||
|
</ul>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
|
<release version="2.7" date="2023-12-12">
|
||||||
|
<description translate="no">
|
||||||
|
<ul>
|
||||||
|
<li>Flatpaks installed for the user and system-wide ones can now be imported separately</li>
|
||||||
|
</ul>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
|
<release version="2.6" date="2023-10-11">
|
||||||
|
<description translate="no">
|
||||||
|
<p>You can now search your Cartridges library from GNOME!</p>
|
||||||
|
<p>To enable the functionality, go to "Search" in the Settings app and toggle "Cartridges" on.</p>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
|
<release version="2.5" date="2023-10-06">
|
||||||
|
<description translate="no">
|
||||||
|
<ul>
|
||||||
|
<li>Added the ability to refetch covers from SteamGridDB</li>
|
||||||
|
<li>Fixed an issue with fractional scaling</li>
|
||||||
|
<li>Translations since 2.4</li>
|
||||||
|
</ul>
|
||||||
|
<p>The project now accepts donations. Thank you so much if you decide to donate! 💜</p>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
<release version="2.4" date="2023-09-21">
|
<release version="2.4" date="2023-09-21">
|
||||||
<description translatable="no">
|
<description translate="no">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Cartridges now adapts to smaller screen sizes</li>
|
<li>Cartridges now adapts to smaller screen sizes</li>
|
||||||
<li>You can now filter games by import source</li>
|
<li>You can now filter games by import source</li>
|
||||||
@@ -59,7 +120,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
<release version="2.3" date="2023-08-29">
|
<release version="2.3" date="2023-08-29">
|
||||||
<description translatable="no">
|
<description translate="no">
|
||||||
<ul>
|
<ul>
|
||||||
<li>New import source: desktop entries</li>
|
<li>New import source: desktop entries</li>
|
||||||
<li>Added the ability to pick executables via the file picker</li>
|
<li>Added the ability to pick executables via the file picker</li>
|
||||||
@@ -69,7 +130,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
<release version="2.2" date="2023-08-17">
|
<release version="2.2" date="2023-08-17">
|
||||||
<description translatable="no">
|
<description translate="no">
|
||||||
<ul>
|
<ul>
|
||||||
<li>New import source: RetroArch</li>
|
<li>New import source: RetroArch</li>
|
||||||
<li>Added the option to automatically remove uninstalled games on import</li>
|
<li>Added the option to automatically remove uninstalled games on import</li>
|
||||||
@@ -80,7 +141,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
<release version="2.1" date="2023-07-25">
|
<release version="2.1" date="2023-07-25">
|
||||||
<description translatable="no">
|
<description translate="no">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Added support for Amazon Games in the Heroic importer</li>
|
<li>Added support for Amazon Games in the Heroic importer</li>
|
||||||
<li>Translations since 2.0</li>
|
<li>Translations since 2.0</li>
|
||||||
@@ -88,7 +149,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
<release version="2.0" date="2023-07-05">
|
<release version="2.0" date="2023-07-05">
|
||||||
<description translatable="no">
|
<description translate="no">
|
||||||
<p>After months of work, Cartridges 2.0 is here:</p>
|
<p>After months of work, Cartridges 2.0 is here:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>New import source: Legendary</li>
|
<li>New import source: Legendary</li>
|
||||||
@@ -102,7 +163,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
<release version="1.5" date="2023-05-23">
|
<release version="1.5" date="2023-05-23">
|
||||||
<description translatable="no">
|
<description translate="no">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Cartridges is now part of GNOME Circle!</li>
|
<li>Cartridges is now part of GNOME Circle!</li>
|
||||||
<li>Extra Steam libraries are now detected automatically</li>
|
<li>Extra Steam libraries are now detected automatically</li>
|
||||||
@@ -113,7 +174,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
<release version="1.4" date="2023-04-16">
|
<release version="1.4" date="2023-04-16">
|
||||||
<description translatable="no">
|
<description translate="no">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Support for animated covers</li>
|
<li>Support for animated covers</li>
|
||||||
<li>Redesigned details view</li>
|
<li>Redesigned details view</li>
|
||||||
@@ -123,7 +184,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
<release version="1.3" date="2023-04-06">
|
<release version="1.3" date="2023-04-06">
|
||||||
<description translatable="no">
|
<description translate="no">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Support for importing game covers from SteamGridDB!</li>
|
<li>Support for importing game covers from SteamGridDB!</li>
|
||||||
<li>New import source: Lutris</li>
|
<li>New import source: Lutris</li>
|
||||||
@@ -135,7 +196,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
<release version="1.2" date="2023-03-30">
|
<release version="1.2" date="2023-03-30">
|
||||||
<description translatable="no">
|
<description translate="no">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Refined the user experience for importing games</li>
|
<li>Refined the user experience for importing games</li>
|
||||||
<li>Added option to remove all games</li>
|
<li>Added option to remove all games</li>
|
||||||
@@ -144,7 +205,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
<release version="1.1" date="2023-03-26">
|
<release version="1.1" date="2023-03-26">
|
||||||
<description translatable="no">
|
<description translate="no">
|
||||||
<ul>
|
<ul>
|
||||||
<li>Added option to launch games by clicking the cover image</li>
|
<li>Added option to launch games by clicking the cover image</li>
|
||||||
<li>Added option to save cover art losslessly</li>
|
<li>Added option to save cover art losslessly</li>
|
||||||
@@ -153,7 +214,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
<release version="1.0" date="2023-03-25">
|
<release version="1.0" date="2023-03-25">
|
||||||
<description translatable="no">
|
<description translate="no">
|
||||||
<p>First stable release</p>
|
<p>First stable release</p>
|
||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
|
Before Width: | Height: | Size: 452 KiB After Width: | Height: | Size: 452 KiB |
|
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 247 KiB |
|
Before Width: | Height: | Size: 623 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 36 KiB |
@@ -35,7 +35,7 @@ Stored as a Unix time stamp.
|
|||||||
|
|
||||||
The executable to run when launching a game.
|
The executable to run when launching a game.
|
||||||
|
|
||||||
If the source has a URL handler, using that is preferred. In that case, the value should be `"xdg-open url://example/url"` for Linux and `"start url://example/url"` for Windows.
|
If the source has a URL handler, using that is preferred. In that case, the value should be `"xdg-open url://example/url"` for Linux, `"start url://example/url"` for Windows and `"open url://example/url"` for macOS.
|
||||||
|
|
||||||
Stored as either a string (preferred) or an argument vector to be passed to the shell through [subprocess.Popen](https://docs.python.org/3/library/subprocess.html#popen-constructor).
|
Stored as either a string (preferred) or an argument vector to be passed to the shell through [subprocess.Popen](https://docs.python.org/3/library/subprocess.html#popen-constructor).
|
||||||
|
|
||||||
|
|||||||
@@ -1,134 +0,0 @@
|
|||||||
{
|
|
||||||
"id" : "hu.kramo.Cartridges.Devel",
|
|
||||||
"runtime" : "org.gnome.Platform",
|
|
||||||
"runtime-version" : "45",
|
|
||||||
"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: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-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" : "blueprint-compiler",
|
|
||||||
"buildsystem" : "meson",
|
|
||||||
"sources" : [
|
|
||||||
{
|
|
||||||
"type" : "git",
|
|
||||||
"url" : "https://gitlab.gnome.org/jwestman/blueprint-compiler",
|
|
||||||
"tag" : "v0.8.1"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"cleanup" : [
|
|
||||||
"*"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "cartridges",
|
|
||||||
"builddir" : true,
|
|
||||||
"buildsystem" : "meson",
|
|
||||||
"config-opts": [
|
|
||||||
"-Dprofile=development"
|
|
||||||
],
|
|
||||||
"sources" : [
|
|
||||||
{
|
|
||||||
"type" : "dir",
|
|
||||||
"path" : ".."
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
41
meson.build
@@ -1,40 +1,57 @@
|
|||||||
project('cartridges',
|
project(
|
||||||
version: '2.4',
|
'cartridges',
|
||||||
|
version: '2.10.1',
|
||||||
meson_version: '>= 0.59.0',
|
meson_version: '>= 0.59.0',
|
||||||
default_options: [ 'warning_level=2', 'werror=false', ],
|
default_options: [
|
||||||
|
'warning_level=2',
|
||||||
|
'werror=false',
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Translations are broken on Windows for multiple reasons
|
||||||
|
# gresources don't work and MSYS2 seems to have also broken the gettext package
|
||||||
|
if host_machine.system() != 'windows'
|
||||||
i18n = import('i18n')
|
i18n = import('i18n')
|
||||||
|
endif
|
||||||
|
|
||||||
gnome = import('gnome')
|
gnome = import('gnome')
|
||||||
python = import('python')
|
python = import('python')
|
||||||
|
|
||||||
|
py_installation = python.find_installation('python3')
|
||||||
|
|
||||||
|
python_dir = join_paths(get_option('prefix'), py_installation.get_install_dir())
|
||||||
pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name())
|
pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name())
|
||||||
|
libexecdir = join_paths(get_option('prefix'), get_option('libexecdir'))
|
||||||
|
|
||||||
profile = get_option('profile')
|
profile = get_option('profile')
|
||||||
if profile == 'development'
|
if profile == 'development'
|
||||||
app_id = 'hu.kramo.Cartridges.Devel'
|
app_id = 'page.kramo.Cartridges.Devel'
|
||||||
prefix = '/hu/kramo/Cartridges/Devel'
|
prefix = '/page/kramo/Cartridges/Devel'
|
||||||
elif profile == 'release'
|
elif profile == 'release'
|
||||||
app_id = 'hu.kramo.Cartridges'
|
app_id = 'page.kramo.Cartridges'
|
||||||
prefix = '/hu/kramo/Cartridges'
|
prefix = '/page/kramo/Cartridges'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
conf = configuration_data()
|
conf = configuration_data()
|
||||||
conf.set('PYTHON', python.find_installation('python3').full_path())
|
conf.set('PYTHON', py_installation.full_path())
|
||||||
conf.set('PYTHON_VERSION', python.find_installation('python3').language_version())
|
conf.set('PYTHON_VERSION', py_installation.language_version())
|
||||||
conf.set('APP_ID', app_id)
|
conf.set('APP_ID', app_id)
|
||||||
conf.set('PREFIX', prefix)
|
conf.set('PREFIX', prefix)
|
||||||
conf.set('VERSION', meson.project_version())
|
conf.set('VERSION', meson.project_version())
|
||||||
conf.set('PROFILE', profile)
|
conf.set('PROFILE', profile)
|
||||||
|
conf.set('TIFF_COMPRESSION', get_option('tiff_compression'))
|
||||||
conf.set('localedir', join_paths(get_option('prefix'), get_option('localedir')))
|
conf.set('localedir', join_paths(get_option('prefix'), get_option('localedir')))
|
||||||
conf.set('pkgdatadir', pkgdatadir)
|
conf.set('pkgdatadir', pkgdatadir)
|
||||||
|
conf.set('libexecdir', libexecdir)
|
||||||
|
|
||||||
subdir('data')
|
subdir('data')
|
||||||
subdir('src')
|
subdir('cartridges')
|
||||||
subdir('po')
|
|
||||||
|
|
||||||
if host_machine.system() == 'windows'
|
if host_machine.system() == 'windows'
|
||||||
subdir('windows')
|
subdir('build-aux/windows')
|
||||||
|
else
|
||||||
|
subdir('search-provider')
|
||||||
|
subdir('po')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
gnome.post_install(
|
gnome.post_install(
|
||||||
|
|||||||
@@ -7,3 +7,12 @@ option(
|
|||||||
],
|
],
|
||||||
value: 'release'
|
value: 'release'
|
||||||
)
|
)
|
||||||
|
option(
|
||||||
|
'tiff_compression',
|
||||||
|
type: 'combo',
|
||||||
|
choices: [
|
||||||
|
'webp',
|
||||||
|
'jpeg',
|
||||||
|
],
|
||||||
|
value: 'webp'
|
||||||
|
)
|
||||||
@@ -20,3 +20,12 @@ sv
|
|||||||
tr
|
tr
|
||||||
el
|
el
|
||||||
cs
|
cs
|
||||||
|
zh_Hans
|
||||||
|
be
|
||||||
|
hr
|
||||||
|
ca
|
||||||
|
ja
|
||||||
|
hi
|
||||||
|
en_GB
|
||||||
|
ie
|
||||||
|
te
|
||||||
|
|||||||
49
po/POTFILES
@@ -1,32 +1,33 @@
|
|||||||
data/hu.kramo.Cartridges.desktop.in
|
data/page.kramo.Cartridges.desktop.in
|
||||||
data/hu.kramo.Cartridges.gschema.xml.in
|
data/page.kramo.Cartridges.gschema.xml.in
|
||||||
data/hu.kramo.Cartridges.metainfo.xml.in
|
data/page.kramo.Cartridges.metainfo.xml.in
|
||||||
|
|
||||||
data/gtk/details-window.blp
|
data/gtk/details-dialog.blp
|
||||||
data/gtk/game.blp
|
data/gtk/game.blp
|
||||||
data/gtk/help-overlay.blp
|
data/gtk/help-overlay.blp
|
||||||
data/gtk/preferences.blp
|
data/gtk/preferences.blp
|
||||||
data/gtk/window.blp
|
data/gtk/window.blp
|
||||||
|
|
||||||
src/main.py
|
cartridges/main.py
|
||||||
src/window.py
|
cartridges/window.py
|
||||||
src/details_window.py
|
cartridges/details_dialog.py
|
||||||
src/game.py
|
cartridges/game.py
|
||||||
src/preferences.py
|
cartridges/preferences.py
|
||||||
|
|
||||||
src/utils/create_dialog.py
|
cartridges/utils/create_dialog.py
|
||||||
src/importer/importer.py
|
|
||||||
src/importer/sources/source.py
|
|
||||||
src/importer/sources/location.py
|
|
||||||
src/importer/sources/location.py
|
|
||||||
src/store/managers/sgdb_manager.py
|
|
||||||
|
|
||||||
src/importer/sources/bottles_source.py
|
cartridges/importer/importer.py
|
||||||
src/importer/sources/desktop_source.py
|
cartridges/importer/source.py
|
||||||
src/importer/sources/flatpak_source.py
|
cartridges/importer/location.py
|
||||||
src/importer/sources/heroic_source.py
|
cartridges/importer/location.py
|
||||||
src/importer/sources/itch_source.py
|
cartridges/importer/bottles_source.py
|
||||||
src/importer/sources/legendary_source.py
|
cartridges/importer/desktop_source.py
|
||||||
src/importer/sources/lutris_source.py
|
cartridges/importer/flatpak_source.py
|
||||||
src/importer/sources/retroarch_source.py
|
cartridges/importer/heroic_source.py
|
||||||
src/importer/sources/steam_source.py
|
cartridges/importer/itch_source.py
|
||||||
|
cartridges/importer/legendary_source.py
|
||||||
|
cartridges/importer/lutris_source.py
|
||||||
|
cartridges/importer/retroarch_source.py
|
||||||
|
cartridges/importer/steam_source.py
|
||||||
|
|
||||||
|
cartridges/store/managers/sgdb_manager.py
|
||||||
|
|||||||
523
po/ar.po
@@ -3,13 +3,14 @@
|
|||||||
# This file is distributed under the same license as the cartridges package.
|
# This file is distributed under the same license as the cartridges package.
|
||||||
# Ali Aljishi <ahj696@hotmail.com>, 2023.
|
# Ali Aljishi <ahj696@hotmail.com>, 2023.
|
||||||
# kramo <contact@kramo.hu>, 2023.
|
# kramo <contact@kramo.hu>, 2023.
|
||||||
|
# Ali-98 <ahj696@hotmail.com>, 2023.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: cartridges\n"
|
"Project-Id-Version: cartridges\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-08-30 10:43+0200\n"
|
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
|
||||||
"PO-Revision-Date: 2023-09-01 19:55+0000\n"
|
"PO-Revision-Date: 2023-12-15 13:10+0000\n"
|
||||||
"Last-Translator: Ali Aljishi <ahj696@hotmail.com>\n"
|
"Last-Translator: Ali-98 <ahj696@hotmail.com>\n"
|
||||||
"Language-Team: Arabic <https://hosted.weblate.org/projects/cartridges/"
|
"Language-Team: Arabic <https://hosted.weblate.org/projects/cartridges/"
|
||||||
"cartridges/ar/>\n"
|
"cartridges/ar/>\n"
|
||||||
"Language: ar\n"
|
"Language: ar\n"
|
||||||
@@ -18,30 +19,31 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||||
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
|
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
|
||||||
"X-Generator: Weblate 5.0.1-dev\n"
|
"X-Generator: Weblate 5.3\n"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:3
|
#: data/page.kramo.Cartridges.desktop.in:3
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
|
#: data/page.kramo.Cartridges.metainfo.xml.in:9
|
||||||
#: data/gtk/window.blp:80
|
#: data/page.kramo.Cartridges.metainfo.xml.in:40 data/gtk/window.blp:47
|
||||||
|
#: data/gtk/window.blp:83
|
||||||
msgid "Cartridges"
|
msgid "Cartridges"
|
||||||
msgstr "خراطيش"
|
msgstr "خراطيش"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:4
|
#: data/page.kramo.Cartridges.desktop.in:4
|
||||||
msgid "Game Launcher"
|
msgid "Game Launcher"
|
||||||
msgstr "مشغِّل ألعاب"
|
msgstr "مشغِّل ألعاب"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:5
|
#: data/page.kramo.Cartridges.desktop.in:5
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:7
|
#: data/page.kramo.Cartridges.metainfo.xml.in:10
|
||||||
msgid "Launch all your games"
|
msgid "Launch all your games"
|
||||||
msgstr "شغِّل كلَّ ألعابك"
|
msgstr "شغِّل كلَّ ألعابك"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:11
|
#: data/page.kramo.Cartridges.desktop.in:11
|
||||||
msgid ""
|
msgid ""
|
||||||
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"لعب;مشغل;ستيم;لوترس;هروك;قوارير;إتش;هيرويك;بوتلز;لجندري;فلاتباك;رتروآرتش;"
|
"لعب;مشغل;ستيم;لوترس;هروك;قوارير;إتش;هيرويك;بوتلز;لجندري;فلاتباك;رتروآرتش;"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
|
#: data/page.kramo.Cartridges.metainfo.xml.in:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cartridges is a simple game launcher for all of your games. It has support "
|
"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 "
|
"for importing games from Steam, Lutris, Heroic and more with no login "
|
||||||
@@ -52,434 +54,440 @@ msgstr ""
|
|||||||
"وبرامج أخرى، وذلك دون تسجيل دخول. ولك ترتيب وإخفاء الألعاب فيه كيفما شئت، "
|
"وبرامج أخرى، وذلك دون تسجيل دخول. ولك ترتيب وإخفاء الألعاب فيه كيفما شئت، "
|
||||||
"وكذلك تستطيع منه تنزيل غُلُف الألعاب من SteamGridDB."
|
"وكذلك تستطيع منه تنزيل غُلُف الألعاب من SteamGridDB."
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:30
|
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:318
|
||||||
msgid "Library"
|
#: cartridges/details_dialog.py:68
|
||||||
msgstr "المكتبة"
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:34
|
|
||||||
msgid "Edit Game Details"
|
|
||||||
msgstr "حرِّر تفاصيل اللعبة"
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
|
|
||||||
#: src/details_window.py:71
|
|
||||||
msgid "Game Details"
|
msgid "Game Details"
|
||||||
msgstr "تفاصيل اللعبة"
|
msgstr "تفاصيل اللعبة"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
|
#: data/page.kramo.Cartridges.metainfo.xml.in:48
|
||||||
#: src/details_window.py:271 src/importer/importer.py:308
|
msgid "Edit Game Details"
|
||||||
#: src/importer/importer.py:359
|
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"
|
msgid "Preferences"
|
||||||
msgstr "التفضيلات"
|
msgstr "التفضيلات"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:25
|
#: data/gtk/details-dialog.blp:15
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "ألغِ"
|
msgstr "ألغِ"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:55
|
#: data/gtk/details-dialog.blp:46
|
||||||
msgid "New Cover"
|
msgid "New Cover"
|
||||||
msgstr "غلاف جديد"
|
msgstr "غلاف جديد"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:73
|
#: data/gtk/details-dialog.blp:65
|
||||||
msgid "Delete Cover"
|
msgid "Delete Cover"
|
||||||
msgstr "احذف الغلاف"
|
msgstr "احذف الغلاف"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
|
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "العنوان"
|
msgstr "العنوان"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:103
|
#: data/gtk/details-dialog.blp:97
|
||||||
msgid "Developer (optional)"
|
msgid "Developer (optional)"
|
||||||
msgstr "المطوِّر (اختياري)"
|
msgstr "المطوِّر (اختياري)"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:108
|
#: data/gtk/details-dialog.blp:103
|
||||||
msgid "Executable"
|
msgid "Executable"
|
||||||
msgstr "ملفُّ التنفيذ"
|
msgstr "ملفُّ التنفيذ"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:114
|
#: data/gtk/details-dialog.blp:109
|
||||||
msgid "Select File"
|
msgid "Select File"
|
||||||
msgstr "اختر ملفًّا"
|
msgstr "اختر ملفًّا"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:125
|
#: data/gtk/details-dialog.blp:120
|
||||||
msgid "More Info"
|
msgid "More Info"
|
||||||
msgstr "معلومات أكثر"
|
msgstr "معلومات أكثر"
|
||||||
|
|
||||||
#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
|
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
|
||||||
msgid "Edit"
|
msgid "Edit"
|
||||||
msgstr "حرِّر"
|
msgstr "حرِّر"
|
||||||
|
|
||||||
#: data/gtk/game.blp:107 src/window.py:348
|
#: data/gtk/game.blp:103 cartridges/window.py:350
|
||||||
msgid "Hide"
|
msgid "Hide"
|
||||||
msgstr "أخفِ"
|
msgstr "أخفِ"
|
||||||
|
|
||||||
#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
|
#: data/gtk/game.blp:104 data/gtk/game.blp:112 data/gtk/window.blp:463
|
||||||
#: data/gtk/window.blp:433
|
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "أزل"
|
msgstr "أزل"
|
||||||
|
|
||||||
#: data/gtk/game.blp:126 src/window.py:350
|
#: data/gtk/game.blp:111 cartridges/window.py:352
|
||||||
msgid "Unhide"
|
msgid "Unhide"
|
||||||
msgstr "اكشف"
|
msgstr "اكشف"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
|
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "عام"
|
msgstr "عام"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:14
|
#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:205 data/gtk/window.blp:221
|
||||||
msgid "Quit"
|
#: data/gtk/window.blp:272 data/gtk/window.blp:288 data/gtk/window.blp:474
|
||||||
msgstr "أنهِ"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
|
|
||||||
#: data/gtk/window.blp:444
|
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "ابحث"
|
msgstr "ابحث"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:24
|
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
|
||||||
msgid "Show preferences"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "أظهر التفضيلات"
|
msgstr "اختصارات لوحة المفاتيح"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:29
|
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
|
||||||
msgid "Shortcuts"
|
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
|
||||||
msgstr "الاختصارات"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
|
|
||||||
#: src/importer/importer.py:383
|
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "تراجع"
|
msgstr "تراجع"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:39
|
#: data/gtk/help-overlay.blp:34
|
||||||
msgid "Open menu"
|
msgid "Quit"
|
||||||
msgstr "افتح القائمة"
|
msgstr "أنهِ"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:45
|
#: 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"
|
msgid "Games"
|
||||||
msgstr "الألعاب"
|
msgstr "الألعاب"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:48
|
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:191 data/gtk/window.blp:550
|
||||||
msgid "Add new game"
|
msgid "Add Game"
|
||||||
msgstr "أضف لعبةً جديدةً"
|
msgstr "أضف لعبةً"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:53
|
#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:113
|
||||||
msgid "Import games"
|
#: data/gtk/window.blp:27 data/gtk/window.blp:554
|
||||||
msgstr "استورد ألعابًا"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:58
|
|
||||||
msgid "Show hidden games"
|
|
||||||
msgstr "أظهر الألعاب المخفية"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:63
|
|
||||||
msgid "Remove game"
|
|
||||||
msgstr "أزل اللعبة"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
|
|
||||||
#: data/gtk/preferences.blp:288
|
|
||||||
msgid "Behavior"
|
|
||||||
msgstr "السلوك"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:15
|
|
||||||
msgid "Exit After Launching Games"
|
|
||||||
msgstr "اخرج بعد بدء الألعاب"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:19
|
|
||||||
msgid "Cover Image Launches Game"
|
|
||||||
msgstr "تبدأ صورة الغلاف اللعبة"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:20
|
|
||||||
msgid "Swaps the behavior of the cover image and the play button"
|
|
||||||
msgstr "يبدِّل سلوك صورة الغلاف وزرِّ «العب»"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:25 src/details_window.py:85
|
|
||||||
msgid "Images"
|
|
||||||
msgstr "الصور"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:28
|
|
||||||
msgid "High Quality Images"
|
|
||||||
msgstr "صور ذات دقَّة عالية"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:29
|
|
||||||
msgid "Save game covers losslessly at the cost of storage"
|
|
||||||
msgstr "احفظ غُلُف الألعاب دون فقد على حساب مساحة التخزين"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:34
|
|
||||||
msgid "Danger Zone"
|
|
||||||
msgstr "منطقة خطر"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:37
|
|
||||||
msgid "Remove All Games"
|
|
||||||
msgstr "أزل كلَّ الألعاب"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
|
|
||||||
msgid "Import"
|
msgid "Import"
|
||||||
msgstr "استورد"
|
msgstr "استورد"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:75
|
#: 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"
|
msgid "Remove Uninstalled Games"
|
||||||
msgstr "أزل الألعاب المحذوفة"
|
msgstr "أزل الألعاب المحذوفة"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:80
|
#: data/gtk/preferences.blp:125
|
||||||
msgid "Sources"
|
msgid "Sources"
|
||||||
msgstr "المصادر"
|
msgstr "المصادر"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
|
#: data/gtk/preferences.blp:128 cartridges/importer/steam_source.py:114
|
||||||
msgid "Steam"
|
msgid "Steam"
|
||||||
msgstr "ستيم"
|
msgstr "ستيم"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
|
#: data/gtk/preferences.blp:137 data/gtk/preferences.blp:164
|
||||||
#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
|
#: data/gtk/preferences.blp:199 data/gtk/preferences.blp:242
|
||||||
#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
|
#: data/gtk/preferences.blp:269 data/gtk/preferences.blp:296
|
||||||
#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
|
#: data/gtk/preferences.blp:323
|
||||||
msgid "Install Location"
|
msgid "Install Location"
|
||||||
msgstr "موضع التثبيت"
|
msgstr "موضع التثبيت"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
|
#: data/gtk/preferences.blp:155 data/gtk/window.blp:564
|
||||||
|
#: cartridges/importer/lutris_source.py:96
|
||||||
msgid "Lutris"
|
msgid "Lutris"
|
||||||
msgstr "لوترس"
|
msgstr "لوترس"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:116
|
#: data/gtk/preferences.blp:181
|
||||||
msgid "Cache Location"
|
|
||||||
msgstr "موضع الذاكرة المؤقتة"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:128
|
|
||||||
msgid "Import Steam Games"
|
msgid "Import Steam Games"
|
||||||
msgstr "استورد ألعابًا من ستيم"
|
msgstr "استورد ألعابًا من ستيم"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:132
|
#: data/gtk/preferences.blp:185
|
||||||
msgid "Import Flatpak Games"
|
msgid "Import Flatpak Games"
|
||||||
msgstr "استورد ألعاب فلاتباك"
|
msgstr "استورد ألعاب فلاتباك"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
|
#: data/gtk/preferences.blp:190 cartridges/importer/heroic_source.py:355
|
||||||
msgid "Heroic"
|
msgid "Heroic"
|
||||||
msgstr "هِرُوِك"
|
msgstr "هِرُوِك"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:153
|
#: data/gtk/preferences.blp:216
|
||||||
msgid "Import Epic Games"
|
msgid "Import Epic Games"
|
||||||
msgstr "استورد ألعاب أَبِك"
|
msgstr "استورد ألعاب أَبِك"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:157
|
#: data/gtk/preferences.blp:220
|
||||||
msgid "Import GOG Games"
|
msgid "Import GOG Games"
|
||||||
msgstr "استورد ألعاب جيأوجي"
|
msgstr "استورد ألعاب جيأوجي"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:161
|
#: data/gtk/preferences.blp:224
|
||||||
msgid "Import Amazon Games"
|
msgid "Import Amazon Games"
|
||||||
msgstr "استورد ألعابًا من أمازون"
|
msgstr "استورد ألعابًا من أمازون"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:165
|
#: data/gtk/preferences.blp:228
|
||||||
msgid "Import Sideloaded Games"
|
msgid "Import Sideloaded Games"
|
||||||
msgstr "استورد ألعابًا مثبَّتةً بغير متجر"
|
msgstr "استورد ألعابًا مثبَّتةً بغير متجر"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
|
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
|
||||||
msgid "Bottles"
|
msgid "Bottles"
|
||||||
msgstr "قوارير"
|
msgstr "قوارير"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
|
#: data/gtk/preferences.blp:260 cartridges/importer/itch_source.py:81
|
||||||
msgid "itch"
|
msgid "itch"
|
||||||
msgstr "إتش"
|
msgstr "إتش"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
|
#: data/gtk/preferences.blp:287 cartridges/importer/legendary_source.py:97
|
||||||
msgid "Legendary"
|
msgid "Legendary"
|
||||||
msgstr "لجندري"
|
msgstr "لجندري"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
|
#: data/gtk/preferences.blp:314 cartridges/importer/retroarch_source.py:142
|
||||||
msgid "RetroArch"
|
msgid "RetroArch"
|
||||||
msgstr "رتروآرتش"
|
msgstr "رتروآرتش"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
|
#: data/gtk/preferences.blp:341 cartridges/importer/flatpak_source.py:143
|
||||||
msgid "Flatpak"
|
msgid "Flatpak"
|
||||||
msgstr "فلاتباك"
|
msgstr "فلاتباك"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:254
|
#. 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"
|
msgid "Import Game Launchers"
|
||||||
msgstr "استورد مشغِّلات ألعاب"
|
msgstr "استورد مشغِّلات ألعاب"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
|
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
|
||||||
msgid "Desktop Entries"
|
msgid "Desktop Entries"
|
||||||
msgstr "مدخلات سطح المكتب"
|
msgstr "مدخلات سطح المكتب"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:276
|
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
|
||||||
msgid "SteamGridDB"
|
msgid "SteamGridDB"
|
||||||
msgstr "SteamGridDB"
|
msgstr "SteamGridDB"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:280
|
#: data/gtk/preferences.blp:407
|
||||||
msgid "Authentication"
|
msgid "Authentication"
|
||||||
msgstr "الاستيثاق"
|
msgstr "الاستيثاق"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:283
|
#: data/gtk/preferences.blp:410
|
||||||
msgid "API Key"
|
msgid "API Key"
|
||||||
msgstr "مفتاح واجهة البرمجة"
|
msgstr "مفتاح واجهة البرمجة"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:291
|
#: data/gtk/preferences.blp:418
|
||||||
msgid "Use SteamGridDB"
|
msgid "Use SteamGridDB"
|
||||||
msgstr "استخدم SteamGridDB"
|
msgstr "استخدم SteamGridDB"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:292
|
#: data/gtk/preferences.blp:419
|
||||||
msgid "Download images when adding or importing games"
|
msgid "Download images when adding or importing games"
|
||||||
msgstr "نزِّل الصور حينما تنزِّل أو تستورد الألعاب"
|
msgstr "نزِّل الصور حينما تنزِّل أو تستورد الألعاب"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:296
|
#: data/gtk/preferences.blp:423
|
||||||
msgid "Prefer Over Official Images"
|
msgid "Prefer Over Official Images"
|
||||||
msgstr "فضِّلها على الصور الرسمية"
|
msgstr "فضِّلها على الصور الرسمية"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:300
|
#: data/gtk/preferences.blp:427
|
||||||
msgid "Prefer Animated Images"
|
msgid "Prefer Animated Images"
|
||||||
msgstr "فضِّل الصور المتحرِّكة"
|
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
|
#: data/gtk/window.blp:6 data/gtk/window.blp:14
|
||||||
msgid "No Games Found"
|
msgid "No Games Found"
|
||||||
msgstr "لم يُعثر على ألعاب"
|
msgstr "لم يُعثر على ألعاب"
|
||||||
|
|
||||||
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
||||||
msgid "Try a different search."
|
msgid "Try a different search"
|
||||||
msgstr "جرِّب بحثًا آخر."
|
msgstr "جرِّب بحثًا آخر"
|
||||||
|
|
||||||
#: data/gtk/window.blp:21
|
#: data/gtk/window.blp:21
|
||||||
msgid "No Games"
|
msgid "No Games"
|
||||||
msgstr "لا توجد ألعاب"
|
msgstr "لا توجد ألعاب"
|
||||||
|
|
||||||
#: data/gtk/window.blp:22
|
#: data/gtk/window.blp:22
|
||||||
msgid "Use the + button to add games."
|
msgid "Use the + button to add games"
|
||||||
msgstr "استخدم زرَّ + لتضيف ألعابًا."
|
msgstr "استخدم زرَّ + لتضيف ألعابًا"
|
||||||
|
|
||||||
#: data/gtk/window.blp:40
|
#: data/gtk/window.blp:40
|
||||||
msgid "No Hidden Games"
|
msgid "No Hidden Games"
|
||||||
msgstr "لا توجد ألعاب مخفية"
|
msgstr "لا توجد ألعاب مخفية"
|
||||||
|
|
||||||
#: data/gtk/window.blp:41
|
#: data/gtk/window.blp:41
|
||||||
msgid "Games you hide will appear here."
|
msgid "Games you hide will appear here"
|
||||||
msgstr "هنا يظهر ما أخفيت من ألعاب."
|
msgstr "هنا يظهر ما أخفيت من ألعاب"
|
||||||
|
|
||||||
#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
|
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Remove All Games"
|
|
||||||
msgid "All Games"
|
msgid "All Games"
|
||||||
msgstr "أزل كلَّ الألعاب"
|
msgstr "كلُّ الألعاب"
|
||||||
|
|
||||||
#: data/gtk/window.blp:88 data/gtk/window.blp:162
|
#: data/gtk/window.blp:136 cartridges/main.py:230
|
||||||
msgid "Toggle Sidebar"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:125 src/main.py:168
|
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Added: {}"
|
|
||||||
msgid "Added"
|
msgid "Added"
|
||||||
msgstr "أضيفت في: {}"
|
msgstr "أُضيفَت"
|
||||||
|
|
||||||
#: data/gtk/window.blp:140
|
#: data/gtk/window.blp:156
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Import"
|
|
||||||
msgid "Imported"
|
msgid "Imported"
|
||||||
msgstr "استورد"
|
msgstr "اُستوردَت"
|
||||||
|
|
||||||
#: data/gtk/window.blp:168 data/gtk/window.blp:532
|
#: data/gtk/window.blp:258
|
||||||
msgid "Add Game"
|
|
||||||
msgstr "أضف لعبةً"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:175 data/gtk/window.blp:234
|
|
||||||
msgid "Main Menu"
|
|
||||||
msgstr "القائمة الرئيسة"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:227
|
|
||||||
msgid "Hidden Games"
|
msgid "Hidden Games"
|
||||||
msgstr "الألعاب المخفية"
|
msgstr "الألعاب المخفية"
|
||||||
|
|
||||||
#: data/gtk/window.blp:337
|
#: data/gtk/window.blp:367
|
||||||
msgid "Game Title"
|
msgid "Game Title"
|
||||||
msgstr "عنوان اللعبة"
|
msgstr "عنوان اللعبة"
|
||||||
|
|
||||||
#: data/gtk/window.blp:394
|
#: data/gtk/window.blp:424
|
||||||
msgid "Play"
|
msgid "Play"
|
||||||
msgstr "العب"
|
msgstr "العب"
|
||||||
|
|
||||||
#: data/gtk/window.blp:471
|
#: data/gtk/window.blp:501
|
||||||
msgid "Sort"
|
msgid "Sort"
|
||||||
msgstr "رتِّب"
|
msgstr "رتِّب"
|
||||||
|
|
||||||
#: data/gtk/window.blp:474
|
#: data/gtk/window.blp:504
|
||||||
msgid "A-Z"
|
msgid "A-Z"
|
||||||
msgstr "أ-ي"
|
msgstr "أ-ي"
|
||||||
|
|
||||||
#: data/gtk/window.blp:480
|
#: data/gtk/window.blp:510
|
||||||
msgid "Z-A"
|
msgid "Z-A"
|
||||||
msgstr "ي-أ"
|
msgstr "ي-أ"
|
||||||
|
|
||||||
#: data/gtk/window.blp:486
|
#: data/gtk/window.blp:516
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "الأجدد"
|
msgstr "الأجدد"
|
||||||
|
|
||||||
#: data/gtk/window.blp:492
|
#: data/gtk/window.blp:522
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "الأقدم"
|
msgstr "الأقدم"
|
||||||
|
|
||||||
#: data/gtk/window.blp:498
|
#: data/gtk/window.blp:528
|
||||||
msgid "Last Played"
|
msgid "Last Played"
|
||||||
msgstr "لُعبت آخر مرَّة"
|
msgstr "لُعبت آخر مرَّة"
|
||||||
|
|
||||||
#: data/gtk/window.blp:505
|
#: data/gtk/window.blp:535
|
||||||
msgid "Show Hidden"
|
msgid "Show Hidden"
|
||||||
msgstr "أظهر ما أخفي"
|
msgstr "أظهر ما أخفي"
|
||||||
|
|
||||||
#: data/gtk/window.blp:518
|
#: data/gtk/window.blp:544
|
||||||
msgid "Keyboard Shortcuts"
|
|
||||||
msgstr "اختصارات لوحة المفاتيح"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:523
|
|
||||||
msgid "About Cartridges"
|
msgid "About Cartridges"
|
||||||
msgstr "عن «خراطيش»"
|
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
|
#. Translators: Replace this with your name for it to show up in the about window
|
||||||
#: src/main.py:207
|
#: cartridges/main.py:270
|
||||||
msgid "translator_credits"
|
msgid "translator_credits"
|
||||||
msgstr "Ali Aljishi <ahj696@hotmail.com>"
|
msgstr "Ali Aljishi <ahj696@hotmail.com>"
|
||||||
|
|
||||||
#. The variable is the date when the game was added
|
#. The variable is the date when the game was added
|
||||||
#: src/window.py:371
|
#: cartridges/window.py:373
|
||||||
msgid "Added: {}"
|
msgid "Added: {}"
|
||||||
msgstr "أضيفت في: {}"
|
msgstr "أضيفت في: {}"
|
||||||
|
|
||||||
#: src/window.py:374
|
#: cartridges/window.py:376
|
||||||
msgid "Never"
|
msgid "Never"
|
||||||
msgstr "أبدًا"
|
msgstr "أبدًا"
|
||||||
|
|
||||||
#. The variable is the date when the game was last played
|
#. The variable is the date when the game was last played
|
||||||
#: src/window.py:378
|
#: cartridges/window.py:380
|
||||||
msgid "Last played: {}"
|
msgid "Last played: {}"
|
||||||
msgstr "لُعبت آخر مرَّة في: {}"
|
msgstr "لُعبت آخر مرَّة في: {}"
|
||||||
|
|
||||||
#: src/details_window.py:76
|
#: cartridges/details_dialog.py:73
|
||||||
msgid "Apply"
|
msgid "Apply"
|
||||||
msgstr "طبِّق"
|
msgstr "طبِّق"
|
||||||
|
|
||||||
#: src/details_window.py:82
|
#: cartridges/details_dialog.py:79
|
||||||
msgid "Add New Game"
|
msgid "Add New Game"
|
||||||
msgstr "أضف لعبةً جديدةً"
|
msgstr "أضف لعبةً جديدةً"
|
||||||
|
|
||||||
#: src/details_window.py:83
|
#: cartridges/details_dialog.py:80
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr "أضف"
|
msgstr "أضف"
|
||||||
|
|
||||||
#: src/details_window.py:93
|
#: cartridges/details_dialog.py:90
|
||||||
msgid "Executables"
|
msgid "Executables"
|
||||||
msgstr "ملفات التنفيذ"
|
msgstr "ملفات التنفيذ"
|
||||||
|
|
||||||
#. Translate this string as you would translate "file"
|
#. Translate this string as you would translate "file"
|
||||||
#: src/details_window.py:108
|
#: cartridges/details_dialog.py:105
|
||||||
msgid "file.txt"
|
msgid "file.txt"
|
||||||
msgstr "ملف.txt"
|
msgstr "ملف.txt"
|
||||||
|
|
||||||
#. As in software
|
#. As in software
|
||||||
#: src/details_window.py:110
|
#: cartridges/details_dialog.py:107
|
||||||
msgid "program"
|
msgid "program"
|
||||||
msgstr "البرنامج"
|
msgstr "البرنامج"
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:115 src/details_window.py:117
|
#: cartridges/details_dialog.py:112 cartridges/details_dialog.py:114
|
||||||
msgid "C:\\path\\to\\{}"
|
msgid "C:\\path\\to\\{}"
|
||||||
msgstr "C:\\المسار\\إلى\\{}"
|
msgstr "C:\\المسار\\إلى\\{}"
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:121 src/details_window.py:123
|
#: cartridges/details_dialog.py:118 cartridges/details_dialog.py:120
|
||||||
msgid "/path/to/{}"
|
msgid "/path/to/{}"
|
||||||
msgstr "/المسار/إلى/{}"
|
msgstr "/المسار/إلى/{}"
|
||||||
|
|
||||||
#: src/details_window.py:128
|
#: cartridges/details_dialog.py:125
|
||||||
msgid ""
|
msgid ""
|
||||||
"To launch the executable \"{}\", use the command:\n"
|
"To launch the executable \"{}\", use the command:\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -501,138 +509,162 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"ولا تنسَ إحاطة المسار بعلامتي تنصيص مزدوجتين حالما تضمَّن مسافات!"
|
"ولا تنسَ إحاطة المسار بعلامتي تنصيص مزدوجتين حالما تضمَّن مسافات!"
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:177
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
|
||||||
msgid "Couldn't Add Game"
|
msgid "Couldn't Add Game"
|
||||||
msgstr "تعذَّرت إضافة اللعبة"
|
msgstr "تعذَّرت إضافة اللعبة"
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:213
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:209
|
||||||
msgid "Game title cannot be empty."
|
msgid "Game title cannot be empty."
|
||||||
msgstr "لا يجوز كون عنوان اللعبة فارغًا."
|
msgstr "لا يجوز كون عنوان اللعبة فارغًا."
|
||||||
|
|
||||||
#: src/details_window.py:177 src/details_window.py:221
|
#: cartridges/details_dialog.py:173 cartridges/details_dialog.py:217
|
||||||
msgid "Executable cannot be empty."
|
msgid "Executable cannot be empty."
|
||||||
msgstr "لا يجوز كون ملفِّ التنفيذ فارغًا."
|
msgstr "لا يجوز كون ملفِّ التنفيذ فارغًا."
|
||||||
|
|
||||||
#: src/details_window.py:212 src/details_window.py:220
|
#: cartridges/details_dialog.py:208 cartridges/details_dialog.py:216
|
||||||
msgid "Couldn't Apply Preferences"
|
msgid "Couldn't Apply Preferences"
|
||||||
msgstr "تعذَّر تطبيق التفضيلات"
|
msgstr "تعذَّر تطبيق التفضيلات"
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#: src/game.py:141
|
#: cartridges/game.py:139
|
||||||
msgid "{} launched"
|
|
||||||
msgstr "بُدئت {}"
|
|
||||||
|
|
||||||
#. The variable is the title of the game
|
|
||||||
#: src/game.py:155
|
|
||||||
msgid "{} hidden"
|
msgid "{} hidden"
|
||||||
msgstr "أٌخفيت {}"
|
msgstr "أٌخفيت {}"
|
||||||
|
|
||||||
#: src/game.py:155
|
#: cartridges/game.py:139
|
||||||
msgid "{} unhidden"
|
msgid "{} unhidden"
|
||||||
msgstr "أٌظهرت {}"
|
msgstr "أٌظهرت {}"
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#. The variable is the number of games removed
|
#. The variable is the number of games removed
|
||||||
#: src/game.py:169 src/importer/importer.py:380
|
#: cartridges/game.py:153 cartridges/importer/importer.py:391
|
||||||
msgid "{} removed"
|
msgid "{} removed"
|
||||||
msgstr "أزيلت {}"
|
msgstr "أزيلت {}"
|
||||||
|
|
||||||
#: src/preferences.py:121
|
#: cartridges/preferences.py:133
|
||||||
msgid "All games removed"
|
msgid "All games removed"
|
||||||
msgstr "أُزيلت كلُّ الألعاب"
|
msgstr "أُزيلت كلُّ الألعاب"
|
||||||
|
|
||||||
#: src/preferences.py:169
|
#: cartridges/preferences.py:181
|
||||||
msgid ""
|
msgid ""
|
||||||
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"تحتاج مفتاح واجهة برمجة حال ما أردت استخدام SteamGridDB، {}هنا تولِّده{}."
|
"تحتاج مفتاح واجهة برمجة حال ما أردت استخدام SteamGridDB، {}هنا تولِّده{}."
|
||||||
|
|
||||||
#: src/preferences.py:296
|
#: cartridges/preferences.py:196
|
||||||
|
msgid "Downloading covers…"
|
||||||
|
msgstr "تُنزَّل الغُلُف…"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:215
|
||||||
|
msgid "Covers updated"
|
||||||
|
msgstr "حُدِّثت الغُلُف"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:360
|
||||||
msgid "Installation Not Found"
|
msgid "Installation Not Found"
|
||||||
msgstr "لم يُعثر على التثبيت"
|
msgstr "لم يُعثر على التثبيت"
|
||||||
|
|
||||||
#: src/preferences.py:297
|
#: cartridges/preferences.py:361
|
||||||
msgid "Select a valid directory."
|
msgid "Select a valid directory"
|
||||||
msgstr "حدِّد مجلَّدًا صالحًا."
|
msgstr "حدِّد مجلَّدًا صالحًا"
|
||||||
|
|
||||||
#: src/preferences.py:333 src/importer/importer.py:306
|
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
|
||||||
msgid "Warning"
|
msgid "Warning"
|
||||||
msgstr "تحذير"
|
msgstr "تحذير"
|
||||||
|
|
||||||
#: src/preferences.py:367
|
#: cartridges/preferences.py:431
|
||||||
msgid "Invalid Directory"
|
msgid "Invalid Directory"
|
||||||
msgstr "مجلَّد غير صالح"
|
msgstr "مجلَّد غير صالح"
|
||||||
|
|
||||||
#: src/preferences.py:373
|
#: cartridges/preferences.py:437
|
||||||
msgid "Set Location"
|
msgid "Set Location"
|
||||||
msgstr "عيِّن الموضع"
|
msgstr "عيِّن الموضع"
|
||||||
|
|
||||||
#: src/utils/create_dialog.py:33 src/importer/importer.py:307
|
#: cartridges/utils/create_dialog.py:33 cartridges/importer/importer.py:319
|
||||||
msgid "Dismiss"
|
msgid "Dismiss"
|
||||||
msgstr "تجاهل"
|
msgstr "تجاهل"
|
||||||
|
|
||||||
#: src/importer/importer.py:142
|
#: cartridges/importer/importer.py:145
|
||||||
msgid "Importing Games…"
|
msgid "Importing Games…"
|
||||||
msgstr "تُستورد الألعاب…"
|
msgstr "تُستورد الألعاب…"
|
||||||
|
|
||||||
#: src/importer/importer.py:327
|
#: cartridges/importer/importer.py:338
|
||||||
msgid "The following errors occured during import:"
|
msgid "The following errors occured during import:"
|
||||||
msgstr "طرأ هذا الخطأ أثناء الاستيراد:"
|
msgstr "طرأ هذا الخطأ أثناء الاستيراد:"
|
||||||
|
|
||||||
#: src/importer/importer.py:356
|
#: cartridges/importer/importer.py:367
|
||||||
msgid "No new games found"
|
msgid "No new games found"
|
||||||
msgstr "لم يُعثر على ألعاب جديدة"
|
msgstr "لم يُعثر على ألعاب جديدة"
|
||||||
|
|
||||||
#: src/importer/importer.py:368
|
#: cartridges/importer/importer.py:379
|
||||||
msgid "1 game imported"
|
msgid "1 game imported"
|
||||||
msgstr "اُستوردت لعبة واحدة"
|
msgstr "اُستوردت لعبة واحدة"
|
||||||
|
|
||||||
#. The variable is the number of games
|
#. The variable is the number of games
|
||||||
#: src/importer/importer.py:372
|
#: cartridges/importer/importer.py:383
|
||||||
msgid "{} games imported"
|
msgid "{} games imported"
|
||||||
msgstr "اُستوردت {} لعبة"
|
msgstr "اُستوردت {} لعبة"
|
||||||
|
|
||||||
#. A single game removed
|
#. A single game removed
|
||||||
#: src/importer/importer.py:376
|
#: cartridges/importer/importer.py:387
|
||||||
msgid "1 removed"
|
msgid "1 removed"
|
||||||
msgstr "أزيل ١"
|
msgstr "أزيل ١"
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:33
|
#: cartridges/importer/location.py:34
|
||||||
msgid "Select the {} cache directory."
|
msgid "Select the {} cache directory."
|
||||||
msgstr "حدِّد مجلَّد ذاكرة {} المؤقتة."
|
msgstr "حدِّد مجلَّد ذاكرة {} المؤقتة."
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:35
|
#: cartridges/importer/location.py:36
|
||||||
msgid "Select the {} configuration directory."
|
msgid "Select the {} configuration directory."
|
||||||
msgstr "حدِّد مجلَّد ضبط {}."
|
msgstr "حدِّد مجلَّد ضبط {}."
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:37
|
#: cartridges/importer/location.py:38
|
||||||
msgid "Select the {} data directory."
|
msgid "Select the {} data directory."
|
||||||
msgstr "حدِّد مجلَّد بيانات {}."
|
msgstr "حدِّد مجلَّد بيانات {}."
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:46
|
#: cartridges/importer/retroarch_source.py:129
|
||||||
msgid "Couldn't Authenticate SteamGridDB"
|
|
||||||
msgstr "تعذَّر استيثاق SteamGridDB"
|
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:47
|
|
||||||
msgid "Verify your API key in preferences"
|
|
||||||
msgstr "أكِّد مفتاح واجهة البرمجة في التفضيلات"
|
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:129
|
|
||||||
msgid "No RetroArch Core Selected"
|
msgid "No RetroArch Core Selected"
|
||||||
msgstr "لم تختر نواة رتروآرتش"
|
msgstr "لم تختر نواة رتروآرتش"
|
||||||
|
|
||||||
#. The variable is a newline separated list of playlists
|
#. The variable is a newline separated list of playlists
|
||||||
#: src/importer/sources/retroarch_source.py:131
|
#: cartridges/importer/retroarch_source.py:131
|
||||||
msgid "The following playlists have no default core:"
|
msgid "The following playlists have no default core:"
|
||||||
msgstr "ليس للقوائم التالية نواة مبدئية:"
|
msgstr "ليس للقوائم التالية نواة مبدئية:"
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:133
|
#: cartridges/importer/retroarch_source.py:133
|
||||||
msgid "Games with no core selected were not imported"
|
msgid "Games with no core selected were not imported"
|
||||||
msgstr "لم نستورد الألعاب التي لم تختر لها أنويةً"
|
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 "أكِّد مفتاح واجهة البرمجة في التفضيلات"
|
||||||
|
|
||||||
|
#~ msgid "Cache Location"
|
||||||
|
#~ msgstr "موضع الذاكرة المؤقتة"
|
||||||
|
|
||||||
|
#~ msgid "Library"
|
||||||
|
#~ msgstr "المكتبة"
|
||||||
|
|
||||||
|
#~ msgid "Show preferences"
|
||||||
|
#~ msgstr "أظهر التفضيلات"
|
||||||
|
|
||||||
|
#~ msgid "Shortcuts"
|
||||||
|
#~ msgstr "الاختصارات"
|
||||||
|
|
||||||
|
#~ msgid "Open menu"
|
||||||
|
#~ msgstr "افتح القائمة"
|
||||||
|
|
||||||
|
#~ msgid "Add new game"
|
||||||
|
#~ msgstr "أضف لعبةً جديدةً"
|
||||||
|
|
||||||
|
#~ msgid "Import games"
|
||||||
|
#~ msgstr "استورد ألعابًا"
|
||||||
|
|
||||||
#~ msgid "Back"
|
#~ msgid "Back"
|
||||||
#~ msgstr "عد"
|
#~ msgstr "عد"
|
||||||
|
|
||||||
@@ -688,9 +720,6 @@ msgstr "لم نستورد الألعاب التي لم تختر لها أنوي
|
|||||||
#~ msgid "Select the Lutris cache directory."
|
#~ msgid "Select the Lutris cache directory."
|
||||||
#~ msgstr "حدِّد مجلَّد ذاكرة لوترس المؤقَّتة."
|
#~ msgstr "حدِّد مجلَّد ذاكرة لوترس المؤقَّتة."
|
||||||
|
|
||||||
#~ msgid "Importing Covers…"
|
|
||||||
#~ msgstr "تُستورد الغُلُف…"
|
|
||||||
|
|
||||||
#~ msgid "Directory to use when importing games"
|
#~ msgid "Directory to use when importing games"
|
||||||
#~ msgstr "المجلَّد المستخدم عند استيراد الألعاب"
|
#~ msgstr "المجلَّد المستخدم عند استيراد الألعاب"
|
||||||
|
|
||||||
|
|||||||
651
po/be.po
Normal file
@@ -0,0 +1,651 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR kramo
|
||||||
|
# This file is distributed under the same license as the Cartridges package.
|
||||||
|
# Yahor <k1llo2810@gmail.com>, 2023.
|
||||||
|
# Yahor <g_egor98@tut.by>, 2023.
|
||||||
|
# Yahor <k1llo2810@protonmail.com>, 2023.
|
||||||
|
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-12-13 09:28+0000\n"
|
||||||
|
"Last-Translator: Yahor <k1llo2810@protonmail.com>\n"
|
||||||
|
"Language-Team: Belarusian <https://hosted.weblate.org/projects/cartridges/"
|
||||||
|
"cartridges/be/>\n"
|
||||||
|
"Language: be\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||||
|
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
|
"X-Generator: Weblate 5.3-rc\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 ""
|
||||||
|
"гульні;праграма запуску;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 ""
|
||||||
|
"Картрыджы - гэта простая праграма для запуску ўсіх вашых гульняў. Яна "
|
||||||
|
"падтрымлівае імпарт гульняў з Steam, Lutris, Heroic і іншых без неабходнасці "
|
||||||
|
"ўваходу ў сістэму. Вы можаце сартаваць і хаваць гульні або спампоўваць "
|
||||||
|
"вокладку з 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 "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 "Месца ўсталёўкі"
|
||||||
|
|
||||||
|
#: 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 "Імпарт гульняў Steam"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:185
|
||||||
|
msgid "Import Flatpak Games"
|
||||||
|
msgstr "Імпарт гульняў 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 "Імпарт Epic Games"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:220
|
||||||
|
msgid "Import GOG Games"
|
||||||
|
msgstr "Імпарт гульняў GOG"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:224
|
||||||
|
msgid "Import Amazon Games"
|
||||||
|
msgstr "Імпарт гульняў 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 "Bottles"
|
||||||
|
|
||||||
|
#: 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 "Сістэмнае размяшчэнне"
|
||||||
|
|
||||||
|
#. 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 "А-Я"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:510
|
||||||
|
msgid "Z-A"
|
||||||
|
msgstr "Я-А"
|
||||||
|
|
||||||
|
#: 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 "Yahor Haurylenka https://github.com/k1llo"
|
||||||
|
|
||||||
|
#. 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:\\шлях\\да\\{}"
|
||||||
|
|
||||||
|
#. Translate this string as you would translate "path to {}"
|
||||||
|
#: cartridges/details_dialog.py:118 cartridges/details_dialog.py:120
|
||||||
|
msgid "/path/to/{}"
|
||||||
|
msgstr "/шлях/да/{}"
|
||||||
|
|
||||||
|
#: 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 "Ядро 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 "Наступныя плэйлісты не маюць ядра па змаўчанні:"
|
||||||
|
|
||||||
|
#: 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 ў наладах"
|
||||||
|
|
||||||
|
#~ msgid "Cache Location"
|
||||||
|
#~ msgstr "Размяшчэнне кэша"
|
||||||
647
po/ca.po
Normal file
@@ -0,0 +1,647 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR kramo
|
||||||
|
# This file is distributed under the same license as the Cartridges package.
|
||||||
|
# jolupa <jolupameister@gmail.com>, 2023.
|
||||||
|
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-12-15 13:10+0000\n"
|
||||||
|
"Last-Translator: jolupa <jolupameister@gmail.com>\n"
|
||||||
|
"Language-Team: Catalan <https://hosted.weblate.org/projects/cartridges/"
|
||||||
|
"cartridges/ca/>\n"
|
||||||
|
"Language: ca\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.3\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 "Llançador de jocs"
|
||||||
|
|
||||||
|
#: data/page.kramo.Cartridges.desktop.in:5
|
||||||
|
#: data/page.kramo.Cartridges.metainfo.xml.in:10
|
||||||
|
msgid "Launch all your games"
|
||||||
|
msgstr "Llança tots els teus jocs"
|
||||||
|
|
||||||
|
#: data/page.kramo.Cartridges.desktop.in:11
|
||||||
|
msgid ""
|
||||||
|
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
||||||
|
msgstr ""
|
||||||
|
"jocs;llançador;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 llançador de jocs senzill per tots els teus jocs. Suporta "
|
||||||
|
"la importació de jocs des de Steam, Lutris, Heroic i molts més sense la "
|
||||||
|
"necessitat de iniciar sessió. Pots ordenar i amagar els jocs o descarregar "
|
||||||
|
"l'art de la coberta de SteamGridDB."
|
||||||
|
|
||||||
|
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:318
|
||||||
|
#: cartridges/details_dialog.py:68
|
||||||
|
msgid "Game Details"
|
||||||
|
msgstr "Detalls del joc"
|
||||||
|
|
||||||
|
#: data/page.kramo.Cartridges.metainfo.xml.in:48
|
||||||
|
msgid "Edit Game Details"
|
||||||
|
msgstr "Editar els detalls del joc"
|
||||||
|
|
||||||
|
#: 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 "Preferències"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:15
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Cancel·lar"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:46
|
||||||
|
msgid "New Cover"
|
||||||
|
msgstr "Coberta nova"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:65
|
||||||
|
msgid "Delete Cover"
|
||||||
|
msgstr "Eliminar la coberta"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
|
||||||
|
msgid "Title"
|
||||||
|
msgstr "Títol"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:97
|
||||||
|
msgid "Developer (optional)"
|
||||||
|
msgstr "Desenvolupador (opcional)"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:103
|
||||||
|
msgid "Executable"
|
||||||
|
msgstr "Executable"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:109
|
||||||
|
msgid "Select File"
|
||||||
|
msgstr "Seleccionar fitxer"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:120
|
||||||
|
msgid "More Info"
|
||||||
|
msgstr "Més informació"
|
||||||
|
|
||||||
|
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
|
||||||
|
msgid "Edit"
|
||||||
|
msgstr "Editar"
|
||||||
|
|
||||||
|
#: data/gtk/game.blp:103 cartridges/window.py:350
|
||||||
|
msgid "Hide"
|
||||||
|
msgstr "Amagar"
|
||||||
|
|
||||||
|
#: data/gtk/game.blp:104 data/gtk/game.blp:112 data/gtk/window.blp:463
|
||||||
|
msgid "Remove"
|
||||||
|
msgstr "Esborrar"
|
||||||
|
|
||||||
|
#: data/gtk/game.blp:111 cartridges/window.py:352
|
||||||
|
msgid "Unhide"
|
||||||
|
msgstr "Mostrar"
|
||||||
|
|
||||||
|
#: 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 "Cercar"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
|
||||||
|
msgid "Keyboard Shortcuts"
|
||||||
|
msgstr "Dreceres de teclat"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
|
||||||
|
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
|
||||||
|
msgid "Undo"
|
||||||
|
msgstr "Desfés"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:34
|
||||||
|
msgid "Quit"
|
||||||
|
msgstr "Sortir"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:39 data/gtk/window.blp:92 data/gtk/window.blp:185
|
||||||
|
msgid "Toggle Sidebar"
|
||||||
|
msgstr "Alternar la barra 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 "Jocs"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:191 data/gtk/window.blp:550
|
||||||
|
msgid "Add Game"
|
||||||
|
msgstr "Afegeix 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 "Importar"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:63
|
||||||
|
msgid "Show Hidden Games"
|
||||||
|
msgstr "Mostrar jocs ocults"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:68
|
||||||
|
msgid "Remove Game"
|
||||||
|
msgstr "Eliminar joc"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:117
|
||||||
|
#: data/gtk/preferences.blp:415
|
||||||
|
msgid "Behavior"
|
||||||
|
msgstr "Comportament"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:16
|
||||||
|
msgid "Exit After Launching Games"
|
||||||
|
msgstr "Sortir després de llançar el joc"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:20
|
||||||
|
msgid "Cover Image Launches Game"
|
||||||
|
msgstr "La imatge de la coberta llança el joc"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:21
|
||||||
|
msgid "Swaps the behavior of the cover image and the play button"
|
||||||
|
msgstr "Canvia el comportament de la imatge de la coberta i el botó de jugar"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:26 cartridges/details_dialog.py:82
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Imatges"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:29
|
||||||
|
msgid "High Quality Images"
|
||||||
|
msgstr "Imatges de qualitat alta"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:30
|
||||||
|
msgid "Save game covers losslessly at the cost of storage"
|
||||||
|
msgstr "Guarda les cobertes del joc sense pèrdues amb el cost d'emmagatzematge"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:35
|
||||||
|
msgid "Danger Zone"
|
||||||
|
msgstr "Zona de perill"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:48
|
||||||
|
msgid "Remove All Games"
|
||||||
|
msgstr "Esborrar tots els jocs"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:120
|
||||||
|
msgid "Remove Uninstalled Games"
|
||||||
|
msgstr "Esborrar jocs desinstal·lats"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:125
|
||||||
|
msgid "Sources"
|
||||||
|
msgstr "Fonts"
|
||||||
|
|
||||||
|
#: 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 "Ubicació de la instal·lació"
|
||||||
|
|
||||||
|
#: 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 jocs de Steam"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:185
|
||||||
|
msgid "Import Flatpak Games"
|
||||||
|
msgstr "Importar jocs de 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 jocs de Epic"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:220
|
||||||
|
msgid "Import GOG Games"
|
||||||
|
msgstr "Importar jocs de GOG"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:224
|
||||||
|
msgid "Import Amazon Games"
|
||||||
|
msgstr "Importar jocs de Amazon"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:228
|
||||||
|
msgid "Import Sideloaded Games"
|
||||||
|
msgstr "Importar jocs no aprovats"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
|
||||||
|
msgid "Bottles"
|
||||||
|
msgstr "Bottles"
|
||||||
|
|
||||||
|
#: 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 "Ubicació del sistema"
|
||||||
|
|
||||||
|
#. The location of the user-specific data directory
|
||||||
|
#: data/gtk/preferences.blp:369
|
||||||
|
msgid "User Location"
|
||||||
|
msgstr "Ubicació de l'usuari"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:386
|
||||||
|
msgid "Import Game Launchers"
|
||||||
|
msgstr "Importar llançadors de jocs"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
|
||||||
|
msgid "Desktop Entries"
|
||||||
|
msgstr "Entrades d'escriptori"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
|
||||||
|
msgid "SteamGridDB"
|
||||||
|
msgstr "SteamGridDB"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:407
|
||||||
|
msgid "Authentication"
|
||||||
|
msgstr "Autenticació"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:410
|
||||||
|
msgid "API Key"
|
||||||
|
msgstr "Clau API"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:418
|
||||||
|
msgid "Use SteamGridDB"
|
||||||
|
msgstr "Fes servir SteamGridDB"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:419
|
||||||
|
msgid "Download images when adding or importing games"
|
||||||
|
msgstr "Descarregar les imatges al afegir o importar jocs"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:423
|
||||||
|
msgid "Prefer Over Official Images"
|
||||||
|
msgstr "Prefereix sobre imatges oficials"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:427
|
||||||
|
msgid "Prefer Animated Images"
|
||||||
|
msgstr "Prefereix imatges animades"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:433
|
||||||
|
msgid "Update Covers"
|
||||||
|
msgstr "Actualitzar cobertes"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:434
|
||||||
|
msgid "Fetch covers for games already in your library"
|
||||||
|
msgstr "Descarregar cobertes per a jocs que ja es troben a la teva llibreria"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:439
|
||||||
|
msgid "Update"
|
||||||
|
msgstr "Actualitzar"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:6 data/gtk/window.blp:14
|
||||||
|
msgid "No Games Found"
|
||||||
|
msgstr "No hi han jocs"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
||||||
|
msgid "Try a different search"
|
||||||
|
msgstr "Prova una cerca diferent"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:21
|
||||||
|
msgid "No Games"
|
||||||
|
msgstr "Cap joc"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:22
|
||||||
|
msgid "Use the + button to add games"
|
||||||
|
msgstr "Fes servir el botó + per afegir jocs"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:40
|
||||||
|
msgid "No Hidden Games"
|
||||||
|
msgstr "No hi han jocs amagats"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:41
|
||||||
|
msgid "Games you hide will appear here"
|
||||||
|
msgstr "Els jocs que amaguis sortiran aquí"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
|
||||||
|
msgid "All Games"
|
||||||
|
msgstr "Tots els jocs"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:136 cartridges/main.py:230
|
||||||
|
msgid "Added"
|
||||||
|
msgstr "Afegit"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:156
|
||||||
|
msgid "Imported"
|
||||||
|
msgstr "Importat"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:258
|
||||||
|
msgid "Hidden Games"
|
||||||
|
msgstr "Jocs amagats"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:367
|
||||||
|
msgid "Game Title"
|
||||||
|
msgstr "Títol del joc"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:424
|
||||||
|
msgid "Play"
|
||||||
|
msgstr "Jugar"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:501
|
||||||
|
msgid "Sort"
|
||||||
|
msgstr "Ordenar"
|
||||||
|
|
||||||
|
#: 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 "Més recent"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:522
|
||||||
|
msgid "Oldest"
|
||||||
|
msgstr "Més antic"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:528
|
||||||
|
msgid "Last Played"
|
||||||
|
msgstr "Últim jugat"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:535
|
||||||
|
msgid "Show Hidden"
|
||||||
|
msgstr "Mostrar els amagats"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:544
|
||||||
|
msgid "About Cartridges"
|
||||||
|
msgstr "Sobre 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 "{} llançat"
|
||||||
|
|
||||||
|
#. Translators: Replace this with your name for it to show up in the about window
|
||||||
|
#: cartridges/main.py:270
|
||||||
|
msgid "translator_credits"
|
||||||
|
msgstr "crèdits_traductors"
|
||||||
|
|
||||||
|
#. The variable is the date when the game was added
|
||||||
|
#: cartridges/window.py:373
|
||||||
|
msgid "Added: {}"
|
||||||
|
msgstr "Afegit: {}"
|
||||||
|
|
||||||
|
#: cartridges/window.py:376
|
||||||
|
msgid "Never"
|
||||||
|
msgstr "Mai"
|
||||||
|
|
||||||
|
#. The variable is the date when the game was last played
|
||||||
|
#: cartridges/window.py:380
|
||||||
|
msgid "Last played: {}"
|
||||||
|
msgstr "Últim jugat: {}"
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:73
|
||||||
|
msgid "Apply"
|
||||||
|
msgstr "Aplicar"
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:79
|
||||||
|
msgid "Add New Game"
|
||||||
|
msgstr "Afegeix joc nou"
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:80
|
||||||
|
msgid "Add"
|
||||||
|
msgstr "Afegir"
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:90
|
||||||
|
msgid "Executables"
|
||||||
|
msgstr "Executables"
|
||||||
|
|
||||||
|
#. Translate this string as you would translate "file"
|
||||||
|
#: cartridges/details_dialog.py:105
|
||||||
|
msgid "file.txt"
|
||||||
|
msgstr "fitxer.txt"
|
||||||
|
|
||||||
|
#. As in software
|
||||||
|
#: cartridges/details_dialog.py:107
|
||||||
|
msgid "program"
|
||||||
|
msgstr "programa"
|
||||||
|
|
||||||
|
#. 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:\\camí\\a\\{}"
|
||||||
|
|
||||||
|
#. Translate this string as you would translate "path to {}"
|
||||||
|
#: cartridges/details_dialog.py:118 cartridges/details_dialog.py:120
|
||||||
|
msgid "/path/to/{}"
|
||||||
|
msgstr "/camí/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 ""
|
||||||
|
"Per llançar l'executable \"{}\", fes servir l'ordre:\n"
|
||||||
|
"\n"
|
||||||
|
"<tt>\"{}\"</tt>\n"
|
||||||
|
"\n"
|
||||||
|
"Per obrir el fitxer \"{}\" amb l'aplicació per defecte, fes servir:\n"
|
||||||
|
"\n"
|
||||||
|
"<tt>{} \"{}\"</tt>\n"
|
||||||
|
"\n"
|
||||||
|
"Si el camí conté espais, assegurat d'envoltar-lo amb cometes dobles!"
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
|
||||||
|
msgid "Couldn't Add Game"
|
||||||
|
msgstr "No es pot afegir el joc"
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:209
|
||||||
|
msgid "Game title cannot be empty."
|
||||||
|
msgstr "El títol del joc no pot estar buit."
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:173 cartridges/details_dialog.py:217
|
||||||
|
msgid "Executable cannot be empty."
|
||||||
|
msgstr "El executable no pot estar buit."
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:208 cartridges/details_dialog.py:216
|
||||||
|
msgid "Couldn't Apply Preferences"
|
||||||
|
msgstr "No s'han pogut aplicar les preferències"
|
||||||
|
|
||||||
|
#. The variable is the title of the game
|
||||||
|
#: cartridges/game.py:139
|
||||||
|
msgid "{} hidden"
|
||||||
|
msgstr "{} amagat"
|
||||||
|
|
||||||
|
#: cartridges/game.py:139
|
||||||
|
msgid "{} unhidden"
|
||||||
|
msgstr "{} mostrar"
|
||||||
|
|
||||||
|
#. 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 "{} eliminat"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:133
|
||||||
|
msgid "All games removed"
|
||||||
|
msgstr "Tots els jocs eliminats"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:181
|
||||||
|
msgid ""
|
||||||
|
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
||||||
|
msgstr ""
|
||||||
|
"Es necessita una clau API per poder fer servir SteamGridDB. Pots generar una "
|
||||||
|
"{}aquí{}."
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:196
|
||||||
|
msgid "Downloading covers…"
|
||||||
|
msgstr "Descarregant cobertes…"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:215
|
||||||
|
msgid "Covers updated"
|
||||||
|
msgstr "Cobertes actualitzades"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:360
|
||||||
|
msgid "Installation Not Found"
|
||||||
|
msgstr "No s'ha trobat l'instal·lacióó"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:361
|
||||||
|
msgid "Select a valid directory"
|
||||||
|
msgstr "Selecciona un directori vàlid"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
|
||||||
|
msgid "Warning"
|
||||||
|
msgstr "Avis"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:431
|
||||||
|
msgid "Invalid Directory"
|
||||||
|
msgstr "Directori no vàlid"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:437
|
||||||
|
msgid "Set Location"
|
||||||
|
msgstr "Escull una ubicació"
|
||||||
|
|
||||||
|
#: cartridges/utils/create_dialog.py:33 cartridges/importer/importer.py:319
|
||||||
|
msgid "Dismiss"
|
||||||
|
msgstr "Descartar"
|
||||||
|
|
||||||
|
#: cartridges/importer/importer.py:145
|
||||||
|
msgid "Importing Games…"
|
||||||
|
msgstr "Important jocs…"
|
||||||
|
|
||||||
|
#: cartridges/importer/importer.py:338
|
||||||
|
msgid "The following errors occured during import:"
|
||||||
|
msgstr "Han succeït els següents errors al importar:"
|
||||||
|
|
||||||
|
#: cartridges/importer/importer.py:367
|
||||||
|
msgid "No new games found"
|
||||||
|
msgstr "No s'han trobat jocs nous"
|
||||||
|
|
||||||
|
#: cartridges/importer/importer.py:379
|
||||||
|
msgid "1 game imported"
|
||||||
|
msgstr "1 joc importat"
|
||||||
|
|
||||||
|
#. The variable is the number of games
|
||||||
|
#: cartridges/importer/importer.py:383
|
||||||
|
msgid "{} games imported"
|
||||||
|
msgstr "{} jocs importats"
|
||||||
|
|
||||||
|
#. A single game removed
|
||||||
|
#: cartridges/importer/importer.py:387
|
||||||
|
msgid "1 removed"
|
||||||
|
msgstr "1 eliminat"
|
||||||
|
|
||||||
|
#. The variable is the name of the source
|
||||||
|
#: cartridges/importer/location.py:34
|
||||||
|
msgid "Select the {} cache directory."
|
||||||
|
msgstr "Selecciona el directori per la memòria cau {}."
|
||||||
|
|
||||||
|
#. The variable is the name of the source
|
||||||
|
#: cartridges/importer/location.py:36
|
||||||
|
msgid "Select the {} configuration directory."
|
||||||
|
msgstr "Selecciona el directori de configuració {}."
|
||||||
|
|
||||||
|
#. The variable is the name of the source
|
||||||
|
#: cartridges/importer/location.py:38
|
||||||
|
msgid "Select the {} data directory."
|
||||||
|
msgstr "Selecciona el directori de dades {}."
|
||||||
|
|
||||||
|
#: cartridges/importer/retroarch_source.py:129
|
||||||
|
msgid "No RetroArch Core Selected"
|
||||||
|
msgstr "No s'ha seleccionat cap nucli de 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 "La següent llista de reproducció no te cap nucli:"
|
||||||
|
|
||||||
|
#: cartridges/importer/retroarch_source.py:133
|
||||||
|
msgid "Games with no core selected were not imported"
|
||||||
|
msgstr "Els jocs sense cap nucli seleccionat no seran importats"
|
||||||
|
|
||||||
|
#: cartridges/store/managers/sgdb_manager.py:46
|
||||||
|
msgid "Couldn't Authenticate SteamGridDB"
|
||||||
|
msgstr "No es pot Autenticar a SteamGridDB"
|
||||||
|
|
||||||
|
#: cartridges/store/managers/sgdb_manager.py:47
|
||||||
|
msgid "Verify your API key in preferences"
|
||||||
|
msgstr "Verifica la teva clau API en les preferències"
|
||||||
|
|
||||||
|
#~ msgid "Cache Location"
|
||||||
|
#~ msgstr "Ubicació de la memòria cau"
|
||||||
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Cartridges\n"
|
"Project-Id-Version: Cartridges\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-08-30 10:43+0200\n"
|
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -17,27 +17,28 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:3
|
#: data/page.kramo.Cartridges.desktop.in:3
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
|
#: data/page.kramo.Cartridges.metainfo.xml.in:9
|
||||||
#: data/gtk/window.blp:80
|
#: data/page.kramo.Cartridges.metainfo.xml.in:40 data/gtk/window.blp:47
|
||||||
|
#: data/gtk/window.blp:83
|
||||||
msgid "Cartridges"
|
msgid "Cartridges"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:4
|
#: data/page.kramo.Cartridges.desktop.in:4
|
||||||
msgid "Game Launcher"
|
msgid "Game Launcher"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:5
|
#: data/page.kramo.Cartridges.desktop.in:5
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:7
|
#: data/page.kramo.Cartridges.metainfo.xml.in:10
|
||||||
msgid "Launch all your games"
|
msgid "Launch all your games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:11
|
#: data/page.kramo.Cartridges.desktop.in:11
|
||||||
msgid ""
|
msgid ""
|
||||||
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
|
#: data/page.kramo.Cartridges.metainfo.xml.in:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cartridges is a simple game launcher for all of your games. It has support "
|
"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 "
|
"for importing games from Steam, Lutris, Heroic and more with no login "
|
||||||
@@ -45,282 +46,293 @@ msgid ""
|
|||||||
"SteamGridDB."
|
"SteamGridDB."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:30
|
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:318
|
||||||
msgid "Library"
|
#: cartridges/details_dialog.py:68
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:34
|
|
||||||
msgid "Edit Game Details"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
|
|
||||||
#: src/details_window.py:71
|
|
||||||
msgid "Game Details"
|
msgid "Game Details"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
|
#: data/page.kramo.Cartridges.metainfo.xml.in:48
|
||||||
#: src/details_window.py:271 src/importer/importer.py:308
|
msgid "Edit Game Details"
|
||||||
#: src/importer/importer.py:359
|
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"
|
msgid "Preferences"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:25
|
#: data/gtk/details-dialog.blp:15
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:55
|
#: data/gtk/details-dialog.blp:46
|
||||||
msgid "New Cover"
|
msgid "New Cover"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:73
|
#: data/gtk/details-dialog.blp:65
|
||||||
msgid "Delete Cover"
|
msgid "Delete Cover"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
|
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:103
|
#: data/gtk/details-dialog.blp:97
|
||||||
msgid "Developer (optional)"
|
msgid "Developer (optional)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:108
|
#: data/gtk/details-dialog.blp:103
|
||||||
msgid "Executable"
|
msgid "Executable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:114
|
#: data/gtk/details-dialog.blp:109
|
||||||
msgid "Select File"
|
msgid "Select File"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:125
|
#: data/gtk/details-dialog.blp:120
|
||||||
msgid "More Info"
|
msgid "More Info"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
|
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
|
||||||
msgid "Edit"
|
msgid "Edit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/game.blp:107 src/window.py:348
|
#: data/gtk/game.blp:103 cartridges/window.py:350
|
||||||
msgid "Hide"
|
msgid "Hide"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
|
#: data/gtk/game.blp:104 data/gtk/game.blp:112 data/gtk/window.blp:463
|
||||||
#: data/gtk/window.blp:433
|
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/game.blp:126 src/window.py:350
|
#: data/gtk/game.blp:111 cartridges/window.py:352
|
||||||
msgid "Unhide"
|
msgid "Unhide"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
|
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:14
|
#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:205 data/gtk/window.blp:221
|
||||||
msgid "Quit"
|
#: data/gtk/window.blp:272 data/gtk/window.blp:288 data/gtk/window.blp:474
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
|
|
||||||
#: data/gtk/window.blp:444
|
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:24
|
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
|
||||||
msgid "Show preferences"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:29
|
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
|
||||||
msgid "Shortcuts"
|
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
|
|
||||||
#: src/importer/importer.py:383
|
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:39
|
#: data/gtk/help-overlay.blp:34
|
||||||
msgid "Open menu"
|
msgid "Quit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:45
|
#: 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"
|
msgid "Games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:48
|
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:191 data/gtk/window.blp:550
|
||||||
msgid "Add new game"
|
msgid "Add Game"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:53
|
#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:113
|
||||||
msgid "Import games"
|
#: data/gtk/window.blp:27 data/gtk/window.blp:554
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:58
|
|
||||||
msgid "Show hidden games"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:63
|
|
||||||
msgid "Remove game"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
|
|
||||||
#: data/gtk/preferences.blp:288
|
|
||||||
msgid "Behavior"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:15
|
|
||||||
msgid "Exit After Launching Games"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:19
|
|
||||||
msgid "Cover Image Launches Game"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:20
|
|
||||||
msgid "Swaps the behavior of the cover image and the play button"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:25 src/details_window.py:85
|
|
||||||
msgid "Images"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:28
|
|
||||||
msgid "High Quality Images"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:29
|
|
||||||
msgid "Save game covers losslessly at the cost of storage"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:34
|
|
||||||
msgid "Danger Zone"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:37
|
|
||||||
msgid "Remove All Games"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
|
|
||||||
msgid "Import"
|
msgid "Import"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:75
|
#: 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"
|
msgid "Remove Uninstalled Games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:80
|
#: data/gtk/preferences.blp:125
|
||||||
msgid "Sources"
|
msgid "Sources"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
|
#: data/gtk/preferences.blp:128 cartridges/importer/steam_source.py:114
|
||||||
msgid "Steam"
|
msgid "Steam"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
|
#: data/gtk/preferences.blp:137 data/gtk/preferences.blp:164
|
||||||
#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
|
#: data/gtk/preferences.blp:199 data/gtk/preferences.blp:242
|
||||||
#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
|
#: data/gtk/preferences.blp:269 data/gtk/preferences.blp:296
|
||||||
#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
|
#: data/gtk/preferences.blp:323
|
||||||
msgid "Install Location"
|
msgid "Install Location"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
|
#: data/gtk/preferences.blp:155 data/gtk/window.blp:564
|
||||||
|
#: cartridges/importer/lutris_source.py:96
|
||||||
msgid "Lutris"
|
msgid "Lutris"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:116
|
#: data/gtk/preferences.blp:181
|
||||||
msgid "Cache Location"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:128
|
|
||||||
msgid "Import Steam Games"
|
msgid "Import Steam Games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:132
|
#: data/gtk/preferences.blp:185
|
||||||
msgid "Import Flatpak Games"
|
msgid "Import Flatpak Games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
|
#: data/gtk/preferences.blp:190 cartridges/importer/heroic_source.py:355
|
||||||
msgid "Heroic"
|
msgid "Heroic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:153
|
#: data/gtk/preferences.blp:216
|
||||||
msgid "Import Epic Games"
|
msgid "Import Epic Games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:157
|
#: data/gtk/preferences.blp:220
|
||||||
msgid "Import GOG Games"
|
msgid "Import GOG Games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:161
|
#: data/gtk/preferences.blp:224
|
||||||
msgid "Import Amazon Games"
|
msgid "Import Amazon Games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:165
|
#: data/gtk/preferences.blp:228
|
||||||
msgid "Import Sideloaded Games"
|
msgid "Import Sideloaded Games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
|
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
|
||||||
msgid "Bottles"
|
msgid "Bottles"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
|
#: data/gtk/preferences.blp:260 cartridges/importer/itch_source.py:81
|
||||||
msgid "itch"
|
msgid "itch"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
|
#: data/gtk/preferences.blp:287 cartridges/importer/legendary_source.py:97
|
||||||
msgid "Legendary"
|
msgid "Legendary"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
|
#: data/gtk/preferences.blp:314 cartridges/importer/retroarch_source.py:142
|
||||||
msgid "RetroArch"
|
msgid "RetroArch"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
|
#: data/gtk/preferences.blp:341 cartridges/importer/flatpak_source.py:143
|
||||||
msgid "Flatpak"
|
msgid "Flatpak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:254
|
#. 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"
|
msgid "Import Game Launchers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
|
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
|
||||||
msgid "Desktop Entries"
|
msgid "Desktop Entries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:276
|
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
|
||||||
msgid "SteamGridDB"
|
msgid "SteamGridDB"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:280
|
#: data/gtk/preferences.blp:407
|
||||||
msgid "Authentication"
|
msgid "Authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:283
|
#: data/gtk/preferences.blp:410
|
||||||
msgid "API Key"
|
msgid "API Key"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:291
|
#: data/gtk/preferences.blp:418
|
||||||
msgid "Use SteamGridDB"
|
msgid "Use SteamGridDB"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:292
|
#: data/gtk/preferences.blp:419
|
||||||
msgid "Download images when adding or importing games"
|
msgid "Download images when adding or importing games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:296
|
#: data/gtk/preferences.blp:423
|
||||||
msgid "Prefer Over Official Images"
|
msgid "Prefer Over Official Images"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:300
|
#: data/gtk/preferences.blp:427
|
||||||
msgid "Prefer Animated Images"
|
msgid "Prefer Animated Images"
|
||||||
msgstr ""
|
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
|
#: data/gtk/window.blp:6 data/gtk/window.blp:14
|
||||||
msgid "No Games Found"
|
msgid "No Games Found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
||||||
msgid "Try a different search."
|
msgid "Try a different search"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:21
|
#: data/gtk/window.blp:21
|
||||||
@@ -328,7 +340,7 @@ msgid "No Games"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:22
|
#: data/gtk/window.blp:22
|
||||||
msgid "Use the + button to add games."
|
msgid "Use the + button to add games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:40
|
#: data/gtk/window.blp:40
|
||||||
@@ -336,137 +348,138 @@ msgid "No Hidden Games"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:41
|
#: data/gtk/window.blp:41
|
||||||
msgid "Games you hide will appear here."
|
msgid "Games you hide will appear here"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
|
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
|
||||||
msgid "All Games"
|
msgid "All Games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:88 data/gtk/window.blp:162
|
#: data/gtk/window.blp:136 cartridges/main.py:230
|
||||||
msgid "Toggle Sidebar"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:125 src/main.py:168
|
|
||||||
msgid "Added"
|
msgid "Added"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:140
|
#: data/gtk/window.blp:156
|
||||||
msgid "Imported"
|
msgid "Imported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:168 data/gtk/window.blp:532
|
#: data/gtk/window.blp:258
|
||||||
msgid "Add Game"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:175 data/gtk/window.blp:234
|
|
||||||
msgid "Main Menu"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:227
|
|
||||||
msgid "Hidden Games"
|
msgid "Hidden Games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:337
|
#: data/gtk/window.blp:367
|
||||||
msgid "Game Title"
|
msgid "Game Title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:394
|
#: data/gtk/window.blp:424
|
||||||
msgid "Play"
|
msgid "Play"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:471
|
#: data/gtk/window.blp:501
|
||||||
msgid "Sort"
|
msgid "Sort"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:474
|
#: data/gtk/window.blp:504
|
||||||
msgid "A-Z"
|
msgid "A-Z"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:480
|
#: data/gtk/window.blp:510
|
||||||
msgid "Z-A"
|
msgid "Z-A"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:486
|
#: data/gtk/window.blp:516
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:492
|
#: data/gtk/window.blp:522
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:498
|
#: data/gtk/window.blp:528
|
||||||
msgid "Last Played"
|
msgid "Last Played"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:505
|
#: data/gtk/window.blp:535
|
||||||
msgid "Show Hidden"
|
msgid "Show Hidden"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/gtk/window.blp:518
|
#: data/gtk/window.blp:544
|
||||||
msgid "Keyboard Shortcuts"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:523
|
|
||||||
msgid "About Cartridges"
|
msgid "About Cartridges"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:561
|
||||||
|
msgid "IGDB"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:563
|
||||||
|
msgid "ProtonDB"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:565
|
||||||
|
msgid "HowLongToBeat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. 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
|
#. Translators: Replace this with your name for it to show up in the about window
|
||||||
#: src/main.py:207
|
#: cartridges/main.py:270
|
||||||
msgid "translator_credits"
|
msgid "translator_credits"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. The variable is the date when the game was added
|
#. The variable is the date when the game was added
|
||||||
#: src/window.py:371
|
#: cartridges/window.py:373
|
||||||
msgid "Added: {}"
|
msgid "Added: {}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:374
|
#: cartridges/window.py:376
|
||||||
msgid "Never"
|
msgid "Never"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. The variable is the date when the game was last played
|
#. The variable is the date when the game was last played
|
||||||
#: src/window.py:378
|
#: cartridges/window.py:380
|
||||||
msgid "Last played: {}"
|
msgid "Last played: {}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/details_window.py:76
|
#: cartridges/details_dialog.py:73
|
||||||
msgid "Apply"
|
msgid "Apply"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/details_window.py:82
|
#: cartridges/details_dialog.py:79
|
||||||
msgid "Add New Game"
|
msgid "Add New Game"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/details_window.py:83
|
#: cartridges/details_dialog.py:80
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/details_window.py:93
|
#: cartridges/details_dialog.py:90
|
||||||
msgid "Executables"
|
msgid "Executables"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translate this string as you would translate "file"
|
#. Translate this string as you would translate "file"
|
||||||
#: src/details_window.py:108
|
#: cartridges/details_dialog.py:105
|
||||||
msgid "file.txt"
|
msgid "file.txt"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. As in software
|
#. As in software
|
||||||
#: src/details_window.py:110
|
#: cartridges/details_dialog.py:107
|
||||||
msgid "program"
|
msgid "program"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:115 src/details_window.py:117
|
#: cartridges/details_dialog.py:112 cartridges/details_dialog.py:114
|
||||||
msgid "C:\\path\\to\\{}"
|
msgid "C:\\path\\to\\{}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:121 src/details_window.py:123
|
#: cartridges/details_dialog.py:118 cartridges/details_dialog.py:120
|
||||||
msgid "/path/to/{}"
|
msgid "/path/to/{}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/details_window.py:128
|
#: cartridges/details_dialog.py:125
|
||||||
msgid ""
|
msgid ""
|
||||||
"To launch the executable \"{}\", use the command:\n"
|
"To launch the executable \"{}\", use the command:\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -479,133 +492,136 @@ msgid ""
|
|||||||
"If the path contains spaces, make sure to wrap it in double quotes!"
|
"If the path contains spaces, make sure to wrap it in double quotes!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:177
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
|
||||||
msgid "Couldn't Add Game"
|
msgid "Couldn't Add Game"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:213
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:209
|
||||||
msgid "Game title cannot be empty."
|
msgid "Game title cannot be empty."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/details_window.py:177 src/details_window.py:221
|
#: cartridges/details_dialog.py:173 cartridges/details_dialog.py:217
|
||||||
msgid "Executable cannot be empty."
|
msgid "Executable cannot be empty."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/details_window.py:212 src/details_window.py:220
|
#: cartridges/details_dialog.py:208 cartridges/details_dialog.py:216
|
||||||
msgid "Couldn't Apply Preferences"
|
msgid "Couldn't Apply Preferences"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#: src/game.py:141
|
#: cartridges/game.py:139
|
||||||
msgid "{} launched"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. The variable is the title of the game
|
|
||||||
#: src/game.py:155
|
|
||||||
msgid "{} hidden"
|
msgid "{} hidden"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/game.py:155
|
#: cartridges/game.py:139
|
||||||
msgid "{} unhidden"
|
msgid "{} unhidden"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#. The variable is the number of games removed
|
#. The variable is the number of games removed
|
||||||
#: src/game.py:169 src/importer/importer.py:380
|
#: cartridges/game.py:153 cartridges/importer/importer.py:391
|
||||||
msgid "{} removed"
|
msgid "{} removed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/preferences.py:121
|
#: cartridges/preferences.py:133
|
||||||
msgid "All games removed"
|
msgid "All games removed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/preferences.py:169
|
#: cartridges/preferences.py:181
|
||||||
msgid ""
|
msgid ""
|
||||||
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/preferences.py:296
|
#: cartridges/preferences.py:196
|
||||||
|
msgid "Downloading covers…"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:215
|
||||||
|
msgid "Covers updated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:360
|
||||||
msgid "Installation Not Found"
|
msgid "Installation Not Found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/preferences.py:297
|
#: cartridges/preferences.py:361
|
||||||
msgid "Select a valid directory."
|
msgid "Select a valid directory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/preferences.py:333 src/importer/importer.py:306
|
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
|
||||||
msgid "Warning"
|
msgid "Warning"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/preferences.py:367
|
#: cartridges/preferences.py:431
|
||||||
msgid "Invalid Directory"
|
msgid "Invalid Directory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/preferences.py:373
|
#: cartridges/preferences.py:437
|
||||||
msgid "Set Location"
|
msgid "Set Location"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/utils/create_dialog.py:33 src/importer/importer.py:307
|
#: cartridges/utils/create_dialog.py:33 cartridges/importer/importer.py:319
|
||||||
msgid "Dismiss"
|
msgid "Dismiss"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/importer/importer.py:142
|
#: cartridges/importer/importer.py:145
|
||||||
msgid "Importing Games…"
|
msgid "Importing Games…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/importer/importer.py:327
|
#: cartridges/importer/importer.py:338
|
||||||
msgid "The following errors occured during import:"
|
msgid "The following errors occured during import:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/importer/importer.py:356
|
#: cartridges/importer/importer.py:367
|
||||||
msgid "No new games found"
|
msgid "No new games found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/importer/importer.py:368
|
#: cartridges/importer/importer.py:379
|
||||||
msgid "1 game imported"
|
msgid "1 game imported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. The variable is the number of games
|
#. The variable is the number of games
|
||||||
#: src/importer/importer.py:372
|
#: cartridges/importer/importer.py:383
|
||||||
msgid "{} games imported"
|
msgid "{} games imported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. A single game removed
|
#. A single game removed
|
||||||
#: src/importer/importer.py:376
|
#: cartridges/importer/importer.py:387
|
||||||
msgid "1 removed"
|
msgid "1 removed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:33
|
#: cartridges/importer/location.py:34
|
||||||
msgid "Select the {} cache directory."
|
msgid "Select the {} cache directory."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:35
|
#: cartridges/importer/location.py:36
|
||||||
msgid "Select the {} configuration directory."
|
msgid "Select the {} configuration directory."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:37
|
#: cartridges/importer/location.py:38
|
||||||
msgid "Select the {} data directory."
|
msgid "Select the {} data directory."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:46
|
#: cartridges/importer/retroarch_source.py:129
|
||||||
msgid "Couldn't Authenticate SteamGridDB"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:47
|
|
||||||
msgid "Verify your API key in preferences"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:129
|
|
||||||
msgid "No RetroArch Core Selected"
|
msgid "No RetroArch Core Selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. The variable is a newline separated list of playlists
|
#. The variable is a newline separated list of playlists
|
||||||
#: src/importer/sources/retroarch_source.py:131
|
#: cartridges/importer/retroarch_source.py:131
|
||||||
msgid "The following playlists have no default core:"
|
msgid "The following playlists have no default core:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:133
|
#: cartridges/importer/retroarch_source.py:133
|
||||||
msgid "Games with no core selected were not imported"
|
msgid "Games with no core selected were not imported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: cartridges/store/managers/sgdb_manager.py:46
|
||||||
|
msgid "Couldn't Authenticate SteamGridDB"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: cartridges/store/managers/sgdb_manager.py:47
|
||||||
|
msgid "Verify your API key in preferences"
|
||||||
|
msgstr ""
|
||||||
|
|||||||
572
po/cs.po
@@ -1,13 +1,13 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR kramo
|
# Copyright (C) YEAR kramo
|
||||||
# This file is distributed under the same license as the Cartridges package.
|
# This file is distributed under the same license as the Cartridges package.
|
||||||
# foo expert <deferred_water346@simplelogin.com>, 2023.
|
# foo expert <deferred_water346@simplelogin.com>, 2023, 2024.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Cartridges\n"
|
"Project-Id-Version: Cartridges\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-08-30 10:43+0200\n"
|
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
|
||||||
"PO-Revision-Date: 2023-08-05 08:07+0000\n"
|
"PO-Revision-Date: 2024-06-28 07:09+0000\n"
|
||||||
"Last-Translator: foo expert <deferred_water346@simplelogin.com>\n"
|
"Last-Translator: foo expert <deferred_water346@simplelogin.com>\n"
|
||||||
"Language-Team: Czech <https://hosted.weblate.org/projects/cartridges/"
|
"Language-Team: Czech <https://hosted.weblate.org/projects/cartridges/"
|
||||||
"cartridges/cs/>\n"
|
"cartridges/cs/>\n"
|
||||||
@@ -15,32 +15,32 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
|
||||||
"X-Generator: Weblate 5.0-dev\n"
|
"X-Generator: Weblate 5.7-dev\n"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:3
|
#: data/page.kramo.Cartridges.desktop.in:3
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
|
#: data/page.kramo.Cartridges.metainfo.xml.in:9
|
||||||
#: data/gtk/window.blp:80
|
#: data/page.kramo.Cartridges.metainfo.xml.in:40 data/gtk/window.blp:47
|
||||||
|
#: data/gtk/window.blp:83
|
||||||
msgid "Cartridges"
|
msgid "Cartridges"
|
||||||
msgstr "Kazety"
|
msgstr "Kazety"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:4
|
#: data/page.kramo.Cartridges.desktop.in:4
|
||||||
msgid "Game Launcher"
|
msgid "Game Launcher"
|
||||||
msgstr "Spouštěč her"
|
msgstr "Spouštěč her"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:5
|
#: data/page.kramo.Cartridges.desktop.in:5
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:7
|
#: data/page.kramo.Cartridges.metainfo.xml.in:10
|
||||||
msgid "Launch all your games"
|
msgid "Launch all your games"
|
||||||
msgstr "Spusťte všechny vaše hry"
|
msgstr "Spusťte všechny vaše hry"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:11
|
#: data/page.kramo.Cartridges.desktop.in:11
|
||||||
#, fuzzy
|
|
||||||
#| msgid "gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;"
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
||||||
msgstr "hraní;spouštěč;steam;lutris;heroic;láhve;itch;flatpak;legendary;"
|
msgstr ""
|
||||||
|
"hraní;spouštěč;steam;lutris;heroic;láhve;itch;flatpak;legendary;retroarch;"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
|
#: data/page.kramo.Cartridges.metainfo.xml.in:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cartridges is a simple game launcher for all of your games. It has support "
|
"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 "
|
"for importing games from Steam, Lutris, Heroic and more with no login "
|
||||||
@@ -51,440 +51,440 @@ msgstr ""
|
|||||||
"her ze služeb Steam, Lutris, Heroic a dalších bez nutnosti přihlášení. Hry "
|
"her ze služeb Steam, Lutris, Heroic a dalších bez nutnosti přihlášení. Hry "
|
||||||
"můžete třídit a skrývat nebo stahovat obálky ze služby SteamGridDB."
|
"můžete třídit a skrývat nebo stahovat obálky ze služby SteamGridDB."
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:30
|
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:318
|
||||||
msgid "Library"
|
#: cartridges/details_dialog.py:68
|
||||||
msgstr "Knihovna"
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:34
|
|
||||||
msgid "Edit Game Details"
|
|
||||||
msgstr "Upravit podrobnosti o hře"
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
|
|
||||||
#: src/details_window.py:71
|
|
||||||
msgid "Game Details"
|
msgid "Game Details"
|
||||||
msgstr "Podrobnosti o hře"
|
msgstr "Podrobnosti o hře"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
|
#: data/page.kramo.Cartridges.metainfo.xml.in:48
|
||||||
#: src/details_window.py:271 src/importer/importer.py:308
|
msgid "Edit Game Details"
|
||||||
#: src/importer/importer.py:359
|
msgstr "Upravit podrobnosti o hře"
|
||||||
|
|
||||||
|
#: 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"
|
msgid "Preferences"
|
||||||
msgstr "Předvolby"
|
msgstr "Předvolby"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:25
|
#: data/gtk/details-dialog.blp:15
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Zrušit"
|
msgstr "Zrušit"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:55
|
#: data/gtk/details-dialog.blp:46
|
||||||
msgid "New Cover"
|
msgid "New Cover"
|
||||||
msgstr "Nový obal"
|
msgstr "Nový obal"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:73
|
#: data/gtk/details-dialog.blp:65
|
||||||
msgid "Delete Cover"
|
msgid "Delete Cover"
|
||||||
msgstr "Odstranit obal"
|
msgstr "Odstranit obal"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
|
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Název"
|
msgstr "Název"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:103
|
#: data/gtk/details-dialog.blp:97
|
||||||
#, fuzzy
|
|
||||||
#| msgid "The developer or publisher (optional)"
|
|
||||||
msgid "Developer (optional)"
|
msgid "Developer (optional)"
|
||||||
msgstr "Vývojář nebo vydavatel (nepovinné)"
|
msgstr "Vývojář (nepovinné)"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:108
|
#: data/gtk/details-dialog.blp:103
|
||||||
msgid "Executable"
|
msgid "Executable"
|
||||||
msgstr "Spustitelný soubor"
|
msgstr "Spustitelný soubor"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:114
|
#: data/gtk/details-dialog.blp:109
|
||||||
msgid "Select File"
|
msgid "Select File"
|
||||||
msgstr ""
|
msgstr "Vybrat soubor"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:125
|
#: data/gtk/details-dialog.blp:120
|
||||||
msgid "More Info"
|
msgid "More Info"
|
||||||
msgstr "Více informací"
|
msgstr "Více informací"
|
||||||
|
|
||||||
#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
|
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
|
||||||
msgid "Edit"
|
msgid "Edit"
|
||||||
msgstr "Upravit"
|
msgstr "Upravit"
|
||||||
|
|
||||||
#: data/gtk/game.blp:107 src/window.py:348
|
#: data/gtk/game.blp:103 cartridges/window.py:350
|
||||||
msgid "Hide"
|
msgid "Hide"
|
||||||
msgstr "Skrýt"
|
msgstr "Skrýt"
|
||||||
|
|
||||||
#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
|
#: data/gtk/game.blp:104 data/gtk/game.blp:112 data/gtk/window.blp:463
|
||||||
#: data/gtk/window.blp:433
|
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Odstranit"
|
msgstr "Odstranit"
|
||||||
|
|
||||||
#: data/gtk/game.blp:126 src/window.py:350
|
#: data/gtk/game.blp:111 cartridges/window.py:352
|
||||||
msgid "Unhide"
|
msgid "Unhide"
|
||||||
msgstr "Odkrýt"
|
msgstr "Odkrýt"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
|
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Obecné"
|
msgstr "Obecné"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:14
|
#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:205 data/gtk/window.blp:221
|
||||||
msgid "Quit"
|
#: data/gtk/window.blp:272 data/gtk/window.blp:288 data/gtk/window.blp:474
|
||||||
msgstr "Ukončit"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
|
|
||||||
#: data/gtk/window.blp:444
|
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Vyhledávání"
|
msgstr "Vyhledávání"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:24
|
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
|
||||||
msgid "Show preferences"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "Zobrazit předvolby"
|
msgstr "Klávesové zkratky"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:29
|
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
|
||||||
msgid "Shortcuts"
|
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
|
||||||
msgstr "Zkratky"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
|
|
||||||
#: src/importer/importer.py:383
|
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Zpět"
|
msgstr "Zpět"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:39
|
#: data/gtk/help-overlay.blp:34
|
||||||
msgid "Open menu"
|
msgid "Quit"
|
||||||
msgstr "Otevřít nabídku"
|
msgstr "Ukončit"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:45
|
#: data/gtk/help-overlay.blp:39 data/gtk/window.blp:92 data/gtk/window.blp:185
|
||||||
|
msgid "Toggle Sidebar"
|
||||||
|
msgstr "Přepnout postranní panel"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:44 data/gtk/window.blp:198 data/gtk/window.blp:265
|
||||||
|
msgid "Main Menu"
|
||||||
|
msgstr "Hlavní nabídka"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:50
|
||||||
msgid "Games"
|
msgid "Games"
|
||||||
msgstr "Hry"
|
msgstr "Hry"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:48
|
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:191 data/gtk/window.blp:550
|
||||||
msgid "Add new game"
|
msgid "Add Game"
|
||||||
msgstr "Přidat novou hru"
|
msgstr "Přidat hru"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:53
|
#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:113
|
||||||
msgid "Import games"
|
#: data/gtk/window.blp:27 data/gtk/window.blp:554
|
||||||
msgstr "Importovat hry"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:58
|
|
||||||
msgid "Show hidden games"
|
|
||||||
msgstr "Zobrazit skryté hry"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:63
|
|
||||||
msgid "Remove game"
|
|
||||||
msgstr "Odstranit hru"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
|
|
||||||
#: data/gtk/preferences.blp:288
|
|
||||||
msgid "Behavior"
|
|
||||||
msgstr "Chování"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:15
|
|
||||||
msgid "Exit After Launching Games"
|
|
||||||
msgstr "Ukončit po spuštění her"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:19
|
|
||||||
msgid "Cover Image Launches Game"
|
|
||||||
msgstr "Obrázek na obálce spouští hru"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:20
|
|
||||||
msgid "Swaps the behavior of the cover image and the play button"
|
|
||||||
msgstr "Vymění chování obrázku na obálce a tlačítka pro přehrávání"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:25 src/details_window.py:85
|
|
||||||
msgid "Images"
|
|
||||||
msgstr "Obrázky"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:28
|
|
||||||
msgid "High Quality Images"
|
|
||||||
msgstr "Vysoce kvalitní obrázky"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:29
|
|
||||||
msgid "Save game covers losslessly at the cost of storage"
|
|
||||||
msgstr "Ukládat obaly her bezztrátově na úkor většího místa na disku"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:34
|
|
||||||
msgid "Danger Zone"
|
|
||||||
msgstr "Nebezpečná zóna"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:37
|
|
||||||
msgid "Remove All Games"
|
|
||||||
msgstr "Odstranit všechny hry"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
|
|
||||||
msgid "Import"
|
msgid "Import"
|
||||||
msgstr "Import"
|
msgstr "Import"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:75
|
#: data/gtk/help-overlay.blp:63
|
||||||
#, fuzzy
|
msgid "Show Hidden Games"
|
||||||
#| msgid "Remove All Games"
|
msgstr "Zobrazit skryté hry"
|
||||||
msgid "Remove Uninstalled Games"
|
|
||||||
|
#: data/gtk/help-overlay.blp:68
|
||||||
|
msgid "Remove Game"
|
||||||
|
msgstr "Odstranit hru"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:117
|
||||||
|
#: data/gtk/preferences.blp:415
|
||||||
|
msgid "Behavior"
|
||||||
|
msgstr "Chování"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:16
|
||||||
|
msgid "Exit After Launching Games"
|
||||||
|
msgstr "Ukončit po spuštění her"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:20
|
||||||
|
msgid "Cover Image Launches Game"
|
||||||
|
msgstr "Obrázek na obálce spouští hru"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:21
|
||||||
|
msgid "Swaps the behavior of the cover image and the play button"
|
||||||
|
msgstr "Vymění chování obrázku na obálce a tlačítka pro přehrávání"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:26 cartridges/details_dialog.py:82
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Obrázky"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:29
|
||||||
|
msgid "High Quality Images"
|
||||||
|
msgstr "Vysoce kvalitní obrázky"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:30
|
||||||
|
msgid "Save game covers losslessly at the cost of storage"
|
||||||
|
msgstr "Ukládat obaly her bezztrátově na úkor většího místa na disku"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:35
|
||||||
|
msgid "Danger Zone"
|
||||||
|
msgstr "Nebezpečná zóna"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:48
|
||||||
|
msgid "Remove All Games"
|
||||||
msgstr "Odstranit všechny hry"
|
msgstr "Odstranit všechny hry"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:80
|
#: data/gtk/preferences.blp:120
|
||||||
|
msgid "Remove Uninstalled Games"
|
||||||
|
msgstr "Odstranit odinstalované hry"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:125
|
||||||
msgid "Sources"
|
msgid "Sources"
|
||||||
msgstr "Zdroje"
|
msgstr "Zdroje"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
|
#: data/gtk/preferences.blp:128 cartridges/importer/steam_source.py:114
|
||||||
msgid "Steam"
|
msgid "Steam"
|
||||||
msgstr "Steam"
|
msgstr "Steam"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
|
#: data/gtk/preferences.blp:137 data/gtk/preferences.blp:164
|
||||||
#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
|
#: data/gtk/preferences.blp:199 data/gtk/preferences.blp:242
|
||||||
#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
|
#: data/gtk/preferences.blp:269 data/gtk/preferences.blp:296
|
||||||
#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
|
#: data/gtk/preferences.blp:323
|
||||||
msgid "Install Location"
|
msgid "Install Location"
|
||||||
msgstr "Umístění instalace"
|
msgstr "Umístění instalace"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
|
#: data/gtk/preferences.blp:155 data/gtk/window.blp:564
|
||||||
|
#: cartridges/importer/lutris_source.py:96
|
||||||
msgid "Lutris"
|
msgid "Lutris"
|
||||||
msgstr "Lutris"
|
msgstr "Lutris"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:116
|
#: data/gtk/preferences.blp:181
|
||||||
msgid "Cache Location"
|
|
||||||
msgstr "Umístění dočasných souborů"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:128
|
|
||||||
msgid "Import Steam Games"
|
msgid "Import Steam Games"
|
||||||
msgstr "Importovat Steam hry"
|
msgstr "Importovat Steam hry"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:132
|
#: data/gtk/preferences.blp:185
|
||||||
msgid "Import Flatpak Games"
|
msgid "Import Flatpak Games"
|
||||||
msgstr "Importovat Flatpak hry"
|
msgstr "Importovat Flatpak hry"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
|
#: data/gtk/preferences.blp:190 cartridges/importer/heroic_source.py:355
|
||||||
msgid "Heroic"
|
msgid "Heroic"
|
||||||
msgstr "Heroic"
|
msgstr "Heroic"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:153
|
#: data/gtk/preferences.blp:216
|
||||||
msgid "Import Epic Games"
|
msgid "Import Epic Games"
|
||||||
msgstr "Importovat Epic Games hry"
|
msgstr "Importovat Epic Games hry"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:157
|
#: data/gtk/preferences.blp:220
|
||||||
msgid "Import GOG Games"
|
msgid "Import GOG Games"
|
||||||
msgstr "Importovat GOG hry"
|
msgstr "Importovat GOG hry"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:161
|
#: data/gtk/preferences.blp:224
|
||||||
msgid "Import Amazon Games"
|
msgid "Import Amazon Games"
|
||||||
msgstr "Importovat Amazon hry"
|
msgstr "Importovat Amazon hry"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:165
|
#: data/gtk/preferences.blp:228
|
||||||
msgid "Import Sideloaded Games"
|
msgid "Import Sideloaded Games"
|
||||||
msgstr "Importovat ručně načtené hry"
|
msgstr "Importovat ručně načtené hry"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
|
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
|
||||||
msgid "Bottles"
|
msgid "Bottles"
|
||||||
msgstr "Láhve"
|
msgstr "Láhve"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
|
#: data/gtk/preferences.blp:260 cartridges/importer/itch_source.py:81
|
||||||
msgid "itch"
|
msgid "itch"
|
||||||
msgstr "itch"
|
msgstr "itch"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
|
#: data/gtk/preferences.blp:287 cartridges/importer/legendary_source.py:97
|
||||||
msgid "Legendary"
|
msgid "Legendary"
|
||||||
msgstr "Legendary"
|
msgstr "Legendary"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
|
#: data/gtk/preferences.blp:314 cartridges/importer/retroarch_source.py:142
|
||||||
msgid "RetroArch"
|
msgid "RetroArch"
|
||||||
msgstr ""
|
msgstr "RetroArch"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
|
#: data/gtk/preferences.blp:341 cartridges/importer/flatpak_source.py:143
|
||||||
msgid "Flatpak"
|
msgid "Flatpak"
|
||||||
msgstr "Flatpak"
|
msgstr "Flatpak"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:254
|
#. The location of the system-wide data directory
|
||||||
|
#: data/gtk/preferences.blp:351
|
||||||
|
msgid "System Location"
|
||||||
|
msgstr "Systémové umístění"
|
||||||
|
|
||||||
|
#. The location of the user-specific data directory
|
||||||
|
#: data/gtk/preferences.blp:369
|
||||||
|
msgid "User Location"
|
||||||
|
msgstr "Uživatelské umístění"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:386
|
||||||
msgid "Import Game Launchers"
|
msgid "Import Game Launchers"
|
||||||
msgstr "Importovat spouštěče her"
|
msgstr "Importovat spouštěče her"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
|
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
|
||||||
msgid "Desktop Entries"
|
msgid "Desktop Entries"
|
||||||
msgstr ""
|
msgstr "Položky na ploše"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:276
|
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
|
||||||
msgid "SteamGridDB"
|
msgid "SteamGridDB"
|
||||||
msgstr "SteamGridDB"
|
msgstr "SteamGridDB"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:280
|
#: data/gtk/preferences.blp:407
|
||||||
msgid "Authentication"
|
msgid "Authentication"
|
||||||
msgstr "Ověření"
|
msgstr "Ověření"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:283
|
#: data/gtk/preferences.blp:410
|
||||||
msgid "API Key"
|
msgid "API Key"
|
||||||
msgstr "Klíč API"
|
msgstr "Klíč API"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:291
|
#: data/gtk/preferences.blp:418
|
||||||
msgid "Use SteamGridDB"
|
msgid "Use SteamGridDB"
|
||||||
msgstr "Používat SteamGridDB"
|
msgstr "Používat SteamGridDB"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:292
|
#: data/gtk/preferences.blp:419
|
||||||
msgid "Download images when adding or importing games"
|
msgid "Download images when adding or importing games"
|
||||||
msgstr "Stahovat obrázky při přidávání nebo importování her"
|
msgstr "Stahovat obrázky při přidávání nebo importování her"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:296
|
#: data/gtk/preferences.blp:423
|
||||||
msgid "Prefer Over Official Images"
|
msgid "Prefer Over Official Images"
|
||||||
msgstr "Upřednostnit před oficiálními obrázky"
|
msgstr "Upřednostnit před oficiálními obrázky"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:300
|
#: data/gtk/preferences.blp:427
|
||||||
msgid "Prefer Animated Images"
|
msgid "Prefer Animated Images"
|
||||||
msgstr "Upřednostnit animované obrázky"
|
msgstr "Upřednostnit animované obrázky"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:433
|
||||||
|
msgid "Update Covers"
|
||||||
|
msgstr "Aktualizovat obálky"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:434
|
||||||
|
msgid "Fetch covers for games already in your library"
|
||||||
|
msgstr "Najít obálky pro hry ve vaší knihovně"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:439
|
||||||
|
msgid "Update"
|
||||||
|
msgstr "Aktualizovat"
|
||||||
|
|
||||||
#: data/gtk/window.blp:6 data/gtk/window.blp:14
|
#: data/gtk/window.blp:6 data/gtk/window.blp:14
|
||||||
msgid "No Games Found"
|
msgid "No Games Found"
|
||||||
msgstr "Nebyly nalezeny žádné hry"
|
msgstr "Nebyly nalezeny žádné hry"
|
||||||
|
|
||||||
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
||||||
msgid "Try a different search."
|
msgid "Try a different search"
|
||||||
msgstr "Zkuste hledat něco jiného."
|
msgstr "Zkuste hledat něco jiného"
|
||||||
|
|
||||||
#: data/gtk/window.blp:21
|
#: data/gtk/window.blp:21
|
||||||
msgid "No Games"
|
msgid "No Games"
|
||||||
msgstr "Žádné hry"
|
msgstr "Žádné hry"
|
||||||
|
|
||||||
#: data/gtk/window.blp:22
|
#: data/gtk/window.blp:22
|
||||||
msgid "Use the + button to add games."
|
msgid "Use the + button to add games"
|
||||||
msgstr "Tlačítkem + můžete přidávat hry."
|
msgstr "Tlačítkem + můžete přidávat hry"
|
||||||
|
|
||||||
#: data/gtk/window.blp:40
|
#: data/gtk/window.blp:40
|
||||||
msgid "No Hidden Games"
|
msgid "No Hidden Games"
|
||||||
msgstr "Žádné skryté hry"
|
msgstr "Žádné skryté hry"
|
||||||
|
|
||||||
#: data/gtk/window.blp:41
|
#: data/gtk/window.blp:41
|
||||||
msgid "Games you hide will appear here."
|
msgid "Games you hide will appear here"
|
||||||
msgstr "Hry, které skryjete, se zobrazí zde."
|
msgstr "Hry, které skryjete, se zobrazí zde"
|
||||||
|
|
||||||
#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
|
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Remove All Games"
|
|
||||||
msgid "All Games"
|
msgid "All Games"
|
||||||
msgstr "Odstranit všechny hry"
|
msgstr "Všechny hry"
|
||||||
|
|
||||||
#: data/gtk/window.blp:88 data/gtk/window.blp:162
|
#: data/gtk/window.blp:136 cartridges/main.py:230
|
||||||
msgid "Toggle Sidebar"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:125 src/main.py:168
|
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Added: {}"
|
|
||||||
msgid "Added"
|
msgid "Added"
|
||||||
msgstr "Přidáno: {}"
|
msgstr "Přidané"
|
||||||
|
|
||||||
#: data/gtk/window.blp:140
|
#: data/gtk/window.blp:156
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Import"
|
|
||||||
msgid "Imported"
|
msgid "Imported"
|
||||||
msgstr "Import"
|
msgstr "Importované"
|
||||||
|
|
||||||
#: data/gtk/window.blp:168 data/gtk/window.blp:532
|
#: data/gtk/window.blp:258
|
||||||
msgid "Add Game"
|
|
||||||
msgstr "Přidat hru"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:175 data/gtk/window.blp:234
|
|
||||||
msgid "Main Menu"
|
|
||||||
msgstr "Hlavní nabídka"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:227
|
|
||||||
msgid "Hidden Games"
|
msgid "Hidden Games"
|
||||||
msgstr "Skryté hry"
|
msgstr "Skryté hry"
|
||||||
|
|
||||||
#: data/gtk/window.blp:337
|
#: data/gtk/window.blp:367
|
||||||
msgid "Game Title"
|
msgid "Game Title"
|
||||||
msgstr "Název hry"
|
msgstr "Název hry"
|
||||||
|
|
||||||
#: data/gtk/window.blp:394
|
#: data/gtk/window.blp:424
|
||||||
msgid "Play"
|
msgid "Play"
|
||||||
msgstr "Hrát"
|
msgstr "Hrát"
|
||||||
|
|
||||||
#: data/gtk/window.blp:471
|
#: data/gtk/window.blp:501
|
||||||
msgid "Sort"
|
msgid "Sort"
|
||||||
msgstr "Třídit"
|
msgstr "Třídit"
|
||||||
|
|
||||||
#: data/gtk/window.blp:474
|
#: data/gtk/window.blp:504
|
||||||
msgid "A-Z"
|
msgid "A-Z"
|
||||||
msgstr "A-Ž"
|
msgstr "A-Ž"
|
||||||
|
|
||||||
#: data/gtk/window.blp:480
|
#: data/gtk/window.blp:510
|
||||||
msgid "Z-A"
|
msgid "Z-A"
|
||||||
msgstr "Ž-A"
|
msgstr "Ž-A"
|
||||||
|
|
||||||
#: data/gtk/window.blp:486
|
#: data/gtk/window.blp:516
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Nejnovější"
|
msgstr "Nejnovější"
|
||||||
|
|
||||||
#: data/gtk/window.blp:492
|
#: data/gtk/window.blp:522
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Nejstarší"
|
msgstr "Nejstarší"
|
||||||
|
|
||||||
#: data/gtk/window.blp:498
|
#: data/gtk/window.blp:528
|
||||||
msgid "Last Played"
|
msgid "Last Played"
|
||||||
msgstr "Naposledy hráno"
|
msgstr "Naposledy hráno"
|
||||||
|
|
||||||
#: data/gtk/window.blp:505
|
#: data/gtk/window.blp:535
|
||||||
msgid "Show Hidden"
|
msgid "Show Hidden"
|
||||||
msgstr "Zobrazit Skryté"
|
msgstr "Zobrazit Skryté"
|
||||||
|
|
||||||
#: data/gtk/window.blp:518
|
#: data/gtk/window.blp:544
|
||||||
msgid "Keyboard Shortcuts"
|
|
||||||
msgstr "Klávesové zkratky"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:523
|
|
||||||
msgid "About Cartridges"
|
msgid "About Cartridges"
|
||||||
msgstr "O Kazetách"
|
msgstr "O Kazetách"
|
||||||
|
|
||||||
|
#: 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 "{} spuštěno"
|
||||||
|
|
||||||
#. Translators: Replace this with your name for it to show up in the about window
|
#. Translators: Replace this with your name for it to show up in the about window
|
||||||
#: src/main.py:207
|
#: cartridges/main.py:270
|
||||||
msgid "translator_credits"
|
msgid "translator_credits"
|
||||||
msgstr "ooo.i.love.foo"
|
msgstr "ooo.i.love.foo"
|
||||||
|
|
||||||
#. The variable is the date when the game was added
|
#. The variable is the date when the game was added
|
||||||
#: src/window.py:371
|
#: cartridges/window.py:373
|
||||||
msgid "Added: {}"
|
msgid "Added: {}"
|
||||||
msgstr "Přidáno: {}"
|
msgstr "Přidáno: {}"
|
||||||
|
|
||||||
#: src/window.py:374
|
#: cartridges/window.py:376
|
||||||
msgid "Never"
|
msgid "Never"
|
||||||
msgstr "Nikdy"
|
msgstr "Nikdy"
|
||||||
|
|
||||||
#. The variable is the date when the game was last played
|
#. The variable is the date when the game was last played
|
||||||
#: src/window.py:378
|
#: cartridges/window.py:380
|
||||||
msgid "Last played: {}"
|
msgid "Last played: {}"
|
||||||
msgstr "Naposledy hráno: {}"
|
msgstr "Naposledy hráno: {}"
|
||||||
|
|
||||||
#: src/details_window.py:76
|
#: cartridges/details_dialog.py:73
|
||||||
msgid "Apply"
|
msgid "Apply"
|
||||||
msgstr "Použít"
|
msgstr "Použít"
|
||||||
|
|
||||||
#: src/details_window.py:82
|
#: cartridges/details_dialog.py:79
|
||||||
msgid "Add New Game"
|
msgid "Add New Game"
|
||||||
msgstr "Přidat novou hru"
|
msgstr "Přidat novou hru"
|
||||||
|
|
||||||
#: src/details_window.py:83
|
#: cartridges/details_dialog.py:80
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr ""
|
msgstr "Přidat"
|
||||||
|
|
||||||
#: src/details_window.py:93
|
#: cartridges/details_dialog.py:90
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Executable"
|
|
||||||
msgid "Executables"
|
msgid "Executables"
|
||||||
msgstr "Spustitelný soubor"
|
msgstr "Spustitelné soubory"
|
||||||
|
|
||||||
#. Translate this string as you would translate "file"
|
#. Translate this string as you would translate "file"
|
||||||
#: src/details_window.py:108
|
#: cartridges/details_dialog.py:105
|
||||||
msgid "file.txt"
|
msgid "file.txt"
|
||||||
msgstr "soubor.txt"
|
msgstr "soubor.txt"
|
||||||
|
|
||||||
#. As in software
|
#. As in software
|
||||||
#: src/details_window.py:110
|
#: cartridges/details_dialog.py:107
|
||||||
msgid "program"
|
msgid "program"
|
||||||
msgstr "program"
|
msgstr "program"
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:115 src/details_window.py:117
|
#: cartridges/details_dialog.py:112 cartridges/details_dialog.py:114
|
||||||
msgid "C:\\path\\to\\{}"
|
msgid "C:\\path\\to\\{}"
|
||||||
msgstr "C:\\cesta\\k\\{}"
|
msgstr "C:\\cesta\\k\\{}"
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:121 src/details_window.py:123
|
#: cartridges/details_dialog.py:118 cartridges/details_dialog.py:120
|
||||||
msgid "/path/to/{}"
|
msgid "/path/to/{}"
|
||||||
msgstr "/cesta/k/{}"
|
msgstr "/cesta/k/{}"
|
||||||
|
|
||||||
#: src/details_window.py:128
|
#: cartridges/details_dialog.py:125
|
||||||
msgid ""
|
msgid ""
|
||||||
"To launch the executable \"{}\", use the command:\n"
|
"To launch the executable \"{}\", use the command:\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -506,148 +506,162 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Pokud cesta obsahuje mezery, nezapomeňte ji zabalit do dvojitých uvozovek!"
|
"Pokud cesta obsahuje mezery, nezapomeňte ji zabalit do dvojitých uvozovek!"
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:177
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
|
||||||
msgid "Couldn't Add Game"
|
msgid "Couldn't Add Game"
|
||||||
msgstr "Nelze přidat hru"
|
msgstr "Nelze přidat hru"
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:213
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:209
|
||||||
msgid "Game title cannot be empty."
|
msgid "Game title cannot be empty."
|
||||||
msgstr "Název hry nemůže být prázdný."
|
msgstr "Název hry nemůže být prázdný."
|
||||||
|
|
||||||
#: src/details_window.py:177 src/details_window.py:221
|
#: cartridges/details_dialog.py:173 cartridges/details_dialog.py:217
|
||||||
msgid "Executable cannot be empty."
|
msgid "Executable cannot be empty."
|
||||||
msgstr "Spustitelný soubor nemůže být prázdný."
|
msgstr "Spustitelný soubor nemůže být prázdný."
|
||||||
|
|
||||||
#: src/details_window.py:212 src/details_window.py:220
|
#: cartridges/details_dialog.py:208 cartridges/details_dialog.py:216
|
||||||
msgid "Couldn't Apply Preferences"
|
msgid "Couldn't Apply Preferences"
|
||||||
msgstr "Nelze použít předvolby"
|
msgstr "Nelze použít předvolby"
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#: src/game.py:141
|
#: cartridges/game.py:139
|
||||||
msgid "{} launched"
|
|
||||||
msgstr "{} spuštěno"
|
|
||||||
|
|
||||||
#. The variable is the title of the game
|
|
||||||
#: src/game.py:155
|
|
||||||
msgid "{} hidden"
|
msgid "{} hidden"
|
||||||
msgstr "{} skryto"
|
msgstr "{} skryto"
|
||||||
|
|
||||||
#: src/game.py:155
|
#: cartridges/game.py:139
|
||||||
msgid "{} unhidden"
|
msgid "{} unhidden"
|
||||||
msgstr "{} odkryto"
|
msgstr "{} odkryto"
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#. The variable is the number of games removed
|
#. The variable is the number of games removed
|
||||||
#: src/game.py:169 src/importer/importer.py:380
|
#: cartridges/game.py:153 cartridges/importer/importer.py:391
|
||||||
msgid "{} removed"
|
msgid "{} removed"
|
||||||
msgstr "{} odstraněno"
|
msgstr "{} odstraněno"
|
||||||
|
|
||||||
#: src/preferences.py:121
|
#: cartridges/preferences.py:133
|
||||||
msgid "All games removed"
|
msgid "All games removed"
|
||||||
msgstr "Všechny hry odstraněny"
|
msgstr "Všechny hry odstraněny"
|
||||||
|
|
||||||
#: src/preferences.py:169
|
#: cartridges/preferences.py:181
|
||||||
msgid ""
|
msgid ""
|
||||||
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"K používání služby SteamGridDB je vyžadován klíč API. Můžete si ho "
|
"K používání služby SteamGridDB je vyžadován klíč API. Můžete si ho "
|
||||||
"vygenerovat {}zde{}."
|
"vygenerovat {}zde{}."
|
||||||
|
|
||||||
#: src/preferences.py:296
|
#: cartridges/preferences.py:196
|
||||||
|
msgid "Downloading covers…"
|
||||||
|
msgstr "Stahování obálek…"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:215
|
||||||
|
msgid "Covers updated"
|
||||||
|
msgstr "Obálky aktualizovány"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:360
|
||||||
msgid "Installation Not Found"
|
msgid "Installation Not Found"
|
||||||
msgstr "Instalace nebyla nalezena"
|
msgstr "Instalace nebyla nalezena"
|
||||||
|
|
||||||
#: src/preferences.py:297
|
#: cartridges/preferences.py:361
|
||||||
msgid "Select a valid directory."
|
msgid "Select a valid directory"
|
||||||
msgstr "Vyberte platný adresář."
|
msgstr "Vyberte platný adresář"
|
||||||
|
|
||||||
#: src/preferences.py:333 src/importer/importer.py:306
|
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
|
||||||
msgid "Warning"
|
msgid "Warning"
|
||||||
msgstr ""
|
msgstr "Pozor"
|
||||||
|
|
||||||
#: src/preferences.py:367
|
#: cartridges/preferences.py:431
|
||||||
msgid "Invalid Directory"
|
msgid "Invalid Directory"
|
||||||
msgstr "Neplatný adresář"
|
msgstr "Neplatný adresář"
|
||||||
|
|
||||||
#: src/preferences.py:373
|
#: cartridges/preferences.py:437
|
||||||
msgid "Set Location"
|
msgid "Set Location"
|
||||||
msgstr "Nastavit umístění"
|
msgstr "Nastavit umístění"
|
||||||
|
|
||||||
#: src/utils/create_dialog.py:33 src/importer/importer.py:307
|
#: cartridges/utils/create_dialog.py:33 cartridges/importer/importer.py:319
|
||||||
msgid "Dismiss"
|
msgid "Dismiss"
|
||||||
msgstr "Zahodit"
|
msgstr "Zahodit"
|
||||||
|
|
||||||
#: src/importer/importer.py:142
|
#: cartridges/importer/importer.py:145
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Import Epic Games"
|
|
||||||
msgid "Importing Games…"
|
msgid "Importing Games…"
|
||||||
msgstr "Importovat Epic Games hry"
|
msgstr "Přidávání her…"
|
||||||
|
|
||||||
#: src/importer/importer.py:327
|
#: cartridges/importer/importer.py:338
|
||||||
msgid "The following errors occured during import:"
|
msgid "The following errors occured during import:"
|
||||||
msgstr ""
|
msgstr "Tyto chyby se vyskytly při importu:"
|
||||||
|
|
||||||
#: src/importer/importer.py:356
|
#: cartridges/importer/importer.py:367
|
||||||
#, fuzzy
|
|
||||||
#| msgid "No Games Found"
|
|
||||||
msgid "No new games found"
|
msgid "No new games found"
|
||||||
msgstr "Nebyly nalezeny žádné hry"
|
msgstr "Nebyly nalezeny žádné nové hry"
|
||||||
|
|
||||||
#: src/importer/importer.py:368
|
#: cartridges/importer/importer.py:379
|
||||||
#, fuzzy
|
|
||||||
#| msgid "All games removed"
|
|
||||||
msgid "1 game imported"
|
msgid "1 game imported"
|
||||||
msgstr "Všechny hry odstraněny"
|
msgstr "Přidána 1 hra"
|
||||||
|
|
||||||
#. The variable is the number of games
|
#. The variable is the number of games
|
||||||
#: src/importer/importer.py:372
|
#: cartridges/importer/importer.py:383
|
||||||
#, fuzzy
|
|
||||||
#| msgid "All games removed"
|
|
||||||
msgid "{} games imported"
|
msgid "{} games imported"
|
||||||
msgstr "Všechny hry odstraněny"
|
msgstr "Přidány {} hry"
|
||||||
|
|
||||||
#. A single game removed
|
#. A single game removed
|
||||||
#: src/importer/importer.py:376
|
#: cartridges/importer/importer.py:387
|
||||||
#, fuzzy
|
|
||||||
#| msgid "{} removed"
|
|
||||||
msgid "1 removed"
|
msgid "1 removed"
|
||||||
msgstr "{} odstraněno"
|
msgstr "1 odstraněna"
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:33
|
#: cartridges/importer/location.py:34
|
||||||
msgid "Select the {} cache directory."
|
msgid "Select the {} cache directory."
|
||||||
msgstr "Vyberte adresář {} mezipaměti."
|
msgstr "Vyberte adresář {} mezipaměti."
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:35
|
#: cartridges/importer/location.py:36
|
||||||
msgid "Select the {} configuration directory."
|
msgid "Select the {} configuration directory."
|
||||||
msgstr "Vyberte konfigurační adresář {}."
|
msgstr "Vyberte konfigurační adresář {}."
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:37
|
#: cartridges/importer/location.py:38
|
||||||
msgid "Select the {} data directory."
|
msgid "Select the {} data directory."
|
||||||
msgstr "Vyberte datový adresář {}."
|
msgstr "Vyberte datový adresář {}."
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:46
|
#: cartridges/importer/retroarch_source.py:129
|
||||||
|
msgid "No RetroArch Core Selected"
|
||||||
|
msgstr "Žádné RetroArch jádro nevybráno"
|
||||||
|
|
||||||
|
#. The variable is a newline separated list of playlists
|
||||||
|
#: cartridges/importer/retroarch_source.py:131
|
||||||
|
msgid "The following playlists have no default core:"
|
||||||
|
msgstr "Tyto seznamy her nemají výchozí jádra:"
|
||||||
|
|
||||||
|
#: cartridges/importer/retroarch_source.py:133
|
||||||
|
msgid "Games with no core selected were not imported"
|
||||||
|
msgstr "Hry bez vybraného jádra nebyly přidány"
|
||||||
|
|
||||||
|
#: cartridges/store/managers/sgdb_manager.py:46
|
||||||
msgid "Couldn't Authenticate SteamGridDB"
|
msgid "Couldn't Authenticate SteamGridDB"
|
||||||
msgstr "Nelze ověřit SteamGridDB"
|
msgstr "Nelze ověřit SteamGridDB"
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:47
|
#: cartridges/store/managers/sgdb_manager.py:47
|
||||||
msgid "Verify your API key in preferences"
|
msgid "Verify your API key in preferences"
|
||||||
msgstr "Ověřte váš klíč API v předvolbách"
|
msgstr "Ověřte váš klíč API v předvolbách"
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:129
|
#~ msgid "Cache Location"
|
||||||
msgid "No RetroArch Core Selected"
|
#~ msgstr "Umístění dočasných souborů"
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. The variable is a newline separated list of playlists
|
#~ msgid "Library"
|
||||||
#: src/importer/sources/retroarch_source.py:131
|
#~ msgstr "Knihovna"
|
||||||
msgid "The following playlists have no default core:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:133
|
#~ msgid "Show preferences"
|
||||||
msgid "Games with no core selected were not imported"
|
#~ msgstr "Zobrazit předvolby"
|
||||||
msgstr ""
|
|
||||||
|
#~ msgid "Shortcuts"
|
||||||
|
#~ msgstr "Zkratky"
|
||||||
|
|
||||||
|
#~ msgid "Open menu"
|
||||||
|
#~ msgstr "Otevřít nabídku"
|
||||||
|
|
||||||
|
#~ msgid "Add new game"
|
||||||
|
#~ msgstr "Přidat novou hru"
|
||||||
|
|
||||||
|
#~ msgid "Import games"
|
||||||
|
#~ msgstr "Importovat hry"
|
||||||
|
|
||||||
#~ msgid "Back"
|
#~ msgid "Back"
|
||||||
#~ msgstr "Zpět"
|
#~ msgstr "Zpět"
|
||||||
|
|||||||
596
po/de.po
@@ -5,13 +5,14 @@
|
|||||||
# WebSnke <websnke@tutanota.com>, 2023.
|
# WebSnke <websnke@tutanota.com>, 2023.
|
||||||
# Ettore Atalan <atalanttore@googlemail.com>, 2023.
|
# Ettore Atalan <atalanttore@googlemail.com>, 2023.
|
||||||
# Simon Hahne <simonhahne@web.de>, 2023.
|
# Simon Hahne <simonhahne@web.de>, 2023.
|
||||||
|
# Konstantin Tutsch <mail@konstantintutsch.com>, 2024.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Cartridges\n"
|
"Project-Id-Version: Cartridges\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-08-30 10:43+0200\n"
|
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
|
||||||
"PO-Revision-Date: 2023-08-05 08:07+0000\n"
|
"PO-Revision-Date: 2024-02-19 06:35+0000\n"
|
||||||
"Last-Translator: Simon Hahne <simonhahne@web.de>\n"
|
"Last-Translator: Konstantin Tutsch <mail@konstantintutsch.com>\n"
|
||||||
"Language-Team: German <https://hosted.weblate.org/projects/cartridges/"
|
"Language-Team: German <https://hosted.weblate.org/projects/cartridges/"
|
||||||
"cartridges/de/>\n"
|
"cartridges/de/>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
@@ -19,476 +20,476 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 5.0-dev\n"
|
"X-Generator: Weblate 5.4\n"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:3
|
#: data/page.kramo.Cartridges.desktop.in:3
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
|
#: data/page.kramo.Cartridges.metainfo.xml.in:9
|
||||||
#: data/gtk/window.blp:80
|
#: data/page.kramo.Cartridges.metainfo.xml.in:40 data/gtk/window.blp:47
|
||||||
|
#: data/gtk/window.blp:83
|
||||||
msgid "Cartridges"
|
msgid "Cartridges"
|
||||||
msgstr "Cartridges"
|
msgstr "Cartridges"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:4
|
#: data/page.kramo.Cartridges.desktop.in:4
|
||||||
msgid "Game Launcher"
|
msgid "Game Launcher"
|
||||||
msgstr "Spiele-Launcher"
|
msgstr "Spiele-Launcher"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:5
|
#: data/page.kramo.Cartridges.desktop.in:5
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:7
|
#: data/page.kramo.Cartridges.metainfo.xml.in:10
|
||||||
msgid "Launch all your games"
|
msgid "Launch all your games"
|
||||||
msgstr "Starte all deine Spiele"
|
msgstr "Starten Sie alle Ihre Spiele"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:11
|
#: data/page.kramo.Cartridges.desktop.in:11
|
||||||
#, fuzzy
|
|
||||||
#| msgid "gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;"
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
||||||
msgstr "spiel;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;"
|
msgstr ""
|
||||||
|
"spiel;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
|
#: data/page.kramo.Cartridges.metainfo.xml.in:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cartridges is a simple game launcher for all of your games. It has support "
|
"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 "
|
"for importing games from Steam, Lutris, Heroic and more with no login "
|
||||||
"necessary. You can sort and hide games or download cover art from "
|
"necessary. You can sort and hide games or download cover art from "
|
||||||
"SteamGridDB."
|
"SteamGridDB."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Cartridges ist ein einfacher Spiel-Launcher. Es unterstützt das Importieren "
|
"Cartridges ist ein einfacher Game Launcher für alle deine Spiele. Es bietet "
|
||||||
"von Spielen aus Steam, Lutris, Heroic und mehr, keine Anmeldung "
|
"Unterstützung für den Import von Spielen aus Steam, Lutris, Heroic und mehr, "
|
||||||
"erforderlich. Du kannst sortieren, Spiele verstecken oder das Cover-Art aus "
|
"ohne dass eine Anmeldung erforderlich ist. Sie können Spiele sortieren und "
|
||||||
"SteamGRID herunterladen."
|
"ausblenden oder Cover-Art von SteamGridDB herunterladen."
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:30
|
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:318
|
||||||
msgid "Library"
|
#: cartridges/details_dialog.py:68
|
||||||
msgstr "Bibliothek"
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:34
|
|
||||||
msgid "Edit Game Details"
|
|
||||||
msgstr "Spieldetails bearbeiten"
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
|
|
||||||
#: src/details_window.py:71
|
|
||||||
msgid "Game Details"
|
msgid "Game Details"
|
||||||
msgstr "Spieldetails"
|
msgstr "Spieldetails"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
|
#: data/page.kramo.Cartridges.metainfo.xml.in:48
|
||||||
#: src/details_window.py:271 src/importer/importer.py:308
|
msgid "Edit Game Details"
|
||||||
#: src/importer/importer.py:359
|
msgstr "Spieldetails bearbeiten"
|
||||||
|
|
||||||
|
#: 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"
|
msgid "Preferences"
|
||||||
msgstr "Einstellungen"
|
msgstr "Einstellungen"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:25
|
#: data/gtk/details-dialog.blp:15
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Abbrechen"
|
msgstr "Abbrechen"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:55
|
#: data/gtk/details-dialog.blp:46
|
||||||
msgid "New Cover"
|
msgid "New Cover"
|
||||||
msgstr "Neues Cover"
|
msgstr "Neues Cover"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:73
|
#: data/gtk/details-dialog.blp:65
|
||||||
msgid "Delete Cover"
|
msgid "Delete Cover"
|
||||||
msgstr "Cover löschen"
|
msgstr "Cover löschen"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
|
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Titel"
|
msgstr "Titel"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:103
|
#: data/gtk/details-dialog.blp:97
|
||||||
#, fuzzy
|
|
||||||
#| msgid "The developer or publisher (optional)"
|
|
||||||
msgid "Developer (optional)"
|
msgid "Developer (optional)"
|
||||||
msgstr "Der Entwickler oder Verlag (optional)"
|
msgstr "Entwickler (optional)"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:108
|
#: data/gtk/details-dialog.blp:103
|
||||||
msgid "Executable"
|
msgid "Executable"
|
||||||
msgstr "Ausführbare Datei"
|
msgstr "Ausführbare Datei"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:114
|
#: data/gtk/details-dialog.blp:109
|
||||||
msgid "Select File"
|
msgid "Select File"
|
||||||
msgstr ""
|
msgstr "Datei auswählen"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:125
|
#: data/gtk/details-dialog.blp:120
|
||||||
msgid "More Info"
|
msgid "More Info"
|
||||||
msgstr "Weitere Informationen"
|
msgstr "Weitere Informationen"
|
||||||
|
|
||||||
#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
|
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
|
||||||
msgid "Edit"
|
msgid "Edit"
|
||||||
msgstr "Bearbeiten"
|
msgstr "Bearbeiten"
|
||||||
|
|
||||||
#: data/gtk/game.blp:107 src/window.py:348
|
#: data/gtk/game.blp:103 cartridges/window.py:350
|
||||||
msgid "Hide"
|
msgid "Hide"
|
||||||
msgstr "Verstecken"
|
msgstr "Verstecken"
|
||||||
|
|
||||||
#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
|
#: data/gtk/game.blp:104 data/gtk/game.blp:112 data/gtk/window.blp:463
|
||||||
#: data/gtk/window.blp:433
|
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Entfernen"
|
msgstr "Entfernen"
|
||||||
|
|
||||||
#: data/gtk/game.blp:126 src/window.py:350
|
#: data/gtk/game.blp:111 cartridges/window.py:352
|
||||||
msgid "Unhide"
|
msgid "Unhide"
|
||||||
msgstr "Unverstecken"
|
msgstr "Unverstecken"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
|
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Allgemein"
|
msgstr "Allgemein"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:14
|
#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:205 data/gtk/window.blp:221
|
||||||
msgid "Quit"
|
#: data/gtk/window.blp:272 data/gtk/window.blp:288 data/gtk/window.blp:474
|
||||||
msgstr "Beenden"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
|
|
||||||
#: data/gtk/window.blp:444
|
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Suchen"
|
msgstr "Suchen"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:24
|
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
|
||||||
msgid "Show preferences"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "Einstellungen anzeigen"
|
msgstr "Tastaturkürzel"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:29
|
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
|
||||||
msgid "Shortcuts"
|
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
|
||||||
msgstr "Kürzel"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
|
|
||||||
#: src/importer/importer.py:383
|
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Rückgängig"
|
msgstr "Rückgängig"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:39
|
#: data/gtk/help-overlay.blp:34
|
||||||
msgid "Open menu"
|
msgid "Quit"
|
||||||
msgstr "Menü öffnen"
|
msgstr "Beenden"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:45
|
#: data/gtk/help-overlay.blp:39 data/gtk/window.blp:92 data/gtk/window.blp:185
|
||||||
|
msgid "Toggle Sidebar"
|
||||||
|
msgstr "Seitenleiste umschalten"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:44 data/gtk/window.blp:198 data/gtk/window.blp:265
|
||||||
|
msgid "Main Menu"
|
||||||
|
msgstr "Hauptmenü"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:50
|
||||||
msgid "Games"
|
msgid "Games"
|
||||||
msgstr "Spiele"
|
msgstr "Spiele"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:48
|
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:191 data/gtk/window.blp:550
|
||||||
msgid "Add new game"
|
msgid "Add Game"
|
||||||
msgstr "Neues Spiel hinzufügen"
|
msgstr "Spiel hinzufügen"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:53
|
#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:113
|
||||||
msgid "Import games"
|
#: data/gtk/window.blp:27 data/gtk/window.blp:554
|
||||||
msgstr "Spiele importieren"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:58
|
|
||||||
msgid "Show hidden games"
|
|
||||||
msgstr "Ausgeblendete Spiele anzeigen"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:63
|
|
||||||
msgid "Remove game"
|
|
||||||
msgstr "Spiel entfernen"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
|
|
||||||
#: data/gtk/preferences.blp:288
|
|
||||||
msgid "Behavior"
|
|
||||||
msgstr "Verhalten"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:15
|
|
||||||
msgid "Exit After Launching Games"
|
|
||||||
msgstr "Nach dem Starten von Spielen beenden"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:19
|
|
||||||
msgid "Cover Image Launches Game"
|
|
||||||
msgstr "Coverbild Startet Spiel"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:20
|
|
||||||
msgid "Swaps the behavior of the cover image and the play button"
|
|
||||||
msgstr "Tauscht das Verhalten des Covers und des Spielen-Knopfes"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:25 src/details_window.py:85
|
|
||||||
msgid "Images"
|
|
||||||
msgstr "Bilder"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:28
|
|
||||||
msgid "High Quality Images"
|
|
||||||
msgstr "Hochaufgelöste Bilder"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:29
|
|
||||||
msgid "Save game covers losslessly at the cost of storage"
|
|
||||||
msgstr "Speichere Spielcovers verlustfrei auf Kosten des Speicherplatzes"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:34
|
|
||||||
msgid "Danger Zone"
|
|
||||||
msgstr "Gefahrenzone"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:37
|
|
||||||
msgid "Remove All Games"
|
|
||||||
msgstr "Alle Spiele entfernen"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
|
|
||||||
msgid "Import"
|
msgid "Import"
|
||||||
msgstr "Importieren"
|
msgstr "Importieren"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:75
|
#: data/gtk/help-overlay.blp:63
|
||||||
#, fuzzy
|
msgid "Show Hidden Games"
|
||||||
#| msgid "Remove All Games"
|
msgstr "Ausgeblendete Spiele anzeigen"
|
||||||
msgid "Remove Uninstalled Games"
|
|
||||||
|
#: data/gtk/help-overlay.blp:68
|
||||||
|
msgid "Remove Game"
|
||||||
|
msgstr "Spiel entfernen"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:117
|
||||||
|
#: data/gtk/preferences.blp:415
|
||||||
|
msgid "Behavior"
|
||||||
|
msgstr "Verhalten"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:16
|
||||||
|
msgid "Exit After Launching Games"
|
||||||
|
msgstr "Nach dem Starten von Spielen beenden"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:20
|
||||||
|
msgid "Cover Image Launches Game"
|
||||||
|
msgstr "Coverbild Startet Spiel"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:21
|
||||||
|
msgid "Swaps the behavior of the cover image and the play button"
|
||||||
|
msgstr "Tauscht das Verhalten des Covers und des Spielen-Knopfes"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:26 cartridges/details_dialog.py:82
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Bilder"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:29
|
||||||
|
msgid "High Quality Images"
|
||||||
|
msgstr "Hochaufgelöste Bilder"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:30
|
||||||
|
msgid "Save game covers losslessly at the cost of storage"
|
||||||
|
msgstr "Speichere Spielcovers verlustfrei auf Kosten des Speicherplatzes"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:35
|
||||||
|
msgid "Danger Zone"
|
||||||
|
msgstr "Gefahrenzone"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:48
|
||||||
|
msgid "Remove All Games"
|
||||||
msgstr "Alle Spiele entfernen"
|
msgstr "Alle Spiele entfernen"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:80
|
#: data/gtk/preferences.blp:120
|
||||||
|
msgid "Remove Uninstalled Games"
|
||||||
|
msgstr "Deinstallierte Spiele entfernen"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:125
|
||||||
msgid "Sources"
|
msgid "Sources"
|
||||||
msgstr "Quellen"
|
msgstr "Quellen"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
|
#: data/gtk/preferences.blp:128 cartridges/importer/steam_source.py:114
|
||||||
msgid "Steam"
|
msgid "Steam"
|
||||||
msgstr "Steam"
|
msgstr "Steam"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
|
#: data/gtk/preferences.blp:137 data/gtk/preferences.blp:164
|
||||||
#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
|
#: data/gtk/preferences.blp:199 data/gtk/preferences.blp:242
|
||||||
#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
|
#: data/gtk/preferences.blp:269 data/gtk/preferences.blp:296
|
||||||
#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
|
#: data/gtk/preferences.blp:323
|
||||||
msgid "Install Location"
|
msgid "Install Location"
|
||||||
msgstr "Installationsort"
|
msgstr "Installationsort"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
|
#: data/gtk/preferences.blp:155 data/gtk/window.blp:564
|
||||||
|
#: cartridges/importer/lutris_source.py:96
|
||||||
msgid "Lutris"
|
msgid "Lutris"
|
||||||
msgstr "Lutris"
|
msgstr "Lutris"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:116
|
#: data/gtk/preferences.blp:181
|
||||||
msgid "Cache Location"
|
|
||||||
msgstr "Cache-Speicherort"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:128
|
|
||||||
msgid "Import Steam Games"
|
msgid "Import Steam Games"
|
||||||
msgstr "Steam-Spiele importieren"
|
msgstr "Steam-Spiele importieren"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:132
|
#: data/gtk/preferences.blp:185
|
||||||
msgid "Import Flatpak Games"
|
msgid "Import Flatpak Games"
|
||||||
msgstr "Flatpak-Spiele importieren"
|
msgstr "Flatpak-Spiele importieren"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
|
#: data/gtk/preferences.blp:190 cartridges/importer/heroic_source.py:355
|
||||||
msgid "Heroic"
|
msgid "Heroic"
|
||||||
msgstr "Heroic"
|
msgstr "Heroic"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:153
|
#: data/gtk/preferences.blp:216
|
||||||
msgid "Import Epic Games"
|
msgid "Import Epic Games"
|
||||||
msgstr "Epic Games importieren"
|
msgstr "Epic Games importieren"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:157
|
#: data/gtk/preferences.blp:220
|
||||||
msgid "Import GOG Games"
|
msgid "Import GOG Games"
|
||||||
msgstr "GOG-Spiele importieren"
|
msgstr "GOG-Spiele importieren"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:161
|
#: data/gtk/preferences.blp:224
|
||||||
msgid "Import Amazon Games"
|
msgid "Import Amazon Games"
|
||||||
msgstr "Amazon-Spiele importieren"
|
msgstr "Amazon-Spiele importieren"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:165
|
#: data/gtk/preferences.blp:228
|
||||||
msgid "Import Sideloaded Games"
|
msgid "Import Sideloaded Games"
|
||||||
msgstr "Sideloaded-Spiele importieren"
|
msgstr "Sideloaded-Spiele importieren"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
|
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
|
||||||
msgid "Bottles"
|
msgid "Bottles"
|
||||||
msgstr "Bottles"
|
msgstr "Bottles"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
|
#: data/gtk/preferences.blp:260 cartridges/importer/itch_source.py:81
|
||||||
msgid "itch"
|
msgid "itch"
|
||||||
msgstr "itch"
|
msgstr "itch"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
|
#: data/gtk/preferences.blp:287 cartridges/importer/legendary_source.py:97
|
||||||
msgid "Legendary"
|
msgid "Legendary"
|
||||||
msgstr "Legendary"
|
msgstr "Legendary"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
|
#: data/gtk/preferences.blp:314 cartridges/importer/retroarch_source.py:142
|
||||||
msgid "RetroArch"
|
msgid "RetroArch"
|
||||||
msgstr ""
|
msgstr "RetroArch"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
|
#: data/gtk/preferences.blp:341 cartridges/importer/flatpak_source.py:143
|
||||||
msgid "Flatpak"
|
msgid "Flatpak"
|
||||||
msgstr "Flatpak"
|
msgstr "Flatpak"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:254
|
#. The location of the system-wide data directory
|
||||||
|
#: data/gtk/preferences.blp:351
|
||||||
|
msgid "System Location"
|
||||||
|
msgstr "System Ort"
|
||||||
|
|
||||||
|
#. The location of the user-specific data directory
|
||||||
|
#: data/gtk/preferences.blp:369
|
||||||
|
msgid "User Location"
|
||||||
|
msgstr "Nutzer Ort"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:386
|
||||||
msgid "Import Game Launchers"
|
msgid "Import Game Launchers"
|
||||||
msgstr "Spiele-Launcher importieren"
|
msgstr "Spiele-Launcher importieren"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
|
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
|
||||||
msgid "Desktop Entries"
|
msgid "Desktop Entries"
|
||||||
msgstr ""
|
msgstr "Desktop Einträge"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:276
|
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
|
||||||
msgid "SteamGridDB"
|
msgid "SteamGridDB"
|
||||||
msgstr "SteamGridDB"
|
msgstr "SteamGridDB"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:280
|
#: data/gtk/preferences.blp:407
|
||||||
msgid "Authentication"
|
msgid "Authentication"
|
||||||
msgstr "Authentifizierung"
|
msgstr "Authentifizierung"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:283
|
#: data/gtk/preferences.blp:410
|
||||||
msgid "API Key"
|
msgid "API Key"
|
||||||
msgstr "API-Schlüssel"
|
msgstr "API-Schlüssel"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:291
|
#: data/gtk/preferences.blp:418
|
||||||
msgid "Use SteamGridDB"
|
msgid "Use SteamGridDB"
|
||||||
msgstr "SteamGridDB benutzen"
|
msgstr "SteamGridDB benutzen"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:292
|
#: data/gtk/preferences.blp:419
|
||||||
msgid "Download images when adding or importing games"
|
msgid "Download images when adding or importing games"
|
||||||
msgstr "Lade Bilder herunter, wenn Spiele hinzugefügt oder importiert werden"
|
msgstr "Lade Bilder herunter, wenn Spiele hinzugefügt oder importiert werden"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:296
|
#: data/gtk/preferences.blp:423
|
||||||
msgid "Prefer Over Official Images"
|
msgid "Prefer Over Official Images"
|
||||||
msgstr "Über offizielien Images bevorzugen"
|
msgstr "Über offiziellen Bildern bevorzugen"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:300
|
#: data/gtk/preferences.blp:427
|
||||||
msgid "Prefer Animated Images"
|
msgid "Prefer Animated Images"
|
||||||
msgstr "Animierte Bilder bevorzugen"
|
msgstr "Animierte Bilder bevorzugen"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:433
|
||||||
|
msgid "Update Covers"
|
||||||
|
msgstr "Cover aktualisieren"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:434
|
||||||
|
msgid "Fetch covers for games already in your library"
|
||||||
|
msgstr "Cover für in der Bibliothek vorhandene Spiele laden"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:439
|
||||||
|
msgid "Update"
|
||||||
|
msgstr "Aktualisieren"
|
||||||
|
|
||||||
#: data/gtk/window.blp:6 data/gtk/window.blp:14
|
#: data/gtk/window.blp:6 data/gtk/window.blp:14
|
||||||
msgid "No Games Found"
|
msgid "No Games Found"
|
||||||
msgstr "Keine Spiele gefunden"
|
msgstr "Keine Spiele gefunden"
|
||||||
|
|
||||||
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
||||||
msgid "Try a different search."
|
msgid "Try a different search"
|
||||||
msgstr "Versuche eine andere Suche."
|
msgstr "Versuche eine andere Suche"
|
||||||
|
|
||||||
#: data/gtk/window.blp:21
|
#: data/gtk/window.blp:21
|
||||||
msgid "No Games"
|
msgid "No Games"
|
||||||
msgstr "Keine Spiele"
|
msgstr "Keine Spiele"
|
||||||
|
|
||||||
#: data/gtk/window.blp:22
|
#: data/gtk/window.blp:22
|
||||||
msgid "Use the + button to add games."
|
msgid "Use the + button to add games"
|
||||||
msgstr "Benutze denn + Knopf um Spiele hinzuzufügen."
|
msgstr "Benutze denn + Knopf um Spiele hinzuzufügen"
|
||||||
|
|
||||||
#: data/gtk/window.blp:40
|
#: data/gtk/window.blp:40
|
||||||
msgid "No Hidden Games"
|
msgid "No Hidden Games"
|
||||||
msgstr "Keine versteckten Spiele"
|
msgstr "Keine versteckten Spiele"
|
||||||
|
|
||||||
#: data/gtk/window.blp:41
|
#: data/gtk/window.blp:41
|
||||||
msgid "Games you hide will appear here."
|
msgid "Games you hide will appear here"
|
||||||
msgstr "Ausgeblendete Spiele, werden hier angezeigt."
|
msgstr "Ausgeblendete Spiele, werden hier angezeigt"
|
||||||
|
|
||||||
#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
|
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Remove All Games"
|
|
||||||
msgid "All Games"
|
msgid "All Games"
|
||||||
msgstr "Alle Spiele entfernen"
|
msgstr "Alle Spiele"
|
||||||
|
|
||||||
#: data/gtk/window.blp:88 data/gtk/window.blp:162
|
#: data/gtk/window.blp:136 cartridges/main.py:230
|
||||||
msgid "Toggle Sidebar"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:125 src/main.py:168
|
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Added: {}"
|
|
||||||
msgid "Added"
|
msgid "Added"
|
||||||
msgstr "Hinzugefügt: {}"
|
msgstr "Hinzugefügt"
|
||||||
|
|
||||||
#: data/gtk/window.blp:140
|
#: data/gtk/window.blp:156
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Import"
|
|
||||||
msgid "Imported"
|
msgid "Imported"
|
||||||
msgstr "Importieren"
|
msgstr "Importiert"
|
||||||
|
|
||||||
#: data/gtk/window.blp:168 data/gtk/window.blp:532
|
#: data/gtk/window.blp:258
|
||||||
msgid "Add Game"
|
|
||||||
msgstr "Spiel hinzufügen"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:175 data/gtk/window.blp:234
|
|
||||||
msgid "Main Menu"
|
|
||||||
msgstr "Hauptmenü"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:227
|
|
||||||
msgid "Hidden Games"
|
msgid "Hidden Games"
|
||||||
msgstr "Ausgeblendete Spiele"
|
msgstr "Ausgeblendete Spiele"
|
||||||
|
|
||||||
#: data/gtk/window.blp:337
|
#: data/gtk/window.blp:367
|
||||||
msgid "Game Title"
|
msgid "Game Title"
|
||||||
msgstr "Spieltitel"
|
msgstr "Spieltitel"
|
||||||
|
|
||||||
#: data/gtk/window.blp:394
|
#: data/gtk/window.blp:424
|
||||||
msgid "Play"
|
msgid "Play"
|
||||||
msgstr "Spielen"
|
msgstr "Spielen"
|
||||||
|
|
||||||
#: data/gtk/window.blp:471
|
#: data/gtk/window.blp:501
|
||||||
msgid "Sort"
|
msgid "Sort"
|
||||||
msgstr "Sortierung"
|
msgstr "Sortierung"
|
||||||
|
|
||||||
#: data/gtk/window.blp:474
|
#: data/gtk/window.blp:504
|
||||||
msgid "A-Z"
|
msgid "A-Z"
|
||||||
msgstr "A-Z"
|
msgstr "A-Z"
|
||||||
|
|
||||||
#: data/gtk/window.blp:480
|
#: data/gtk/window.blp:510
|
||||||
msgid "Z-A"
|
msgid "Z-A"
|
||||||
msgstr "Z-A"
|
msgstr "Z-A"
|
||||||
|
|
||||||
#: data/gtk/window.blp:486
|
#: data/gtk/window.blp:516
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Neuestes"
|
msgstr "Neuestes"
|
||||||
|
|
||||||
#: data/gtk/window.blp:492
|
#: data/gtk/window.blp:522
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Älteste"
|
msgstr "Älteste"
|
||||||
|
|
||||||
#: data/gtk/window.blp:498
|
#: data/gtk/window.blp:528
|
||||||
msgid "Last Played"
|
msgid "Last Played"
|
||||||
msgstr "Zuletzt gespielt"
|
msgstr "Zuletzt gespielt"
|
||||||
|
|
||||||
#: data/gtk/window.blp:505
|
#: data/gtk/window.blp:535
|
||||||
msgid "Show Hidden"
|
msgid "Show Hidden"
|
||||||
msgstr "Ausgeblendete anzeigen"
|
msgstr "Ausgeblendete anzeigen"
|
||||||
|
|
||||||
#: data/gtk/window.blp:518
|
#: data/gtk/window.blp:544
|
||||||
msgid "Keyboard Shortcuts"
|
|
||||||
msgstr "Tastaturkürzel"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:523
|
|
||||||
msgid "About Cartridges"
|
msgid "About Cartridges"
|
||||||
msgstr "Über Cartridges"
|
msgstr "Über 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 "{} gestartet"
|
||||||
|
|
||||||
#. Translators: Replace this with your name for it to show up in the about window
|
#. Translators: Replace this with your name for it to show up in the about window
|
||||||
#: src/main.py:207
|
#: cartridges/main.py:270
|
||||||
msgid "translator_credits"
|
msgid "translator_credits"
|
||||||
msgstr "Feliks Weber"
|
msgstr "Feliks Weber"
|
||||||
|
|
||||||
#. The variable is the date when the game was added
|
#. The variable is the date when the game was added
|
||||||
#: src/window.py:371
|
#: cartridges/window.py:373
|
||||||
msgid "Added: {}"
|
msgid "Added: {}"
|
||||||
msgstr "Hinzugefügt: {}"
|
msgstr "Hinzugefügt: {}"
|
||||||
|
|
||||||
#: src/window.py:374
|
#: cartridges/window.py:376
|
||||||
msgid "Never"
|
msgid "Never"
|
||||||
msgstr "Nie"
|
msgstr "Nie"
|
||||||
|
|
||||||
#. The variable is the date when the game was last played
|
#. The variable is the date when the game was last played
|
||||||
#: src/window.py:378
|
#: cartridges/window.py:380
|
||||||
msgid "Last played: {}"
|
msgid "Last played: {}"
|
||||||
msgstr "Zuletzt gespielt: {}"
|
msgstr "Zuletzt gespielt: {}"
|
||||||
|
|
||||||
#: src/details_window.py:76
|
#: cartridges/details_dialog.py:73
|
||||||
msgid "Apply"
|
msgid "Apply"
|
||||||
msgstr "Anwenden"
|
msgstr "Anwenden"
|
||||||
|
|
||||||
#: src/details_window.py:82
|
#: cartridges/details_dialog.py:79
|
||||||
msgid "Add New Game"
|
msgid "Add New Game"
|
||||||
msgstr "Neues Spiel hinzufügen"
|
msgstr "Neues Spiel hinzufügen"
|
||||||
|
|
||||||
#: src/details_window.py:83
|
#: cartridges/details_dialog.py:80
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr ""
|
msgstr "Hinzufügen"
|
||||||
|
|
||||||
#: src/details_window.py:93
|
#: cartridges/details_dialog.py:90
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Executable"
|
|
||||||
msgid "Executables"
|
msgid "Executables"
|
||||||
msgstr "Ausführbare Datei"
|
msgstr "Ausführbare Dateien"
|
||||||
|
|
||||||
#. Translate this string as you would translate "file"
|
#. Translate this string as you would translate "file"
|
||||||
#: src/details_window.py:108
|
#: cartridges/details_dialog.py:105
|
||||||
msgid "file.txt"
|
msgid "file.txt"
|
||||||
msgstr "datei.txt"
|
msgstr "datei.txt"
|
||||||
|
|
||||||
#. As in software
|
#. As in software
|
||||||
#: src/details_window.py:110
|
#: cartridges/details_dialog.py:107
|
||||||
msgid "program"
|
msgid "program"
|
||||||
msgstr "Programm"
|
msgstr "Programm"
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:115 src/details_window.py:117
|
#: cartridges/details_dialog.py:112 cartridges/details_dialog.py:114
|
||||||
msgid "C:\\path\\to\\{}"
|
msgid "C:\\path\\to\\{}"
|
||||||
msgstr "C:\\pfad\\zu\\{}"
|
msgstr "C:\\pfad\\zu\\{}"
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:121 src/details_window.py:123
|
#: cartridges/details_dialog.py:118 cartridges/details_dialog.py:120
|
||||||
msgid "/path/to/{}"
|
msgid "/path/to/{}"
|
||||||
msgstr "/pfad/zu/{}"
|
msgstr "/pfad/zu/{}"
|
||||||
|
|
||||||
#: src/details_window.py:128
|
#: cartridges/details_dialog.py:125
|
||||||
msgid ""
|
msgid ""
|
||||||
"To launch the executable \"{}\", use the command:\n"
|
"To launch the executable \"{}\", use the command:\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -511,154 +512,162 @@ msgstr ""
|
|||||||
"Falls der Pfad Leerzeichen enthält, stelle sicher ihn in doppelte "
|
"Falls der Pfad Leerzeichen enthält, stelle sicher ihn in doppelte "
|
||||||
"Anführungszeichen zu setzen!"
|
"Anführungszeichen zu setzen!"
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:177
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
|
||||||
msgid "Couldn't Add Game"
|
msgid "Couldn't Add Game"
|
||||||
msgstr "Konnte Spiel nicht hinzufügen"
|
msgstr "Konnte Spiel nicht hinzufügen"
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:213
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:209
|
||||||
msgid "Game title cannot be empty."
|
msgid "Game title cannot be empty."
|
||||||
msgstr "Spieltitel kann nicht leer sein."
|
msgstr "Spieltitel kann nicht leer sein."
|
||||||
|
|
||||||
#: src/details_window.py:177 src/details_window.py:221
|
#: cartridges/details_dialog.py:173 cartridges/details_dialog.py:217
|
||||||
msgid "Executable cannot be empty."
|
msgid "Executable cannot be empty."
|
||||||
msgstr "Ausführbare Datei darf nicht leer sein."
|
msgstr "Ausführbare Datei darf nicht leer sein."
|
||||||
|
|
||||||
#: src/details_window.py:212 src/details_window.py:220
|
#: cartridges/details_dialog.py:208 cartridges/details_dialog.py:216
|
||||||
msgid "Couldn't Apply Preferences"
|
msgid "Couldn't Apply Preferences"
|
||||||
msgstr "Einstellungen konnten nicht angewendet werden"
|
msgstr "Einstellungen konnten nicht angewendet werden"
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#: src/game.py:141
|
#: cartridges/game.py:139
|
||||||
msgid "{} launched"
|
|
||||||
msgstr "{} gestartet"
|
|
||||||
|
|
||||||
#. The variable is the title of the game
|
|
||||||
#: src/game.py:155
|
|
||||||
msgid "{} hidden"
|
msgid "{} hidden"
|
||||||
msgstr "{} versteckt"
|
msgstr "{} versteckt"
|
||||||
|
|
||||||
#: src/game.py:155
|
#: cartridges/game.py:139
|
||||||
msgid "{} unhidden"
|
msgid "{} unhidden"
|
||||||
msgstr "{} unversteckt"
|
msgstr "{} unversteckt"
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#. The variable is the number of games removed
|
#. The variable is the number of games removed
|
||||||
#: src/game.py:169 src/importer/importer.py:380
|
#: cartridges/game.py:153 cartridges/importer/importer.py:391
|
||||||
msgid "{} removed"
|
msgid "{} removed"
|
||||||
msgstr "{} entfernt"
|
msgstr "{} entfernt"
|
||||||
|
|
||||||
#: src/preferences.py:121
|
#: cartridges/preferences.py:133
|
||||||
msgid "All games removed"
|
msgid "All games removed"
|
||||||
msgstr "Alle Spiele entfernt"
|
msgstr "Alle Spiele entfernt"
|
||||||
|
|
||||||
#: src/preferences.py:169
|
#: cartridges/preferences.py:181
|
||||||
msgid ""
|
msgid ""
|
||||||
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Für die Nutzung von SteamGridDB ist ein API-Schlüssel erforderlich. Sie "
|
"Für die Nutzung von SteamGridDB ist ein API-Schlüssel erforderlich. Sie "
|
||||||
"können ihn {}hier{} generieren."
|
"können ihn {}hier{} generieren."
|
||||||
|
|
||||||
#: src/preferences.py:296
|
#: cartridges/preferences.py:196
|
||||||
|
msgid "Downloading covers…"
|
||||||
|
msgstr "Cover werden geladen…"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:215
|
||||||
|
msgid "Covers updated"
|
||||||
|
msgstr "Cover aktualisiert"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:360
|
||||||
msgid "Installation Not Found"
|
msgid "Installation Not Found"
|
||||||
msgstr "Installation nicht gefunden"
|
msgstr "Installation nicht gefunden"
|
||||||
|
|
||||||
#: src/preferences.py:297
|
#: cartridges/preferences.py:361
|
||||||
msgid "Select a valid directory."
|
msgid "Select a valid directory"
|
||||||
msgstr "Wähle ein gültiges Verzeichnis aus."
|
msgstr "Wähle ein gültiges Verzeichnis aus"
|
||||||
|
|
||||||
#: src/preferences.py:333 src/importer/importer.py:306
|
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
|
||||||
msgid "Warning"
|
msgid "Warning"
|
||||||
msgstr ""
|
msgstr "Warnung"
|
||||||
|
|
||||||
#: src/preferences.py:367
|
#: cartridges/preferences.py:431
|
||||||
msgid "Invalid Directory"
|
msgid "Invalid Directory"
|
||||||
msgstr "Ungültiges Verzeichnis"
|
msgstr "Ungültiges Verzeichnis"
|
||||||
|
|
||||||
#: src/preferences.py:373
|
#: cartridges/preferences.py:437
|
||||||
msgid "Set Location"
|
msgid "Set Location"
|
||||||
msgstr "Ort festlegen"
|
msgstr "Ort festlegen"
|
||||||
|
|
||||||
#: src/utils/create_dialog.py:33 src/importer/importer.py:307
|
#: cartridges/utils/create_dialog.py:33 cartridges/importer/importer.py:319
|
||||||
msgid "Dismiss"
|
msgid "Dismiss"
|
||||||
msgstr "Verstanden"
|
msgstr "Verstanden"
|
||||||
|
|
||||||
#: src/importer/importer.py:142
|
#: cartridges/importer/importer.py:145
|
||||||
msgid "Importing Games…"
|
msgid "Importing Games…"
|
||||||
msgstr "Spiele werden importiert…"
|
msgstr "Spiele werden importiert…"
|
||||||
|
|
||||||
#: src/importer/importer.py:327
|
#: cartridges/importer/importer.py:338
|
||||||
msgid "The following errors occured during import:"
|
msgid "The following errors occured during import:"
|
||||||
msgstr ""
|
msgstr "Die folgenden Fehler sind beim Import aufgetreten:"
|
||||||
|
|
||||||
#: src/importer/importer.py:356
|
#: cartridges/importer/importer.py:367
|
||||||
#, fuzzy
|
|
||||||
#| msgid "No Games Found"
|
|
||||||
msgid "No new games found"
|
msgid "No new games found"
|
||||||
msgstr "Keine Spiele gefunden"
|
msgstr "Keine neuen Spiele gefunden"
|
||||||
|
|
||||||
#: src/importer/importer.py:368
|
#: cartridges/importer/importer.py:379
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Game Imported"
|
|
||||||
msgid "1 game imported"
|
msgid "1 game imported"
|
||||||
msgstr "Spiel Importiert"
|
msgstr "1 Spiel importiert"
|
||||||
|
|
||||||
#. The variable is the number of games
|
#. The variable is the number of games
|
||||||
#: src/importer/importer.py:372
|
#: cartridges/importer/importer.py:383
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Games Imported"
|
|
||||||
msgid "{} games imported"
|
msgid "{} games imported"
|
||||||
msgstr "Spiele importiert"
|
msgstr "{} Spiele importiert"
|
||||||
|
|
||||||
#. A single game removed
|
#. A single game removed
|
||||||
#: src/importer/importer.py:376
|
#: cartridges/importer/importer.py:387
|
||||||
#, fuzzy
|
|
||||||
#| msgid "{} removed"
|
|
||||||
msgid "1 removed"
|
msgid "1 removed"
|
||||||
msgstr "{} entfernt"
|
msgstr "1 entfernt"
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:33
|
#: cartridges/importer/location.py:34
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Select the {} data directory."
|
|
||||||
msgid "Select the {} cache directory."
|
msgid "Select the {} cache directory."
|
||||||
msgstr "Wähle das Cache-Verzeichnis von {} aus."
|
msgstr "Wählen Sie das Cache-Verzeichnis {}."
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:35
|
#: cartridges/importer/location.py:36
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Select the {} configuration directory."
|
|
||||||
msgid "Select the {} configuration directory."
|
msgid "Select the {} configuration directory."
|
||||||
msgstr "Wähle das Konfigurationsverzeichnis von {} aus."
|
msgstr "Wähle das Konfigurationsverzeichnis von {} aus."
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:37
|
#: cartridges/importer/location.py:38
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Select the {} data directory."
|
|
||||||
msgid "Select the {} data directory."
|
msgid "Select the {} data directory."
|
||||||
msgstr "Wähle das Datenverzeichnis von {} aus."
|
msgstr "Wähle das Datenverzeichnis von {} aus."
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:46
|
#: cartridges/importer/retroarch_source.py:129
|
||||||
#, fuzzy
|
msgid "No RetroArch Core Selected"
|
||||||
#| msgid "Couldn't Connect to SteamGridDB"
|
msgstr "Kein RetroArch Kern ausgewählt"
|
||||||
msgid "Couldn't Authenticate SteamGridDB"
|
|
||||||
msgstr "Verbindung zu SteamGridDB konnte nicht hergestellt werden"
|
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:47
|
#. The variable is a newline separated list of playlists
|
||||||
|
#: cartridges/importer/retroarch_source.py:131
|
||||||
|
msgid "The following playlists have no default core:"
|
||||||
|
msgstr "Diese Playlists haben keinen Standard Kern:"
|
||||||
|
|
||||||
|
#: cartridges/importer/retroarch_source.py:133
|
||||||
|
msgid "Games with no core selected were not imported"
|
||||||
|
msgstr "Spiele ohne ausgewählten Kern wurden nicht importiert"
|
||||||
|
|
||||||
|
#: cartridges/store/managers/sgdb_manager.py:46
|
||||||
|
msgid "Couldn't Authenticate SteamGridDB"
|
||||||
|
msgstr "SteamGridDB konnte nicht authentifiziert werden"
|
||||||
|
|
||||||
|
#: cartridges/store/managers/sgdb_manager.py:47
|
||||||
msgid "Verify your API key in preferences"
|
msgid "Verify your API key in preferences"
|
||||||
msgstr "Verifiziere deinen API-Schlüssel in den Einstellungen"
|
msgstr "Verifiziere deinen API-Schlüssel in den Einstellungen"
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:129
|
#~ msgid "Cache Location"
|
||||||
msgid "No RetroArch Core Selected"
|
#~ msgstr "Cache-Speicherort"
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. The variable is a newline separated list of playlists
|
#~ msgid "Library"
|
||||||
#: src/importer/sources/retroarch_source.py:131
|
#~ msgstr "Bibliothek"
|
||||||
msgid "The following playlists have no default core:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:133
|
#~ msgid "Show preferences"
|
||||||
msgid "Games with no core selected were not imported"
|
#~ msgstr "Einstellungen anzeigen"
|
||||||
msgstr ""
|
|
||||||
|
#~ msgid "Shortcuts"
|
||||||
|
#~ msgstr "Kürzel"
|
||||||
|
|
||||||
|
#~ msgid "Open menu"
|
||||||
|
#~ msgstr "Menü öffnen"
|
||||||
|
|
||||||
|
#~ msgid "Add new game"
|
||||||
|
#~ msgstr "Neues Spiel hinzufügen"
|
||||||
|
|
||||||
|
#~ msgid "Import games"
|
||||||
|
#~ msgstr "Spiele importieren"
|
||||||
|
|
||||||
#~ msgid "Back"
|
#~ msgid "Back"
|
||||||
#~ msgstr "Zurück"
|
#~ msgstr "Zurück"
|
||||||
@@ -716,9 +725,6 @@ msgstr ""
|
|||||||
#~ msgid "Select the Lutris cache directory."
|
#~ msgid "Select the Lutris cache directory."
|
||||||
#~ msgstr "Wähle das Lutris-Cache-Verzeichnis aus."
|
#~ msgstr "Wähle das Lutris-Cache-Verzeichnis aus."
|
||||||
|
|
||||||
#~ msgid "Importing Covers…"
|
|
||||||
#~ msgstr "Spielecover werden importiert…"
|
|
||||||
|
|
||||||
#~ msgid "Directory to use when importing games"
|
#~ msgid "Directory to use when importing games"
|
||||||
#~ msgstr "Verzeichnis, das beim Importieren von Spielen verwendet wird"
|
#~ msgstr "Verzeichnis, das beim Importieren von Spielen verwendet wird"
|
||||||
|
|
||||||
|
|||||||
468
po/el.po
@@ -6,8 +6,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Cartridges\n"
|
"Project-Id-Version: Cartridges\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-08-30 10:43+0200\n"
|
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
|
||||||
"PO-Revision-Date: 2023-09-01 19:55+0000\n"
|
"PO-Revision-Date: 2023-10-08 16:00+0000\n"
|
||||||
"Last-Translator: yiannis ioannides <sub@wai.ai>\n"
|
"Last-Translator: yiannis ioannides <sub@wai.ai>\n"
|
||||||
"Language-Team: Greek <https://hosted.weblate.org/projects/cartridges/"
|
"Language-Team: Greek <https://hosted.weblate.org/projects/cartridges/"
|
||||||
"cartridges/el/>\n"
|
"cartridges/el/>\n"
|
||||||
@@ -16,31 +16,32 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 5.0.1-dev\n"
|
"X-Generator: Weblate 5.1-dev\n"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:3
|
#: data/page.kramo.Cartridges.desktop.in:3
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
|
#: data/page.kramo.Cartridges.metainfo.xml.in:9
|
||||||
#: data/gtk/window.blp:80
|
#: data/page.kramo.Cartridges.metainfo.xml.in:40 data/gtk/window.blp:47
|
||||||
|
#: data/gtk/window.blp:83
|
||||||
msgid "Cartridges"
|
msgid "Cartridges"
|
||||||
msgstr "Κασέτες"
|
msgstr "Κασέτες"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:4
|
#: data/page.kramo.Cartridges.desktop.in:4
|
||||||
msgid "Game Launcher"
|
msgid "Game Launcher"
|
||||||
msgstr "Πρόγραμμα Εκκίνησης Παιχνιδιών"
|
msgstr "Πρόγραμμα Εκκίνησης Παιχνιδιών"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:5
|
#: data/page.kramo.Cartridges.desktop.in:5
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:7
|
#: data/page.kramo.Cartridges.metainfo.xml.in:10
|
||||||
msgid "Launch all your games"
|
msgid "Launch all your games"
|
||||||
msgstr "Εκκινήστε όλα σας τα παιχνίδια"
|
msgstr "Εκκινήστε όλα σας τα παιχνίδια"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:11
|
#: data/page.kramo.Cartridges.desktop.in:11
|
||||||
msgid ""
|
msgid ""
|
||||||
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"gaming;εκκινητής;steam;lutris;heroic;bottles;itch;flatpak;legendary;"
|
"gaming;εκκινητής;steam;lutris;heroic;bottles;itch;flatpak;legendary;"
|
||||||
"retroarch;"
|
"retroarch;"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
|
#: data/page.kramo.Cartridges.metainfo.xml.in:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cartridges is a simple game launcher for all of your games. It has support "
|
"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 "
|
"for importing games from Steam, Lutris, Heroic and more with no login "
|
||||||
@@ -53,435 +54,443 @@ msgstr ""
|
|||||||
"να κρύψετε τα παιχνίδια σας, καθώς και να κατεβάσετε τα εξώφυλλα τους από το "
|
"να κρύψετε τα παιχνίδια σας, καθώς και να κατεβάσετε τα εξώφυλλα τους από το "
|
||||||
"SteamGridDB."
|
"SteamGridDB."
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:30
|
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:318
|
||||||
msgid "Library"
|
#: cartridges/details_dialog.py:68
|
||||||
msgstr "Βιβλιοθήκη"
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:34
|
|
||||||
msgid "Edit Game Details"
|
|
||||||
msgstr "Επεξεργασία Λεπτομερειών Παιχνιδιού"
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
|
|
||||||
#: src/details_window.py:71
|
|
||||||
msgid "Game Details"
|
msgid "Game Details"
|
||||||
msgstr "Λεπτομέρειες Παιχνιδιού"
|
msgstr "Λεπτομέρειες Παιχνιδιού"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
|
#: data/page.kramo.Cartridges.metainfo.xml.in:48
|
||||||
#: src/details_window.py:271 src/importer/importer.py:308
|
msgid "Edit Game Details"
|
||||||
#: src/importer/importer.py:359
|
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"
|
msgid "Preferences"
|
||||||
msgstr "Προτιμήσεις"
|
msgstr "Προτιμήσεις"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:25
|
#: data/gtk/details-dialog.blp:15
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Ακύρωση"
|
msgstr "Ακύρωση"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:55
|
#: data/gtk/details-dialog.blp:46
|
||||||
msgid "New Cover"
|
msgid "New Cover"
|
||||||
msgstr "Νέο Εξώφυλλο"
|
msgstr "Νέο Εξώφυλλο"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:73
|
#: data/gtk/details-dialog.blp:65
|
||||||
msgid "Delete Cover"
|
msgid "Delete Cover"
|
||||||
msgstr "Διαγραφή Εξώφυλλου"
|
msgstr "Διαγραφή Εξώφυλλου"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
|
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Τίτλος"
|
msgstr "Τίτλος"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:103
|
#: data/gtk/details-dialog.blp:97
|
||||||
msgid "Developer (optional)"
|
msgid "Developer (optional)"
|
||||||
msgstr "Προγραμματιστής (προαιρετικό)"
|
msgstr "Προγραμματιστής (προαιρετικό)"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:108
|
#: data/gtk/details-dialog.blp:103
|
||||||
msgid "Executable"
|
msgid "Executable"
|
||||||
msgstr "Εκτελέσιμο αρχείο"
|
msgstr "Εκτελέσιμο αρχείο"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:114
|
#: data/gtk/details-dialog.blp:109
|
||||||
msgid "Select File"
|
msgid "Select File"
|
||||||
msgstr "Επιλογή αρχείου"
|
msgstr "Επιλογή αρχείου"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:125
|
#: data/gtk/details-dialog.blp:120
|
||||||
msgid "More Info"
|
msgid "More Info"
|
||||||
msgstr "Περισσότερες Πληροφορίες"
|
msgstr "Περισσότερες Πληροφορίες"
|
||||||
|
|
||||||
#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
|
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
|
||||||
msgid "Edit"
|
msgid "Edit"
|
||||||
msgstr "Επεξεργασία"
|
msgstr "Επεξεργασία"
|
||||||
|
|
||||||
#: data/gtk/game.blp:107 src/window.py:348
|
#: data/gtk/game.blp:103 cartridges/window.py:350
|
||||||
msgid "Hide"
|
msgid "Hide"
|
||||||
msgstr "Απόκρυψη"
|
msgstr "Απόκρυψη"
|
||||||
|
|
||||||
#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
|
#: data/gtk/game.blp:104 data/gtk/game.blp:112 data/gtk/window.blp:463
|
||||||
#: data/gtk/window.blp:433
|
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Αφαίρεση"
|
msgstr "Αφαίρεση"
|
||||||
|
|
||||||
#: data/gtk/game.blp:126 src/window.py:350
|
#: data/gtk/game.blp:111 cartridges/window.py:352
|
||||||
msgid "Unhide"
|
msgid "Unhide"
|
||||||
msgstr "Φανέρωση"
|
msgstr "Φανέρωση"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
|
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Γενικά"
|
msgstr "Γενικά"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:14
|
#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:205 data/gtk/window.blp:221
|
||||||
msgid "Quit"
|
#: data/gtk/window.blp:272 data/gtk/window.blp:288 data/gtk/window.blp:474
|
||||||
msgstr "Κλείσιμο"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
|
|
||||||
#: data/gtk/window.blp:444
|
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Αναζήτηση"
|
msgstr "Αναζήτηση"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:24
|
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
|
||||||
msgid "Show preferences"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "Εμφάνιση προτιμήσεων"
|
msgstr "Συντομεύσεις Πληκτρολογίου"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:29
|
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
|
||||||
msgid "Shortcuts"
|
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
|
||||||
msgstr "Συντομεύσεις"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
|
|
||||||
#: src/importer/importer.py:383
|
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Αναίρεση"
|
msgstr "Αναίρεση"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:39
|
#: data/gtk/help-overlay.blp:34
|
||||||
msgid "Open menu"
|
msgid "Quit"
|
||||||
msgstr "Άνοιγμα μενού"
|
msgstr "Κλείσιμο"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:45
|
#: 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"
|
msgid "Games"
|
||||||
msgstr "Παιχνίδια"
|
msgstr "Παιχνίδια"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:48
|
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:191 data/gtk/window.blp:550
|
||||||
msgid "Add new game"
|
msgid "Add Game"
|
||||||
msgstr "Πρόσθεση νέου παιχνιδιού"
|
msgstr "Προσθήκη παιχνιδιού"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:53
|
#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:113
|
||||||
msgid "Import games"
|
#: data/gtk/window.blp:27 data/gtk/window.blp:554
|
||||||
msgstr "Εισαγωγή παιχνιδιών"
|
msgid "Import"
|
||||||
|
msgstr "Εισαγωγή"
|
||||||
#: data/gtk/help-overlay.blp:58
|
|
||||||
msgid "Show hidden games"
|
|
||||||
msgstr "Εμφάνιση κρυμμένων παιχνιδιών"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:63
|
#: data/gtk/help-overlay.blp:63
|
||||||
msgid "Remove game"
|
msgid "Show Hidden Games"
|
||||||
|
msgstr "Εμφάνιση κρυμμένων παιχνιδιών"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:68
|
||||||
|
msgid "Remove Game"
|
||||||
msgstr "Αφαίρεση παιχνιδιού"
|
msgstr "Αφαίρεση παιχνιδιού"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
|
#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:117
|
||||||
#: data/gtk/preferences.blp:288
|
#: data/gtk/preferences.blp:415
|
||||||
msgid "Behavior"
|
msgid "Behavior"
|
||||||
msgstr "Συμπεριφορά"
|
msgstr "Συμπεριφορά"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:15
|
#: data/gtk/preferences.blp:16
|
||||||
msgid "Exit After Launching Games"
|
msgid "Exit After Launching Games"
|
||||||
msgstr "Έξοδος μετά την εκκίνηση παιχνιδιών"
|
msgstr "Έξοδος μετά την εκκίνηση παιχνιδιών"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:19
|
#: data/gtk/preferences.blp:20
|
||||||
msgid "Cover Image Launches Game"
|
msgid "Cover Image Launches Game"
|
||||||
msgstr "Εξώφυλλο εκκινεί το παιχνίδι"
|
msgstr "Εξώφυλλο εκκινεί το παιχνίδι"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:20
|
#: data/gtk/preferences.blp:21
|
||||||
msgid "Swaps the behavior of the cover image and the play button"
|
msgid "Swaps the behavior of the cover image and the play button"
|
||||||
msgstr "Αντικατάσταση συμπεριφοράς εξωφύλλου και του κουμπιού αναπαραγωγής"
|
msgstr "Αντικατάσταση συμπεριφοράς εξωφύλλου και του κουμπιού αναπαραγωγής"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:25 src/details_window.py:85
|
#: data/gtk/preferences.blp:26 cartridges/details_dialog.py:82
|
||||||
msgid "Images"
|
msgid "Images"
|
||||||
msgstr "Εικόνες"
|
msgstr "Εικόνες"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:28
|
#: data/gtk/preferences.blp:29
|
||||||
msgid "High Quality Images"
|
msgid "High Quality Images"
|
||||||
msgstr "Εικόνες Υψηλής Ποιότητας"
|
msgstr "Εικόνες Υψηλής Ποιότητας"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:29
|
#: data/gtk/preferences.blp:30
|
||||||
msgid "Save game covers losslessly at the cost of storage"
|
msgid "Save game covers losslessly at the cost of storage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Αποθήκευση εξωφύλλου παιχνιδιού σε υψηλή ευκρίνεια, με κόστος τη χωρητικότητα"
|
"Αποθήκευση εξωφύλλου παιχνιδιού σε υψηλή ευκρίνεια, με κόστος τη χωρητικότητα"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:34
|
#: data/gtk/preferences.blp:35
|
||||||
msgid "Danger Zone"
|
msgid "Danger Zone"
|
||||||
msgstr "Επικίνδυνη Ζώνη"
|
msgstr "Επικίνδυνη Ζώνη"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:37
|
#: data/gtk/preferences.blp:48
|
||||||
msgid "Remove All Games"
|
msgid "Remove All Games"
|
||||||
msgstr "Αφαίρεση Όλων Των Παιχνιδιών"
|
msgstr "Αφαίρεση Όλων Των Παιχνιδιών"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
|
#: data/gtk/preferences.blp:120
|
||||||
msgid "Import"
|
|
||||||
msgstr "Εισαγωγή"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:75
|
|
||||||
msgid "Remove Uninstalled Games"
|
msgid "Remove Uninstalled Games"
|
||||||
msgstr "Αφαίρεση απεγκατεστημένων παιχνιδιών"
|
msgstr "Αφαίρεση απεγκατεστημένων παιχνιδιών"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:80
|
#: data/gtk/preferences.blp:125
|
||||||
msgid "Sources"
|
msgid "Sources"
|
||||||
msgstr "Πηγές"
|
msgstr "Πηγές"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
|
#: data/gtk/preferences.blp:128 cartridges/importer/steam_source.py:114
|
||||||
msgid "Steam"
|
msgid "Steam"
|
||||||
msgstr "Steam"
|
msgstr "Steam"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
|
#: data/gtk/preferences.blp:137 data/gtk/preferences.blp:164
|
||||||
#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
|
#: data/gtk/preferences.blp:199 data/gtk/preferences.blp:242
|
||||||
#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
|
#: data/gtk/preferences.blp:269 data/gtk/preferences.blp:296
|
||||||
#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
|
#: data/gtk/preferences.blp:323
|
||||||
msgid "Install Location"
|
msgid "Install Location"
|
||||||
msgstr "Τοποθεσία εγκατάστασης"
|
msgstr "Τοποθεσία εγκατάστασης"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
|
#: data/gtk/preferences.blp:155 data/gtk/window.blp:564
|
||||||
|
#: cartridges/importer/lutris_source.py:96
|
||||||
msgid "Lutris"
|
msgid "Lutris"
|
||||||
msgstr "Lutris"
|
msgstr "Lutris"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:116
|
#: data/gtk/preferences.blp:181
|
||||||
msgid "Cache Location"
|
|
||||||
msgstr "Τοποθεσία cache"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:128
|
|
||||||
msgid "Import Steam Games"
|
msgid "Import Steam Games"
|
||||||
msgstr "Εισαγωγή παιχνιδιών Steam"
|
msgstr "Εισαγωγή παιχνιδιών Steam"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:132
|
#: data/gtk/preferences.blp:185
|
||||||
msgid "Import Flatpak Games"
|
msgid "Import Flatpak Games"
|
||||||
msgstr "Εισαγωγή παιχνιδιών Flatpak"
|
msgstr "Εισαγωγή παιχνιδιών Flatpak"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
|
#: data/gtk/preferences.blp:190 cartridges/importer/heroic_source.py:355
|
||||||
msgid "Heroic"
|
msgid "Heroic"
|
||||||
msgstr "Heroic"
|
msgstr "Heroic"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:153
|
#: data/gtk/preferences.blp:216
|
||||||
msgid "Import Epic Games"
|
msgid "Import Epic Games"
|
||||||
msgstr "Εισαγωγή παιχνιδιών Epic"
|
msgstr "Εισαγωγή παιχνιδιών Epic"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:157
|
#: data/gtk/preferences.blp:220
|
||||||
msgid "Import GOG Games"
|
msgid "Import GOG Games"
|
||||||
msgstr "Εισαγωγή παιχνιδιών GOG"
|
msgstr "Εισαγωγή παιχνιδιών GOG"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:161
|
#: data/gtk/preferences.blp:224
|
||||||
msgid "Import Amazon Games"
|
msgid "Import Amazon Games"
|
||||||
msgstr "Εισαγωγή παιχνιδιών Amazon"
|
msgstr "Εισαγωγή παιχνιδιών Amazon"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:165
|
#: data/gtk/preferences.blp:228
|
||||||
msgid "Import Sideloaded Games"
|
msgid "Import Sideloaded Games"
|
||||||
msgstr "Εισαγωγή παιχνιδιών μέσω sideloading"
|
msgstr "Εισαγωγή παιχνιδιών μέσω sideloading"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
|
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
|
||||||
msgid "Bottles"
|
msgid "Bottles"
|
||||||
msgstr "Bottles"
|
msgstr "Bottles"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
|
#: data/gtk/preferences.blp:260 cartridges/importer/itch_source.py:81
|
||||||
msgid "itch"
|
msgid "itch"
|
||||||
msgstr "itch"
|
msgstr "itch"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
|
#: data/gtk/preferences.blp:287 cartridges/importer/legendary_source.py:97
|
||||||
msgid "Legendary"
|
msgid "Legendary"
|
||||||
msgstr "Legendary"
|
msgstr "Legendary"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
|
#: data/gtk/preferences.blp:314 cartridges/importer/retroarch_source.py:142
|
||||||
msgid "RetroArch"
|
msgid "RetroArch"
|
||||||
msgstr "RetroArch"
|
msgstr "RetroArch"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
|
#: data/gtk/preferences.blp:341 cartridges/importer/flatpak_source.py:143
|
||||||
msgid "Flatpak"
|
msgid "Flatpak"
|
||||||
msgstr "Flatpak"
|
msgstr "Flatpak"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:254
|
#. The location of the system-wide data directory
|
||||||
|
#: data/gtk/preferences.blp:351
|
||||||
|
#, fuzzy
|
||||||
|
msgid "System Location"
|
||||||
|
msgstr "Ορίστε Τοποθεσία"
|
||||||
|
|
||||||
|
#. The location of the user-specific data directory
|
||||||
|
#: data/gtk/preferences.blp:369
|
||||||
|
#, fuzzy
|
||||||
|
msgid "User Location"
|
||||||
|
msgstr "Ορίστε Τοποθεσία"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:386
|
||||||
msgid "Import Game Launchers"
|
msgid "Import Game Launchers"
|
||||||
msgstr "Εισαγωγή εκκινητών παιχνιδιών"
|
msgstr "Εισαγωγή εκκινητών παιχνιδιών"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
|
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
|
||||||
msgid "Desktop Entries"
|
msgid "Desktop Entries"
|
||||||
msgstr "Εισαγωγές desktop"
|
msgstr "Εισαγωγές desktop"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:276
|
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
|
||||||
msgid "SteamGridDB"
|
msgid "SteamGridDB"
|
||||||
msgstr "SteamGridDB"
|
msgstr "SteamGridDB"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:280
|
#: data/gtk/preferences.blp:407
|
||||||
msgid "Authentication"
|
msgid "Authentication"
|
||||||
msgstr "Επιβεβαίωση"
|
msgstr "Επιβεβαίωση"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:283
|
#: data/gtk/preferences.blp:410
|
||||||
msgid "API Key"
|
msgid "API Key"
|
||||||
msgstr "Κλειδί API"
|
msgstr "Κλειδί API"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:291
|
#: data/gtk/preferences.blp:418
|
||||||
msgid "Use SteamGridDB"
|
msgid "Use SteamGridDB"
|
||||||
msgstr "Χρήση SteamGridDB"
|
msgstr "Χρήση SteamGridDB"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:292
|
#: data/gtk/preferences.blp:419
|
||||||
msgid "Download images when adding or importing games"
|
msgid "Download images when adding or importing games"
|
||||||
msgstr "Λήψη εικόνων κατά τη διάρκεια πρόσθεσης ή εισαγωγής παιχνιδιών"
|
msgstr "Λήψη εικόνων κατά τη διάρκεια πρόσθεσης ή εισαγωγής παιχνιδιών"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:296
|
#: data/gtk/preferences.blp:423
|
||||||
msgid "Prefer Over Official Images"
|
msgid "Prefer Over Official Images"
|
||||||
msgstr "Προτίμηση Επίσημων Εικόνων"
|
msgstr "Προτίμηση Επίσημων Εικόνων"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:300
|
#: data/gtk/preferences.blp:427
|
||||||
msgid "Prefer Animated Images"
|
msgid "Prefer Animated Images"
|
||||||
msgstr "Προτίμηση Κινούμενων Εικόνων"
|
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
|
#: data/gtk/window.blp:6 data/gtk/window.blp:14
|
||||||
msgid "No Games Found"
|
msgid "No Games Found"
|
||||||
msgstr "Δεν Βρέθηκαν Παιχνίδια"
|
msgstr "Δεν Βρέθηκαν Παιχνίδια"
|
||||||
|
|
||||||
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
||||||
msgid "Try a different search."
|
msgid "Try a different search"
|
||||||
msgstr "Δοκιμάστε μια διαφορετική αναζήτηση."
|
msgstr "Δοκιμάστε μια διαφορετική αναζήτηση"
|
||||||
|
|
||||||
#: data/gtk/window.blp:21
|
#: data/gtk/window.blp:21
|
||||||
msgid "No Games"
|
msgid "No Games"
|
||||||
msgstr "Δίχως Παιχνίδια"
|
msgstr "Δίχως Παιχνίδια"
|
||||||
|
|
||||||
#: data/gtk/window.blp:22
|
#: data/gtk/window.blp:22
|
||||||
msgid "Use the + button to add games."
|
msgid "Use the + button to add games"
|
||||||
msgstr "Χρησιμοποιήστε το κουμπί + για να προσθέσετε παιχνίδια."
|
msgstr "Χρησιμοποιήστε το κουμπί + για να προσθέσετε παιχνίδια"
|
||||||
|
|
||||||
#: data/gtk/window.blp:40
|
#: data/gtk/window.blp:40
|
||||||
msgid "No Hidden Games"
|
msgid "No Hidden Games"
|
||||||
msgstr "Δεν υπάρχουν κρυφά παιχνίδια"
|
msgstr "Δεν υπάρχουν κρυφά παιχνίδια"
|
||||||
|
|
||||||
#: data/gtk/window.blp:41
|
#: data/gtk/window.blp:41
|
||||||
msgid "Games you hide will appear here."
|
msgid "Games you hide will appear here"
|
||||||
msgstr "Τα παιχνίδια που κρύβετε θα εμφανίζονται εδώ."
|
msgstr "Τα παιχνίδια που κρύβετε θα εμφανίζονται εδώ"
|
||||||
|
|
||||||
#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
|
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Remove All Games"
|
|
||||||
msgid "All Games"
|
msgid "All Games"
|
||||||
msgstr "Αφαίρεση Όλων Των Παιχνιδιών"
|
msgstr "Όλα τα παιχνίδια"
|
||||||
|
|
||||||
#: data/gtk/window.blp:88 data/gtk/window.blp:162
|
#: data/gtk/window.blp:136 cartridges/main.py:230
|
||||||
msgid "Toggle Sidebar"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:125 src/main.py:168
|
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Added: {}"
|
|
||||||
msgid "Added"
|
msgid "Added"
|
||||||
msgstr "Προστέθηκε: {}"
|
msgstr "Προστέθηκε"
|
||||||
|
|
||||||
#: data/gtk/window.blp:140
|
#: data/gtk/window.blp:156
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Import"
|
|
||||||
msgid "Imported"
|
msgid "Imported"
|
||||||
msgstr "Εισαγωγή"
|
msgstr "Εισήχθη"
|
||||||
|
|
||||||
#: data/gtk/window.blp:168 data/gtk/window.blp:532
|
#: data/gtk/window.blp:258
|
||||||
msgid "Add Game"
|
|
||||||
msgstr "Προσθήκη παιχνιδιού"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:175 data/gtk/window.blp:234
|
|
||||||
msgid "Main Menu"
|
|
||||||
msgstr "Κύριο μενού"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:227
|
|
||||||
msgid "Hidden Games"
|
msgid "Hidden Games"
|
||||||
msgstr "Κρυμμένα παιχνίδια"
|
msgstr "Κρυμμένα παιχνίδια"
|
||||||
|
|
||||||
#: data/gtk/window.blp:337
|
#: data/gtk/window.blp:367
|
||||||
msgid "Game Title"
|
msgid "Game Title"
|
||||||
msgstr "Τίτλος παιχνιδιού"
|
msgstr "Τίτλος παιχνιδιού"
|
||||||
|
|
||||||
#: data/gtk/window.blp:394
|
#: data/gtk/window.blp:424
|
||||||
msgid "Play"
|
msgid "Play"
|
||||||
msgstr "Παίξτε"
|
msgstr "Παίξτε"
|
||||||
|
|
||||||
#: data/gtk/window.blp:471
|
#: data/gtk/window.blp:501
|
||||||
msgid "Sort"
|
msgid "Sort"
|
||||||
msgstr "Ταξινόμηση"
|
msgstr "Ταξινόμηση"
|
||||||
|
|
||||||
#: data/gtk/window.blp:474
|
#: data/gtk/window.blp:504
|
||||||
msgid "A-Z"
|
msgid "A-Z"
|
||||||
msgstr "Α-Ζ"
|
msgstr "Α-Ζ"
|
||||||
|
|
||||||
#: data/gtk/window.blp:480
|
#: data/gtk/window.blp:510
|
||||||
msgid "Z-A"
|
msgid "Z-A"
|
||||||
msgstr "Ζ-Α"
|
msgstr "Ζ-Α"
|
||||||
|
|
||||||
#: data/gtk/window.blp:486
|
#: data/gtk/window.blp:516
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Νεότερο"
|
msgstr "Νεότερο"
|
||||||
|
|
||||||
#: data/gtk/window.blp:492
|
#: data/gtk/window.blp:522
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Παλαιότερο"
|
msgstr "Παλαιότερο"
|
||||||
|
|
||||||
#: data/gtk/window.blp:498
|
#: data/gtk/window.blp:528
|
||||||
msgid "Last Played"
|
msgid "Last Played"
|
||||||
msgstr "Τελευταία αναπαραγωγή"
|
msgstr "Τελευταία αναπαραγωγή"
|
||||||
|
|
||||||
#: data/gtk/window.blp:505
|
#: data/gtk/window.blp:535
|
||||||
msgid "Show Hidden"
|
msgid "Show Hidden"
|
||||||
msgstr "Εμφάνιση Κρυφών"
|
msgstr "Εμφάνιση Κρυφών"
|
||||||
|
|
||||||
#: data/gtk/window.blp:518
|
#: data/gtk/window.blp:544
|
||||||
msgid "Keyboard Shortcuts"
|
|
||||||
msgstr "Συντομεύσεις Πληκτρολογίου"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:523
|
|
||||||
msgid "About Cartridges"
|
msgid "About Cartridges"
|
||||||
msgstr "Σχετικά με τις Κασέτες"
|
msgstr "Σχετικά με τις Κασέτες"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:561
|
||||||
|
msgid "IGDB"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:563
|
||||||
|
msgid "ProtonDB"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:565
|
||||||
|
msgid "HowLongToBeat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. 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
|
#. Translators: Replace this with your name for it to show up in the about window
|
||||||
#: src/main.py:207
|
#: cartridges/main.py:270
|
||||||
msgid "translator_credits"
|
msgid "translator_credits"
|
||||||
msgstr "Yiannis Ioannides"
|
msgstr "Yiannis Ioannides"
|
||||||
|
|
||||||
#. The variable is the date when the game was added
|
#. The variable is the date when the game was added
|
||||||
#: src/window.py:371
|
#: cartridges/window.py:373
|
||||||
msgid "Added: {}"
|
msgid "Added: {}"
|
||||||
msgstr "Προστέθηκε: {}"
|
msgstr "Προστέθηκε: {}"
|
||||||
|
|
||||||
#: src/window.py:374
|
#: cartridges/window.py:376
|
||||||
msgid "Never"
|
msgid "Never"
|
||||||
msgstr "Ποτέ"
|
msgstr "Ποτέ"
|
||||||
|
|
||||||
#. The variable is the date when the game was last played
|
#. The variable is the date when the game was last played
|
||||||
#: src/window.py:378
|
#: cartridges/window.py:380
|
||||||
msgid "Last played: {}"
|
msgid "Last played: {}"
|
||||||
msgstr "Τελευταία αναπαραγωγή: {}"
|
msgstr "Τελευταία αναπαραγωγή: {}"
|
||||||
|
|
||||||
#: src/details_window.py:76
|
#: cartridges/details_dialog.py:73
|
||||||
msgid "Apply"
|
msgid "Apply"
|
||||||
msgstr "Εφαρμογή"
|
msgstr "Εφαρμογή"
|
||||||
|
|
||||||
#: src/details_window.py:82
|
#: cartridges/details_dialog.py:79
|
||||||
msgid "Add New Game"
|
msgid "Add New Game"
|
||||||
msgstr "Προσθήκη νέου παιχνιδιού"
|
msgstr "Προσθήκη νέου παιχνιδιού"
|
||||||
|
|
||||||
#: src/details_window.py:83
|
#: cartridges/details_dialog.py:80
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr "Προσθήκη"
|
msgstr "Προσθήκη"
|
||||||
|
|
||||||
#: src/details_window.py:93
|
#: cartridges/details_dialog.py:90
|
||||||
msgid "Executables"
|
msgid "Executables"
|
||||||
msgstr "Προγράμματα"
|
msgstr "Προγράμματα"
|
||||||
|
|
||||||
#. Translate this string as you would translate "file"
|
#. Translate this string as you would translate "file"
|
||||||
#: src/details_window.py:108
|
#: cartridges/details_dialog.py:105
|
||||||
msgid "file.txt"
|
msgid "file.txt"
|
||||||
msgstr "αρχειο.txt"
|
msgstr "αρχειο.txt"
|
||||||
|
|
||||||
#. As in software
|
#. As in software
|
||||||
#: src/details_window.py:110
|
#: cartridges/details_dialog.py:107
|
||||||
msgid "program"
|
msgid "program"
|
||||||
msgstr "πρόγραμμα"
|
msgstr "πρόγραμμα"
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:115 src/details_window.py:117
|
#: cartridges/details_dialog.py:112 cartridges/details_dialog.py:114
|
||||||
msgid "C:\\path\\to\\{}"
|
msgid "C:\\path\\to\\{}"
|
||||||
msgstr "C:\\προς\\φάκελο\\{}"
|
msgstr "C:\\προς\\φάκελο\\{}"
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:121 src/details_window.py:123
|
#: cartridges/details_dialog.py:118 cartridges/details_dialog.py:120
|
||||||
msgid "/path/to/{}"
|
msgid "/path/to/{}"
|
||||||
msgstr "/προς/φάκελο/{}"
|
msgstr "/προς/φάκελο/{}"
|
||||||
|
|
||||||
#: src/details_window.py:128
|
#: cartridges/details_dialog.py:125
|
||||||
msgid ""
|
msgid ""
|
||||||
"To launch the executable \"{}\", use the command:\n"
|
"To launch the executable \"{}\", use the command:\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -505,140 +514,164 @@ msgstr ""
|
|||||||
"Αν η διεύθυνση φακέλου περιέχει κενά, φροντίστε να την περικλείσετε σε διπλά "
|
"Αν η διεύθυνση φακέλου περιέχει κενά, φροντίστε να την περικλείσετε σε διπλά "
|
||||||
"εισαγωγικά!"
|
"εισαγωγικά!"
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:177
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
|
||||||
msgid "Couldn't Add Game"
|
msgid "Couldn't Add Game"
|
||||||
msgstr "Αδυναμία προσθήκης παιχνιδιού"
|
msgstr "Αδυναμία προσθήκης παιχνιδιού"
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:213
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:209
|
||||||
msgid "Game title cannot be empty."
|
msgid "Game title cannot be empty."
|
||||||
msgstr "Ο τίτλος παιχνιδιού δεν μπορεί να είναι κενός."
|
msgstr "Ο τίτλος παιχνιδιού δεν μπορεί να είναι κενός."
|
||||||
|
|
||||||
#: src/details_window.py:177 src/details_window.py:221
|
#: cartridges/details_dialog.py:173 cartridges/details_dialog.py:217
|
||||||
msgid "Executable cannot be empty."
|
msgid "Executable cannot be empty."
|
||||||
msgstr "Η εφαρμογή δεν μπορεί να είναι κενή."
|
msgstr "Η εφαρμογή δεν μπορεί να είναι κενή."
|
||||||
|
|
||||||
#: src/details_window.py:212 src/details_window.py:220
|
#: cartridges/details_dialog.py:208 cartridges/details_dialog.py:216
|
||||||
msgid "Couldn't Apply Preferences"
|
msgid "Couldn't Apply Preferences"
|
||||||
msgstr "Αδυναμία Εφαρμογής Προτιμήσεων"
|
msgstr "Αδυναμία Εφαρμογής Προτιμήσεων"
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#: src/game.py:141
|
#: cartridges/game.py:139
|
||||||
msgid "{} launched"
|
|
||||||
msgstr "{} εκκινήθη"
|
|
||||||
|
|
||||||
#. The variable is the title of the game
|
|
||||||
#: src/game.py:155
|
|
||||||
msgid "{} hidden"
|
msgid "{} hidden"
|
||||||
msgstr "{} αποκρύφθηκε"
|
msgstr "{} αποκρύφθηκε"
|
||||||
|
|
||||||
#: src/game.py:155
|
#: cartridges/game.py:139
|
||||||
msgid "{} unhidden"
|
msgid "{} unhidden"
|
||||||
msgstr "{} φανερώθηκε"
|
msgstr "{} φανερώθηκε"
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#. The variable is the number of games removed
|
#. The variable is the number of games removed
|
||||||
#: src/game.py:169 src/importer/importer.py:380
|
#: cartridges/game.py:153 cartridges/importer/importer.py:391
|
||||||
msgid "{} removed"
|
msgid "{} removed"
|
||||||
msgstr "{} αφαιρέθηκε"
|
msgstr "{} αφαιρέθηκε"
|
||||||
|
|
||||||
#: src/preferences.py:121
|
#: cartridges/preferences.py:133
|
||||||
msgid "All games removed"
|
msgid "All games removed"
|
||||||
msgstr "Όλα τα παιχνίδια αφαιρέθηκαν"
|
msgstr "Όλα τα παιχνίδια αφαιρέθηκαν"
|
||||||
|
|
||||||
#: src/preferences.py:169
|
#: cartridges/preferences.py:181
|
||||||
msgid ""
|
msgid ""
|
||||||
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Για τη χρήση του SteamGridDB απαιτείται ένα κλειδί API. Μπορείτε να "
|
"Για τη χρήση του SteamGridDB απαιτείται ένα κλειδί API. Μπορείτε να "
|
||||||
"δημιουργήσετε ένα {}εδώ{}."
|
"δημιουργήσετε ένα {}εδώ{}."
|
||||||
|
|
||||||
#: src/preferences.py:296
|
#: cartridges/preferences.py:196
|
||||||
|
msgid "Downloading covers…"
|
||||||
|
msgstr "Λήψη εξώφυλλων…"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:215
|
||||||
|
msgid "Covers updated"
|
||||||
|
msgstr "Τα εξώφυλλα ανανεώθηκαν"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:360
|
||||||
msgid "Installation Not Found"
|
msgid "Installation Not Found"
|
||||||
msgstr "Η εγκατάσταση δεν βρέθηκε"
|
msgstr "Η εγκατάσταση δεν βρέθηκε"
|
||||||
|
|
||||||
#: src/preferences.py:297
|
#: cartridges/preferences.py:361
|
||||||
msgid "Select a valid directory."
|
msgid "Select a valid directory"
|
||||||
msgstr "Επιλέξτε έναν έγκυρο προορισμό."
|
msgstr "Επιλέξτε έναν έγκυρο προορισμό"
|
||||||
|
|
||||||
#: src/preferences.py:333 src/importer/importer.py:306
|
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
|
||||||
msgid "Warning"
|
msgid "Warning"
|
||||||
msgstr "Προσοχή"
|
msgstr "Προσοχή"
|
||||||
|
|
||||||
#: src/preferences.py:367
|
#: cartridges/preferences.py:431
|
||||||
msgid "Invalid Directory"
|
msgid "Invalid Directory"
|
||||||
msgstr "Μη έγκυρος προορισμός"
|
msgstr "Μη έγκυρος προορισμός"
|
||||||
|
|
||||||
#: src/preferences.py:373
|
#: cartridges/preferences.py:437
|
||||||
msgid "Set Location"
|
msgid "Set Location"
|
||||||
msgstr "Ορίστε Τοποθεσία"
|
msgstr "Ορίστε Τοποθεσία"
|
||||||
|
|
||||||
#: src/utils/create_dialog.py:33 src/importer/importer.py:307
|
#: cartridges/utils/create_dialog.py:33 cartridges/importer/importer.py:319
|
||||||
msgid "Dismiss"
|
msgid "Dismiss"
|
||||||
msgstr "Απόρριψη"
|
msgstr "Απόρριψη"
|
||||||
|
|
||||||
#: src/importer/importer.py:142
|
#: cartridges/importer/importer.py:145
|
||||||
msgid "Importing Games…"
|
msgid "Importing Games…"
|
||||||
msgstr "Εισαγωγή παιχνιδιών…"
|
msgstr "Εισαγωγή παιχνιδιών…"
|
||||||
|
|
||||||
#: src/importer/importer.py:327
|
#: cartridges/importer/importer.py:338
|
||||||
msgid "The following errors occured during import:"
|
msgid "The following errors occured during import:"
|
||||||
msgstr "Τα παρακάτω σφάλματα παρουσιάστηκαν κατά την εισαγωγή:"
|
msgstr "Τα παρακάτω σφάλματα παρουσιάστηκαν κατά την εισαγωγή:"
|
||||||
|
|
||||||
#: src/importer/importer.py:356
|
#: cartridges/importer/importer.py:367
|
||||||
msgid "No new games found"
|
msgid "No new games found"
|
||||||
msgstr "Δεν βρέθηκαν νέα παιχνίδια"
|
msgstr "Δεν βρέθηκαν νέα παιχνίδια"
|
||||||
|
|
||||||
#: src/importer/importer.py:368
|
#: cartridges/importer/importer.py:379
|
||||||
msgid "1 game imported"
|
msgid "1 game imported"
|
||||||
msgstr "1 παιχνίδι εισήχθη"
|
msgstr "1 παιχνίδι εισήχθη"
|
||||||
|
|
||||||
#. The variable is the number of games
|
#. The variable is the number of games
|
||||||
#: src/importer/importer.py:372
|
#: cartridges/importer/importer.py:383
|
||||||
msgid "{} games imported"
|
msgid "{} games imported"
|
||||||
msgstr "{} παιχνίδια εισήχθησαν"
|
msgstr "{} παιχνίδια εισήχθησαν"
|
||||||
|
|
||||||
#. A single game removed
|
#. A single game removed
|
||||||
#: src/importer/importer.py:376
|
#: cartridges/importer/importer.py:387
|
||||||
msgid "1 removed"
|
msgid "1 removed"
|
||||||
msgstr "1 αφαιρέθηκε"
|
msgstr "1 αφαιρέθηκε"
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:33
|
#: cartridges/importer/location.py:34
|
||||||
msgid "Select the {} cache directory."
|
msgid "Select the {} cache directory."
|
||||||
msgstr "Επιλέξτε τον προορισμό cache του {}."
|
msgstr "Επιλέξτε τον προορισμό cache του {}."
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:35
|
#: cartridges/importer/location.py:36
|
||||||
msgid "Select the {} configuration directory."
|
msgid "Select the {} configuration directory."
|
||||||
msgstr "Επιλέξτε τον προορισμό ρυθμίσεων του {}."
|
msgstr "Επιλέξτε τον προορισμό ρυθμίσεων του {}."
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:37
|
#: cartridges/importer/location.py:38
|
||||||
msgid "Select the {} data directory."
|
msgid "Select the {} data directory."
|
||||||
msgstr "Επιλέξτε τον προορισμό δεδομένων του {}."
|
msgstr "Επιλέξτε τον προορισμό δεδομένων του {}."
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:46
|
#: cartridges/importer/retroarch_source.py:129
|
||||||
msgid "Couldn't Authenticate SteamGridDB"
|
|
||||||
msgstr ""
|
|
||||||
"Η επιβεβαίωση γνησιότητας του SteamGridDB δεν μπόρεσε να πραγματοποιηθεί"
|
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:47
|
|
||||||
msgid "Verify your API key in preferences"
|
|
||||||
msgstr "Επιβεβαιώστε το κλειδί API σας στις ρυθμίσεις"
|
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:129
|
|
||||||
msgid "No RetroArch Core Selected"
|
msgid "No RetroArch Core Selected"
|
||||||
msgstr "Δεν υπάρχει επιλεγμένος πυρήνας RetroArch"
|
msgstr "Δεν υπάρχει επιλεγμένος πυρήνας RetroArch"
|
||||||
|
|
||||||
#. The variable is a newline separated list of playlists
|
#. The variable is a newline separated list of playlists
|
||||||
#: src/importer/sources/retroarch_source.py:131
|
#: cartridges/importer/retroarch_source.py:131
|
||||||
msgid "The following playlists have no default core:"
|
msgid "The following playlists have no default core:"
|
||||||
msgstr "Οι παρακάτω λίστες δεν έχουν προεπιλεγμένο πυρήνα:"
|
msgstr "Οι παρακάτω λίστες δεν έχουν προεπιλεγμένο πυρήνα:"
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:133
|
#: cartridges/importer/retroarch_source.py:133
|
||||||
msgid "Games with no core selected were not imported"
|
msgid "Games with no core selected were not imported"
|
||||||
msgstr "Παιχνίδια χωρίς επιλεγμένο πυρήνα δεν εισήχθησαν"
|
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 σας στις ρυθμίσεις"
|
||||||
|
|
||||||
|
#~ msgid "Cache Location"
|
||||||
|
#~ msgstr "Τοποθεσία cache"
|
||||||
|
|
||||||
|
#~ msgid "Library"
|
||||||
|
#~ msgstr "Βιβλιοθήκη"
|
||||||
|
|
||||||
|
#~ msgid "Show preferences"
|
||||||
|
#~ msgstr "Εμφάνιση προτιμήσεων"
|
||||||
|
|
||||||
|
#~ msgid "Shortcuts"
|
||||||
|
#~ msgstr "Συντομεύσεις"
|
||||||
|
|
||||||
|
#~ msgid "Open menu"
|
||||||
|
#~ msgstr "Άνοιγμα μενού"
|
||||||
|
|
||||||
|
#~ msgid "Add new game"
|
||||||
|
#~ msgstr "Πρόσθεση νέου παιχνιδιού"
|
||||||
|
|
||||||
|
#~ msgid "Import games"
|
||||||
|
#~ msgstr "Εισαγωγή παιχνιδιών"
|
||||||
|
|
||||||
#~ msgid "Back"
|
#~ msgid "Back"
|
||||||
#~ msgstr "Πίσω"
|
#~ msgstr "Πίσω"
|
||||||
|
|
||||||
@@ -691,6 +724,3 @@ msgstr "Παιχνίδια χωρίς επιλεγμένο πυρήνα δεν
|
|||||||
|
|
||||||
#~ msgid "Select the Lutris cache directory."
|
#~ msgid "Select the Lutris cache directory."
|
||||||
#~ msgstr "Επιλέξτε τη τοποθεσία cache του Lutris."
|
#~ msgstr "Επιλέξτε τη τοποθεσία cache του Lutris."
|
||||||
|
|
||||||
#~ msgid "Importing Covers…"
|
|
||||||
#~ msgstr "Εισαγωγή εξώφυλλων…"
|
|
||||||
|
|||||||
647
po/en_GB.po
Normal file
@@ -0,0 +1,647 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR kramo
|
||||||
|
# This file is distributed under the same license as the Cartridges package.
|
||||||
|
# kramo <contact@kramo.page>, 2024.
|
||||||
|
# Bruce Cowan <bruce@bcowan.me.uk>, 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-03-24 15:19+0000\n"
|
||||||
|
"Last-Translator: Bruce Cowan <bruce@bcowan.me.uk>\n"
|
||||||
|
"Language-Team: English (United Kingdom) <https://hosted.weblate.org/projects/"
|
||||||
|
"cartridges/cartridges/en_GB/>\n"
|
||||||
|
"Language: en_GB\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.5-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 "Game Launcher"
|
||||||
|
|
||||||
|
#: data/page.kramo.Cartridges.desktop.in:5
|
||||||
|
#: data/page.kramo.Cartridges.metainfo.xml.in:10
|
||||||
|
msgid "Launch all your games"
|
||||||
|
msgstr "Launch all your games"
|
||||||
|
|
||||||
|
#: 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 ""
|
||||||
|
"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."
|
||||||
|
|
||||||
|
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:318
|
||||||
|
#: cartridges/details_dialog.py:68
|
||||||
|
msgid "Game Details"
|
||||||
|
msgstr "Game Details"
|
||||||
|
|
||||||
|
#: data/page.kramo.Cartridges.metainfo.xml.in:48
|
||||||
|
msgid "Edit Game Details"
|
||||||
|
msgstr "Edit Game Details"
|
||||||
|
|
||||||
|
#: 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 "Preferences"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:15
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Cancel"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:46
|
||||||
|
msgid "New Cover"
|
||||||
|
msgstr "New Cover"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:65
|
||||||
|
msgid "Delete Cover"
|
||||||
|
msgstr "Delete Cover"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
|
||||||
|
msgid "Title"
|
||||||
|
msgstr "Title"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:97
|
||||||
|
msgid "Developer (optional)"
|
||||||
|
msgstr "Developer (optional)"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:103
|
||||||
|
msgid "Executable"
|
||||||
|
msgstr "Executable"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:109
|
||||||
|
msgid "Select File"
|
||||||
|
msgstr "Select File"
|
||||||
|
|
||||||
|
#: data/gtk/details-dialog.blp:120
|
||||||
|
msgid "More Info"
|
||||||
|
msgstr "More Info"
|
||||||
|
|
||||||
|
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
|
||||||
|
msgid "Edit"
|
||||||
|
msgstr "Edit"
|
||||||
|
|
||||||
|
#: data/gtk/game.blp:103 cartridges/window.py:350
|
||||||
|
msgid "Hide"
|
||||||
|
msgstr "Hide"
|
||||||
|
|
||||||
|
#: data/gtk/game.blp:104 data/gtk/game.blp:112 data/gtk/window.blp:463
|
||||||
|
msgid "Remove"
|
||||||
|
msgstr "Remove"
|
||||||
|
|
||||||
|
#: data/gtk/game.blp:111 cartridges/window.py:352
|
||||||
|
msgid "Unhide"
|
||||||
|
msgstr "Unhide"
|
||||||
|
|
||||||
|
#: 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 "Search"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
|
||||||
|
msgid "Keyboard Shortcuts"
|
||||||
|
msgstr "Keyboard Shortcuts"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
|
||||||
|
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
|
||||||
|
msgid "Undo"
|
||||||
|
msgstr "Undo"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:34
|
||||||
|
msgid "Quit"
|
||||||
|
msgstr "Quit"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:39 data/gtk/window.blp:92 data/gtk/window.blp:185
|
||||||
|
msgid "Toggle Sidebar"
|
||||||
|
msgstr "Toggle Sidebar"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:44 data/gtk/window.blp:198 data/gtk/window.blp:265
|
||||||
|
msgid "Main Menu"
|
||||||
|
msgstr "Main Menu"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:50
|
||||||
|
msgid "Games"
|
||||||
|
msgstr "Games"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:191 data/gtk/window.blp:550
|
||||||
|
msgid "Add Game"
|
||||||
|
msgstr "Add Game"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:113
|
||||||
|
#: data/gtk/window.blp:27 data/gtk/window.blp:554
|
||||||
|
msgid "Import"
|
||||||
|
msgstr "Import"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:63
|
||||||
|
msgid "Show Hidden Games"
|
||||||
|
msgstr "Show Hidden Games"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:68
|
||||||
|
msgid "Remove Game"
|
||||||
|
msgstr "Remove Game"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:117
|
||||||
|
#: data/gtk/preferences.blp:415
|
||||||
|
msgid "Behavior"
|
||||||
|
msgstr "Behaviour"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:16
|
||||||
|
msgid "Exit After Launching Games"
|
||||||
|
msgstr "Exit After Launching Games"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:20
|
||||||
|
msgid "Cover Image Launches Game"
|
||||||
|
msgstr "Cover Image Launches Game"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:21
|
||||||
|
msgid "Swaps the behavior of the cover image and the play button"
|
||||||
|
msgstr "Swaps the behaviour of the cover image and the play button"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:26 cartridges/details_dialog.py:82
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Images"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:29
|
||||||
|
msgid "High Quality Images"
|
||||||
|
msgstr "High Quality Images"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:30
|
||||||
|
msgid "Save game covers losslessly at the cost of storage"
|
||||||
|
msgstr "Save game covers losslessly at the cost of storage"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:35
|
||||||
|
msgid "Danger Zone"
|
||||||
|
msgstr "Danger Zone"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:48
|
||||||
|
msgid "Remove All Games"
|
||||||
|
msgstr "Remove All Games"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:120
|
||||||
|
msgid "Remove Uninstalled Games"
|
||||||
|
msgstr "Remove Uninstalled Games"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:125
|
||||||
|
msgid "Sources"
|
||||||
|
msgstr "Sources"
|
||||||
|
|
||||||
|
#: 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 "Install Location"
|
||||||
|
|
||||||
|
#: 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 "Import Steam Games"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:185
|
||||||
|
msgid "Import Flatpak Games"
|
||||||
|
msgstr "Import Flatpak Games"
|
||||||
|
|
||||||
|
#: 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 "Import Epic Games"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:220
|
||||||
|
msgid "Import GOG Games"
|
||||||
|
msgstr "Import GOG Games"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:224
|
||||||
|
msgid "Import Amazon Games"
|
||||||
|
msgstr "Import Amazon Games"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:228
|
||||||
|
msgid "Import Sideloaded Games"
|
||||||
|
msgstr "Import Sideloaded Games"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
|
||||||
|
msgid "Bottles"
|
||||||
|
msgstr "Bottles"
|
||||||
|
|
||||||
|
#: 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 "System Location"
|
||||||
|
|
||||||
|
#. The location of the user-specific data directory
|
||||||
|
#: data/gtk/preferences.blp:369
|
||||||
|
msgid "User Location"
|
||||||
|
msgstr "User Location"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:386
|
||||||
|
msgid "Import Game Launchers"
|
||||||
|
msgstr "Import Game Launchers"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
|
||||||
|
msgid "Desktop Entries"
|
||||||
|
msgstr "Desktop Entries"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
|
||||||
|
msgid "SteamGridDB"
|
||||||
|
msgstr "SteamGridDB"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:407
|
||||||
|
msgid "Authentication"
|
||||||
|
msgstr "Authentication"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:410
|
||||||
|
msgid "API Key"
|
||||||
|
msgstr "API Key"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:418
|
||||||
|
msgid "Use SteamGridDB"
|
||||||
|
msgstr "Use SteamGridDB"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:419
|
||||||
|
msgid "Download images when adding or importing games"
|
||||||
|
msgstr "Download images when adding or importing games"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:423
|
||||||
|
msgid "Prefer Over Official Images"
|
||||||
|
msgstr "Prefer Over Official Images"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:427
|
||||||
|
msgid "Prefer Animated Images"
|
||||||
|
msgstr "Prefer Animated Images"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:433
|
||||||
|
msgid "Update Covers"
|
||||||
|
msgstr "Update Covers"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:434
|
||||||
|
msgid "Fetch covers for games already in your library"
|
||||||
|
msgstr "Fetch covers for games already in your library"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:439
|
||||||
|
msgid "Update"
|
||||||
|
msgstr "Update"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:6 data/gtk/window.blp:14
|
||||||
|
msgid "No Games Found"
|
||||||
|
msgstr "No Games Found"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
||||||
|
msgid "Try a different search"
|
||||||
|
msgstr "Try a different search"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:21
|
||||||
|
msgid "No Games"
|
||||||
|
msgstr "No Games"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:22
|
||||||
|
msgid "Use the + button to add games"
|
||||||
|
msgstr "Use the + button to add games"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:40
|
||||||
|
msgid "No Hidden Games"
|
||||||
|
msgstr "No Hidden Games"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:41
|
||||||
|
msgid "Games you hide will appear here"
|
||||||
|
msgstr "Games you hide will appear here"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
|
||||||
|
msgid "All Games"
|
||||||
|
msgstr "All Games"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:136 cartridges/main.py:230
|
||||||
|
msgid "Added"
|
||||||
|
msgstr "Added"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:156
|
||||||
|
msgid "Imported"
|
||||||
|
msgstr "Imported"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:258
|
||||||
|
msgid "Hidden Games"
|
||||||
|
msgstr "Hidden Games"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:367
|
||||||
|
msgid "Game Title"
|
||||||
|
msgstr "Game Title"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:424
|
||||||
|
msgid "Play"
|
||||||
|
msgstr "Play"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:501
|
||||||
|
msgid "Sort"
|
||||||
|
msgstr "Sort"
|
||||||
|
|
||||||
|
#: 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 "Newest"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:522
|
||||||
|
msgid "Oldest"
|
||||||
|
msgstr "Oldest"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:528
|
||||||
|
msgid "Last Played"
|
||||||
|
msgstr "Last Played"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:535
|
||||||
|
msgid "Show Hidden"
|
||||||
|
msgstr "Show Hidden"
|
||||||
|
|
||||||
|
#: data/gtk/window.blp:544
|
||||||
|
msgid "About Cartridges"
|
||||||
|
msgstr "About 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 "{} launched"
|
||||||
|
|
||||||
|
#. Translators: Replace this with your name for it to show up in the about window
|
||||||
|
#: cartridges/main.py:270
|
||||||
|
msgid "translator_credits"
|
||||||
|
msgstr "Bruce Cowan <bruce@bcowan.me.uk>"
|
||||||
|
|
||||||
|
#. The variable is the date when the game was added
|
||||||
|
#: cartridges/window.py:373
|
||||||
|
msgid "Added: {}"
|
||||||
|
msgstr "Added: {}"
|
||||||
|
|
||||||
|
#: cartridges/window.py:376
|
||||||
|
msgid "Never"
|
||||||
|
msgstr "Never"
|
||||||
|
|
||||||
|
#. The variable is the date when the game was last played
|
||||||
|
#: cartridges/window.py:380
|
||||||
|
msgid "Last played: {}"
|
||||||
|
msgstr "Last played: {}"
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:73
|
||||||
|
msgid "Apply"
|
||||||
|
msgstr "Apply"
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:79
|
||||||
|
msgid "Add New Game"
|
||||||
|
msgstr "Add New Game"
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:80
|
||||||
|
msgid "Add"
|
||||||
|
msgstr "Add"
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:90
|
||||||
|
msgid "Executables"
|
||||||
|
msgstr "Executables"
|
||||||
|
|
||||||
|
#. 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 "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 "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 ""
|
||||||
|
"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!"
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
|
||||||
|
msgid "Couldn't Add Game"
|
||||||
|
msgstr "Couldn't Add Game"
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:209
|
||||||
|
msgid "Game title cannot be empty."
|
||||||
|
msgstr "Game title cannot be empty."
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:173 cartridges/details_dialog.py:217
|
||||||
|
msgid "Executable cannot be empty."
|
||||||
|
msgstr "Executable cannot be empty."
|
||||||
|
|
||||||
|
#: cartridges/details_dialog.py:208 cartridges/details_dialog.py:216
|
||||||
|
msgid "Couldn't Apply Preferences"
|
||||||
|
msgstr "Couldn't Apply Preferences"
|
||||||
|
|
||||||
|
#. The variable is the title of the game
|
||||||
|
#: cartridges/game.py:139
|
||||||
|
msgid "{} hidden"
|
||||||
|
msgstr "{} hidden"
|
||||||
|
|
||||||
|
#: cartridges/game.py:139
|
||||||
|
msgid "{} unhidden"
|
||||||
|
msgstr "{} unhidden"
|
||||||
|
|
||||||
|
#. 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 "{} removed"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:133
|
||||||
|
msgid "All games removed"
|
||||||
|
msgstr "All games removed"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:181
|
||||||
|
msgid ""
|
||||||
|
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
||||||
|
msgstr ""
|
||||||
|
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:196
|
||||||
|
msgid "Downloading covers…"
|
||||||
|
msgstr "Downloading covers…"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:215
|
||||||
|
msgid "Covers updated"
|
||||||
|
msgstr "Covers updated"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:360
|
||||||
|
msgid "Installation Not Found"
|
||||||
|
msgstr "Installation Not Found"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:361
|
||||||
|
msgid "Select a valid directory"
|
||||||
|
msgstr "Select a valid directory"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
|
||||||
|
msgid "Warning"
|
||||||
|
msgstr "Warning"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:431
|
||||||
|
msgid "Invalid Directory"
|
||||||
|
msgstr "Invalid Directory"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:437
|
||||||
|
msgid "Set Location"
|
||||||
|
msgstr "Set Location"
|
||||||
|
|
||||||
|
#: cartridges/utils/create_dialog.py:33 cartridges/importer/importer.py:319
|
||||||
|
msgid "Dismiss"
|
||||||
|
msgstr "Dismiss"
|
||||||
|
|
||||||
|
#: cartridges/importer/importer.py:145
|
||||||
|
msgid "Importing Games…"
|
||||||
|
msgstr "Importing Games…"
|
||||||
|
|
||||||
|
#: cartridges/importer/importer.py:338
|
||||||
|
msgid "The following errors occured during import:"
|
||||||
|
msgstr "The following errors occured during import:"
|
||||||
|
|
||||||
|
#: cartridges/importer/importer.py:367
|
||||||
|
msgid "No new games found"
|
||||||
|
msgstr "No new games found"
|
||||||
|
|
||||||
|
#: cartridges/importer/importer.py:379
|
||||||
|
msgid "1 game imported"
|
||||||
|
msgstr "1 game imported"
|
||||||
|
|
||||||
|
#. The variable is the number of games
|
||||||
|
#: cartridges/importer/importer.py:383
|
||||||
|
msgid "{} games imported"
|
||||||
|
msgstr "{} games imported"
|
||||||
|
|
||||||
|
#. A single game removed
|
||||||
|
#: cartridges/importer/importer.py:387
|
||||||
|
msgid "1 removed"
|
||||||
|
msgstr "1 removed"
|
||||||
|
|
||||||
|
#. The variable is the name of the source
|
||||||
|
#: cartridges/importer/location.py:34
|
||||||
|
msgid "Select the {} cache directory."
|
||||||
|
msgstr "Select the {} cache directory."
|
||||||
|
|
||||||
|
#. The variable is the name of the source
|
||||||
|
#: cartridges/importer/location.py:36
|
||||||
|
msgid "Select the {} configuration directory."
|
||||||
|
msgstr "Select the {} configuration directory."
|
||||||
|
|
||||||
|
#. The variable is the name of the source
|
||||||
|
#: cartridges/importer/location.py:38
|
||||||
|
msgid "Select the {} data directory."
|
||||||
|
msgstr "Select the {} data directory."
|
||||||
|
|
||||||
|
#: cartridges/importer/retroarch_source.py:129
|
||||||
|
msgid "No RetroArch Core Selected"
|
||||||
|
msgstr "No RetroArch Core Selected"
|
||||||
|
|
||||||
|
#. The variable is a newline separated list of playlists
|
||||||
|
#: cartridges/importer/retroarch_source.py:131
|
||||||
|
msgid "The following playlists have no default core:"
|
||||||
|
msgstr "The following playlists have no default core:"
|
||||||
|
|
||||||
|
#: cartridges/importer/retroarch_source.py:133
|
||||||
|
msgid "Games with no core selected were not imported"
|
||||||
|
msgstr "Games with no core selected were not imported"
|
||||||
|
|
||||||
|
#: cartridges/store/managers/sgdb_manager.py:46
|
||||||
|
msgid "Couldn't Authenticate SteamGridDB"
|
||||||
|
msgstr "Couldn't Authenticate SteamGridDB"
|
||||||
|
|
||||||
|
#: cartridges/store/managers/sgdb_manager.py:47
|
||||||
|
msgid "Verify your API key in preferences"
|
||||||
|
msgstr "Verify your API key in preferences"
|
||||||
|
|
||||||
|
#~ msgid "Cache Location"
|
||||||
|
#~ msgstr "Cache Location"
|
||||||
482
po/es.po
@@ -1,16 +1,17 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the cartridges package.
|
# This file is distributed under the same license as the cartridges package.
|
||||||
# Óscar Fernández Díaz <oscfdezdz@users.noreply.hosted.weblate.org>, 2023.
|
# Óscar Fernández Díaz <oscfdezdz@users.noreply.hosted.weblate.org>, 2023, 2024.
|
||||||
# gallegonovato <fran-carro@hotmail.es>, 2023.
|
# gallegonovato <fran-carro@hotmail.es>, 2023.
|
||||||
# kramo <contact@kramo.hu>, 2023.
|
# kramo <contact@kramo.hu>, 2023.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: cartridges\n"
|
"Project-Id-Version: cartridges\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-08-30 10:43+0200\n"
|
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
|
||||||
"PO-Revision-Date: 2023-09-21 14:26+0000\n"
|
"PO-Revision-Date: 2024-02-19 06:35+0000\n"
|
||||||
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
|
"Last-Translator: Óscar Fernández Díaz <oscfdezdz@users.noreply.hosted."
|
||||||
|
"weblate.org>\n"
|
||||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/cartridges/"
|
"Language-Team: Spanish <https://hosted.weblate.org/projects/cartridges/"
|
||||||
"cartridges/es/>\n"
|
"cartridges/es/>\n"
|
||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
@@ -18,31 +19,32 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 5.1-dev\n"
|
"X-Generator: Weblate 5.4\n"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:3
|
#: data/page.kramo.Cartridges.desktop.in:3
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
|
#: data/page.kramo.Cartridges.metainfo.xml.in:9
|
||||||
#: data/gtk/window.blp:80
|
#: data/page.kramo.Cartridges.metainfo.xml.in:40 data/gtk/window.blp:47
|
||||||
|
#: data/gtk/window.blp:83
|
||||||
msgid "Cartridges"
|
msgid "Cartridges"
|
||||||
msgstr "Cartuchos"
|
msgstr "Cartuchos"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:4
|
#: data/page.kramo.Cartridges.desktop.in:4
|
||||||
msgid "Game Launcher"
|
msgid "Game Launcher"
|
||||||
msgstr "Lanzador de juegos"
|
msgstr "Lanzador de juegos"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:5
|
#: data/page.kramo.Cartridges.desktop.in:5
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:7
|
#: data/page.kramo.Cartridges.metainfo.xml.in:10
|
||||||
msgid "Launch all your games"
|
msgid "Launch all your games"
|
||||||
msgstr "Lance todos sus juegos"
|
msgstr "Lance todos sus juegos"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:11
|
#: data/page.kramo.Cartridges.desktop.in:11
|
||||||
msgid ""
|
msgid ""
|
||||||
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"juegos;lanzador;steam;lutris;heroico;botellas;itch;flatpak;legendario;"
|
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
||||||
"retroarch;"
|
"juegos;lanzador;"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
|
#: data/page.kramo.Cartridges.metainfo.xml.in:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cartridges is a simple game launcher for all of your games. It has support "
|
"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 "
|
"for importing games from Steam, Lutris, Heroic and more with no login "
|
||||||
@@ -54,429 +56,441 @@ msgstr ""
|
|||||||
"iniciar sesión. Puede ordenar y ocultar juegos o descargar portadas de "
|
"iniciar sesión. Puede ordenar y ocultar juegos o descargar portadas de "
|
||||||
"SteamGridDB."
|
"SteamGridDB."
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:30
|
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:318
|
||||||
msgid "Library"
|
#: cartridges/details_dialog.py:68
|
||||||
msgstr "Biblioteca"
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:34
|
|
||||||
msgid "Edit Game Details"
|
|
||||||
msgstr "Editar detalles del juego"
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
|
|
||||||
#: src/details_window.py:71
|
|
||||||
msgid "Game Details"
|
msgid "Game Details"
|
||||||
msgstr "Detalles del juego"
|
msgstr "Detalles del juego"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
|
#: data/page.kramo.Cartridges.metainfo.xml.in:48
|
||||||
#: src/details_window.py:271 src/importer/importer.py:308
|
msgid "Edit Game Details"
|
||||||
#: src/importer/importer.py:359
|
msgstr "Editar detalles del juego"
|
||||||
|
|
||||||
|
#: 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"
|
msgid "Preferences"
|
||||||
msgstr "Preferencias"
|
msgstr "Preferencias"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:25
|
#: data/gtk/details-dialog.blp:15
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:55
|
#: data/gtk/details-dialog.blp:46
|
||||||
msgid "New Cover"
|
msgid "New Cover"
|
||||||
msgstr "Portada nueva"
|
msgstr "Portada nueva"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:73
|
#: data/gtk/details-dialog.blp:65
|
||||||
msgid "Delete Cover"
|
msgid "Delete Cover"
|
||||||
msgstr "Borrar portada"
|
msgstr "Borrar portada"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
|
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Título"
|
msgstr "Título"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:103
|
#: data/gtk/details-dialog.blp:97
|
||||||
msgid "Developer (optional)"
|
msgid "Developer (optional)"
|
||||||
msgstr "Desarrollador (opcional)"
|
msgstr "Desarrollador (opcional)"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:108
|
#: data/gtk/details-dialog.blp:103
|
||||||
msgid "Executable"
|
msgid "Executable"
|
||||||
msgstr "Ejecutable"
|
msgstr "Ejecutable"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:114
|
#: data/gtk/details-dialog.blp:109
|
||||||
msgid "Select File"
|
msgid "Select File"
|
||||||
msgstr "Seleccionar el archivo"
|
msgstr "Seleccionar archivo"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:125
|
#: data/gtk/details-dialog.blp:120
|
||||||
msgid "More Info"
|
msgid "More Info"
|
||||||
msgstr "Más información"
|
msgstr "Más información"
|
||||||
|
|
||||||
#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
|
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
|
||||||
msgid "Edit"
|
msgid "Edit"
|
||||||
msgstr "Editar"
|
msgstr "Editar"
|
||||||
|
|
||||||
#: data/gtk/game.blp:107 src/window.py:348
|
#: data/gtk/game.blp:103 cartridges/window.py:350
|
||||||
msgid "Hide"
|
msgid "Hide"
|
||||||
msgstr "Ocultar"
|
msgstr "Ocultar"
|
||||||
|
|
||||||
#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
|
#: data/gtk/game.blp:104 data/gtk/game.blp:112 data/gtk/window.blp:463
|
||||||
#: data/gtk/window.blp:433
|
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Eliminar"
|
msgstr "Eliminar"
|
||||||
|
|
||||||
#: data/gtk/game.blp:126 src/window.py:350
|
#: data/gtk/game.blp:111 cartridges/window.py:352
|
||||||
msgid "Unhide"
|
msgid "Unhide"
|
||||||
msgstr "Desocultar"
|
msgstr "Desocultar"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
|
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "General"
|
msgstr "General"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:14
|
#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:205 data/gtk/window.blp:221
|
||||||
msgid "Quit"
|
#: data/gtk/window.blp:272 data/gtk/window.blp:288 data/gtk/window.blp:474
|
||||||
msgstr "Salir"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
|
|
||||||
#: data/gtk/window.blp:444
|
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Buscar"
|
msgstr "Buscar"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:24
|
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
|
||||||
msgid "Show preferences"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "Mostrar preferencias"
|
msgstr "Atajos del teclado"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:29
|
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
|
||||||
msgid "Shortcuts"
|
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
|
||||||
msgstr "Atajos"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
|
|
||||||
#: src/importer/importer.py:383
|
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Deshacer"
|
msgstr "Deshacer"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:39
|
#: data/gtk/help-overlay.blp:34
|
||||||
msgid "Open menu"
|
msgid "Quit"
|
||||||
msgstr "Abrir menú"
|
msgstr "Salir"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:45
|
#: data/gtk/help-overlay.blp:39 data/gtk/window.blp:92 data/gtk/window.blp:185
|
||||||
|
msgid "Toggle Sidebar"
|
||||||
|
msgstr "Conmutar la barra 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"
|
msgid "Games"
|
||||||
msgstr "Juegos"
|
msgstr "Juegos"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:48
|
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:191 data/gtk/window.blp:550
|
||||||
msgid "Add new game"
|
msgid "Add Game"
|
||||||
msgstr "Añadir un nuevo juego"
|
msgstr "Añadir juego"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:53
|
#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:113
|
||||||
msgid "Import games"
|
#: data/gtk/window.blp:27 data/gtk/window.blp:554
|
||||||
msgstr "Importar juegos"
|
msgid "Import"
|
||||||
|
msgstr "Importar"
|
||||||
#: data/gtk/help-overlay.blp:58
|
|
||||||
msgid "Show hidden games"
|
|
||||||
msgstr "Mostrar juegos ocultos"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:63
|
#: data/gtk/help-overlay.blp:63
|
||||||
msgid "Remove game"
|
msgid "Show Hidden Games"
|
||||||
|
msgstr "Mostrar juegos ocultos"
|
||||||
|
|
||||||
|
#: data/gtk/help-overlay.blp:68
|
||||||
|
msgid "Remove Game"
|
||||||
msgstr "Eliminar juego"
|
msgstr "Eliminar juego"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
|
#: data/gtk/preferences.blp:13 data/gtk/preferences.blp:117
|
||||||
#: data/gtk/preferences.blp:288
|
#: data/gtk/preferences.blp:415
|
||||||
msgid "Behavior"
|
msgid "Behavior"
|
||||||
msgstr "Comportamiento"
|
msgstr "Comportamiento"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:15
|
#: data/gtk/preferences.blp:16
|
||||||
msgid "Exit After Launching Games"
|
msgid "Exit After Launching Games"
|
||||||
msgstr "Salir después de iniciar juegos"
|
msgstr "Salir después de iniciar juegos"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:19
|
#: data/gtk/preferences.blp:20
|
||||||
msgid "Cover Image Launches Game"
|
msgid "Cover Image Launches Game"
|
||||||
msgstr "La imagen de portada lanza el juego"
|
msgstr "La imagen de portada lanza el juego"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:20
|
#: data/gtk/preferences.blp:21
|
||||||
msgid "Swaps the behavior of the cover image and the play button"
|
msgid "Swaps the behavior of the cover image and the play button"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Cambia el comportamiento de la imagen de portada y del botón de reproducción"
|
"Cambia el comportamiento de la imagen de portada y del botón de reproducción"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:25 src/details_window.py:85
|
#: data/gtk/preferences.blp:26 cartridges/details_dialog.py:82
|
||||||
msgid "Images"
|
msgid "Images"
|
||||||
msgstr "Imágenes"
|
msgstr "Imágenes"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:28
|
#: data/gtk/preferences.blp:29
|
||||||
msgid "High Quality Images"
|
msgid "High Quality Images"
|
||||||
msgstr "Imágenes de alta calidad"
|
msgstr "Imágenes de alta calidad"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:29
|
#: data/gtk/preferences.blp:30
|
||||||
msgid "Save game covers losslessly at the cost of storage"
|
msgid "Save game covers losslessly at the cost of storage"
|
||||||
msgstr "Guarda las partidas sin pérdidas a costa del almacenamiento"
|
msgstr "Guarda las partidas sin pérdidas a costa del almacenamiento"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:34
|
#: data/gtk/preferences.blp:35
|
||||||
msgid "Danger Zone"
|
msgid "Danger Zone"
|
||||||
msgstr "Zona de peligro"
|
msgstr "Zona de peligro"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:37
|
#: data/gtk/preferences.blp:48
|
||||||
msgid "Remove All Games"
|
msgid "Remove All Games"
|
||||||
msgstr "Eliminar todos los juegos"
|
msgstr "Eliminar todos los juegos"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
|
#: data/gtk/preferences.blp:120
|
||||||
msgid "Import"
|
|
||||||
msgstr "Importar"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:75
|
|
||||||
msgid "Remove Uninstalled Games"
|
msgid "Remove Uninstalled Games"
|
||||||
msgstr "Eliminar los juegos desinstalados"
|
msgstr "Eliminar los juegos desinstalados"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:80
|
#: data/gtk/preferences.blp:125
|
||||||
msgid "Sources"
|
msgid "Sources"
|
||||||
msgstr "Fuentes"
|
msgstr "Fuentes"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
|
#: data/gtk/preferences.blp:128 cartridges/importer/steam_source.py:114
|
||||||
msgid "Steam"
|
msgid "Steam"
|
||||||
msgstr "Steam"
|
msgstr "Steam"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
|
#: data/gtk/preferences.blp:137 data/gtk/preferences.blp:164
|
||||||
#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
|
#: data/gtk/preferences.blp:199 data/gtk/preferences.blp:242
|
||||||
#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
|
#: data/gtk/preferences.blp:269 data/gtk/preferences.blp:296
|
||||||
#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
|
#: data/gtk/preferences.blp:323
|
||||||
msgid "Install Location"
|
msgid "Install Location"
|
||||||
msgstr "Ruta de instalación"
|
msgstr "Ruta de instalación"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
|
#: data/gtk/preferences.blp:155 data/gtk/window.blp:564
|
||||||
|
#: cartridges/importer/lutris_source.py:96
|
||||||
msgid "Lutris"
|
msgid "Lutris"
|
||||||
msgstr "Lutris"
|
msgstr "Lutris"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:116
|
#: data/gtk/preferences.blp:181
|
||||||
msgid "Cache Location"
|
|
||||||
msgstr "Ruta de la caché"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:128
|
|
||||||
msgid "Import Steam Games"
|
msgid "Import Steam Games"
|
||||||
msgstr "Importar juegos de Steam"
|
msgstr "Importar juegos de Steam"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:132
|
#: data/gtk/preferences.blp:185
|
||||||
msgid "Import Flatpak Games"
|
msgid "Import Flatpak Games"
|
||||||
msgstr "Importar juegos Flatpak"
|
msgstr "Importar juegos Flatpak"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
|
#: data/gtk/preferences.blp:190 cartridges/importer/heroic_source.py:355
|
||||||
msgid "Heroic"
|
msgid "Heroic"
|
||||||
msgstr "Heroic"
|
msgstr "Heroic"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:153
|
#: data/gtk/preferences.blp:216
|
||||||
msgid "Import Epic Games"
|
msgid "Import Epic Games"
|
||||||
msgstr "Importar juegos de Epic"
|
msgstr "Importar juegos de Epic"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:157
|
#: data/gtk/preferences.blp:220
|
||||||
msgid "Import GOG Games"
|
msgid "Import GOG Games"
|
||||||
msgstr "Importar juegos de GOG"
|
msgstr "Importar juegos de GOG"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:161
|
#: data/gtk/preferences.blp:224
|
||||||
msgid "Import Amazon Games"
|
msgid "Import Amazon Games"
|
||||||
msgstr "Importar de Amazon Games"
|
msgstr "Importar juegos de Amazon"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:165
|
#: data/gtk/preferences.blp:228
|
||||||
msgid "Import Sideloaded Games"
|
msgid "Import Sideloaded Games"
|
||||||
msgstr "Importar juegos descargados"
|
msgstr "Importar juegos descargados"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
|
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
|
||||||
msgid "Bottles"
|
msgid "Bottles"
|
||||||
msgstr "Bottles"
|
msgstr "Bottles"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
|
#: data/gtk/preferences.blp:260 cartridges/importer/itch_source.py:81
|
||||||
msgid "itch"
|
msgid "itch"
|
||||||
msgstr "itch"
|
msgstr "itch"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
|
#: data/gtk/preferences.blp:287 cartridges/importer/legendary_source.py:97
|
||||||
msgid "Legendary"
|
msgid "Legendary"
|
||||||
msgstr "Legendario"
|
msgstr "Legendario"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
|
#: data/gtk/preferences.blp:314 cartridges/importer/retroarch_source.py:142
|
||||||
msgid "RetroArch"
|
msgid "RetroArch"
|
||||||
msgstr "RetroArch"
|
msgstr "RetroArch"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
|
#: data/gtk/preferences.blp:341 cartridges/importer/flatpak_source.py:143
|
||||||
msgid "Flatpak"
|
msgid "Flatpak"
|
||||||
msgstr "Flatpak"
|
msgstr "Flatpak"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:254
|
#. The location of the system-wide data directory
|
||||||
|
#: data/gtk/preferences.blp:351
|
||||||
|
msgid "System Location"
|
||||||
|
msgstr "Ubicación del sistema"
|
||||||
|
|
||||||
|
#. The location of the user-specific data directory
|
||||||
|
#: data/gtk/preferences.blp:369
|
||||||
|
msgid "User Location"
|
||||||
|
msgstr "Ubicación del usuario"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:386
|
||||||
msgid "Import Game Launchers"
|
msgid "Import Game Launchers"
|
||||||
msgstr "Importar lanzadores de juegos"
|
msgstr "Importar lanzadores de juegos"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
|
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
|
||||||
msgid "Desktop Entries"
|
msgid "Desktop Entries"
|
||||||
msgstr "Entradas en el escritorio"
|
msgstr "Entradas de escritorio"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:276
|
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
|
||||||
msgid "SteamGridDB"
|
msgid "SteamGridDB"
|
||||||
msgstr "SteamGridDB"
|
msgstr "SteamGridDB"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:280
|
#: data/gtk/preferences.blp:407
|
||||||
msgid "Authentication"
|
msgid "Authentication"
|
||||||
msgstr "Autenticación"
|
msgstr "Autenticación"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:283
|
#: data/gtk/preferences.blp:410
|
||||||
msgid "API Key"
|
msgid "API Key"
|
||||||
msgstr "Clave API"
|
msgstr "Clave API"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:291
|
#: data/gtk/preferences.blp:418
|
||||||
msgid "Use SteamGridDB"
|
msgid "Use SteamGridDB"
|
||||||
msgstr "Usar SteamGridDB"
|
msgstr "Usar SteamGridDB"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:292
|
#: data/gtk/preferences.blp:419
|
||||||
msgid "Download images when adding or importing games"
|
msgid "Download images when adding or importing games"
|
||||||
msgstr "Descargar las imágenes al añadir o importar juegos"
|
msgstr "Descargar las imágenes al añadir o importar juegos"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:296
|
#: data/gtk/preferences.blp:423
|
||||||
msgid "Prefer Over Official Images"
|
msgid "Prefer Over Official Images"
|
||||||
msgstr "Preferir las imágenes oficiales"
|
msgstr "Preferir las imágenes oficiales"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:300
|
#: data/gtk/preferences.blp:427
|
||||||
msgid "Prefer Animated Images"
|
msgid "Prefer Animated Images"
|
||||||
msgstr "Prefiero las imágenes animadas"
|
msgstr "Prefiero las imágenes animadas"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:433
|
||||||
|
msgid "Update Covers"
|
||||||
|
msgstr "Actualizar las portadas"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:434
|
||||||
|
msgid "Fetch covers for games already in your library"
|
||||||
|
msgstr "Busca las portadas de los juegos de su biblioteca"
|
||||||
|
|
||||||
|
#: data/gtk/preferences.blp:439
|
||||||
|
msgid "Update"
|
||||||
|
msgstr "Actualizar"
|
||||||
|
|
||||||
#: data/gtk/window.blp:6 data/gtk/window.blp:14
|
#: data/gtk/window.blp:6 data/gtk/window.blp:14
|
||||||
msgid "No Games Found"
|
msgid "No Games Found"
|
||||||
msgstr "No se han encontrado juegos"
|
msgstr "No se han encontrado juegos"
|
||||||
|
|
||||||
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
||||||
msgid "Try a different search."
|
msgid "Try a different search"
|
||||||
msgstr "Pruebe con otra búsqueda."
|
msgstr "Pruebe con otra búsqueda"
|
||||||
|
|
||||||
#: data/gtk/window.blp:21
|
#: data/gtk/window.blp:21
|
||||||
msgid "No Games"
|
msgid "No Games"
|
||||||
msgstr "No hay juegos"
|
msgstr "No hay juegos"
|
||||||
|
|
||||||
#: data/gtk/window.blp:22
|
#: data/gtk/window.blp:22
|
||||||
msgid "Use the + button to add games."
|
msgid "Use the + button to add games"
|
||||||
msgstr "Use el botón + para añadir juegos."
|
msgstr "Use el botón + para añadir juegos"
|
||||||
|
|
||||||
#: data/gtk/window.blp:40
|
#: data/gtk/window.blp:40
|
||||||
msgid "No Hidden Games"
|
msgid "No Hidden Games"
|
||||||
msgstr "No hay juegos ocultos"
|
msgstr "No hay juegos ocultos"
|
||||||
|
|
||||||
#: data/gtk/window.blp:41
|
#: data/gtk/window.blp:41
|
||||||
msgid "Games you hide will appear here."
|
msgid "Games you hide will appear here"
|
||||||
msgstr "Los juegos que oculte aparecerán aquí."
|
msgstr "Los juegos que oculte aparecerán aquí"
|
||||||
|
|
||||||
#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
|
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
|
||||||
msgid "All Games"
|
msgid "All Games"
|
||||||
msgstr "Todos los juegos"
|
msgstr "Todos los juegos"
|
||||||
|
|
||||||
#: data/gtk/window.blp:88 data/gtk/window.blp:162
|
#: data/gtk/window.blp:136 cartridges/main.py:230
|
||||||
msgid "Toggle Sidebar"
|
|
||||||
msgstr "Alternar la barra lateral"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:125 src/main.py:168
|
|
||||||
msgid "Added"
|
msgid "Added"
|
||||||
msgstr "Añadido"
|
msgstr "Añadido"
|
||||||
|
|
||||||
#: data/gtk/window.blp:140
|
#: data/gtk/window.blp:156
|
||||||
msgid "Imported"
|
msgid "Imported"
|
||||||
msgstr "Importado"
|
msgstr "Importado"
|
||||||
|
|
||||||
#: data/gtk/window.blp:168 data/gtk/window.blp:532
|
#: data/gtk/window.blp:258
|
||||||
msgid "Add Game"
|
|
||||||
msgstr "Añadir juego"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:175 data/gtk/window.blp:234
|
|
||||||
msgid "Main Menu"
|
|
||||||
msgstr "Menú principal"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:227
|
|
||||||
msgid "Hidden Games"
|
msgid "Hidden Games"
|
||||||
msgstr "Juegos ocultos"
|
msgstr "Juegos ocultos"
|
||||||
|
|
||||||
#: data/gtk/window.blp:337
|
#: data/gtk/window.blp:367
|
||||||
msgid "Game Title"
|
msgid "Game Title"
|
||||||
msgstr "Título del juego"
|
msgstr "Título del juego"
|
||||||
|
|
||||||
#: data/gtk/window.blp:394
|
#: data/gtk/window.blp:424
|
||||||
msgid "Play"
|
msgid "Play"
|
||||||
msgstr "Jugar"
|
msgstr "Jugar"
|
||||||
|
|
||||||
#: data/gtk/window.blp:471
|
#: data/gtk/window.blp:501
|
||||||
msgid "Sort"
|
msgid "Sort"
|
||||||
msgstr "Ordenar"
|
msgstr "Ordenar"
|
||||||
|
|
||||||
#: data/gtk/window.blp:474
|
#: data/gtk/window.blp:504
|
||||||
msgid "A-Z"
|
msgid "A-Z"
|
||||||
msgstr "A-Z"
|
msgstr "A-Z"
|
||||||
|
|
||||||
#: data/gtk/window.blp:480
|
#: data/gtk/window.blp:510
|
||||||
msgid "Z-A"
|
msgid "Z-A"
|
||||||
msgstr "Z-A"
|
msgstr "Z-A"
|
||||||
|
|
||||||
#: data/gtk/window.blp:486
|
#: data/gtk/window.blp:516
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Más recientes"
|
msgstr "Más recientes"
|
||||||
|
|
||||||
#: data/gtk/window.blp:492
|
#: data/gtk/window.blp:522
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Más antiguos"
|
msgstr "Más antiguos"
|
||||||
|
|
||||||
#: data/gtk/window.blp:498
|
#: data/gtk/window.blp:528
|
||||||
msgid "Last Played"
|
msgid "Last Played"
|
||||||
msgstr "Último jugado"
|
msgstr "Último jugado"
|
||||||
|
|
||||||
#: data/gtk/window.blp:505
|
#: data/gtk/window.blp:535
|
||||||
msgid "Show Hidden"
|
msgid "Show Hidden"
|
||||||
msgstr "Mostrar ocultos"
|
msgstr "Mostrar ocultos"
|
||||||
|
|
||||||
#: data/gtk/window.blp:518
|
#: data/gtk/window.blp:544
|
||||||
msgid "Keyboard Shortcuts"
|
|
||||||
msgstr "Atajos del teclado"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:523
|
|
||||||
msgid "About Cartridges"
|
msgid "About Cartridges"
|
||||||
msgstr "Acerca de Cartuchos"
|
msgstr "Acerca de Cartuchos"
|
||||||
|
|
||||||
|
#: 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 "{} comenzó"
|
||||||
|
|
||||||
#. Translators: Replace this with your name for it to show up in the about window
|
#. Translators: Replace this with your name for it to show up in the about window
|
||||||
#: src/main.py:207
|
#: cartridges/main.py:270
|
||||||
msgid "translator_credits"
|
msgid "translator_credits"
|
||||||
msgstr "Óscar Fernández Díaz <oscfdezdz@tuta.io>"
|
msgstr "Óscar Fernández Díaz <oscfdezdz@tuta.io>"
|
||||||
|
|
||||||
#. The variable is the date when the game was added
|
#. The variable is the date when the game was added
|
||||||
#: src/window.py:371
|
#: cartridges/window.py:373
|
||||||
msgid "Added: {}"
|
msgid "Added: {}"
|
||||||
msgstr "Añadido: {}"
|
msgstr "Añadido: {}"
|
||||||
|
|
||||||
#: src/window.py:374
|
#: cartridges/window.py:376
|
||||||
msgid "Never"
|
msgid "Never"
|
||||||
msgstr "Nunca"
|
msgstr "Nunca"
|
||||||
|
|
||||||
#. The variable is the date when the game was last played
|
#. The variable is the date when the game was last played
|
||||||
#: src/window.py:378
|
#: cartridges/window.py:380
|
||||||
msgid "Last played: {}"
|
msgid "Last played: {}"
|
||||||
msgstr "Último jugado: {}"
|
msgstr "Último jugado: {}"
|
||||||
|
|
||||||
#: src/details_window.py:76
|
#: cartridges/details_dialog.py:73
|
||||||
msgid "Apply"
|
msgid "Apply"
|
||||||
msgstr "Aplicar"
|
msgstr "Aplicar"
|
||||||
|
|
||||||
#: src/details_window.py:82
|
#: cartridges/details_dialog.py:79
|
||||||
msgid "Add New Game"
|
msgid "Add New Game"
|
||||||
msgstr "Añadir un nuevo Juego"
|
msgstr "Añadir un nuevo Juego"
|
||||||
|
|
||||||
#: src/details_window.py:83
|
#: cartridges/details_dialog.py:80
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr "Añadir"
|
msgstr "Añadir"
|
||||||
|
|
||||||
#: src/details_window.py:93
|
#: cartridges/details_dialog.py:90
|
||||||
msgid "Executables"
|
msgid "Executables"
|
||||||
msgstr "Ejecutables"
|
msgstr "Ejecutables"
|
||||||
|
|
||||||
#. Translate this string as you would translate "file"
|
#. Translate this string as you would translate "file"
|
||||||
#: src/details_window.py:108
|
#: cartridges/details_dialog.py:105
|
||||||
msgid "file.txt"
|
msgid "file.txt"
|
||||||
msgstr "archivo.txt"
|
msgstr "archivo.txt"
|
||||||
|
|
||||||
#. As in software
|
#. As in software
|
||||||
#: src/details_window.py:110
|
#: cartridges/details_dialog.py:107
|
||||||
msgid "program"
|
msgid "program"
|
||||||
msgstr "programa"
|
msgstr "programa"
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:115 src/details_window.py:117
|
#: cartridges/details_dialog.py:112 cartridges/details_dialog.py:114
|
||||||
msgid "C:\\path\\to\\{}"
|
msgid "C:\\path\\to\\{}"
|
||||||
msgstr "C:\\ruta\\hasta\\{}"
|
msgstr "C:\\ruta\\hasta\\{}"
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:121 src/details_window.py:123
|
#: cartridges/details_dialog.py:118 cartridges/details_dialog.py:120
|
||||||
msgid "/path/to/{}"
|
msgid "/path/to/{}"
|
||||||
msgstr "/ruta/hasta/{}"
|
msgstr "/ruta/hasta/{}"
|
||||||
|
|
||||||
#: src/details_window.py:128
|
#: cartridges/details_dialog.py:125
|
||||||
msgid ""
|
msgid ""
|
||||||
"To launch the executable \"{}\", use the command:\n"
|
"To launch the executable \"{}\", use the command:\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -498,138 +512,163 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Si la ruta contiene espacios, ¡asegúrese de entrecomillarla!"
|
"Si la ruta contiene espacios, ¡asegúrese de entrecomillarla!"
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:177
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
|
||||||
msgid "Couldn't Add Game"
|
msgid "Couldn't Add Game"
|
||||||
msgstr "No se puede añadir el juego"
|
msgstr "No se puede añadir el juego"
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:213
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:209
|
||||||
msgid "Game title cannot be empty."
|
msgid "Game title cannot be empty."
|
||||||
msgstr "El título del juego no puede estar vacío."
|
msgstr "El título del juego no puede estar vacío."
|
||||||
|
|
||||||
#: src/details_window.py:177 src/details_window.py:221
|
#: cartridges/details_dialog.py:173 cartridges/details_dialog.py:217
|
||||||
msgid "Executable cannot be empty."
|
msgid "Executable cannot be empty."
|
||||||
msgstr "El ejecutable no puede estar vacío."
|
msgstr "El ejecutable no puede estar vacío."
|
||||||
|
|
||||||
#: src/details_window.py:212 src/details_window.py:220
|
#: cartridges/details_dialog.py:208 cartridges/details_dialog.py:216
|
||||||
msgid "Couldn't Apply Preferences"
|
msgid "Couldn't Apply Preferences"
|
||||||
msgstr "No se pudieron aplicar las preferencias"
|
msgstr "No se pudieron aplicar las preferencias"
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#: src/game.py:141
|
#: cartridges/game.py:139
|
||||||
msgid "{} launched"
|
|
||||||
msgstr "{} comenzó"
|
|
||||||
|
|
||||||
#. The variable is the title of the game
|
|
||||||
#: src/game.py:155
|
|
||||||
msgid "{} hidden"
|
msgid "{} hidden"
|
||||||
msgstr "{} oculto"
|
msgstr "{} oculto"
|
||||||
|
|
||||||
#: src/game.py:155
|
#: cartridges/game.py:139
|
||||||
msgid "{} unhidden"
|
msgid "{} unhidden"
|
||||||
msgstr "{} visible"
|
msgstr "{} visible"
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#. The variable is the number of games removed
|
#. The variable is the number of games removed
|
||||||
#: src/game.py:169 src/importer/importer.py:380
|
#: cartridges/game.py:153 cartridges/importer/importer.py:391
|
||||||
msgid "{} removed"
|
msgid "{} removed"
|
||||||
msgstr "{} eliminado"
|
msgstr "{} eliminado"
|
||||||
|
|
||||||
#: src/preferences.py:121
|
#: cartridges/preferences.py:133
|
||||||
msgid "All games removed"
|
msgid "All games removed"
|
||||||
msgstr "Todos los juegos eliminados"
|
msgstr "Todos los juegos eliminados"
|
||||||
|
|
||||||
#: src/preferences.py:169
|
#: cartridges/preferences.py:181
|
||||||
msgid ""
|
msgid ""
|
||||||
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Se necesita una clave API para utilizar SteamGridDB. Puedes generar una {}"
|
"Se necesita una clave API para utilizar SteamGridDB. Puedes generar una {}"
|
||||||
"aquí{}."
|
"aquí{}."
|
||||||
|
|
||||||
#: src/preferences.py:296
|
#: cartridges/preferences.py:196
|
||||||
|
msgid "Downloading covers…"
|
||||||
|
msgstr "Descargando las portadas…"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:215
|
||||||
|
msgid "Covers updated"
|
||||||
|
msgstr "Portadas actualizadas"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:360
|
||||||
msgid "Installation Not Found"
|
msgid "Installation Not Found"
|
||||||
msgstr "Instalación no encontrada"
|
msgstr "Instalación no encontrada"
|
||||||
|
|
||||||
#: src/preferences.py:297
|
#: cartridges/preferences.py:361
|
||||||
msgid "Select a valid directory."
|
msgid "Select a valid directory"
|
||||||
msgstr "Selecciona un directorio válido."
|
msgstr "Seleccione un directorio válido"
|
||||||
|
|
||||||
#: src/preferences.py:333 src/importer/importer.py:306
|
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
|
||||||
msgid "Warning"
|
msgid "Warning"
|
||||||
msgstr "Advertencia"
|
msgstr "Advertencia"
|
||||||
|
|
||||||
#: src/preferences.py:367
|
#: cartridges/preferences.py:431
|
||||||
msgid "Invalid Directory"
|
msgid "Invalid Directory"
|
||||||
msgstr "Directorio incorrecto"
|
msgstr "Directorio no válido"
|
||||||
|
|
||||||
#: src/preferences.py:373
|
#: cartridges/preferences.py:437
|
||||||
msgid "Set Location"
|
msgid "Set Location"
|
||||||
msgstr "Escoger la ubicación"
|
msgstr "Escoger la ubicación"
|
||||||
|
|
||||||
#: src/utils/create_dialog.py:33 src/importer/importer.py:307
|
#: cartridges/utils/create_dialog.py:33 cartridges/importer/importer.py:319
|
||||||
msgid "Dismiss"
|
msgid "Dismiss"
|
||||||
msgstr "Descartar"
|
msgstr "Descartar"
|
||||||
|
|
||||||
#: src/importer/importer.py:142
|
#: cartridges/importer/importer.py:145
|
||||||
msgid "Importing Games…"
|
msgid "Importing Games…"
|
||||||
msgstr "Importando juegos…"
|
msgstr "Importando juegos…"
|
||||||
|
|
||||||
#: src/importer/importer.py:327
|
#: cartridges/importer/importer.py:338
|
||||||
msgid "The following errors occured during import:"
|
msgid "The following errors occured during import:"
|
||||||
msgstr "Han sucedido los siguientes fallos durante la importación:"
|
msgstr "Han sucedido los siguientes fallos durante la importación:"
|
||||||
|
|
||||||
#: src/importer/importer.py:356
|
#: cartridges/importer/importer.py:367
|
||||||
msgid "No new games found"
|
msgid "No new games found"
|
||||||
msgstr "No se encontraron juegos nuevos"
|
msgstr "No se encontraron juegos nuevos"
|
||||||
|
|
||||||
#: src/importer/importer.py:368
|
#: cartridges/importer/importer.py:379
|
||||||
msgid "1 game imported"
|
msgid "1 game imported"
|
||||||
msgstr "1 juego importado"
|
msgstr "1 juego importado"
|
||||||
|
|
||||||
#. The variable is the number of games
|
#. The variable is the number of games
|
||||||
#: src/importer/importer.py:372
|
#: cartridges/importer/importer.py:383
|
||||||
msgid "{} games imported"
|
msgid "{} games imported"
|
||||||
msgstr "0 juegos importados"
|
msgstr "{} juegos importados"
|
||||||
|
|
||||||
#. A single game removed
|
#. A single game removed
|
||||||
#: src/importer/importer.py:376
|
#: cartridges/importer/importer.py:387
|
||||||
msgid "1 removed"
|
msgid "1 removed"
|
||||||
msgstr "1 eliminado"
|
msgstr "1 eliminado"
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:33
|
#: cartridges/importer/location.py:34
|
||||||
msgid "Select the {} cache directory."
|
msgid "Select the {} cache directory."
|
||||||
msgstr "Seleccione el directorio de la caché {}."
|
msgstr "Seleccione el directorio de la caché de {}."
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:35
|
#: cartridges/importer/location.py:36
|
||||||
msgid "Select the {} configuration directory."
|
msgid "Select the {} configuration directory."
|
||||||
msgstr "Seleccione el directorio de configuración {}."
|
msgstr "Seleccione el directorio de configuración de {}."
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:37
|
#: cartridges/importer/location.py:38
|
||||||
msgid "Select the {} data directory."
|
msgid "Select the {} data directory."
|
||||||
msgstr "Seleccione el directorio de datos {}."
|
msgstr "Selecciona el directorio de los datos {}."
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:46
|
#: cartridges/importer/retroarch_source.py:129
|
||||||
|
msgid "No RetroArch Core Selected"
|
||||||
|
msgstr "No hay ningún núcleo RetroArch seleccionado"
|
||||||
|
|
||||||
|
#. The variable is a newline separated list of playlists
|
||||||
|
#: cartridges/importer/retroarch_source.py:131
|
||||||
|
msgid "The following playlists have no default core:"
|
||||||
|
msgstr ""
|
||||||
|
"Las siguientes listas de reproducción no tienen un núcleo predeterminado:"
|
||||||
|
|
||||||
|
#: cartridges/importer/retroarch_source.py:133
|
||||||
|
msgid "Games with no core selected were not imported"
|
||||||
|
msgstr "Los juegos sin núcleo seleccionado no se importaron"
|
||||||
|
|
||||||
|
#: cartridges/store/managers/sgdb_manager.py:46
|
||||||
msgid "Couldn't Authenticate SteamGridDB"
|
msgid "Couldn't Authenticate SteamGridDB"
|
||||||
msgstr "No se ha podido autenticar SteamGridDB"
|
msgstr "No se ha podido autenticar SteamGridDB"
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:47
|
#: cartridges/store/managers/sgdb_manager.py:47
|
||||||
msgid "Verify your API key in preferences"
|
msgid "Verify your API key in preferences"
|
||||||
msgstr "Verifica tu clave API en las preferencias"
|
msgstr "Verifique su clave API en las preferencias"
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:129
|
#~ msgid "Cache Location"
|
||||||
msgid "No RetroArch Core Selected"
|
#~ msgstr "Ruta de la caché"
|
||||||
msgstr "No seleccionaste ningún núcleo para RetroArch"
|
|
||||||
|
|
||||||
#. The variable is a newline separated list of playlists
|
#~ msgid "Library"
|
||||||
#: src/importer/sources/retroarch_source.py:131
|
#~ msgstr "Biblioteca"
|
||||||
msgid "The following playlists have no default core:"
|
|
||||||
msgstr "Las siguientes listas de reproducción no tienen un núcleo por defecto:"
|
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:133
|
#~ msgid "Show preferences"
|
||||||
msgid "Games with no core selected were not imported"
|
#~ msgstr "Mostrar preferencias"
|
||||||
msgstr "Los juegos sin núcleo seleccionado no se importaron"
|
|
||||||
|
#~ msgid "Shortcuts"
|
||||||
|
#~ msgstr "Atajos"
|
||||||
|
|
||||||
|
#~ msgid "Open menu"
|
||||||
|
#~ msgstr "Abrir menú"
|
||||||
|
|
||||||
|
#~ msgid "Add new game"
|
||||||
|
#~ msgstr "Añadir un nuevo juego"
|
||||||
|
|
||||||
|
#~ msgid "Import games"
|
||||||
|
#~ msgstr "Importar juegos"
|
||||||
|
|
||||||
#~ msgid "Back"
|
#~ msgid "Back"
|
||||||
#~ msgstr "Volver"
|
#~ msgstr "Volver"
|
||||||
@@ -684,9 +723,6 @@ msgstr "Los juegos sin núcleo seleccionado no se importaron"
|
|||||||
#~ msgid "Select the Lutris cache directory."
|
#~ msgid "Select the Lutris cache directory."
|
||||||
#~ msgstr "Selecciona el directorio de la caché de Lutris."
|
#~ msgstr "Selecciona el directorio de la caché de Lutris."
|
||||||
|
|
||||||
#~ msgid "Importing Covers…"
|
|
||||||
#~ msgstr "Importando las portadas…"
|
|
||||||
|
|
||||||
#~ msgid "Directory to use when importing games"
|
#~ msgid "Directory to use when importing games"
|
||||||
#~ msgstr "Directorio a usar para importar juegos"
|
#~ msgstr "Directorio a usar para importar juegos"
|
||||||
|
|
||||||
|
|||||||
540
po/fa.po
@@ -3,13 +3,14 @@
|
|||||||
# This file is distributed under the same license as the Cartridges package.
|
# This file is distributed under the same license as the Cartridges package.
|
||||||
# سید حسین موسوی فرد <shmf1385@protonmail.com>, 2023.
|
# سید حسین موسوی فرد <shmf1385@protonmail.com>, 2023.
|
||||||
# Danial Behzadi <dani.behzi@ubuntu.com>, 2023.
|
# Danial Behzadi <dani.behzi@ubuntu.com>, 2023.
|
||||||
|
# آوید <avds+git@disroot.org>, 2024.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Cartridges\n"
|
"Project-Id-Version: Cartridges\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-08-30 10:43+0200\n"
|
"POT-Creation-Date: 2024-04-14 12:48+0200\n"
|
||||||
"PO-Revision-Date: 2023-09-10 00:49+0000\n"
|
"PO-Revision-Date: 2024-07-14 20:09+0000\n"
|
||||||
"Last-Translator: Danial Behzadi <dani.behzi@ubuntu.com>\n"
|
"Last-Translator: آوید <avds+git@disroot.org>\n"
|
||||||
"Language-Team: Persian <https://hosted.weblate.org/projects/cartridges/"
|
"Language-Team: Persian <https://hosted.weblate.org/projects/cartridges/"
|
||||||
"cartridges/fa/>\n"
|
"cartridges/fa/>\n"
|
||||||
"Language: fa\n"
|
"Language: fa\n"
|
||||||
@@ -17,31 +18,32 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 5.0.1-dev\n"
|
"X-Generator: Weblate 5.7-dev\n"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:3
|
#: data/page.kramo.Cartridges.desktop.in:3
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:6 data/gtk/window.blp:47
|
#: data/page.kramo.Cartridges.metainfo.xml.in:9
|
||||||
#: data/gtk/window.blp:80
|
#: data/page.kramo.Cartridges.metainfo.xml.in:40 data/gtk/window.blp:47
|
||||||
|
#: data/gtk/window.blp:83
|
||||||
msgid "Cartridges"
|
msgid "Cartridges"
|
||||||
msgstr "کارتریجها"
|
msgstr "کارتریجها"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:4
|
#: data/page.kramo.Cartridges.desktop.in:4
|
||||||
msgid "Game Launcher"
|
msgid "Game Launcher"
|
||||||
msgstr "اجراگر بازی"
|
msgstr "اجراگر بازی"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:5
|
#: data/page.kramo.Cartridges.desktop.in:5
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:7
|
#: data/page.kramo.Cartridges.metainfo.xml.in:10
|
||||||
msgid "Launch all your games"
|
msgid "Launch all your games"
|
||||||
msgstr "اجرای همهٔ بازیهایتان"
|
msgstr "اجرای همهٔ بازیهایتان"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.desktop.in:11
|
#: data/page.kramo.Cartridges.desktop.in:11
|
||||||
msgid ""
|
msgid ""
|
||||||
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
"gaming;launcher;steam;lutris;heroic;bottles;itch;flatpak;legendary;retroarch;"
|
||||||
"بازی;استیم;لوتریس;هروییک;بطریها;باتلز;ایچ;فلتپک;لجندری;رتروآرچ;"
|
"بازی;استیم;لوتریس;هروییک;بطریها;باتلز;ایچ;فلتپک;لجندری;رتروآرچ;"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:9
|
#: data/page.kramo.Cartridges.metainfo.xml.in:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cartridges is a simple game launcher for all of your games. It has support "
|
"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 "
|
"for importing games from Steam, Lutris, Heroic and more with no login "
|
||||||
@@ -52,434 +54,440 @@ msgstr ""
|
|||||||
"نیاز به ورود، بازیهایتان را از استیم، لوتریس، هروییک و… وارد کند. میتوانید "
|
"نیاز به ورود، بازیهایتان را از استیم، لوتریس، هروییک و… وارد کند. میتوانید "
|
||||||
"بازیهایتان را نهفته یا طرح جلدشان را از SteamGridDB بگیرید."
|
"بازیهایتان را نهفته یا طرح جلدشان را از SteamGridDB بگیرید."
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:30
|
#: data/page.kramo.Cartridges.metainfo.xml.in:44 data/gtk/window.blp:318
|
||||||
msgid "Library"
|
#: cartridges/details_dialog.py:68
|
||||||
msgstr "کتابخانه"
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:34
|
|
||||||
msgid "Edit Game Details"
|
|
||||||
msgstr "ویرایش جزییات بازی"
|
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:38 data/gtk/window.blp:286
|
|
||||||
#: src/details_window.py:71
|
|
||||||
msgid "Game Details"
|
msgid "Game Details"
|
||||||
msgstr "جزییات بازی"
|
msgstr "جزییات بازی"
|
||||||
|
|
||||||
#: data/hu.kramo.Cartridges.metainfo.xml.in:42 data/gtk/window.blp:513
|
#: data/page.kramo.Cartridges.metainfo.xml.in:48
|
||||||
#: src/details_window.py:271 src/importer/importer.py:308
|
msgid "Edit Game Details"
|
||||||
#: src/importer/importer.py:359
|
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"
|
msgid "Preferences"
|
||||||
msgstr "ترجیحات"
|
msgstr "ترجیحات"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:25
|
#: data/gtk/details-dialog.blp:15
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "لغو"
|
msgstr "لغو"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:55
|
#: data/gtk/details-dialog.blp:46
|
||||||
msgid "New Cover"
|
msgid "New Cover"
|
||||||
msgstr "طرج جلد جدید"
|
msgstr "طرح جلد جدید"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:73
|
#: data/gtk/details-dialog.blp:65
|
||||||
msgid "Delete Cover"
|
msgid "Delete Cover"
|
||||||
msgstr "حذف طرح جلد"
|
msgstr "حذف طرح جلد"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:100 data/gtk/game.blp:80
|
#: data/gtk/details-dialog.blp:93 data/gtk/game.blp:81
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "عنوان"
|
msgstr "عنوان"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:103
|
#: data/gtk/details-dialog.blp:97
|
||||||
msgid "Developer (optional)"
|
msgid "Developer (optional)"
|
||||||
msgstr "توسعهدهنده (اختیاری)"
|
msgstr "توسعهدهنده (اختیاری)"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:108
|
#: data/gtk/details-dialog.blp:103
|
||||||
msgid "Executable"
|
msgid "Executable"
|
||||||
msgstr "اجرایی"
|
msgstr "اجرایی"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:114
|
#: data/gtk/details-dialog.blp:109
|
||||||
msgid "Select File"
|
msgid "Select File"
|
||||||
msgstr "گزینش پرونده"
|
msgstr "گزینش پرونده"
|
||||||
|
|
||||||
#: data/gtk/details-window.blp:125
|
#: data/gtk/details-dialog.blp:120
|
||||||
msgid "More Info"
|
msgid "More Info"
|
||||||
msgstr "اطّلاعات بیشتر"
|
msgstr "اطلاعات بیشتر"
|
||||||
|
|
||||||
#: data/gtk/game.blp:102 data/gtk/game.blp:121 data/gtk/window.blp:413
|
#: data/gtk/game.blp:102 data/gtk/game.blp:110 data/gtk/window.blp:443
|
||||||
msgid "Edit"
|
msgid "Edit"
|
||||||
msgstr "ویرایش"
|
msgstr "ویرایش"
|
||||||
|
|
||||||
#: data/gtk/game.blp:107 src/window.py:348
|
#: data/gtk/game.blp:103 cartridges/window.py:350
|
||||||
msgid "Hide"
|
msgid "Hide"
|
||||||
msgstr "نهفتن"
|
msgstr "نهفتن"
|
||||||
|
|
||||||
#: data/gtk/game.blp:112 data/gtk/game.blp:131 data/gtk/preferences.blp:40
|
#: data/gtk/game.blp:104 data/gtk/game.blp:112 data/gtk/window.blp:463
|
||||||
#: data/gtk/window.blp:433
|
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "برداشتن"
|
msgstr "برداشتن"
|
||||||
|
|
||||||
#: data/gtk/game.blp:126 src/window.py:350
|
#: data/gtk/game.blp:111 cartridges/window.py:352
|
||||||
msgid "Unhide"
|
msgid "Unhide"
|
||||||
msgstr "نانهفتن"
|
msgstr "نانهفتن"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:8
|
#: data/gtk/help-overlay.blp:11 data/gtk/preferences.blp:9
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "عمومی"
|
msgstr "عمومی"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:14
|
#: data/gtk/help-overlay.blp:14 data/gtk/window.blp:205 data/gtk/window.blp:221
|
||||||
msgid "Quit"
|
#: data/gtk/window.blp:272 data/gtk/window.blp:288 data/gtk/window.blp:474
|
||||||
msgstr "خروج"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:19 data/gtk/window.blp:182 data/gtk/window.blp:241
|
|
||||||
#: data/gtk/window.blp:444
|
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "جستوجو"
|
msgstr "جستوجو"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:24
|
#: data/gtk/help-overlay.blp:24 data/gtk/window.blp:543
|
||||||
msgid "Show preferences"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "نمایش ترجیحات"
|
msgstr "میانبرهای صفحهکلید"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:29
|
#: data/gtk/help-overlay.blp:29 cartridges/game.py:103
|
||||||
msgid "Shortcuts"
|
#: cartridges/preferences.py:134 cartridges/importer/importer.py:394
|
||||||
msgstr "میانبرها"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:34 src/game.py:105 src/preferences.py:122
|
|
||||||
#: src/importer/importer.py:383
|
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "برگردان"
|
msgstr "برگردان"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:39
|
#: data/gtk/help-overlay.blp:34
|
||||||
msgid "Open menu"
|
msgid "Quit"
|
||||||
msgstr "گشودن فهرست"
|
msgstr "خروج"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:45
|
#: 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"
|
msgid "Games"
|
||||||
msgstr "بازیها"
|
msgstr "بازیها"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:48
|
#: data/gtk/help-overlay.blp:53 data/gtk/window.blp:191 data/gtk/window.blp:550
|
||||||
msgid "Add new game"
|
msgid "Add Game"
|
||||||
msgstr "افزودن بازی جدید"
|
msgstr "افزودن بازی"
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:53
|
#: data/gtk/help-overlay.blp:58 data/gtk/preferences.blp:113
|
||||||
msgid "Import games"
|
#: data/gtk/window.blp:27 data/gtk/window.blp:554
|
||||||
msgstr "درونریزی بازیها"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:58
|
|
||||||
msgid "Show hidden games"
|
|
||||||
msgstr "نمایش بازیهای نهفته"
|
|
||||||
|
|
||||||
#: data/gtk/help-overlay.blp:63
|
|
||||||
msgid "Remove game"
|
|
||||||
msgstr "برداشتن بازی"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:12 data/gtk/preferences.blp:72
|
|
||||||
#: data/gtk/preferences.blp:288
|
|
||||||
msgid "Behavior"
|
|
||||||
msgstr "رفتار"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:15
|
|
||||||
msgid "Exit After Launching Games"
|
|
||||||
msgstr "خروج پس از اجرا کردن بازی"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:19
|
|
||||||
msgid "Cover Image Launches Game"
|
|
||||||
msgstr "طرح جلد بازی را اجرا میکند"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:20
|
|
||||||
msgid "Swaps the behavior of the cover image and the play button"
|
|
||||||
msgstr "تعویض رفتار تصویر جلد و دکمهٔ بازی کردن"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:25 src/details_window.py:85
|
|
||||||
msgid "Images"
|
|
||||||
msgstr "عکسها"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:28
|
|
||||||
msgid "High Quality Images"
|
|
||||||
msgstr "عکسهای با کیفیت بالا"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:29
|
|
||||||
msgid "Save game covers losslessly at the cost of storage"
|
|
||||||
msgstr "ذخیرهٔ طرح جلدهای بدون اتلاف به فیمت ذخیرهسازی"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:34
|
|
||||||
msgid "Danger Zone"
|
|
||||||
msgstr "منطقهٔ خطر"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:37
|
|
||||||
msgid "Remove All Games"
|
|
||||||
msgstr "حذف کردن همهٔ بازیها"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:68 data/gtk/window.blp:27 data/gtk/window.blp:539
|
|
||||||
msgid "Import"
|
msgid "Import"
|
||||||
msgstr "درونریزی"
|
msgstr "درونریزی"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:75
|
#: data/gtk/help-overlay.blp:63
|
||||||
msgid "Remove Uninstalled Games"
|
msgid "Show Hidden Games"
|
||||||
msgstr "برداشن بازیهای نصب نشده"
|
msgstr "نمایش بازیهای نهفته"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:80
|
#: 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"
|
msgid "Sources"
|
||||||
msgstr "منبعها"
|
msgstr "منبعها"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:83 src/importer/sources/steam_source.py:114
|
#: data/gtk/preferences.blp:128 cartridges/importer/steam_source.py:114
|
||||||
msgid "Steam"
|
msgid "Steam"
|
||||||
msgstr "استیم"
|
msgstr "استیم"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:87 data/gtk/preferences.blp:104
|
#: data/gtk/preferences.blp:137 data/gtk/preferences.blp:164
|
||||||
#: data/gtk/preferences.blp:141 data/gtk/preferences.blp:174
|
#: data/gtk/preferences.blp:199 data/gtk/preferences.blp:242
|
||||||
#: data/gtk/preferences.blp:191 data/gtk/preferences.blp:208
|
#: data/gtk/preferences.blp:269 data/gtk/preferences.blp:296
|
||||||
#: data/gtk/preferences.blp:225 data/gtk/preferences.blp:242
|
#: data/gtk/preferences.blp:323
|
||||||
msgid "Install Location"
|
msgid "Install Location"
|
||||||
msgstr "مکان نصب"
|
msgstr "مکان نصب"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:100 src/importer/sources/lutris_source.py:92
|
#: data/gtk/preferences.blp:155 data/gtk/window.blp:564
|
||||||
|
#: cartridges/importer/lutris_source.py:96
|
||||||
msgid "Lutris"
|
msgid "Lutris"
|
||||||
msgstr "لوتریس"
|
msgstr "لوتریس"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:116
|
#: data/gtk/preferences.blp:181
|
||||||
msgid "Cache Location"
|
|
||||||
msgstr "مکان انباره"
|
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:128
|
|
||||||
msgid "Import Steam Games"
|
msgid "Import Steam Games"
|
||||||
msgstr "درونریزی بازیهای استیم"
|
msgstr "درونریزی بازیهای استیم"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:132
|
#: data/gtk/preferences.blp:185
|
||||||
msgid "Import Flatpak Games"
|
msgid "Import Flatpak Games"
|
||||||
msgstr "درونریزی بازیهای فلتپک"
|
msgstr "درونریزی بازیهای فلتپک"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:137 src/importer/sources/heroic_source.py:355
|
#: data/gtk/preferences.blp:190 cartridges/importer/heroic_source.py:355
|
||||||
msgid "Heroic"
|
msgid "Heroic"
|
||||||
msgstr "هروییک"
|
msgstr "هروییک"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:153
|
#: data/gtk/preferences.blp:216
|
||||||
msgid "Import Epic Games"
|
msgid "Import Epic Games"
|
||||||
msgstr "درونریزی بازیهای اپیک"
|
msgstr "درونریزی بازیهای اپیک"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:157
|
#: data/gtk/preferences.blp:220
|
||||||
msgid "Import GOG Games"
|
msgid "Import GOG Games"
|
||||||
msgstr "درونریزی بازیهای گوگ"
|
msgstr "درونریزی بازیهای گوگ"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:161
|
#: data/gtk/preferences.blp:224
|
||||||
msgid "Import Amazon Games"
|
msgid "Import Amazon Games"
|
||||||
msgstr "درونریزی بازیهای آمازون"
|
msgstr "درونریزی بازیهای آمازون"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:165
|
#: data/gtk/preferences.blp:228
|
||||||
msgid "Import Sideloaded Games"
|
msgid "Import Sideloaded Games"
|
||||||
msgstr "درونریزی بازیهای نصب شده"
|
msgstr "درونریزی بازیهای نصبشده"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:170 src/importer/sources/bottles_source.py:86
|
#: data/gtk/preferences.blp:233 cartridges/importer/bottles_source.py:86
|
||||||
msgid "Bottles"
|
msgid "Bottles"
|
||||||
msgstr "بطریها"
|
msgstr "بطریها"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:187 src/importer/sources/itch_source.py:81
|
#: data/gtk/preferences.blp:260 cartridges/importer/itch_source.py:81
|
||||||
msgid "itch"
|
msgid "itch"
|
||||||
msgstr "ایچ"
|
msgstr "ایچ"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:204 src/importer/sources/legendary_source.py:97
|
#: data/gtk/preferences.blp:287 cartridges/importer/legendary_source.py:97
|
||||||
msgid "Legendary"
|
msgid "Legendary"
|
||||||
msgstr "لجندری"
|
msgstr "لجندری"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:221 src/importer/sources/retroarch_source.py:142
|
#: data/gtk/preferences.blp:314 cartridges/importer/retroarch_source.py:142
|
||||||
msgid "RetroArch"
|
msgid "RetroArch"
|
||||||
msgstr "رتروآرچ"
|
msgstr "رتروآرچ"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:238 src/importer/sources/flatpak_source.py:118
|
#: data/gtk/preferences.blp:341 cartridges/importer/flatpak_source.py:143
|
||||||
msgid "Flatpak"
|
msgid "Flatpak"
|
||||||
msgstr "فلتپک"
|
msgstr "فلتپک"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:254
|
#. 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"
|
msgid "Import Game Launchers"
|
||||||
msgstr "درونریزی اجراگرهای بازی"
|
msgstr "درونریزی اجراگرهای بازی"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:264 src/importer/sources/desktop_source.py:196
|
#: data/gtk/preferences.blp:391 cartridges/importer/desktop_source.py:215
|
||||||
msgid "Desktop Entries"
|
msgid "Desktop Entries"
|
||||||
msgstr "ورودیهای میزکار"
|
msgstr "ورودیهای میزکار"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:276
|
#: data/gtk/preferences.blp:403 data/gtk/window.blp:562
|
||||||
msgid "SteamGridDB"
|
msgid "SteamGridDB"
|
||||||
msgstr "SteamGridDB"
|
msgstr "SteamGridDB"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:280
|
#: data/gtk/preferences.blp:407
|
||||||
msgid "Authentication"
|
msgid "Authentication"
|
||||||
msgstr "هویتسنجی"
|
msgstr "هویتسنجی"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:283
|
#: data/gtk/preferences.blp:410
|
||||||
msgid "API Key"
|
msgid "API Key"
|
||||||
msgstr "کلید API"
|
msgstr "کلید API"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:291
|
#: data/gtk/preferences.blp:418
|
||||||
msgid "Use SteamGridDB"
|
msgid "Use SteamGridDB"
|
||||||
msgstr "استفاده از SteamGridDB"
|
msgstr "استفاده از SteamGridDB"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:292
|
#: data/gtk/preferences.blp:419
|
||||||
msgid "Download images when adding or importing games"
|
msgid "Download images when adding or importing games"
|
||||||
msgstr "بارگیری تصویرها هنگام افزودن یا درونریزی بازیها"
|
msgstr "بارگیری تصویرها هنگام افزودن یا درونریزی بازیها"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:296
|
#: data/gtk/preferences.blp:423
|
||||||
msgid "Prefer Over Official Images"
|
msgid "Prefer Over Official Images"
|
||||||
msgstr "ترجیح به تصویرهای رسمی"
|
msgstr "ترجیح به تصویرهای رسمی"
|
||||||
|
|
||||||
#: data/gtk/preferences.blp:300
|
#: data/gtk/preferences.blp:427
|
||||||
msgid "Prefer Animated Images"
|
msgid "Prefer Animated Images"
|
||||||
msgstr "ترچیح تصویرهای پویا"
|
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
|
#: data/gtk/window.blp:6 data/gtk/window.blp:14
|
||||||
msgid "No Games Found"
|
msgid "No Games Found"
|
||||||
msgstr "هیچ بازیای پیدا نشد"
|
msgstr "هیچ بازیای پیدا نشد"
|
||||||
|
|
||||||
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
#: data/gtk/window.blp:7 data/gtk/window.blp:15
|
||||||
msgid "Try a different search."
|
msgid "Try a different search"
|
||||||
msgstr "آزمودن جستوجویی دیگر."
|
msgstr "آزمودن جستوجویی دیگر"
|
||||||
|
|
||||||
#: data/gtk/window.blp:21
|
#: data/gtk/window.blp:21
|
||||||
msgid "No Games"
|
msgid "No Games"
|
||||||
msgstr "بدون بازی"
|
msgstr "بدون بازی"
|
||||||
|
|
||||||
#: data/gtk/window.blp:22
|
#: data/gtk/window.blp:22
|
||||||
msgid "Use the + button to add games."
|
msgid "Use the + button to add games"
|
||||||
msgstr "استفاده از دکمهٔ + برای افزودن بازیها."
|
msgstr "استفاده از دکمهٔ + برای افزودن بازیها"
|
||||||
|
|
||||||
#: data/gtk/window.blp:40
|
#: data/gtk/window.blp:40
|
||||||
msgid "No Hidden Games"
|
msgid "No Hidden Games"
|
||||||
msgstr "بدون بازی نهفته"
|
msgstr "بدون بازی نهفته"
|
||||||
|
|
||||||
#: data/gtk/window.blp:41
|
#: data/gtk/window.blp:41
|
||||||
msgid "Games you hide will appear here."
|
msgid "Games you hide will appear here"
|
||||||
msgstr "بازیهایی که پنهان میکنید، اینجا ظاهر خواهند شد."
|
msgstr "بازیهایی که پنهان میکنید، اینجا نمایان خواهند شد"
|
||||||
|
|
||||||
#: data/gtk/window.blp:75 data/gtk/window.blp:105 src/main.py:166
|
#: data/gtk/window.blp:76 data/gtk/window.blp:111 cartridges/main.py:228
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Remove All Games"
|
|
||||||
msgid "All Games"
|
msgid "All Games"
|
||||||
msgstr "حذف کردن همهٔ بازیها"
|
msgstr "همهٔ بازیها"
|
||||||
|
|
||||||
#: data/gtk/window.blp:88 data/gtk/window.blp:162
|
#: data/gtk/window.blp:136 cartridges/main.py:230
|
||||||
msgid "Toggle Sidebar"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:125 src/main.py:168
|
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Added: {}"
|
|
||||||
msgid "Added"
|
msgid "Added"
|
||||||
msgstr "افزوده: {}"
|
msgstr "افزوده"
|
||||||
|
|
||||||
#: data/gtk/window.blp:140
|
#: data/gtk/window.blp:156
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Import"
|
|
||||||
msgid "Imported"
|
msgid "Imported"
|
||||||
msgstr "درونریزی"
|
msgstr "درونریخته"
|
||||||
|
|
||||||
#: data/gtk/window.blp:168 data/gtk/window.blp:532
|
#: data/gtk/window.blp:258
|
||||||
msgid "Add Game"
|
|
||||||
msgstr "افزودن بازی"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:175 data/gtk/window.blp:234
|
|
||||||
msgid "Main Menu"
|
|
||||||
msgstr "فهرست اصلی"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:227
|
|
||||||
msgid "Hidden Games"
|
msgid "Hidden Games"
|
||||||
msgstr "بازیهای نهفته"
|
msgstr "بازیهای نهفته"
|
||||||
|
|
||||||
#: data/gtk/window.blp:337
|
#: data/gtk/window.blp:367
|
||||||
msgid "Game Title"
|
msgid "Game Title"
|
||||||
msgstr "عنوان بازی"
|
msgstr "عنوان بازی"
|
||||||
|
|
||||||
#: data/gtk/window.blp:394
|
#: data/gtk/window.blp:424
|
||||||
msgid "Play"
|
msgid "Play"
|
||||||
msgstr "بازی کردن"
|
msgstr "بازی کردن"
|
||||||
|
|
||||||
#: data/gtk/window.blp:471
|
#: data/gtk/window.blp:501
|
||||||
msgid "Sort"
|
msgid "Sort"
|
||||||
msgstr "ترتیب"
|
msgstr "ترتیب"
|
||||||
|
|
||||||
#: data/gtk/window.blp:474
|
#: data/gtk/window.blp:504
|
||||||
msgid "A-Z"
|
msgid "A-Z"
|
||||||
msgstr "آ-ی"
|
msgstr "آ-ی"
|
||||||
|
|
||||||
#: data/gtk/window.blp:480
|
#: data/gtk/window.blp:510
|
||||||
msgid "Z-A"
|
msgid "Z-A"
|
||||||
msgstr "ی-آ"
|
msgstr "ی-آ"
|
||||||
|
|
||||||
#: data/gtk/window.blp:486
|
#: data/gtk/window.blp:516
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "جدیدترین"
|
msgstr "جدیدترین"
|
||||||
|
|
||||||
#: data/gtk/window.blp:492
|
#: data/gtk/window.blp:522
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "قدیمیترین"
|
msgstr "قدیمیترین"
|
||||||
|
|
||||||
#: data/gtk/window.blp:498
|
#: data/gtk/window.blp:528
|
||||||
msgid "Last Played"
|
msgid "Last Played"
|
||||||
msgstr "آخرین بازی شده"
|
msgstr "آخرین بازیشده"
|
||||||
|
|
||||||
#: data/gtk/window.blp:505
|
#: data/gtk/window.blp:535
|
||||||
msgid "Show Hidden"
|
msgid "Show Hidden"
|
||||||
msgstr "نمایش نهفته"
|
msgstr "نمایش نهفته"
|
||||||
|
|
||||||
#: data/gtk/window.blp:518
|
#: data/gtk/window.blp:544
|
||||||
msgid "Keyboard Shortcuts"
|
|
||||||
msgstr "میانبرهیا صفحهکلید"
|
|
||||||
|
|
||||||
#: data/gtk/window.blp:523
|
|
||||||
msgid "About Cartridges"
|
msgid "About Cartridges"
|
||||||
msgstr "دربارهٔ کارتریجها"
|
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
|
#. Translators: Replace this with your name for it to show up in the about window
|
||||||
#: src/main.py:207
|
#: cartridges/main.py:270
|
||||||
msgid "translator_credits"
|
msgid "translator_credits"
|
||||||
msgstr "دانیال بهزادی <dani.behzi@ubuntu.com>"
|
msgstr "دانیال بهزادی <dani.behzi@ubuntu.com>"
|
||||||
|
|
||||||
#. The variable is the date when the game was added
|
#. The variable is the date when the game was added
|
||||||
#: src/window.py:371
|
#: cartridges/window.py:373
|
||||||
msgid "Added: {}"
|
msgid "Added: {}"
|
||||||
msgstr "افزوده: {}"
|
msgstr "افزوده: {}"
|
||||||
|
|
||||||
#: src/window.py:374
|
#: cartridges/window.py:376
|
||||||
msgid "Never"
|
msgid "Never"
|
||||||
msgstr "هرگز"
|
msgstr "هرگز"
|
||||||
|
|
||||||
#. The variable is the date when the game was last played
|
#. The variable is the date when the game was last played
|
||||||
#: src/window.py:378
|
#: cartridges/window.py:380
|
||||||
msgid "Last played: {}"
|
msgid "Last played: {}"
|
||||||
msgstr "آخرین بازی شده: {}"
|
msgstr "آخرین بازیشده: {}"
|
||||||
|
|
||||||
#: src/details_window.py:76
|
#: cartridges/details_dialog.py:73
|
||||||
msgid "Apply"
|
msgid "Apply"
|
||||||
msgstr "اعمال"
|
msgstr "اعمال"
|
||||||
|
|
||||||
#: src/details_window.py:82
|
#: cartridges/details_dialog.py:79
|
||||||
msgid "Add New Game"
|
msgid "Add New Game"
|
||||||
msgstr "افزودن بازی جدید"
|
msgstr "افزودن بازی جدید"
|
||||||
|
|
||||||
#: src/details_window.py:83
|
#: cartridges/details_dialog.py:80
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr "افزودن"
|
msgstr "افزودن"
|
||||||
|
|
||||||
#: src/details_window.py:93
|
#: cartridges/details_dialog.py:90
|
||||||
msgid "Executables"
|
msgid "Executables"
|
||||||
msgstr "اجراییها"
|
msgstr "اجراییها"
|
||||||
|
|
||||||
#. Translate this string as you would translate "file"
|
#. Translate this string as you would translate "file"
|
||||||
#: src/details_window.py:108
|
#: cartridges/details_dialog.py:105
|
||||||
msgid "file.txt"
|
msgid "file.txt"
|
||||||
msgstr "پرونده.txt"
|
msgstr "پرونده.txt"
|
||||||
|
|
||||||
#. As in software
|
#. As in software
|
||||||
#: src/details_window.py:110
|
#: cartridges/details_dialog.py:107
|
||||||
msgid "program"
|
msgid "program"
|
||||||
msgstr "برنامه"
|
msgstr "برنامه"
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:115 src/details_window.py:117
|
#: cartridges/details_dialog.py:112 cartridges/details_dialog.py:114
|
||||||
msgid "C:\\path\\to\\{}"
|
msgid "C:\\path\\to\\{}"
|
||||||
msgstr "C:\\path\\to\\{}"
|
msgstr "C:\\Path\\to\\{}"
|
||||||
|
|
||||||
#. Translate this string as you would translate "path to {}"
|
#. Translate this string as you would translate "path to {}"
|
||||||
#: src/details_window.py:121 src/details_window.py:123
|
#: cartridges/details_dialog.py:118 cartridges/details_dialog.py:120
|
||||||
msgid "/path/to/{}"
|
msgid "/path/to/{}"
|
||||||
msgstr "/path/to/{}"
|
msgstr "/path/to/{}"
|
||||||
|
|
||||||
#: src/details_window.py:128
|
#: cartridges/details_dialog.py:125
|
||||||
msgid ""
|
msgid ""
|
||||||
"To launch the executable \"{}\", use the command:\n"
|
"To launch the executable \"{}\", use the command:\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -501,139 +509,163 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"اگر مسیر فاصله داشت، مطمئن شوید در نقلقول گذاشتهایدش!"
|
"اگر مسیر فاصله داشت، مطمئن شوید در نقلقول گذاشتهایدش!"
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:177
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:173
|
||||||
msgid "Couldn't Add Game"
|
msgid "Couldn't Add Game"
|
||||||
msgstr "نتوانست بازی بیفزاید"
|
msgstr "نتوانست بازی بیفزاید"
|
||||||
|
|
||||||
#: src/details_window.py:171 src/details_window.py:213
|
#: cartridges/details_dialog.py:167 cartridges/details_dialog.py:209
|
||||||
msgid "Game title cannot be empty."
|
msgid "Game title cannot be empty."
|
||||||
msgstr "عنوان بازی نمیتواند خالی باشد."
|
msgstr "عنوان بازی نمیتواند خالی باشد."
|
||||||
|
|
||||||
#: src/details_window.py:177 src/details_window.py:221
|
#: cartridges/details_dialog.py:173 cartridges/details_dialog.py:217
|
||||||
msgid "Executable cannot be empty."
|
msgid "Executable cannot be empty."
|
||||||
msgstr "اجرایی نمیتواند خالی باشد."
|
msgstr "اجرایی نمیتواند خالی باشد."
|
||||||
|
|
||||||
#: src/details_window.py:212 src/details_window.py:220
|
#: cartridges/details_dialog.py:208 cartridges/details_dialog.py:216
|
||||||
msgid "Couldn't Apply Preferences"
|
msgid "Couldn't Apply Preferences"
|
||||||
msgstr "نتوانست ترجیحات را اعمال کند"
|
msgstr "نتوانست ترجیحات را اعمال کند"
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#: src/game.py:141
|
#: cartridges/game.py:139
|
||||||
msgid "{} launched"
|
|
||||||
msgstr "{} اجرا شد"
|
|
||||||
|
|
||||||
#. The variable is the title of the game
|
|
||||||
#: src/game.py:155
|
|
||||||
msgid "{} hidden"
|
msgid "{} hidden"
|
||||||
msgstr "{} نهفته"
|
msgstr "{} نهفته"
|
||||||
|
|
||||||
#: src/game.py:155
|
#: cartridges/game.py:139
|
||||||
msgid "{} unhidden"
|
msgid "{} unhidden"
|
||||||
msgstr "{} نانهفته"
|
msgstr "{} نانهفته"
|
||||||
|
|
||||||
#. The variable is the title of the game
|
#. The variable is the title of the game
|
||||||
#. The variable is the number of games removed
|
#. The variable is the number of games removed
|
||||||
#: src/game.py:169 src/importer/importer.py:380
|
#: cartridges/game.py:153 cartridges/importer/importer.py:391
|
||||||
msgid "{} removed"
|
msgid "{} removed"
|
||||||
msgstr "{} برداشته"
|
msgstr "{} برداشته"
|
||||||
|
|
||||||
#: src/preferences.py:121
|
#: cartridges/preferences.py:133
|
||||||
msgid "All games removed"
|
msgid "All games removed"
|
||||||
msgstr "همهٔ بازیها برداشته شدند"
|
msgstr "همهٔ بازیها برداشته شدند"
|
||||||
|
|
||||||
#: src/preferences.py:169
|
#: cartridges/preferences.py:181
|
||||||
msgid ""
|
msgid ""
|
||||||
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
"An API key is required to use SteamGridDB. You can generate one {}here{}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"برای استفاده از SteamGridDB نیاز به یک کلید API است. میتوانید {}اینجا{} یکی "
|
"برای استفاده از SteamGridDB نیاز به یک کلید API است. میتوانید {}اینجا{} یکی "
|
||||||
"بسازید."
|
"بسازید."
|
||||||
|
|
||||||
#: src/preferences.py:296
|
#: cartridges/preferences.py:196
|
||||||
|
msgid "Downloading covers…"
|
||||||
|
msgstr "در حال دریافت طرحهای جلد…"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:215
|
||||||
|
msgid "Covers updated"
|
||||||
|
msgstr "طرحهای جلد بهروزرسانی شد"
|
||||||
|
|
||||||
|
#: cartridges/preferences.py:360
|
||||||
msgid "Installation Not Found"
|
msgid "Installation Not Found"
|
||||||
msgstr "نصب پیدا نشد"
|
msgstr "نصب پیدا نشد"
|
||||||
|
|
||||||
#: src/preferences.py:297
|
#: cartridges/preferences.py:361
|
||||||
msgid "Select a valid directory."
|
msgid "Select a valid directory"
|
||||||
msgstr "گزینش شاخهای معتبر."
|
msgstr "گزینش شاخهای معتبر"
|
||||||
|
|
||||||
#: src/preferences.py:333 src/importer/importer.py:306
|
#: cartridges/preferences.py:397 cartridges/importer/importer.py:318
|
||||||
msgid "Warning"
|
msgid "Warning"
|
||||||
msgstr "هشدار"
|
msgstr "هشدار"
|
||||||
|
|
||||||
#: src/preferences.py:367
|
#: cartridges/preferences.py:431
|
||||||
msgid "Invalid Directory"
|
msgid "Invalid Directory"
|
||||||
msgstr "شاخهٔ نامعتبر"
|
msgstr "شاخهٔ نامعتبر"
|
||||||
|
|
||||||
#: src/preferences.py:373
|
#: cartridges/preferences.py:437
|
||||||
msgid "Set Location"
|
msgid "Set Location"
|
||||||
msgstr "تنظیم مکان"
|
msgstr "تنظیم مکان"
|
||||||
|
|
||||||
#: src/utils/create_dialog.py:33 src/importer/importer.py:307
|
#: cartridges/utils/create_dialog.py:33 cartridges/importer/importer.py:319
|
||||||
msgid "Dismiss"
|
msgid "Dismiss"
|
||||||
msgstr "رد"
|
msgstr "رد"
|
||||||
|
|
||||||
#: src/importer/importer.py:142
|
#: cartridges/importer/importer.py:145
|
||||||
msgid "Importing Games…"
|
msgid "Importing Games…"
|
||||||
msgstr "درونریزی بازیها…"
|
msgstr "درونریزی بازیها…"
|
||||||
|
|
||||||
#: src/importer/importer.py:327
|
#: cartridges/importer/importer.py:338
|
||||||
msgid "The following errors occured during import:"
|
msgid "The following errors occured during import:"
|
||||||
msgstr "هنگام درونریزی خطاهای زیر رخ دادند:"
|
msgstr "هنگام درونریزی خطاهای زیر رخ دادند:"
|
||||||
|
|
||||||
#: src/importer/importer.py:356
|
#: cartridges/importer/importer.py:367
|
||||||
msgid "No new games found"
|
msgid "No new games found"
|
||||||
msgstr "هیچ بازی جدیدی پیدا نشد"
|
msgstr "هیچ بازی جدیدی پیدا نشد"
|
||||||
|
|
||||||
#: src/importer/importer.py:368
|
#: cartridges/importer/importer.py:379
|
||||||
msgid "1 game imported"
|
msgid "1 game imported"
|
||||||
msgstr "۱ بازی درونریخته شد"
|
msgstr "یک بازی درونریخته شد"
|
||||||
|
|
||||||
#. The variable is the number of games
|
#. The variable is the number of games
|
||||||
#: src/importer/importer.py:372
|
#: cartridges/importer/importer.py:383
|
||||||
msgid "{} games imported"
|
msgid "{} games imported"
|
||||||
msgstr "{} بازی درونریخته شدند"
|
msgstr "{} بازی درونریخته شدند"
|
||||||
|
|
||||||
#. A single game removed
|
#. A single game removed
|
||||||
#: src/importer/importer.py:376
|
#: cartridges/importer/importer.py:387
|
||||||
msgid "1 removed"
|
msgid "1 removed"
|
||||||
msgstr "یکی برداشته شد"
|
msgstr "یکی برداشته شد"
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:33
|
#: cartridges/importer/location.py:34
|
||||||
msgid "Select the {} cache directory."
|
msgid "Select the {} cache directory."
|
||||||
msgstr "گزینش شاخهٔ انبارهٔ {}."
|
msgstr "گزینش شاخهٔ انبارهٔ {}."
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:35
|
#: cartridges/importer/location.py:36
|
||||||
msgid "Select the {} configuration directory."
|
msgid "Select the {} configuration directory."
|
||||||
msgstr "گزینش شاخهٔ پیکربندی {}."
|
msgstr "گزینش شاخهٔ پیکربندی {}."
|
||||||
|
|
||||||
#. The variable is the name of the source
|
#. The variable is the name of the source
|
||||||
#: src/importer/sources/location.py:37
|
#: cartridges/importer/location.py:38
|
||||||
msgid "Select the {} data directory."
|
msgid "Select the {} data directory."
|
||||||
msgstr "گزینش شاخهٔ دادهٔ {}."
|
msgstr "گزینش شاخهٔ دادهٔ {}."
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:46
|
#: cartridges/importer/retroarch_source.py:129
|
||||||
msgid "Couldn't Authenticate SteamGridDB"
|
|
||||||
msgstr "نتوانست در SteamGridDB هویتسنجی کند"
|
|
||||||
|
|
||||||
#: src/store/managers/sgdb_manager.py:47
|
|
||||||
msgid "Verify your API key in preferences"
|
|
||||||
msgstr "کلید APIتان را در ترجیحات تأیید کنید"
|
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:129
|
|
||||||
msgid "No RetroArch Core Selected"
|
msgid "No RetroArch Core Selected"
|
||||||
msgstr "هیچ هستهٔ رتروآرچی گزیده نشده"
|
msgstr "هیچ هستهٔ رتروآرچی گزیده نشده"
|
||||||
|
|
||||||
#. The variable is a newline separated list of playlists
|
#. The variable is a newline separated list of playlists
|
||||||
#: src/importer/sources/retroarch_source.py:131
|
#: cartridges/importer/retroarch_source.py:131
|
||||||
msgid "The following playlists have no default core:"
|
msgid "The following playlists have no default core:"
|
||||||
msgstr "سیاهههای بازی کردن زیر هیچ هستهٔ پیشگزیدهای ندارند:"
|
msgstr "سیاهههای بازی کردن زیر هیچ هستهٔ پیشگزیدهای ندارند:"
|
||||||
|
|
||||||
#: src/importer/sources/retroarch_source.py:133
|
#: cartridges/importer/retroarch_source.py:133
|
||||||
msgid "Games with no core selected were not imported"
|
msgid "Games with no core selected were not imported"
|
||||||
msgstr "بازیهای بدون هسته درونریزی نشدند"
|
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تان را در ترجیحات تأیید کنید"
|
||||||
|
|
||||||
|
#~ msgid "Cache Location"
|
||||||
|
#~ msgstr "مکان انباره"
|
||||||
|
|
||||||
|
#~ msgid "Library"
|
||||||
|
#~ msgstr "کتابخانه"
|
||||||
|
|
||||||
|
#~ msgid "Show preferences"
|
||||||
|
#~ msgstr "نمایش ترجیحات"
|
||||||
|
|
||||||
|
#~ msgid "Shortcuts"
|
||||||
|
#~ msgstr "میانبرها"
|
||||||
|
|
||||||
|
#~ msgid "Open menu"
|
||||||
|
#~ msgstr "گشودن فهرست"
|
||||||
|
|
||||||
|
#~ msgid "Add new game"
|
||||||
|
#~ msgstr "افزودن بازی جدید"
|
||||||
|
|
||||||
|
#~ msgid "Import games"
|
||||||
|
#~ msgstr "درونریزی بازیها"
|
||||||
|
|
||||||
#~ msgid "Back"
|
#~ msgid "Back"
|
||||||
#~ msgstr "بازگشت"
|
#~ msgstr "بازگشت"
|
||||||
|
|
||||||
|
|||||||