mirror of
https://github.com/hydralauncher/hydra.git
synced 2026-01-11 13:56:16 +00:00
Compare commits
302 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4be9e23d65 | ||
|
|
cd6c09fc4f | ||
|
|
d37a833047 | ||
|
|
41ece195f4 | ||
|
|
42d52aafac | ||
|
|
b6bd424bac | ||
|
|
f374a9ffff | ||
|
|
e1fb3bac76 | ||
|
|
250a472ce7 | ||
|
|
538878dba9 | ||
|
|
655496c844 | ||
|
|
4d459ac09e | ||
|
|
35a814eb41 | ||
|
|
dc625e79a4 | ||
|
|
84e09ce4da | ||
|
|
2f37ac788f | ||
|
|
9b54ff2299 | ||
|
|
cd257a827f | ||
|
|
99ade42ab8 | ||
|
|
b8e3ea1399 | ||
|
|
f380d9f9b1 | ||
|
|
3ad75d22a5 | ||
|
|
fb02442072 | ||
|
|
b1938c96dd | ||
|
|
a8e70b4032 | ||
|
|
e9cd468848 | ||
|
|
5e59b37997 | ||
|
|
e77fedea4c | ||
|
|
f572cf90b8 | ||
|
|
93993b695c | ||
|
|
6c5a91b410 | ||
|
|
ac2b739c60 | ||
|
|
6ef8d68610 | ||
|
|
546c509e14 | ||
|
|
a21f2b9614 | ||
|
|
c16cbfe04e | ||
|
|
4ff41da05a | ||
|
|
a12e5a15fa | ||
|
|
cc2311529b | ||
|
|
18b63d735d | ||
|
|
7379113dc8 | ||
|
|
ea85da259c | ||
|
|
b8084d6f67 | ||
|
|
97589e63fa | ||
|
|
2539f67e13 | ||
|
|
cc4aed2e17 | ||
|
|
9ea68e629a | ||
|
|
8c66b9a499 | ||
|
|
8fb183007a | ||
|
|
d0ac819da5 | ||
|
|
f4e428a574 | ||
|
|
69879a0303 | ||
|
|
f392f9583a | ||
|
|
85192f13af | ||
|
|
8230229959 | ||
|
|
c090a27ff3 | ||
|
|
51d4760352 | ||
|
|
bd0b2ce2c1 | ||
|
|
f2efbfba3a | ||
|
|
b7bc5e8cb2 | ||
|
|
ff447c0ed3 | ||
|
|
d1c40b061e | ||
|
|
e6a9ea6139 | ||
|
|
b519275800 | ||
|
|
d56cedb08f | ||
|
|
8e8c79185c | ||
|
|
dd854121f7 | ||
|
|
e4776c8e16 | ||
|
|
e63738ca7b | ||
|
|
3756249013 | ||
|
|
33713cfb9f | ||
|
|
41049be522 | ||
|
|
d9747b7985 | ||
|
|
e0c6d2fe3d | ||
|
|
8db03bcccf | ||
|
|
50acc33a41 | ||
|
|
81936d076e | ||
|
|
7d61d1219d | ||
|
|
19613b69cc | ||
|
|
42a768f715 | ||
|
|
456c0ad6ff | ||
|
|
76181342f9 | ||
|
|
8f95fa70d4 | ||
|
|
4743b9f082 | ||
|
|
db92ef255d | ||
|
|
d1cdfc0ba5 | ||
|
|
77a4642b7b | ||
|
|
148e272c4d | ||
|
|
3bdd8b90d4 | ||
|
|
6569b66801 | ||
|
|
4a11d741eb | ||
|
|
6e8a844a92 | ||
|
|
3821b9836c | ||
|
|
57390c814b | ||
|
|
007fa6f009 | ||
|
|
009cb1d7d7 | ||
|
|
306b49eaf3 | ||
|
|
be232d88e4 | ||
|
|
e3670f5b5a | ||
|
|
bd018399fb | ||
|
|
975eec96be | ||
|
|
44b711f674 | ||
|
|
539ff34b69 | ||
|
|
f99da1d7bf | ||
|
|
75c3bbf858 | ||
|
|
afa78e4634 | ||
|
|
ee1dda90d9 | ||
|
|
5b62b9c593 | ||
|
|
4d76182f2e | ||
|
|
85fb57527a | ||
|
|
9e6b6be0b9 | ||
|
|
3c3f77fc50 | ||
|
|
614cb8a297 | ||
|
|
ba3f010576 | ||
|
|
8c442e742a | ||
|
|
555b3dbb1d | ||
|
|
d2a868b504 | ||
|
|
e27536c6b3 | ||
|
|
cd367faec2 | ||
|
|
087dd9fb2e | ||
|
|
c5d8403843 | ||
|
|
8e01142225 | ||
|
|
a0ef59a13c | ||
|
|
13d5e4469f | ||
|
|
22e92eb8f6 | ||
|
|
d28bb825a3 | ||
|
|
96d59a0fd7 | ||
|
|
84600ea0dc | ||
|
|
9264fa3664 | ||
|
|
5b0ea980de | ||
|
|
622fc393fc | ||
|
|
f76ba5975d | ||
|
|
4da0dac0e6 | ||
|
|
7c468ac9bb | ||
|
|
2ee3bebfc7 | ||
|
|
98ed07d6d2 | ||
|
|
97cf02577a | ||
|
|
fbce53d61a | ||
|
|
1835adf8b4 | ||
|
|
a4dd037cba | ||
|
|
30be12afeb | ||
|
|
258f891a12 | ||
|
|
02662fa993 | ||
|
|
1746f14adb | ||
|
|
7fd0894b56 | ||
|
|
3bb8c17b16 | ||
|
|
417bb69b86 | ||
|
|
a55b5dafa0 | ||
|
|
b7bec47a2c | ||
|
|
f565226a6d | ||
|
|
e7427b8184 | ||
|
|
cc505acbdc | ||
|
|
934831eaae | ||
|
|
a35dae3e18 | ||
|
|
5e58762151 | ||
|
|
21535d8acc | ||
|
|
6106325f0a | ||
|
|
3ff9dd705e | ||
|
|
04f061afa3 | ||
|
|
f8ea4f29d9 | ||
|
|
1520e2b2ae | ||
|
|
d29fc50f68 | ||
|
|
ede538392f | ||
|
|
f464850c38 | ||
|
|
379e90568a | ||
|
|
01d440590b | ||
|
|
56da86d63d | ||
|
|
36cf2060c1 | ||
|
|
5fa4d128c3 | ||
|
|
d15ef33a86 | ||
|
|
54ab719935 | ||
|
|
9eb909cd17 | ||
|
|
b2b4b1ff3c | ||
|
|
f547b85df7 | ||
|
|
0d75878b07 | ||
|
|
9470068de6 | ||
|
|
74a92f57bd | ||
|
|
73f4b0e869 | ||
|
|
e6fde48dbd | ||
|
|
554d195d5b | ||
|
|
fc899197b4 | ||
|
|
7597933aa9 | ||
|
|
3a36bfb75c | ||
|
|
93adb070e5 | ||
|
|
9df58b9918 | ||
|
|
9b8a0af8e9 | ||
|
|
31319b0811 | ||
|
|
9976812bf7 | ||
|
|
6b4d422b65 | ||
|
|
0e164acdf2 | ||
|
|
fffa2d2c01 | ||
|
|
2c35d7da13 | ||
|
|
9a81a45738 | ||
|
|
d284fc914e | ||
|
|
b867eaa34b | ||
|
|
f353d1fc9b | ||
|
|
b03d2a78f8 | ||
|
|
1a6cb5f866 | ||
|
|
fbc81db2d0 | ||
|
|
663e5a46ba | ||
|
|
bc07f73387 | ||
|
|
a697d4ec8b | ||
|
|
008b88f888 | ||
|
|
0e7e5ba920 | ||
|
|
7c98f4afa7 | ||
|
|
12d6b744d7 | ||
|
|
ff7c15a013 | ||
|
|
16d192443f | ||
|
|
0c6b3f2254 | ||
|
|
f92d6839c8 | ||
|
|
d3e383bc1b | ||
|
|
abec986cc1 | ||
|
|
135eef986a | ||
|
|
ec9db3a48f | ||
|
|
72cde368f5 | ||
|
|
bd77aee3c2 | ||
|
|
dafdda1bc7 | ||
|
|
6c6a238c5f | ||
|
|
0df18022ed | ||
|
|
6626368613 | ||
|
|
cff728bbbe | ||
|
|
3961b53d0e | ||
|
|
3f08e87eda | ||
|
|
b84c34a69c | ||
|
|
c2e1a092c9 | ||
|
|
fe03894054 | ||
|
|
893695eda0 | ||
|
|
28727600fe | ||
|
|
d892ed4f34 | ||
|
|
ea618febe2 | ||
|
|
358eac061f | ||
|
|
33f9e5729b | ||
|
|
2a7feba5dc | ||
|
|
1390f99895 | ||
|
|
daf8ee6ba2 | ||
|
|
652fe69141 | ||
|
|
61b2710219 | ||
|
|
0e67e21223 | ||
|
|
f12784b6e7 | ||
|
|
8795359c0b | ||
|
|
bcc2127a6e | ||
|
|
766c5760d7 | ||
|
|
3c8db34456 | ||
|
|
433ebf55ac | ||
|
|
b68bed97dd | ||
|
|
2a8600a841 | ||
|
|
3fd48eb784 | ||
|
|
aa19241b2b | ||
|
|
a16a75ff39 | ||
|
|
e4d97e9775 | ||
|
|
5688aaf0e8 | ||
|
|
ad5eb22553 | ||
|
|
1c3a5f4800 | ||
|
|
d8a7275512 | ||
|
|
489dd710fa | ||
|
|
0db93c7dad | ||
|
|
d9fe3c709e | ||
|
|
03a3d734f1 | ||
|
|
106d66f1a2 | ||
|
|
3ef6472825 | ||
|
|
df77d754ae | ||
|
|
6a8da74bcf | ||
|
|
1aa3bb1ad2 | ||
|
|
fdcf244f4e | ||
|
|
d8a4eaaa66 | ||
|
|
1c71c20b48 | ||
|
|
aefc5eca49 | ||
|
|
5f1b83a0d9 | ||
|
|
85efc23c25 | ||
|
|
b344a1850a | ||
|
|
a9ec1a62bf | ||
|
|
6832c11d06 | ||
|
|
740cc2ec7c | ||
|
|
e12c6daa16 | ||
|
|
2ee8a64945 | ||
|
|
a54edd8b4a | ||
|
|
f7b6a91621 | ||
|
|
96dbfe8593 | ||
|
|
dddc5bfd96 | ||
|
|
282bb45869 | ||
|
|
c982ebe33a | ||
|
|
08935ceabd | ||
|
|
0e7a0d1afa | ||
|
|
38dc8bdea5 | ||
|
|
c33aa3c874 | ||
|
|
afa34c74d7 | ||
|
|
cda9b8fb42 | ||
|
|
026abd7909 | ||
|
|
bc31a28eee | ||
|
|
f1624441b4 | ||
|
|
358abde963 | ||
|
|
c65fc15d99 | ||
|
|
b32226273e | ||
|
|
2e7a2a05a5 | ||
|
|
ab70ff10be | ||
|
|
6a429f9f39 | ||
|
|
b03c69b185 | ||
|
|
3fe77f4961 | ||
|
|
79be151de0 | ||
|
|
e804b92f30 | ||
|
|
cf31b36961 | ||
|
|
3156baf78e |
@@ -1,2 +1,4 @@
|
||||
MAIN_VITE_API_URL=API_URL
|
||||
MAIN_VITE_AUTH_URL=AUTH_URL
|
||||
RENDERER_VITE_REAL_DEBRID_REFERRAL_ID=
|
||||
RENDERER_VITE_TORBOX_REFERRAL_CODE=
|
||||
|
||||
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -33,9 +33,9 @@ body:
|
||||
attributes:
|
||||
label: Additional information and data
|
||||
description: |
|
||||
Add screenshots and upload your logs file here.
|
||||
Logs location on Windows: "%appdata%/hydra"
|
||||
Logs location on Linux: "~/.config/hydra/"
|
||||
Add screenshots and upload your all logs file here.
|
||||
Logs location on Windows: "%appdata%/hydralauncher/logs"
|
||||
Logs location on Linux: "~/.config/hydralauncher/logs"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
|
||||
12
.github/workflows/build.yml
vendored
12
.github/workflows/build.yml
vendored
@@ -11,6 +11,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [windows-latest, ubuntu-latest]
|
||||
fail-fast: false
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
@@ -24,7 +25,7 @@ jobs:
|
||||
node-version: 20.18.0
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn
|
||||
run: yarn --frozen-lockfile
|
||||
|
||||
- name: Install Python
|
||||
uses: actions/setup-python@v5
|
||||
@@ -47,12 +48,13 @@ jobs:
|
||||
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_STAGING_API_URL }}
|
||||
MAIN_VITE_AUTH_URL: ${{ vars.MAIN_VITE_STAGING_AUTH_URL }}
|
||||
MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_STAGING_CHECKOUT_URL }}
|
||||
RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }}
|
||||
RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||
RENDERER_VITE_SENTRY_DSN: ${{ vars.SENTRY_DSN }}
|
||||
RENDERER_VITE_REAL_DEBRID_REFERRAL_ID: ${{ vars.RENDERER_VITE_REAL_DEBRID_REFERRAL_ID }}
|
||||
RENDERER_VITE_TORBOX_REFERRAL_CODE: ${{ vars.RENDERER_VITE_TORBOX_REFERRAL_CODE }}
|
||||
|
||||
- name: Build Windows
|
||||
if: matrix.os == 'windows-latest'
|
||||
@@ -61,14 +63,15 @@ jobs:
|
||||
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_STAGING_API_URL }}
|
||||
MAIN_VITE_AUTH_URL: ${{ vars.MAIN_VITE_STAGING_AUTH_URL }}
|
||||
MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_STAGING_CHECKOUT_URL }}
|
||||
RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }}
|
||||
RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||
RENDERER_VITE_SENTRY_DSN: ${{ vars.SENTRY_DSN }}
|
||||
RENDERER_VITE_REAL_DEBRID_REFERRAL_ID: ${{ vars.RENDERER_VITE_REAL_DEBRID_REFERRAL_ID }}
|
||||
RENDERER_VITE_TORBOX_REFERRAL_CODE: ${{ vars.RENDERER_VITE_TORBOX_REFERRAL_CODE }}
|
||||
|
||||
- name: Test Upload build
|
||||
- name: Upload build
|
||||
env:
|
||||
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
|
||||
S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }}
|
||||
@@ -78,7 +81,6 @@ jobs:
|
||||
BUILDS_URL: ${{ secrets.BUILDS_URL }}
|
||||
BUILD_WEBHOOK_URL: ${{ secrets.BUILD_WEBHOOK_URL }}
|
||||
GITHUB_ACTOR: ${{ github.actor }}
|
||||
|
||||
run: node scripts/upload-build.cjs
|
||||
|
||||
- name: Create artifact
|
||||
|
||||
2
.github/workflows/lint.yml
vendored
2
.github/workflows/lint.yml
vendored
@@ -20,7 +20,7 @@ jobs:
|
||||
node-version: 20.18.0
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn
|
||||
run: yarn --frozen-lockfile
|
||||
|
||||
- name: Validate current commit (last commit) with commitlint
|
||||
run: npx commitlint --last --verbose
|
||||
|
||||
22
.github/workflows/release.yml
vendored
22
.github/workflows/release.yml
vendored
@@ -26,7 +26,7 @@ jobs:
|
||||
node-version: 20.18.0
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn
|
||||
run: yarn --frozen-lockfile
|
||||
|
||||
- name: Install Python
|
||||
uses: actions/setup-python@v5
|
||||
@@ -49,13 +49,13 @@ jobs:
|
||||
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_API_URL }}
|
||||
MAIN_VITE_AUTH_URL: ${{ vars.MAIN_VITE_AUTH_URL }}
|
||||
MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_CHECKOUT_URL }}
|
||||
MAIN_VITE_ANALYTICS_API_URL: ${{ vars.MAIN_VITE_ANALYTICS_API_URL }}
|
||||
RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }}
|
||||
RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||
RENDERER_VITE_SENTRY_DSN: ${{ vars.SENTRY_DSN }}
|
||||
RENDERER_VITE_REAL_DEBRID_REFERRAL_ID: ${{ vars.RENDERER_VITE_REAL_DEBRID_REFERRAL_ID }}
|
||||
RENDERER_VITE_TORBOX_REFERRAL_CODE: ${{ vars.RENDERER_VITE_TORBOX_REFERRAL_CODE }}
|
||||
|
||||
- name: Build Windows
|
||||
if: matrix.os == 'windows-latest'
|
||||
@@ -64,13 +64,13 @@ jobs:
|
||||
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_API_URL }}
|
||||
MAIN_VITE_AUTH_URL: ${{ vars.MAIN_VITE_AUTH_URL }}
|
||||
MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_CHECKOUT_URL }}
|
||||
MAIN_VITE_ANALYTICS_API_URL: ${{ vars.MAIN_VITE_ANALYTICS_API_URL }}
|
||||
RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }}
|
||||
RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||
RENDERER_VITE_SENTRY_DSN: ${{ vars.SENTRY_DSN }}
|
||||
RENDERER_VITE_REAL_DEBRID_REFERRAL_ID: ${{ vars.RENDERER_VITE_REAL_DEBRID_REFERRAL_ID }}
|
||||
RENDERER_VITE_TORBOX_REFERRAL_CODE: ${{ vars.RENDERER_VITE_TORBOX_REFERRAL_CODE }}
|
||||
|
||||
- name: Create artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
@@ -88,6 +88,18 @@ jobs:
|
||||
dist/*.blockmap
|
||||
dist/*.pacman
|
||||
|
||||
- name: Upload build
|
||||
env:
|
||||
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
|
||||
S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }}
|
||||
S3_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }}
|
||||
S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }}
|
||||
S3_BUILDS_BUCKET_NAME: ${{ secrets.S3_BUILDS_BUCKET_NAME }}
|
||||
BUILDS_URL: ${{ secrets.BUILDS_URL }}
|
||||
BUILD_WEBHOOK_URL: ${{ secrets.BUILD_WEBHOOK_URL }}
|
||||
GITHUB_ACTOR: ${{ github.actor }}
|
||||
run: node scripts/upload-build.cjs
|
||||
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
|
||||
13
.github/workflows/trigger-lp.yml
vendored
Normal file
13
.github/workflows/trigger-lp.yml
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
name: Trigger Landing Page Build
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Trigger Landing Page build
|
||||
run: curl --location --request POST '${{ secrets.LP_TRIGGER_DEPLOY_URL }}'
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -9,10 +9,11 @@ out
|
||||
.vite
|
||||
ludusavi/
|
||||
hydra-python-rpc/
|
||||
aria2/
|
||||
.python-version
|
||||
|
||||
# Sentry Config File
|
||||
.env.sentry-build-plugin
|
||||
|
||||
*storybook.log
|
||||
|
||||
aria2/
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
[](./docs/README.cs.md)
|
||||
[](./docs/README.da.md)
|
||||
[](./docs/README.nb.md)
|
||||
[](./docs/README.et.md)
|
||||
[](./docs/README.et.md)
|
||||
[](./docs/README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
BIN
binaries/7z.dll
Normal file
BIN
binaries/7z.dll
Normal file
Binary file not shown.
BIN
binaries/7z.exe
Normal file
BIN
binaries/7z.exe
Normal file
Binary file not shown.
BIN
binaries/7zz
Executable file
BIN
binaries/7zz
Executable file
Binary file not shown.
BIN
binaries/7zzs
Executable file
BIN
binaries/7zzs
Executable file
Binary file not shown.
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -23,7 +23,8 @@
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
[](README.cs.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
194
docs/README.tr.md
Normal file
194
docs/README.tr.md
Normal file
@@ -0,0 +1,194 @@
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[<img src="../resources/icon.png" width="144"/>](https://help.hydralauncher.gg)
|
||||
|
||||
<h1 align="center">Hydra Launcher</h1>
|
||||
|
||||
<p align="center">
|
||||
<strong>Hydra, kendi gömülü BitTorrent istemcisine sahip bir oyun başlatıcısıdır.</strong>
|
||||
</p>
|
||||
|
||||
[](https://github.com/hydralauncher/hydra/actions)
|
||||
[](https://github.com/hydralauncher/hydra/releases)
|
||||
|
||||
[](README.pt-BR.md)
|
||||
[](../README.md)
|
||||
[](README.ru.md)
|
||||
[](README.uk-UA.md)
|
||||
[](README.be.md)
|
||||
[](README.es.md)
|
||||
[](README.fr.md)
|
||||
[](README.de.md)
|
||||
[](README.it.md)
|
||||
[](README.cs.md)
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
</div>
|
||||
|
||||
## <a name="içindekiler"></a> İçindekiler
|
||||
|
||||
- [İçindekiler](#içindekiler)
|
||||
- [Hakkında](#hakkında)
|
||||
- [Özellikler](#özellikler)
|
||||
- [Kurulum](#kurulum)
|
||||
- [Katkıda bulunma](#katkıda-bulunma)
|
||||
- [Telegram grubumuza katılın](#telegram-katıl)
|
||||
- [Repoyu forklayın ve klonlayın](#repo-fork-klon)
|
||||
- [Katkıda bulunabileceğin yollar](#katkı-yolları)
|
||||
- [Proje yapısı](#proje-yapısı)
|
||||
- [Kaynak kodundan derleme](#kaynak-kodundan-derleme)
|
||||
- [Node.js'i yükleme](#nodejs-yükle)
|
||||
- [Yarn'ı yükleme](#yarn-yükle)
|
||||
- [Node bağımlılıklarını yükleme](#node-bağımlılık-yükle)
|
||||
- [OpenSSL 1.1'i yükleme](#openssl-1-1-yükle)
|
||||
- [Python 3.9'u yükleme](#python-3-9-yükle)
|
||||
- [Python bağımlılıklarını yükleme](#python-bağımlılık-yükle)
|
||||
- [Ortam değişkenleri](#ortam-değişkenleri)
|
||||
- [Çalıştırma](#çalıştırma)
|
||||
- [Derleme](#derleme)
|
||||
- [BitTorrent istemcisini derleme](#bittorrent-istemci-derle)
|
||||
- [Electron uygulamasını derleme](#electron-uygulama-derle)
|
||||
- [Katkıda bulunanlar](#katkıda-bulunanlar)
|
||||
- [Lisans](#lisans)
|
||||
|
||||
## <a name="hakkında"></a> Hakkında
|
||||
|
||||
**Hydra**, kendi gömülü **BitTorrent istemci**sine sahip bir **oyun başlatıcısı**dır.
|
||||
<br>
|
||||
Başlatıcı, torrent sistemini libtorrent kullanarak yöneten Python ve TypeScript (Electron) ile yazılmıştır.
|
||||
|
||||
## <a name="özellikler"></a> Özellikler
|
||||
|
||||
- Kendi gömülü BitTorrent istemcisi
|
||||
- Oyun sayfasında How Long To Beat (HLTB) entegrasyonu
|
||||
- İndirme yolu özelleştirmesi
|
||||
- Windows ve Linux desteği
|
||||
- Sürekli güncelleme
|
||||
- Ve daha fazlası...
|
||||
|
||||
## <a name="kurulum"></a> Kurulum
|
||||
|
||||
Aşağıdaki adımları izleyerek Hydra'yı kurun:
|
||||
|
||||
1. Hydra'nın en son sürümünü [Releases](https://github.com/hydralauncher/hydra/releases/latest) sayfasından indirin.
|
||||
- Hydra'yı Windows'a kurmak istiyorsanız sadece .exe dosyasını indirin.
|
||||
- Hydra'yı Linux'a kurmak istiyorsanız .deb, .rpm veya .zip dosyasını indirin (kullandığınız Linux dağıtımına bağlı olarak).
|
||||
2. İndirilen dosyayı çalıştırın.
|
||||
3. Hydra'nın keyfini çıkarın!
|
||||
|
||||
## <a name="katkıda-bulunma"></a> Katkıda Bulunma
|
||||
|
||||
### <a name="telegram-katıl"></a> Telegram grubumuza katılın
|
||||
|
||||
Tartışmalarımızı [Telegram](https://t.me/hydralauncher) kanalımız üzerinde yürütüyoruz.
|
||||
|
||||
### <a name="repo-fork-klon"></a> Repoyu forklayın ve klonlayın
|
||||
|
||||
1. Depoyu fork'layın [(şimdi forklamak için tıklayın)](https://github.com/hydralauncher/hydra/fork)
|
||||
2. Forkladığınız kodu klonlayın `git clone https://github.com/kullanıcı_adınız/hydra`
|
||||
3. Yeni bir branch oluşturun
|
||||
4. Commitlerinizi gönderin (push)
|
||||
5. Yeni bir Pull Request gönderin
|
||||
|
||||
### <a name="katkı-yolları"></a> Katkıda bulunabileceğin yollar
|
||||
|
||||
- Çeviri: Hydra'nın mümkün olduğunca fazla kişiye ulaşmasını istiyoruz. Yeni dillere çeviri yapmak ya da mevcut dillere güncelleme ve iyileştirme yapmak için yardımcı olmaktan çekinmeyin.
|
||||
- Kod: Hydra, Typescript, Electron ve biraz Python ile inşa edilmiştir. Katkıda bulunmak isterseniz, [Telegram](https://t.me/hydralauncher) kanalımıza katılın!
|
||||
|
||||
### <a name="proje-yapısı"></a> Proje yapısı
|
||||
|
||||
- torrent-client: Torrent indirmelerini yönetmek için libtorrent adlı bir Python kütüphanesini kullanıyoruz.
|
||||
- src/renderer: Uygulamanın kullanıcı arayüzü burada bulunur.
|
||||
- src/main: Uygulamanın tüm işleyişi ve iş mantığı bu bölümde bulunur.
|
||||
|
||||
## <a name="kaynak-kodundan-derleme"></a> Kaynak kodundan derleme
|
||||
|
||||
### <a name="nodejs-yükle"></a> Node.js'i yükleme
|
||||
|
||||
Makinenizde Node.js'in yüklü olduğundan emin olun. Yüklü değilse, [nodejs.org](https://nodejs.org/) adresinden indirip kurun.
|
||||
|
||||
### <a name="yarn-yükle"></a> Yarn'ı yükleme
|
||||
|
||||
Yarn, Node.js için bir paket yöneticisidir. Eğer Yarn'ı henüz kurmadıysanız, [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/) adresindeki talimatları izleyerek kurabilirsiniz.
|
||||
|
||||
### <a name="node-bağımlılık-yükle"></a> Node bağımlılıklarını yükleme
|
||||
|
||||
Proje dizinine gidin ve Yarn kullanarak Node bağımlılıklarını yükleyin:
|
||||
|
||||
```bash
|
||||
cd hydra
|
||||
yarn
|
||||
```
|
||||
|
||||
### <a name="openssl-1-1-yükle"></a> OpenSSL 1.1'i yükleme
|
||||
|
||||
Windows ortamlarında libtorrent tarafından gerekli olan [OpenSSL 1.1](https://slproweb.com/download/Win64OpenSSL-1_1_1w.exe)'i indirip yükleyin.
|
||||
|
||||
### <a name="python-3-9-yükle"></a> Python 3.9'u yükleme
|
||||
|
||||
Makinenizde Python 3.9'un yüklü olduğundan emin olun. Bunu [python.org](https://www.python.org/downloads/release/python-3913/) adresinden indirip kurarak yapabilirsiniz.
|
||||
|
||||
### <a name="python-bağımlılık-yükle"></a> Python bağımlılıklarını yükleme
|
||||
|
||||
Gerekli Python bağımlılıklarını pip kullanarak yükleyin:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## <a name="ortam-değişkenleri"></a> Ortam değişkenleri
|
||||
|
||||
Oyun simgelerini yüklemek için bir SteamGridDB API Anahtarına ihtiyacınız olacak.
|
||||
|
||||
Bu anahtara sahip olduktan sonra, `.env.example` dosyasını kopyalayabilir veya adını `.env` olarak değiştirebilir ve `STEAMGRIDDB_API_KEY` değerini buraya ekleyebilirsiniz.
|
||||
|
||||
## <a name="çalıştırma"></a> Çalıştırma
|
||||
|
||||
Tüm ayarları tamamladıktan sonra, hem Electron sürecini hem de bittorrent istemcisini başlatmak için aşağıdaki komutu çalıştırabilirsiniz:
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## <a name="derleme"></a> Derleme
|
||||
|
||||
### <a name="bittorrent-istemci-derle"></a> BitTorrent istemcisini derleme
|
||||
|
||||
Bittorrent istemcisini aşağıdaki komutla derleyin:
|
||||
|
||||
```bash
|
||||
python torrent-client/setup.py build
|
||||
```
|
||||
|
||||
### <a name="electron-uygulama-derle"></a> Electron uygulamasını derleme
|
||||
|
||||
Electron uygulamasını aşağıdaki komutlarla derleyebilirsiniz:
|
||||
|
||||
Windows'ta:
|
||||
|
||||
```bash
|
||||
yarn build:win
|
||||
```
|
||||
|
||||
Linux'ta:
|
||||
|
||||
```bash
|
||||
yarn build:linux
|
||||
```
|
||||
|
||||
## <a name="katkıda-bulunanlar"></a> Katkıda bulunanlar
|
||||
|
||||
<a href="https://github.com/hydralauncher/hydra/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=hydralauncher/hydra" />
|
||||
</a>
|
||||
|
||||
## <a name="lisans"></a> Lisans
|
||||
|
||||
Hydra, [MIT Lisansı](https://github.com/hydralauncher/hydra/blob/main/LICENSE) altında lisanlanmıştır.
|
||||
@@ -26,6 +26,7 @@
|
||||
[](README.da.md)
|
||||
[](README.nb.md)
|
||||
[](README.et.md)
|
||||
[](README.tr.md)
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -20,6 +20,9 @@ asarUnpack:
|
||||
- resources/**
|
||||
win:
|
||||
executableName: Hydra
|
||||
extraResources:
|
||||
- from: binaries/7z.exe
|
||||
- from: binaries/7z.dll
|
||||
target:
|
||||
- nsis
|
||||
- portable
|
||||
@@ -35,6 +38,8 @@ portable:
|
||||
artifactName: ${name}-${version}-portable.${ext}
|
||||
mac:
|
||||
entitlementsInherit: build/entitlements.mac.plist
|
||||
extraResources:
|
||||
- from: binaries/7zz
|
||||
extendInfo:
|
||||
- NSCameraUsageDescription: Application requests access to the device's camera.
|
||||
- NSMicrophoneUsageDescription: Application requests access to the device's microphone.
|
||||
@@ -44,6 +49,8 @@ mac:
|
||||
dmg:
|
||||
artifactName: ${name}-${version}.${ext}
|
||||
linux:
|
||||
extraResources:
|
||||
- from: binaries/7zzs
|
||||
target:
|
||||
- AppImage
|
||||
- snap
|
||||
|
||||
@@ -16,9 +16,6 @@ export default defineConfig(({ mode }) => {
|
||||
main: {
|
||||
build: {
|
||||
sourcemap: true,
|
||||
rollupOptions: {
|
||||
external: ["better-sqlite3"],
|
||||
},
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
|
||||
16
package.json
16
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "hydralauncher",
|
||||
"version": "3.3.0",
|
||||
"version": "3.4.5",
|
||||
"description": "Hydra",
|
||||
"main": "./out/main/index.js",
|
||||
"author": "Los Broxas",
|
||||
@@ -28,8 +28,7 @@
|
||||
"build:win": "electron-vite build && electron-builder --win",
|
||||
"build:mac": "electron-vite build && electron-builder --mac",
|
||||
"build:linux": "electron-vite build && electron-builder --linux",
|
||||
"prepare": "husky",
|
||||
"knex:migrate:make": "knex --knexfile src/main/knexfile.ts migrate:make --esm"
|
||||
"prepare": "husky"
|
||||
},
|
||||
"dependencies": {
|
||||
"@electron-toolkit/preload": "^3.0.0",
|
||||
@@ -44,24 +43,22 @@
|
||||
"@sentry/vite-plugin": "^2.22.7",
|
||||
"auto-launch": "^5.0.6",
|
||||
"axios": "^1.7.9",
|
||||
"better-sqlite3": "^11.7.0",
|
||||
"axios-cookiejar-support": "^5.0.5",
|
||||
"classic-level": "^2.0.0",
|
||||
"classnames": "^2.5.1",
|
||||
"color": "^4.2.3",
|
||||
"color.js": "^1.2.0",
|
||||
"create-desktop-shortcuts": "^1.11.0",
|
||||
"create-desktop-shortcuts": "^1.11.1",
|
||||
"date-fns": "^3.6.0",
|
||||
"dexie": "^4.0.10",
|
||||
"diskusage": "^1.2.0",
|
||||
"electron-log": "^5.2.4",
|
||||
"electron-updater": "^6.3.9",
|
||||
"electron-updater": "^6.6.2",
|
||||
"file-type": "^19.6.0",
|
||||
"i18next": "^23.11.2",
|
||||
"i18next-browser-languagedetector": "^7.2.1",
|
||||
"jsdom": "^24.0.0",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"kill-port": "^2.0.1",
|
||||
"knex": "^3.1.0",
|
||||
"lodash-es": "^4.17.21",
|
||||
"parse-torrent": "^11.0.17",
|
||||
"piscina": "^4.7.0",
|
||||
@@ -75,6 +72,7 @@
|
||||
"sound-play": "^1.1.0",
|
||||
"sudo-prompt": "^9.2.1",
|
||||
"tar": "^7.4.3",
|
||||
"tough-cookie": "^5.1.1",
|
||||
"user-agents": "^1.1.387",
|
||||
"yaml": "^2.6.1",
|
||||
"yup": "^1.5.0",
|
||||
@@ -101,7 +99,7 @@
|
||||
"@types/user-agents": "^1.0.4",
|
||||
"@vitejs/plugin-react": "^4.2.1",
|
||||
"electron": "^31.7.7",
|
||||
"electron-builder": "^25.1.8",
|
||||
"electron-builder": "^26.0.12",
|
||||
"electron-vite": "^2.3.0",
|
||||
"eslint": "^8.56.0",
|
||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||
|
||||
@@ -35,7 +35,7 @@ if start_download_payload:
|
||||
http_downloader = HttpDownloader()
|
||||
downloads[initial_download['game_id']] = http_downloader
|
||||
try:
|
||||
http_downloader.start_download(initial_download['url'], initial_download['save_path'], initial_download.get('header'), initial_download.get("out"))
|
||||
http_downloader.start_download(initial_download['url'], initial_download['save_path'], initial_download.get('header'), initial_download.get('out'))
|
||||
except Exception as e:
|
||||
print("Error starting http download", e)
|
||||
|
||||
@@ -182,4 +182,3 @@ def action():
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="0.0.0.0", port=int(http_port))
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
const { default: axios } = require("axios");
|
||||
const tar = require("tar");
|
||||
const util = require("node:util");
|
||||
const fs = require("node:fs");
|
||||
const path = require("node:path");
|
||||
@@ -6,10 +7,12 @@ const { spawnSync } = require("node:child_process");
|
||||
|
||||
const exec = util.promisify(require("node:child_process").exec);
|
||||
|
||||
const ludusaviVersion = "0.29.0";
|
||||
|
||||
const fileName = {
|
||||
win32: "ludusavi-v0.25.0-win64.zip",
|
||||
linux: "ludusavi-v0.25.0-linux.zip",
|
||||
darwin: "ludusavi-v0.25.0-mac.zip",
|
||||
win32: `ludusavi-v${ludusaviVersion}-win64.zip`,
|
||||
linux: `ludusavi-v${ludusaviVersion}-linux.tar.gz`,
|
||||
darwin: `ludusavi-v${ludusaviVersion}-mac.tar.gz`,
|
||||
};
|
||||
|
||||
const downloadLudusavi = async () => {
|
||||
@@ -19,7 +22,7 @@ const downloadLudusavi = async () => {
|
||||
}
|
||||
|
||||
const file = fileName[process.platform];
|
||||
const downloadUrl = `https://github.com/mtkennerly/ludusavi/releases/download/v0.25.0/${file}`;
|
||||
const downloadUrl = `https://github.com/mtkennerly/ludusavi/releases/download/v${ludusaviVersion}/${file}`;
|
||||
|
||||
console.log(`Downloading ${file}...`);
|
||||
|
||||
@@ -31,10 +34,18 @@ const downloadLudusavi = async () => {
|
||||
console.log(`Downloaded ${file}, extracting...`);
|
||||
|
||||
const pwd = process.cwd();
|
||||
|
||||
const targetPath = path.join(pwd, "ludusavi");
|
||||
|
||||
await exec(`npx extract-zip ${file} ${targetPath}`);
|
||||
await fs.promises.mkdir(targetPath, { recursive: true });
|
||||
|
||||
if (process.platform === "win32") {
|
||||
await exec(`npx extract-zip ${file} ${targetPath}`);
|
||||
} else {
|
||||
await tar.x({
|
||||
file: file,
|
||||
cwd: targetPath,
|
||||
});
|
||||
}
|
||||
|
||||
if (process.platform !== "win32") {
|
||||
fs.chmodSync(path.join(targetPath, "ludusavi"), 0o755);
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -120,7 +120,7 @@
|
||||
"options": "خيارات",
|
||||
"executable_section_title": "ملف التشغيل",
|
||||
"executable_section_description": "مسار الملف الذي سيتم تشغيله عند النقر على \"تشغيل\"",
|
||||
"downloads_secion_title": "التنزيلات",
|
||||
"downloads_section_title": "التنزيلات",
|
||||
"downloads_section_description": "تحقق من التحديثات أو الإصدارات الأخرى لهذه اللعبة",
|
||||
"danger_zone_section_title": "منطقة الخطر",
|
||||
"danger_zone_section_description": "إزالة هذه اللعبة من مكتبتك أو الملفات التي تم تنزيلها بواسطة Hydra",
|
||||
@@ -188,8 +188,8 @@
|
||||
"reset_achievements_error": "فشل في إعادة تعيين الإنجازات",
|
||||
"download_error_gofile_quota_exceeded": "لقد تجاوزت الحصة الشهرية لـ Gofile. يرجى الانتظار حتى إعادة تعيين الحصة.",
|
||||
"download_error_real_debrid_account_not_authorized": "حساب Real-Debrid الخاص بك غير مصرح له بإجراء تنزيلات جديدة. يرجى مراجعة إعدادات الحساب والمحاولة مرة أخرى.",
|
||||
"download_error_not_cached_in_real_debrid": "هذا التنزيل غير متوفر على Real-Debrid وجلب حالة التنزيل من Real-Debrid غير متاح حاليًا.",
|
||||
"download_error_not_cached_in_torbox": "هذا التنزيل غير متوفر على Torbox وجلب حالة التنزيل من Torbox غير متاح حاليًا.",
|
||||
"download_error_not_cached_on_real_debrid": "هذا التنزيل غير متوفر على Real-Debrid وجلب حالة التنزيل من Real-Debrid غير متاح حاليًا.",
|
||||
"download_error_not_cached_on_torbox": "هذا التنزيل غير متوفر على TorBox وجلب حالة التنزيل من TorBox غير متاح حاليًا.",
|
||||
"game_removed_from_favorites": "تمت إزالة اللعبة من المفضلة",
|
||||
"game_added_to_favorites": "تمت إضافة اللعبة إلى المفضلة"
|
||||
},
|
||||
@@ -255,6 +255,12 @@
|
||||
"download_sources_description": "سيقوم Hydra بجلب روابط التنزيل من هذه المصادر. يجب أن يكون عنوان URL للمصدر رابطًا مباشرًا لملف .json يحتوي على روابط التنزيل.",
|
||||
"validate_download_source": "تحقق",
|
||||
"remove_download_source": "إزالة",
|
||||
"removed_download_sources": "تمت إزالة مصادر التنزيل",
|
||||
"cancel_button_confirmation_delete_all_sources": "لا",
|
||||
"confirm_button_confirmation_delete_all_sources": "نعم، احذف كل شيء",
|
||||
"description_confirmation_delete_all_sources": "سوف تقوم بحذف جميع مصادر التنزيل",
|
||||
"title_confirmation_delete_all_sources": "احذف جميع مصادر التنزيل",
|
||||
"button_delete_all_sources": "قم بإزالة جميع مصادر التنزيل",
|
||||
"add_download_source": "إضافة مصدر",
|
||||
"download_count_zero": "لا توجد خيارات تنزيل",
|
||||
"download_count_one": "{{countFormatted}} خيار تنزيل",
|
||||
@@ -324,7 +330,7 @@
|
||||
"delete_theme_description": "سيؤدي هذا إلى حذف السمة {{theme}}",
|
||||
"cancel": "إلغاء",
|
||||
"appearance": "المظهر",
|
||||
"enable_torbox": "تفعيل Torbox",
|
||||
"enable_torbox": "تفعيل TorBox",
|
||||
"torbox_description": "TorBox هي خدمة seedbox متميزة تنافس أفضل الخوادم في السوق.",
|
||||
"torbox_account_linked": "تم ربط حساب TorBox",
|
||||
"real_debrid_account_linked": "تم ربط حساب Real-Debrid",
|
||||
|
||||
@@ -107,6 +107,12 @@
|
||||
"notifications": "Апавяшчэнні",
|
||||
"enable_download_notifications": "Па сканчэнні сцягванні",
|
||||
"enable_repack_list_notifications": "Пры даданні новага рэпака",
|
||||
"cancel_button_confirmation_delete_all_sources": "Няма",
|
||||
"confirm_button_confirmation_delete_all_sources": "Так,выдаліць усё",
|
||||
"description_confirmation_delete_all_sources": "Вы выдаліце ўсе крыніцы сцягвання",
|
||||
"title_confirmation_delete_all_sources": "Выдаліць усе крыніцы сцягвання",
|
||||
"removed_download_sources": "Крыніцы сцягвання выдалены",
|
||||
"button_delete_all_sources": "Премахнете всички източници на изтегляне",
|
||||
"behavior": "Паводзіны",
|
||||
"quit_app_instead_hiding": "Закрываць праграму замест таго, каб хаваць яе ў трэй",
|
||||
"launch_with_system": "Запускаць праграму пры запуску сыстэмы"
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
"options": "Опции",
|
||||
"executable_section_title": "Стартиращ файл",
|
||||
"executable_section_description": "Пътят на файла, който ще се изпълни, когато се щракне върху \"Пускане\"",
|
||||
"downloads_secion_title": "Свалени",
|
||||
"downloads_section_title": "Свалени",
|
||||
"downloads_section_description": "Вижте актуализации или други версии на тази игра",
|
||||
"danger_zone_section_title": "Опасна зона",
|
||||
"danger_zone_section_description": "Премахнете тази игра от библиотеката си или от файловете, изтеглени от Hydra",
|
||||
@@ -253,6 +253,12 @@
|
||||
"download_source_errored": "Сгрешен",
|
||||
"sync_download_sources": "Синхронизирай източниците",
|
||||
"removed_download_source": "Източника за сваляне е премахнат",
|
||||
"cancel_button_confirmation_delete_all_sources": "не",
|
||||
"confirm_button_confirmation_delete_all_sources": "Да, удалить все",
|
||||
"description_confirmation_delete_all_sources": "Вы удалите все источники загрузки",
|
||||
"title_confirmation_delete_all_sources": "Удалить все источники загрузки",
|
||||
"removed_download_sources": "Шрифты удалены",
|
||||
"button_delete_all_sources": "Удалить все источники загрузки",
|
||||
"added_download_source": "Добавен източник за сваляне",
|
||||
"download_sources_synced": "Всички източници за сваляне са синхронизирани",
|
||||
"insert_valid_json_url": "Добавете ваиден JSON линк",
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
"options": "Opcions",
|
||||
"executable_section_title": "Executable",
|
||||
"executable_section_description": "Directori del fitxer des d'on s'executarà quan es cliqui a \"Executar\"",
|
||||
"downloads_secion_title": "Descàrregues",
|
||||
"downloads_section_title": "Descàrregues",
|
||||
"downloads_section_description": "Comprova actualitzacions o altres versions del videojoc",
|
||||
"danger_zone_section_title": "Zona de perill",
|
||||
"danger_zone_section_description": "Elimina aquest videojoc del teu catàleg o els fitxers descarregats per Hydra",
|
||||
@@ -175,6 +175,12 @@
|
||||
"download_sources_description": "Hydra buscarà els enllaços de descàrrega d'aquestes fonts. L'URL d'origen ha de ser un enllaç directe a un fitxer .json que contingui els enllaços de descàrrega.",
|
||||
"validate_download_source": "Valida",
|
||||
"remove_download_source": "Elimina",
|
||||
"cancel_button_confirmation_delete_all_sources": "No",
|
||||
"confirm_button_confirmation_delete_all_sources": "Sí, esborra-ho tot",
|
||||
"description_confirmation_delete_all_sources": "Eliminareu totes les fonts de descàrrega",
|
||||
"title_confirmation_delete_all_sources": "Suprimeix totes les fonts de baixada",
|
||||
"removed_download_sources": "S'han eliminat les fonts de descàrrega",
|
||||
"button_delete_all_sources": "Elimina totes les fonts de baixada",
|
||||
"add_download_source": "Afegeix font",
|
||||
"download_count_zero": "No hi ha baixades a la llista",
|
||||
"download_count_one": "{{countFormatted}} a la llista de baixades",
|
||||
|
||||
@@ -44,11 +44,21 @@
|
||||
"downloading_metadata": "Stahuji metadata: {{title}}…",
|
||||
"downloading": "Stahuji {{title}}… ({{percentage}} staženo) - Odhadovaný čas {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Stahuji {{title}}… ({{percentage}} staženo) - Počítám zbývající čas…",
|
||||
"checking_files": "Kontroluji soubory: {{title}}… ({{percentage}} ověřeno)"
|
||||
"checking_files": "Kontroluji soubory: {{title}}… ({{percentage}} ověřeno)",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "Instalace dokončena",
|
||||
"installation_complete_message": "Běžné redistribuovatelné komponenty byly úspěšně nainstalovány"
|
||||
},
|
||||
"catalogue": {
|
||||
"next_page": "Další strana",
|
||||
"previous_page": "Předchozí strana"
|
||||
"search": "Filtr…",
|
||||
"developers": "Vývojáři",
|
||||
"genres": "Žánry",
|
||||
"tags": "Tagy",
|
||||
"publishers": "Vydavatelé",
|
||||
"download_sources": "Zdroje stahování",
|
||||
"result_count": "Výsledky: {{resultCount}}",
|
||||
"filter_count": "Dostupné: {{filterCount}}",
|
||||
"clear_filters": "Vyčistit vybrané filtry: {{filterCount}}"
|
||||
},
|
||||
"game_details": {
|
||||
"open_download_options": "Otevřít možnosti stahování",
|
||||
@@ -107,12 +117,13 @@
|
||||
"open_download_location": "Zobrazit stažené soubory",
|
||||
"create_shortcut": "Vytvořit zástupce na ploše",
|
||||
"remove_files": "Odebrat soubory",
|
||||
"clear": "Vyčistit",
|
||||
"remove_from_library_title": "Jste si jisti?",
|
||||
"remove_from_library_description": "Tohle odstraní {{game}} z vaší knihovny",
|
||||
"options": "Možnosti",
|
||||
"executable_section_title": "Spustitelné",
|
||||
"executable_section_description": "Umístění souboru který bude spuštěn při kliknutí na \"Hrát\"",
|
||||
"downloads_secion_title": "Stažené soubory",
|
||||
"downloads_section_title": "Stažené soubory",
|
||||
"downloads_section_description": "Zkontrolovat jestli není nová / odlišná verze hry",
|
||||
"danger_zone_section_title": "Nebezpečná zóna",
|
||||
"danger_zone_section_description": "Odebrat hru z knihovny / soubory stažené Hydrou",
|
||||
@@ -160,6 +171,9 @@
|
||||
"loading_save_preview": "Hledání uložených her...",
|
||||
"wine_prefix": "Wine Prefix",
|
||||
"wine_prefix_description": "Wine Prefix použit pro spuštění této hry",
|
||||
"launch_options": "Možnosti spuštění",
|
||||
"launch_options_description": "Pokročilí uživatelé mohou zadat speciální parametry spuštění (experimentální funkce)",
|
||||
"launch_options_placeholder": "Žádné parametery nebyly specifikovány",
|
||||
"no_download_option_info": "Žádné informace nejsou dostupny",
|
||||
"backup_deletion_failed": "Nepovedlo se odstranit zálohu",
|
||||
"max_number_of_artifacts_reached": "Dosáhli jste maximálního počtu záloh pro tuto hru",
|
||||
@@ -167,7 +181,23 @@
|
||||
"manage_files_description": "Spravovat, které soubory budou zálohovány a obnoveny",
|
||||
"select_folder": "Vybrat složku",
|
||||
"backup_from": "Zálohy z {{date}}",
|
||||
"custom_backup_location_set": "Vlastní umístění záloh nastaveno"
|
||||
"custom_backup_location_set": "Vlastní umístění záloh nastaveno",
|
||||
"automatic_backup_from": "Automatická záloha z {{date}}",
|
||||
"enable_automatic_cloud_sync": "Povolit automatické zálohy v cloudu",
|
||||
"no_directory_selected": "Žádná složka není zvolena",
|
||||
"no_write_permission": "Nemohu stahovat do této složky. Klikni sem pro více informací.",
|
||||
"reset_achievements": "Resetovat achievementy",
|
||||
"reset_achievements_description": "Toto zresetuje všechny achievementy pro hru {{game}}",
|
||||
"reset_achievements_title": "Jste si jisti?",
|
||||
"reset_achievements_success": "Achievementy úspěšně resetovány",
|
||||
"reset_achievements_error": "Nepodařilo se resetovat achievementy",
|
||||
"download_error_gofile_quota_exceeded": "Překročili jste vaši měsíční GoFile kvótu. Prosím vyčkejte na resetování kvóty.",
|
||||
"download_error_real_debrid_account_not_authorized": "Váš Real-Debrid účet není autorizován pro vytváření nových stahování. Prosím zkontrolujte nastavení vašeho účtu a zkuste to znovu.",
|
||||
"download_error_not_cached_on_real_debrid": "Toto stahování není dostupné na Real-Debrid a získávání informací o stahování z Real-Debrid není zatím dostupné.",
|
||||
"download_error_not_cached_on_torbox": "Toto stahování není dostupné na TorBox a získávání informací o stahování z TorBox není zatím dostupné.",
|
||||
"game_removed_from_favorites": "Hra odebrána z oblíbených",
|
||||
"game_added_to_favorites": "Hra přidána do oblíbených",
|
||||
"automatically_extract_downloaded_files": "Automaticky rozbalit stažené soubory"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Aktivovat hydru",
|
||||
@@ -200,7 +230,13 @@
|
||||
"queued": "V řadě",
|
||||
"no_downloads_title": "Prázdno..",
|
||||
"no_downloads_description": "Ještě jsi zatím nic nestáhl přes Hydru, ale furt není pozdě začít.",
|
||||
"checking_files": "Kontroluji soubory…"
|
||||
"checking_files": "Kontroluji soubory…",
|
||||
"seeding": "Seedování",
|
||||
"stop_seeding": "Zastavování seedování",
|
||||
"resume_seeding": "Obnovit seedování",
|
||||
"options": "Spravovat",
|
||||
"extract": "Rozbalit soubory",
|
||||
"extracting": "Rozbalování souborů…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Umístění stahování",
|
||||
@@ -237,6 +273,12 @@
|
||||
"download_source_errored": "Chyba",
|
||||
"sync_download_sources": "Synchronizovat zdroje",
|
||||
"removed_download_source": "Zdroj odebrán",
|
||||
"cancel_button_confirmation_delete_all_sources": "Žádný",
|
||||
"confirm_button_confirmation_delete_all_sources": "Ano, smazat vše",
|
||||
"description_confirmation_delete_all_sources": "Smažete všechny zdroje stahování",
|
||||
"title_confirmation_delete_all_sources": "Odstraňte všechny zdroje stahování",
|
||||
"removed_download_sources": "Zdroje stahování byly odstraněny",
|
||||
"button_delete_all_sources": "Odstraňte všechny zdroje stahování",
|
||||
"added_download_source": "Zdroj přidán",
|
||||
"download_sources_synced": "Všechny zdroje jsou synchronizovány",
|
||||
"insert_valid_json_url": "Zadej platnou JSON adresu",
|
||||
@@ -255,9 +297,65 @@
|
||||
"must_be_valid_url": "Zdroj musí být platký odkaz URL",
|
||||
"blocked_users": "Zablokovaní uživatelé",
|
||||
"user_unblocked": "Uživatel byl odblokován",
|
||||
"enable_achievement_notifications": "Když je odemknut achievement",
|
||||
"enable_achievement_notifications": "Když je odemčen achievement",
|
||||
"launch_minimized": "Spustit v minimalizovaném režimu",
|
||||
"disable_nsfw_alert": "Deaktivovat upozornění na nevhodný obsah"
|
||||
"disable_nsfw_alert": "Deaktivovat upozornění na nevhodný obsah",
|
||||
"seed_after_download_complete": "Seedovat až skončí stahování",
|
||||
"show_hidden_achievement_description": "Zobrazit popisy skrytých achievementů dříve, než jsou odemčeny",
|
||||
"account": "Účet",
|
||||
"no_users_blocked": "Nemáte žádného uživatele zablokovaného",
|
||||
"subscription_active_until": "Vaše Hydra cloud předplatné je platné do {{date}}",
|
||||
"manage_subscription": "Spravovat předplatné",
|
||||
"update_email": "Změnit email",
|
||||
"update_password": "Změnit heslo",
|
||||
"current_email": "Současný email:",
|
||||
"no_email_account": "Zatím nemáte nastavený email",
|
||||
"account_data_updated_successfully": "Data vašeho účtu byly úspěšně upraveny",
|
||||
"renew_subscription": "Obnovit předplatné Hydra Cloud",
|
||||
"subscription_expired_at": "Vaše předplatné vypršelo {{date}}",
|
||||
"no_subscription": "Užijte si Hydru v nejlepší možné podobě",
|
||||
"become_subscriber": "Připojit se k předplatnému Hydra Cloud",
|
||||
"subscription_renew_cancelled": "Automatické obnovování je zrušenu",
|
||||
"subscription_renews_on": "Vaše předplatné se obnoví {{date}}",
|
||||
"bill_sent_until": "Vaše příští faktura bude odeslána nejpozději do tohoto dne",
|
||||
"no_themes": "Vypadá to že ještě nemáte žádné vzhledy, ale nebojte, klikněte sem pro vytvoření vašeho prvního mistrovského díla!",
|
||||
"editor_tab_code": "Kód",
|
||||
"editor_tab_info": "Info",
|
||||
"editor_tab_save": "Uložit",
|
||||
"web_store": "Webový obchod",
|
||||
"clear_themes": "Vyčistit",
|
||||
"create_theme": "Vytvořit",
|
||||
"create_theme_modal_title": "Vytvořit vlastní vzhled",
|
||||
"create_theme_modal_description": "Vytvořte si vlastní styl, abyste si mohli ozdobit Hydru",
|
||||
"theme_name": "Název",
|
||||
"insert_theme_name": "Vložte název vzhledu",
|
||||
"set_theme": "Nastavit vzhled",
|
||||
"unset_theme": "Zrušit vzhled",
|
||||
"delete_theme": "Odstranit vzhled",
|
||||
"edit_theme": "Upravit vzhled",
|
||||
"delete_all_themes": "Smazat všechny vzhledy",
|
||||
"delete_all_themes_description": "Toto smaže všechny vaše vzhledy",
|
||||
"delete_theme_description": "Toto smaže vzhled {{theme}}",
|
||||
"cancel": "Zrušit",
|
||||
"appearance": "Vzhled",
|
||||
"enable_torbox": "Povolit TorBox",
|
||||
"torbox_description": "TorBox je prémiový seedbox server který se vyrovná i těm nejlepším seedbox serverům na trhu.",
|
||||
"torbox_account_linked": "TorBox účet propojen",
|
||||
"create_real_debrid_account": "Klikni sem pokud ještě nemáš Real-Debrid účet",
|
||||
"create_torbox_account": "Klikni sem pokud ještě nemáš TorBox účet",
|
||||
"real_debrid_account_linked": "Real-Debrid účet propojen",
|
||||
"name_min_length": "Název vzhledu musí být minimálně 3 znaky dlouhý",
|
||||
"import_theme": "Vložit vzhled",
|
||||
"import_theme_description": "Chystáte se vložit vzhled {{theme}} z obchodu vzhledů",
|
||||
"error_importing_theme": "Nastala chyba při vkládání vzhledu",
|
||||
"theme_imported": "Vzhled úspěšně vložen",
|
||||
"enable_friend_request_notifications": "Při obdržení žádosti o přátelství",
|
||||
"enable_auto_install": "Automaticky stahovat aktualizace",
|
||||
"common_redist": "Běžné redistribuovatelné komponenty",
|
||||
"common_redist_description": "Běžné redistribuovatelné komponenty jsou potřeba pro spuštění určitých her. Je doporučeno je nainstalovat, aby se předešlo problémům.",
|
||||
"install_common_redist": "Nainstalovat",
|
||||
"installing_common_redist": "Instalování…",
|
||||
"show_download_speed_in_megabytes": "Ukázat rychlost stahování v megabytech"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Stahování dokončeno",
|
||||
@@ -267,14 +365,20 @@
|
||||
"repack_count_other": "{{count}} repacky přidány",
|
||||
"new_update_available": "Version {{version}} je dostupná",
|
||||
"restart_to_install_update": "Restartuj Hydru pro aktualizaci",
|
||||
"notification_achievement_unlocked_title": "Achievement pro {{game}} byl odemknut",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} a dalších {{count}} byly odemknuty"
|
||||
"notification_achievement_unlocked_title": "Achievement pro {{game}} byl odemčen",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} a dalších {{count}} byly odemčeny",
|
||||
"new_friend_request_description": "Obdrželi jste novou žádost o přátelství",
|
||||
"new_friend_request_title": "Nová žádost o přátelství",
|
||||
"extraction_complete": "Rozbalování dokončeno",
|
||||
"game_extracted": "{{title}} úspěšně rozbaleno"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Otevřít Hydru",
|
||||
"quit": "Odejít"
|
||||
},
|
||||
"game_card": {
|
||||
"available_one": "Dostupné",
|
||||
"available_other": "Dostupné",
|
||||
"no_downloads": "Žádné možnosti stahování nenalezeny"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
@@ -357,7 +461,17 @@
|
||||
"your_friend_code": "Tvůj kód přítele:",
|
||||
"upload_banner": "Nahrát banner profilu",
|
||||
"uploading_banner": "Nahrávání banneru",
|
||||
"background_image_updated": "Obrázek pozadí byl změněn"
|
||||
"background_image_updated": "Obrázek pozadí byl změněn",
|
||||
"stats": "Statistiky",
|
||||
"achievements": "Achievementy",
|
||||
"games": "Hry",
|
||||
"top_percentile": "Top {{percentile}}%",
|
||||
"ranking_updated_weekly": "Žebříčky jsou aktualizovány každý týden",
|
||||
"playing": "Hraje {{game}}",
|
||||
"achievements_unlocked": "Achievements odemčen",
|
||||
"earned_points": "Získané body",
|
||||
"show_achievements_on_profile": "Zobrazit vaše odemčené achievementy na profilu",
|
||||
"show_points_on_profile": "Zobrazit vaše získané body na profilu"
|
||||
},
|
||||
"achievement": {
|
||||
"achievement_unlocked": "Achievement odemčen",
|
||||
@@ -367,7 +481,12 @@
|
||||
"subscription_needed": "Je vyžadováno předplatné Hydra Cloud pro zobrazení tohoto obsahu",
|
||||
"new_achievements_unlocked": "Odemčeno {{achievementCount}} nových achievementů z {{gameCount}} her",
|
||||
"achievement_progress": "{{unlockedCount}}/{{totalCount}} achievementů",
|
||||
"achievements_unlocked_for_game": "Odemčeno {{achievementCount}} nových achievementů pro {{gameTitle}}"
|
||||
"achievements_unlocked_for_game": "Odemčeno {{achievementCount}} nových achievementů pro {{gameTitle}}",
|
||||
"hidden_achievement_tooltip": "Toho je skrytý achievement",
|
||||
"achievement_earn_points": "Získej {{points}} bodů tímto achievementem",
|
||||
"earned_points": "Získané body",
|
||||
"available_points": "Dostupné body:",
|
||||
"how_to_earn_achievements_points": "Jak získat body achievementů?"
|
||||
},
|
||||
"hydra_cloud": {
|
||||
"subscription_tour_title": "Předplatné Hydra Cloud",
|
||||
@@ -377,6 +496,10 @@
|
||||
"animated_profile_picture": "Animované profilové obrázky",
|
||||
"premium_support": "Prémiová podpora",
|
||||
"show_and_compare_achievements": "Zobraz a porovnej achievementy s ostatními uživateli",
|
||||
"animated_profile_banner": "Animovaný banner na profilu"
|
||||
"animated_profile_banner": "Animovaný banner na profilu",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "Právě jste objevili funkci předplatného Hydra Cloud!",
|
||||
"learn_more": "Zjistit více",
|
||||
"debrid_description": "Stahovat až 4x rychleji s Nimbus"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
"options": "Valgmuligheder",
|
||||
"executable_section_title": "Eksekverbar fil",
|
||||
"executable_section_description": "Sti til filen som skal bruges når \"Spil\" bliver klikket",
|
||||
"downloads_secion_title": "Downloads",
|
||||
"downloads_section_title": "Downloads",
|
||||
"downloads_section_description": "Undersøg opdateringer eller andre versioner af dette spil",
|
||||
"danger_zone_section_title": "Farezonen",
|
||||
"danger_zone_section_description": "Fjern dette spil fra dit bibliotek eller filerne der er blevet downloadet af Hydra",
|
||||
@@ -201,6 +201,12 @@
|
||||
"download_source_errored": "Fejlede",
|
||||
"sync_download_sources": "Synkronisér kilder",
|
||||
"removed_download_source": "Download kilde fjernet",
|
||||
"cancel_button_confirmation_delete_all_sources": "Ingen",
|
||||
"confirm_button_confirmation_delete_all_sources": "Ja, slet alt",
|
||||
"description_confirmation_delete_all_sources": "Du vil slette alle downloadkilder",
|
||||
"title_confirmation_delete_all_sources": "Slet alle downloadkilder",
|
||||
"removed_download_sources": "Download kilder fjernet",
|
||||
"button_delete_all_sources": "Fjern alle downloadkilder",
|
||||
"added_download_source": "Tilføjede download kilde",
|
||||
"download_sources_synced": "Alle download kilder er synkroniserede",
|
||||
"insert_valid_json_url": "Indsæt en gyldig JSON url",
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
"options": "Optionen",
|
||||
"executable_section_title": "Ausführbare Datei",
|
||||
"executable_section_description": "Pfad der Datei, die bei Klick auf \"Play\" ausgeführt wird",
|
||||
"downloads_secion_title": "Downloads",
|
||||
"downloads_section_title": "Downloads",
|
||||
"downloads_section_description": "Sieh dir Updates oder andere Versionen dieses Spiels an",
|
||||
"danger_zone_section_title": "Gefahrenzone",
|
||||
"danger_zone_section_description": "Entferne dieses Spiel aus deiner Bibliothek oder die von Hydra heruntergeladenen Dateien",
|
||||
@@ -185,6 +185,12 @@
|
||||
"download_source_errored": "Fehlgeschlagen",
|
||||
"sync_download_sources": "Quellen synchronisieren",
|
||||
"removed_download_source": "Download-Quelle entfernt",
|
||||
"cancel_button_confirmation_delete_all_sources": "Nein",
|
||||
"confirm_button_confirmation_delete_all_sources": "Ja, alles löschen",
|
||||
"description_confirmation_delete_all_sources": "Du löschen alle Downloadquellen",
|
||||
"title_confirmation_delete_all_sources": "Löschen du alle Downloadquellen",
|
||||
"removed_download_sources": "Download-Quellen entfernt",
|
||||
"button_delete_all_sources": "Entfernen Sie alle Downloadquellen",
|
||||
"added_download_source": "Download-Quelle hinzugefügt",
|
||||
"download_sources_synced": "Alle Download-Quellen sind synchronisiert",
|
||||
"insert_valid_json_url": "Füge eine gültige JSON URL ein",
|
||||
|
||||
@@ -44,7 +44,10 @@
|
||||
"downloading_metadata": "Downloading {{title}} metadata…",
|
||||
"downloading": "Downloading {{title}}… ({{percentage}} complete) - Completion {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Downloading {{title}}… ({{percentage}} complete) - Calculating remaining time…",
|
||||
"checking_files": "Checking {{title}} files… ({{percentage}} complete)"
|
||||
"checking_files": "Checking {{title}} files… ({{percentage}} complete)",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "Installation complete",
|
||||
"installation_complete_message": "Common redistributables installed successfully"
|
||||
},
|
||||
"catalogue": {
|
||||
"search": "Filter…",
|
||||
@@ -120,7 +123,7 @@
|
||||
"options": "Options",
|
||||
"executable_section_title": "Executable",
|
||||
"executable_section_description": "Path of the file that will be executed when \"Play\" is clicked",
|
||||
"downloads_secion_title": "Downloads",
|
||||
"downloads_section_title": "Downloads",
|
||||
"downloads_section_description": "Check out updates or other versions of this game",
|
||||
"danger_zone_section_title": "Danger zone",
|
||||
"danger_zone_section_description": "Remove this game from your library or the files downloaded by Hydra",
|
||||
@@ -190,10 +193,12 @@
|
||||
"reset_achievements_error": "Failed to reset achievements",
|
||||
"download_error_gofile_quota_exceeded": "You have exceeded your Gofile monthly quota. Please await the quota to reset.",
|
||||
"download_error_real_debrid_account_not_authorized": "Your Real-Debrid account is not authorized to make new downloads. Please check your account settings and try again.",
|
||||
"download_error_not_cached_in_real_debrid": "This download is not available on Real-Debrid and polling download status from Real-Debrid is not yet available.",
|
||||
"download_error_not_cached_in_torbox": "This download is not available on Torbox and polling download status from Torbox is not yet available.",
|
||||
"download_error_not_cached_on_real_debrid": "This download is not available on Real-Debrid and polling download status from Real-Debrid is not yet available.",
|
||||
"download_error_not_cached_on_torbox": "This download is not available on TorBox and polling download status from TorBox is not yet available.",
|
||||
"download_error_not_cached_on_hydra": "This download is not available on Nimbus.",
|
||||
"game_removed_from_favorites": "Game removed from favorites",
|
||||
"game_added_to_favorites": "Game added to favorites"
|
||||
"game_added_to_favorites": "Game added to favorites",
|
||||
"automatically_extract_downloaded_files": "Automatically extract downloaded files"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Activate Hydra",
|
||||
@@ -230,7 +235,9 @@
|
||||
"seeding": "Seeding",
|
||||
"stop_seeding": "Stop seeding",
|
||||
"resume_seeding": "Resume seeding",
|
||||
"options": "Manage"
|
||||
"options": "Manage",
|
||||
"extract": "Extract files",
|
||||
"extracting": "Extracting files…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Downloads path",
|
||||
@@ -267,6 +274,12 @@
|
||||
"download_source_errored": "Errored",
|
||||
"sync_download_sources": "Sync sources",
|
||||
"removed_download_source": "Download source removed",
|
||||
"removed_download_sources": "Download sources removed",
|
||||
"cancel_button_confirmation_delete_all_sources": "No",
|
||||
"confirm_button_confirmation_delete_all_sources": "Yes, delete everything",
|
||||
"title_confirmation_delete_all_sources": "Delete all download sources",
|
||||
"description_confirmation_delete_all_sources": "You will delete all download sources",
|
||||
"button_delete_all_sources": "Remove all",
|
||||
"added_download_source": "Added download source",
|
||||
"download_sources_synced": "All download sources are synced",
|
||||
"insert_valid_json_url": "Insert a valid JSON url",
|
||||
@@ -326,15 +339,25 @@
|
||||
"delete_theme_description": "This will delete the theme {{theme}}",
|
||||
"cancel": "Cancel",
|
||||
"appearance": "Appearance",
|
||||
"enable_torbox": "Enable Torbox",
|
||||
"enable_torbox": "Enable TorBox",
|
||||
"torbox_description": "TorBox is your premium seedbox service rivaling even the best servers on the market.",
|
||||
"torbox_account_linked": "TorBox account linked",
|
||||
"create_real_debrid_account": "Click here if you don't have a Real-Debrid account yet",
|
||||
"create_torbox_account": "Click here if you don't have a TorBox account yet",
|
||||
"real_debrid_account_linked": "Real-Debrid account linked",
|
||||
"name_min_length": "Theme name must be at least 3 characters long",
|
||||
"import_theme": "Import theme",
|
||||
"import_theme_description": "You will import {{theme}} from the theme store",
|
||||
"error_importing_theme": "Error importing theme",
|
||||
"theme_imported": "Theme imported successfully"
|
||||
"theme_imported": "Theme imported successfully",
|
||||
"enable_friend_request_notifications": "When a friend request is received",
|
||||
"enable_auto_install": "Download updates automatically",
|
||||
"common_redist": "Common redistributables",
|
||||
"common_redist_description": "Common redistributables are required to run some games. Installing them is recommended to avoid issues.",
|
||||
"install_common_redist": "Install",
|
||||
"installing_common_redist": "Installing…",
|
||||
"show_download_speed_in_megabytes": "Show download speed in megabytes per second",
|
||||
"extract_files_by_default": "Extract files by default after download"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Download complete",
|
||||
@@ -345,13 +368,19 @@
|
||||
"new_update_available": "Version {{version}} available",
|
||||
"restart_to_install_update": "Restart Hydra to install the update",
|
||||
"notification_achievement_unlocked_title": "Achievement unlocked for {{game}}",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} and other {{count}} were unlocked"
|
||||
"notification_achievement_unlocked_body": "{{achievement}} and other {{count}} were unlocked",
|
||||
"new_friend_request_description": "You have received a new friend request",
|
||||
"new_friend_request_title": "New friend request",
|
||||
"extraction_complete": "Extraction complete",
|
||||
"game_extracted": "{{title}} extracted successfully"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Open Hydra",
|
||||
"quit": "Quit"
|
||||
},
|
||||
"game_card": {
|
||||
"available_one": "Available",
|
||||
"available_other": "Available",
|
||||
"no_downloads": "No downloads available"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
@@ -472,6 +501,7 @@
|
||||
"animated_profile_banner": "Animated profile banner",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "You've just discovered a Hydra Cloud feature!",
|
||||
"learn_more": "Learn More"
|
||||
"learn_more": "Learn More",
|
||||
"debrid_description": "Download up to 4x faster with Nimbus"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +44,9 @@
|
||||
"downloading_metadata": "Descargando metadatos de {{title}}…",
|
||||
"downloading": "Descargando {{title}}… ({{percentage}} completado) - Finalizando {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Descargando {{title}}… ({{percentage}} completado) - Calculando tiempo restante…",
|
||||
"installation_complete": "Instalación completada",
|
||||
"installation_complete_message": "Common redistributables instalados exitosamente",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"checking_files": "Verificando archivos de {{title}}… ({{percentage}} completado)"
|
||||
},
|
||||
"catalogue": {
|
||||
@@ -59,6 +62,8 @@
|
||||
},
|
||||
"game_details": {
|
||||
"open_download_options": "Ver opciones de descargas",
|
||||
"automatically_extract_downloaded_files": "Extraer automáticamente archivos descargados",
|
||||
"download_error_not_cached_on_hydra": "Esta descarga no está disponible en Nimbus.",
|
||||
"download_options_zero": "No hay opciones de descargas disponibles",
|
||||
"download_options_one": "{{count}} opción de descarga",
|
||||
"download_options_other": "{{count}} opciones de descargas",
|
||||
@@ -119,7 +124,7 @@
|
||||
"options": "Opciones",
|
||||
"executable_section_title": "Ejecutable",
|
||||
"executable_section_description": "Ruta del archivo que se ejecutará cuando se presione \"Jugar\"",
|
||||
"downloads_secion_title": "Descargas",
|
||||
"downloads_section_title": "Descargas",
|
||||
"downloads_section_description": "Buscar actualizaciones u otras versiones de este juego",
|
||||
"danger_zone_section_title": "Opciones Avanzadas",
|
||||
"danger_zone_section_description": "Eliminar este juego de tu librería o los archivos descargados por Hydra (Esto solo eliminará los archivos de instalación y no el juego instalado)",
|
||||
@@ -190,8 +195,8 @@
|
||||
"reset_achievements_error": "Se produjo un error al reiniciar los logros",
|
||||
"download_error_gofile_quota_exceeded": "Has excedido la cuota mensual de Gofile. Por favor espera a que se reinicie la cuota.",
|
||||
"download_error_real_debrid_account_not_authorized": "Tu cuenta de Real-Debrid no está autorizada para nueva descargas. Por favor, revisa los ajustes de tu cuenta e intenta de nuevo.",
|
||||
"download_error_not_cached_in_real_debrid": "Esta descarga no está disponible en Real-Debrid y el estado de descarga del sondeo de Real-Debrid aún no está disponible.",
|
||||
"download_error_not_cached_in_torbox": "Esta descarga no está disponible en Torbox y el estado de descarga del sondeo aún no está disponible.",
|
||||
"download_error_not_cached_on_real_debrid": "Esta descarga no está disponible en Real-Debrid y el estado de descarga del sondeo de Real-Debrid aún no está disponible.",
|
||||
"download_error_not_cached_on_torbox": "Esta descarga no está disponible en TorBox y el estado de descarga del sondeo aún no está disponible.",
|
||||
"game_added_to_favorites": "Juego añadido a favoritos",
|
||||
"game_removed_from_favorites": "Juego removido de favoritos"
|
||||
},
|
||||
@@ -230,10 +235,19 @@
|
||||
"seeding": "Seeding",
|
||||
"stop_seeding": "Detener seeding",
|
||||
"resume_seeding": "Continuar seeding",
|
||||
"extract": "Extraer archivos",
|
||||
"extracting": "Extrayendo archivos…",
|
||||
"options": "Gestionar"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Ruta de descarga",
|
||||
"common_redist": "Common redistributables",
|
||||
"common_redist_description": "Las Common redistributables son requeridos para ejecutar algunos juegos. Es recomendado instalarlos para evitar problemas.",
|
||||
"create_real_debrid_account": "Presiona acá si no tienes una cuenta de Real-Debrid aún",
|
||||
"create_torbox_account": "Presiona acá si no tienes una cuenta de TorBox aún",
|
||||
"install_common_redist": "Instalar",
|
||||
"installing_common_redist": "Instalando…",
|
||||
"show_download_speed_in_megabytes": "Mostrar velocidad de descargar en megabytes por segundo",
|
||||
"change": "Cambiar",
|
||||
"notifications": "Notificaciones",
|
||||
"enable_download_notifications": "Cuando se completa una descarga",
|
||||
@@ -267,6 +281,12 @@
|
||||
"download_source_errored": "Error",
|
||||
"sync_download_sources": "Sincronizar fuentes",
|
||||
"removed_download_source": "Fuente de descarga eliminada",
|
||||
"cancel_button_confirmation_delete_all_sources": "No",
|
||||
"confirm_button_confirmation_delete_all_sources": "Sí, eliminar todo",
|
||||
"description_confirmation_delete_all_sources": "Eliminarás todas las fuentes de descarga",
|
||||
"title_confirmation_delete_all_sources": "Eliminar todas las fuentes de descarga",
|
||||
"removed_download_sources": "Fuentes de descarga eliminadas",
|
||||
"button_delete_all_sources": "Eliminar todas las fuentes de descarga",
|
||||
"added_download_source": "Fuente de descarga añadida",
|
||||
"download_sources_synced": "Todas las fuentes de descargas están actualizadas.",
|
||||
"insert_valid_json_url": "Introduce una URL JSON válida",
|
||||
@@ -298,7 +318,6 @@
|
||||
"no_email_account": "No has configurado un correo aún",
|
||||
"no_subscription": "Disfruta Hydra de la mejor manera",
|
||||
"no_users_blocked": "No tienes usuarios bloqueados",
|
||||
"notifications": "Notificaciones",
|
||||
"renew_subscription": "Renovar Hydra Cloud",
|
||||
"subscription_active_until": "Tu Hydra Cloud está activa hasta {{date}}",
|
||||
"subscription_expired_at": "Tú suscripción expiró el {{date}}",
|
||||
@@ -321,7 +340,7 @@
|
||||
"editor_tab_code": "Código",
|
||||
"editor_tab_info": "Info",
|
||||
"editor_tab_save": "Guardar",
|
||||
"enable_torbox": "Habilitar Torbox",
|
||||
"enable_torbox": "Habilitar TorBox",
|
||||
"error_importing_theme": "Error al importar el tema",
|
||||
"import_theme": "Importar tema",
|
||||
"import_theme_description": "Vas a importar el tema {{theme}} desde la tienda de temas",
|
||||
@@ -335,10 +354,14 @@
|
||||
"torbox_account_linked": "Cuenta de TorBox vinculada",
|
||||
"torbox_description": "TorBox es tu servicio premium de seedbox que rivaliza incluso a los mejores servidores del mercado.",
|
||||
"unset_theme": "Desactivar tema",
|
||||
"web_store": "Tienda Web"
|
||||
"web_store": "Tienda Web",
|
||||
"enable_friend_request_notifications": "Cuando se recibe una solicitud de amistad",
|
||||
"enable_auto_install": "Descargar actualizaciones automáticamente"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Descarga completada",
|
||||
"extraction_complete": "Extracción completada",
|
||||
"game_extracted": "{{title}} extraído exitosamente",
|
||||
"game_ready_to_install": "{{title}} está listo para instalarse",
|
||||
"repack_list_updated": "Lista de repacks actualizadas",
|
||||
"repack_count_one": "{{count}} repack ha sido añadido",
|
||||
@@ -346,13 +369,17 @@
|
||||
"new_update_available": "Version {{version}} disponible",
|
||||
"restart_to_install_update": "Reinicia Hydra para instalar la actualización",
|
||||
"notification_achievement_unlocked_title": "Logro desbloqueado de {{game}}",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} y otros {{count}} fueron desbloqueados"
|
||||
"notification_achievement_unlocked_body": "{{achievement}} y otros {{count}} fueron desbloqueados",
|
||||
"new_friend_request_title": "Nueva solicitud de amistad",
|
||||
"new_friend_request_description": "Has recibido una nueva solicitud de amistad"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Abrir Hydra",
|
||||
"quit": "Salir"
|
||||
},
|
||||
"game_card": {
|
||||
"available_one": "Disponible",
|
||||
"available_other": "Disponibles",
|
||||
"no_downloads": "No hay descargas disponibles"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
@@ -464,6 +491,7 @@
|
||||
},
|
||||
"hydra_cloud": {
|
||||
"subscription_tour_title": "Suscripción Hydra Cloud",
|
||||
"debrid_description": "Descargas hasta x4 más rápidas con Nimbus",
|
||||
"subscribe_now": "Suscribirse ahora",
|
||||
"cloud_saving": "Guardado en la nube",
|
||||
"cloud_achievements": "Guarda tus logros en la nube",
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
"options": "Valikud",
|
||||
"executable_section_title": "Käivitusfail",
|
||||
"executable_section_description": "Faili tee, mida käivitatakse \"Mängi\" nupule vajutades",
|
||||
"downloads_secion_title": "Allalaadimised",
|
||||
"downloads_section_title": "Allalaadimised",
|
||||
"downloads_section_description": "Vaata uuendusi või selle mängu teisi versioone",
|
||||
"danger_zone_section_title": "Ohutsoon",
|
||||
"danger_zone_section_description": "Eemalda see mäng oma kogust või Hydra poolt allalaaditud failid",
|
||||
@@ -236,6 +236,12 @@
|
||||
"download_source_errored": "Vigane",
|
||||
"sync_download_sources": "Sünkroniseeri allikad",
|
||||
"removed_download_source": "Allalaadimise allikas eemaldatud",
|
||||
"cancel_button_confirmation_delete_all_sources": "Ei",
|
||||
"confirm_button_confirmation_delete_all_sources": "Jah, kustuta kõik",
|
||||
"description_confirmation_delete_all_sources": "Kustutate kõik allalaadimisallikad",
|
||||
"title_confirmation_delete_all_sources": "Kustutage kõik allalaadimisallikad",
|
||||
"removed_download_sources": "Allalaadimise allikas eemaldati",
|
||||
"button_delete_all_sources": "Eemaldage kõik allalaadimisallikad",
|
||||
"added_download_source": "Allalaadimise allikas lisatud",
|
||||
"download_sources_synced": "Kõik allalaadimise allikad on sünkroniseeritud",
|
||||
"insert_valid_json_url": "Sisesta kehtiv JSON url",
|
||||
|
||||
@@ -111,6 +111,12 @@
|
||||
"launch_with_system": "زمانی که سیستم روشن میشود، هایدرا را باز کن",
|
||||
"general": "کلی",
|
||||
"behavior": "رفتار",
|
||||
"cancel_button_confirmation_delete_all_sources": "خیر",
|
||||
"confirm_button_confirmation_delete_all_sources": "ہاں، سب کچھ حذف کر دیں۔",
|
||||
"description_confirmation_delete_all_sources": "آپ ڈاؤن لوڈ کے تمام ذرائع کو حذف کر دیں گے۔",
|
||||
"title_confirmation_delete_all_sources": "تمام منابع دانلود را حذف کنید",
|
||||
"removed_download_sources": "منابع دانلود حذف شد",
|
||||
"button_delete_all_sources": "تمام منابع دانلود را حذف کنید",
|
||||
"enable_real_debrid": "فعالسازی Real-Debrid",
|
||||
"debrid_api_token_hint": "کلید API خود را از <ب0>اینجا</0> بگیرید.",
|
||||
"save_changes": "ذخیره تغییرات"
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
{
|
||||
"language_name": "Français",
|
||||
"app": {
|
||||
"successfully_signed_in": "Connecté avec succès"
|
||||
},
|
||||
"home": {
|
||||
"featured": "En vedette",
|
||||
"surprise_me": "Surprenez-moi",
|
||||
"no_results": "Aucun résultat trouvé"
|
||||
"no_results": "Aucun résultat trouvé",
|
||||
"start_typing": "Commencez à taper pour rechercher...",
|
||||
"hot": "Tendance",
|
||||
"weekly": "📅 Meilleurs jeux de la semaine",
|
||||
"achievements": "🏆 Jeux à terminer"
|
||||
},
|
||||
"sidebar": {
|
||||
"catalogue": "Catalogue",
|
||||
@@ -12,24 +19,46 @@
|
||||
"my_library": "Ma bibliothèque",
|
||||
"downloading_metadata": "{{title}} (Téléchargement des métadonnées…)",
|
||||
"paused": "{{title}} (En pause)",
|
||||
"downloading": "{{title}} ({{percentage}} - Téléchargement en cours…)",
|
||||
"downloading": "{{title}} ({{percentage}} - Téléchargement…)",
|
||||
"filter": "Filtrer la bibliothèque",
|
||||
"home": "Page d’accueil",
|
||||
"home": "Page d'accueil",
|
||||
"queued": "{{title}} (En file d'attente)",
|
||||
"game_has_no_executable": "Aucun exécutable sélectionné pour ce jeu",
|
||||
"sign_in": "Se connecter",
|
||||
"friends": "Amis",
|
||||
"need_help": "Besoin d'aide ?",
|
||||
"favorites": "Favoris"
|
||||
},
|
||||
"header": {
|
||||
"search": "Recherche",
|
||||
|
||||
"search": "Rechercher",
|
||||
"home": "Accueil",
|
||||
"catalogue": "Catalogue",
|
||||
"downloads": "Téléchargements",
|
||||
"search_results": "Résultats de la recherche",
|
||||
"settings": "Paramètres",
|
||||
"home": "Accueil"
|
||||
"version_available_install": "Version {{version}} disponible. Cliquez ici pour redémarrer et installer.",
|
||||
"version_available_download": "Version {{version}} disponible. Cliquez ici pour télécharger."
|
||||
},
|
||||
"bottom_panel": {
|
||||
"no_downloads_in_progress": "Aucun téléchargement en cours",
|
||||
"downloading_metadata": "Téléchargement des métadonnées de {{title}}…",
|
||||
"downloading": "Téléchargement de {{title}}… ({{percentage}} terminé) - Fin dans {{eta}} - {{speed}}"
|
||||
"downloading": "Téléchargement de {{title}}… ({{percentage}} terminé) - Fin dans {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Téléchargement de {{title}}… ({{percentage}} terminé) - Calcul du temps restant…",
|
||||
"checking_files": "Vérification des fichiers de {{title}}… ({{percentage}} terminé)",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "Installation terminée",
|
||||
"installation_complete_message": "Redistribuables communs installés avec succès"
|
||||
},
|
||||
"catalogue": {
|
||||
"search": "Filtrer…",
|
||||
"developers": "Développeurs",
|
||||
"genres": "Genres",
|
||||
"tags": "Tags",
|
||||
"publishers": "Éditeurs",
|
||||
"download_sources": "Sources de téléchargement",
|
||||
"result_count": "{{resultCount}} résultats",
|
||||
"filter_count": "{{filterCount}} disponibles",
|
||||
"clear_filters": "Effacer {{filterCount}} sélectionnés"
|
||||
},
|
||||
"game_details": {
|
||||
"open_download_options": "Ouvrir les options de téléchargement",
|
||||
@@ -37,36 +66,139 @@
|
||||
"download_options_one": "{{count}} option de téléchargement",
|
||||
"download_options_other": "{{count}} options de téléchargement",
|
||||
"updated_at": "Mis à jour le {{updated_at}}",
|
||||
"install": "Installer",
|
||||
"resume": "Reprendre",
|
||||
"pause": "Pause",
|
||||
"cancel": "Annuler",
|
||||
"remove": "Supprimer",
|
||||
"space_left_on_disk": "{{space}} restant sur le disque",
|
||||
"space_left_on_disk": "{{space}} restants sur le disque",
|
||||
"eta": "Fin dans {{eta}}",
|
||||
"downloading_metadata": "Téléchargement des métadonnées en cours…",
|
||||
"calculating_eta": "Calcul du temps restant…",
|
||||
"downloading_metadata": "Téléchargement des métadonnées…",
|
||||
"filter": "Filtrer les repacks",
|
||||
"requirements": "Configuration requise",
|
||||
"minimum": "Minimum",
|
||||
"recommended": "Recommandée",
|
||||
"paused": "En pause",
|
||||
"release_date": "Sorti le {{date}}",
|
||||
"publisher": "Édité par {{publisher}}",
|
||||
"publisher": "Publié par {{publisher}}",
|
||||
"hours": "heures",
|
||||
"minutes": "minutes",
|
||||
"amount_hours": "{{amount}} heures",
|
||||
"amount_minutes": "{{amount}} minutes",
|
||||
"accuracy": "{{accuracy}}% précision",
|
||||
"add_to_library": "Ajouter à la bibliothèque",
|
||||
"remove_from_library": "Supprimer de la bibliothèque",
|
||||
"remove_from_library": "Retirer de la bibliothèque",
|
||||
"no_downloads": "Aucun téléchargement disponible",
|
||||
"next_suggestion": "Suggestion suivante",
|
||||
"play_time": "Joué pour {{amount}}",
|
||||
"install": "Installer",
|
||||
"play": "Jouer",
|
||||
"play_time": "{{amount}} de temps de jeu",
|
||||
"last_time_played": "Dernière partie {{period}}",
|
||||
"not_played_yet": "Vous n'avez pas encore joué à {{title}}",
|
||||
"next_suggestion": "Suggestion suivante",
|
||||
"play": "Jouer",
|
||||
"deleting": "Suppression de l'installateur…",
|
||||
"close": "Fermer",
|
||||
"deleting": "Suppression du programme d'installation…",
|
||||
"playing_now": "Jeu en cours",
|
||||
"last_time_played": "Dernièrement joué {{period}}"
|
||||
"playing_now": "En cours de jeu",
|
||||
"change": "Changer",
|
||||
"repacks_modal_description": "Choisissez le repack que vous souhaitez télécharger",
|
||||
"select_folder_hint": "Pour changer le dossier par défaut, allez dans les <0>Paramètres</0>",
|
||||
"download_now": "Télécharger maintenant",
|
||||
"no_shop_details": "Impossible d'obtenir les détails du magasin.",
|
||||
"download_options": "Options de téléchargement",
|
||||
"download_path": "Emplacement de téléchargement",
|
||||
"previous_screenshot": "Capture précédente",
|
||||
"next_screenshot": "Capture suivante",
|
||||
"screenshot": "Capture d'écran {{number}}",
|
||||
"open_screenshot": "Ouvrir la capture {{number}}",
|
||||
"download_settings": "Paramètres de téléchargement",
|
||||
"downloader": "Téléchargeur",
|
||||
"select_executable": "Sélectionner",
|
||||
"no_executable_selected": "Aucun exécutable sélectionné",
|
||||
"open_folder": "Ouvrir le dossier",
|
||||
"open_download_location": "Voir les fichiers téléchargés",
|
||||
"create_shortcut": "Créer un raccourci sur le bureau",
|
||||
"clear": "Effacer",
|
||||
"remove_files": "Supprimer les fichiers",
|
||||
"remove_from_library_title": "Êtes-vous sûr ?",
|
||||
"remove_from_library_description": "Ceci supprimera {{game}} de votre bibliothèque",
|
||||
"options": "Options",
|
||||
"executable_section_title": "Exécutable",
|
||||
"executable_section_description": "Chemin du fichier lancé quand \"Jouer\" est cliqué",
|
||||
"downloads_section_title": "Téléchargements",
|
||||
"downloads_section_description": "Découvrez les mises à jour ou autres versions de ce jeu",
|
||||
"danger_zone_section_title": "Zone de danger",
|
||||
"danger_zone_section_description": "Supprimez ce jeu de votre bibliothèque ou les fichiers téléchargés par Hydra",
|
||||
"download_in_progress": "Téléchargement en cours",
|
||||
"download_paused": "Téléchargement en pause",
|
||||
"last_downloaded_option": "Dernière option téléchargée",
|
||||
"create_shortcut_success": "Raccourci créé avec succès",
|
||||
"create_shortcut_error": "Erreur lors de la création du raccourci",
|
||||
"nsfw_content_title": "Ce jeu contient du contenu inapproprié",
|
||||
"nsfw_content_description": "{{title}} contient du contenu pouvant ne pas convenir à tous les âges. Voulez-vous continuer ?",
|
||||
"allow_nsfw_content": "Continuer",
|
||||
"refuse_nsfw_content": "Retourner",
|
||||
"stats": "Statistiques",
|
||||
"download_count": "Téléchargements",
|
||||
"player_count": "Joueurs actifs",
|
||||
"download_error": "Cette option de téléchargement n'est pas disponible",
|
||||
"download": "Télécharger",
|
||||
"executable_path_in_use": "Exécutable déjà utilisé par \"{{game}}\"",
|
||||
"warning": "Attention :",
|
||||
"hydra_needs_to_remain_open": "Pour ce téléchargement, Hydra doit rester ouvert jusqu'à la fin. Si Hydra se ferme avant, la progression sera perdue.",
|
||||
"achievements": "Succès",
|
||||
"achievements_count": "Succès {{unlockedCount}}/{{achievementsCount}}",
|
||||
"cloud_save": "Sauvegarde Cloud",
|
||||
"cloud_save_description": "Sauvegardez vos progrès dans le cloud et continuez à jouer sur n'importe quel appareil",
|
||||
"backups": "Sauvegardes",
|
||||
"install_backup": "Restaurer",
|
||||
"delete_backup": "Supprimer",
|
||||
"create_backup": "Nouvelle sauvegarde",
|
||||
"last_backup_date": "Dernière sauvegarde le {{date}}",
|
||||
"no_backup_preview": "Aucune sauvegarde trouvée pour ce titre",
|
||||
"restoring_backup": "Restauration de la sauvegarde ({{progress}} terminé)…",
|
||||
"uploading_backup": "Envoi de la sauvegarde…",
|
||||
"no_backups": "Vous n'avez pas encore créé de sauvegarde pour ce jeu",
|
||||
"backup_uploaded": "Sauvegarde envoyée",
|
||||
"backup_deleted": "Sauvegarde supprimée",
|
||||
"backup_restored": "Sauvegarde restaurée",
|
||||
"see_all_achievements": "Voir tous les succès",
|
||||
"sign_in_to_see_achievements": "Connectez-vous pour voir les succès",
|
||||
"mapping_method_automatic": "Automatique",
|
||||
"mapping_method_manual": "Manuel",
|
||||
"mapping_method_label": "Méthode de mappage",
|
||||
"files_automatically_mapped": "Fichiers mappés automatiquement",
|
||||
"no_backups_created": "Aucune sauvegarde créée pour ce jeu",
|
||||
"manage_files": "Gérer les fichiers",
|
||||
"loading_save_preview": "Recherche de jeux sauvegardés…",
|
||||
"wine_prefix": "Wine Prefix",
|
||||
"wine_prefix_description": "Le préfixe Wine utilisé pour lancer ce jeu",
|
||||
"launch_options": "Options de lancement",
|
||||
"launch_options_description": "Les utilisateurs avancés peuvent modifier les options de lancement (fonction expérimentale)",
|
||||
"launch_options_placeholder": "Aucun paramètre spécifié",
|
||||
"no_download_option_info": "Pas d'information disponible",
|
||||
"backup_deletion_failed": "Échec de la suppression de la sauvegarde",
|
||||
"max_number_of_artifacts_reached": "Nombre maximal de sauvegardes atteint pour ce jeu",
|
||||
"achievements_not_sync": "Voir comment synchroniser vos succès",
|
||||
"manage_files_description": "Gérer les fichiers qui seront sauvegardés et restaurés",
|
||||
"select_folder": "Sélectionner un dossier",
|
||||
"backup_from": "Sauvegarde du {{date}}",
|
||||
"automatic_backup_from": "Sauvegarde automatique du {{date}}",
|
||||
"enable_automatic_cloud_sync": "Activer la synchronisation cloud automatique",
|
||||
"custom_backup_location_set": "Emplacement de sauvegarde personnalisé défini",
|
||||
"no_directory_selected": "Aucun dossier sélectionné",
|
||||
"no_write_permission": "Impossible de télécharger dans ce dossier. Cliquez ici pour en savoir plus.",
|
||||
"reset_achievements": "Réinitialiser les succès",
|
||||
"reset_achievements_description": "Ceci réinitialisera tous les succès pour {{game}}",
|
||||
"reset_achievements_title": "Êtes-vous sûr ?",
|
||||
"reset_achievements_success": "Succès réinitialisés avec succès",
|
||||
"reset_achievements_error": "Échec de la réinitialisation des succès",
|
||||
"download_error_gofile_quota_exceeded": "Vous avez dépassé votre quota mensuel Gofile. Attendez la remise à zéro du quota.",
|
||||
"download_error_real_debrid_account_not_authorized": "Votre compte Real-Debrid n'est pas autorisé à effectuer de nouveaux téléchargements. Veuillez vérifier les paramètres de votre compte et réessayer.",
|
||||
"download_error_not_cached_on_real_debrid": "Ce téléchargement n'est pas disponible sur Real-Debrid, et le suivi n'est pas encore disponible.",
|
||||
"download_error_not_cached_on_torbox": "Ce téléchargement n'est pas disponible sur TorBox, et le suivi n'est pas encore disponible.",
|
||||
"download_error_not_cached_on_hydra": "Ce téléchargement n'est pas disponible sur Nimbus.",
|
||||
"game_removed_from_favorites": "Jeu retiré des favoris",
|
||||
"game_added_to_favorites": "Jeu ajouté aux favoris",
|
||||
"automatically_extract_downloaded_files": "Extraire automatiquement les fichiers téléchargés"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Activer Hydra",
|
||||
@@ -83,45 +215,292 @@
|
||||
"paused": "En pause",
|
||||
"verifying": "Vérification en cours…",
|
||||
"completed": "Terminé",
|
||||
"removed": "Non téléchargé",
|
||||
"cancel": "Annuler",
|
||||
"filter": "Filtrer les jeux téléchargés",
|
||||
"remove": "Supprimer",
|
||||
"downloading_metadata": "Téléchargement des métadonnées en cours…",
|
||||
"delete": "Supprimer le programme d'installation",
|
||||
"delete_modal_description": "Cela supprimera tous les fichiers d'installation de votre ordinateur",
|
||||
"delete_modal_title": "Es-tu sûr?",
|
||||
"deleting": "Suppression du programme d'installation…",
|
||||
"install": "Installer"
|
||||
"delete": "Supprimer le programme d'installation",
|
||||
"delete_modal_title": "Êtes-vous sûr ?",
|
||||
"delete_modal_description": "Cela supprimera tous les fichiers d'installation de votre ordinateur",
|
||||
"install": "Installer",
|
||||
"download_in_progress": "En cours",
|
||||
"queued_downloads": "Téléchargements en attente",
|
||||
"downloads_completed": "Terminés",
|
||||
"queued": "En attente",
|
||||
"no_downloads_title": "Tellement vide",
|
||||
"no_downloads_description": "Vous n'avez encore rien téléchargé avec Hydra, mais il n'est jamais trop tard pour commencer.",
|
||||
"checking_files": "Vérification des fichiers…",
|
||||
"seeding": "Partage",
|
||||
"stop_seeding": "Arrêter le partage",
|
||||
"resume_seeding": "Reprendre le partage",
|
||||
"options": "Gérer",
|
||||
"extract": "Extraire les fichiers",
|
||||
"extracting": "Extraction des fichiers…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Chemin des téléchargements",
|
||||
"change": "Mettre à jour",
|
||||
"notifications": "Notifications",
|
||||
"enable_download_notifications": "Quand un téléchargement est terminé",
|
||||
"enable_repack_list_notifications": "Quand un nouveau repack est ajouté",
|
||||
"language": "Langue"
|
||||
"enable_download_notifications": "Lorsqu'un téléchargement est terminé",
|
||||
"enable_repack_list_notifications": "Lorsqu'un nouveau repack est ajouté",
|
||||
"real_debrid_api_token_label": "Jeton API Real-Debrid",
|
||||
"quit_app_instead_hiding": "Ne pas masquer Hydra à la fermeture",
|
||||
"launch_with_system": "Lancer Hydra au démarrage du système",
|
||||
"general": "Général",
|
||||
"behavior": "Comportement",
|
||||
"download_sources": "Sources de téléchargement",
|
||||
"language": "Langue",
|
||||
"api_token": "Jeton API",
|
||||
"enable_real_debrid": "Activer Real-Debrid",
|
||||
"real_debrid_description": "Real-Debrid est un téléchargeur sans restriction qui vous permet de télécharger rapidement des fichiers, uniquement limités par votre vitesse Internet.",
|
||||
"debrid_invalid_token": "Jeton API invalide",
|
||||
"debrid_api_token_hint": "Vous pouvez obtenir votre jeton API <0>ici</0>",
|
||||
"real_debrid_free_account_error": "Le compte \"{{username}}\" est un compte gratuit. Veuillez vous abonner à Real-Debrid",
|
||||
"debrid_linked_message": "Compte \"{{username}}\" lié",
|
||||
"save_changes": "Enregistrer les modifications",
|
||||
"changes_saved": "Modifications enregistrées avec succès",
|
||||
"download_sources_description": "Hydra récupère les liens de téléchargement à partir de ces sources. L'URL source doit être un lien direct vers un fichier .json contenant les liens de téléchargement.",
|
||||
"validate_download_source": "Valider",
|
||||
"remove_download_source": "Supprimer",
|
||||
"add_download_source": "Ajouter une source",
|
||||
"download_count_zero": "Aucune option de téléchargement",
|
||||
"download_count_one": "{{countFormatted}} option de téléchargement",
|
||||
"download_count_other": "{{countFormatted}} options de téléchargement",
|
||||
"download_source_url": "URL de la source",
|
||||
"add_download_source_description": "Insérez l'URL du fichier .json",
|
||||
"download_source_up_to_date": "À jour",
|
||||
"download_source_errored": "Erreur",
|
||||
"sync_download_sources": "Synchroniser les sources",
|
||||
"removed_download_source": "Source de téléchargement supprimée",
|
||||
"removed_download_sources": "Sources de téléchargement supprimées",
|
||||
"cancel_button_confirmation_delete_all_sources": "Non",
|
||||
"confirm_button_confirmation_delete_all_sources": "Oui, tout supprimer",
|
||||
"title_confirmation_delete_all_sources": "Supprimer toutes les sources de téléchargement",
|
||||
"description_confirmation_delete_all_sources": "Vous supprimerez toutes les sources de téléchargement",
|
||||
"button_delete_all_sources": "Tout supprimer",
|
||||
"added_download_source": "Source de téléchargement ajoutée",
|
||||
"download_sources_synced": "Toutes les sources de téléchargement sont synchronisées",
|
||||
"insert_valid_json_url": "Insérez une URL JSON valide",
|
||||
"found_download_option_zero": "Aucune option de téléchargement trouvée",
|
||||
"found_download_option_one": "{{countFormatted}} option trouvée",
|
||||
"found_download_option_other": "{{countFormatted}} options trouvées",
|
||||
"import": "Importer",
|
||||
"public": "Publique",
|
||||
"private": "Privé",
|
||||
"friends_only": "Amis uniquement",
|
||||
"privacy": "Confidentialité",
|
||||
"profile_visibility": "Visibilité du profil",
|
||||
"profile_visibility_description": "Choisissez qui peut voir votre profil et bibliothèque",
|
||||
"required_field": "Ce champ est requis",
|
||||
"source_already_exists": "Cette source a déjà été ajoutée",
|
||||
"must_be_valid_url": "La source doit être une URL valide",
|
||||
"blocked_users": "Utilisateurs bloqués",
|
||||
"user_unblocked": "Utilisateur débloqué",
|
||||
"enable_achievement_notifications": "Quand un succès est débloqué",
|
||||
"launch_minimized": "Lancer Hydra minimisé",
|
||||
"disable_nsfw_alert": "Désactiver l'alerte NSFW",
|
||||
"seed_after_download_complete": "Partager après téléchargement",
|
||||
"show_hidden_achievement_description": "Afficher la description des succès cachés avant de les débloquer",
|
||||
"account": "Compte",
|
||||
"no_users_blocked": "Aucun utilisateur bloqué",
|
||||
"subscription_active_until": "Votre Hydra Cloud est actif jusqu'au {{date}}",
|
||||
"manage_subscription": "Gérer l'abonnement",
|
||||
"update_email": "Modifier l'email",
|
||||
"update_password": "Modifier le mot de passe",
|
||||
"current_email": "Email actuel :",
|
||||
"no_email_account": "Vous n'avez pas encore défini d'email",
|
||||
"account_data_updated_successfully": "Informations du compte mises à jour",
|
||||
"renew_subscription": "Renouveler Hydra Cloud",
|
||||
"subscription_expired_at": "Votre abonnement a expiré le {{date}}",
|
||||
"no_subscription": "Profitez d'Hydra de la meilleure façon possible",
|
||||
"become_subscriber": "Devenir membre Hydra Cloud",
|
||||
"subscription_renew_cancelled": "Le renouvellement automatique est désactivé",
|
||||
"subscription_renews_on": "Votre abonnement sera renouvelé le {{date}}",
|
||||
"bill_sent_until": "Votre prochaine facture sera envoyée à cette date",
|
||||
"no_themes": "Vous n'avez pas encore de thèmes, cliquez ici pour créer votre premier chef-d'œuvre.",
|
||||
"editor_tab_code": "Code",
|
||||
"editor_tab_info": "Info",
|
||||
"editor_tab_save": "Enregistrer",
|
||||
"web_store": "Web store",
|
||||
"clear_themes": "Effacer",
|
||||
"create_theme": "Créer",
|
||||
"create_theme_modal_title": "Créer un thème personnalisé",
|
||||
"create_theme_modal_description": "Créer un nouveau thème pour personnaliser l'apparence d'Hydra",
|
||||
"theme_name": "Nom du thème",
|
||||
"insert_theme_name": "Entrez le nom du thème",
|
||||
"set_theme": "Activer le thème",
|
||||
"unset_theme": "Désactiver le thème",
|
||||
"delete_theme": "Supprimer le thème",
|
||||
"edit_theme": "Modifier le thème",
|
||||
"delete_all_themes": "Supprimer tous les thèmes",
|
||||
"delete_all_themes_description": "Cela supprimera tous vos thèmes personnalisés",
|
||||
"delete_theme_description": "Cela supprimera le thème {{theme}}",
|
||||
"cancel": "Annuler",
|
||||
"appearance": "Apparence",
|
||||
"enable_torbox": "Activer TorBox",
|
||||
"torbox_description": "TorBox est votre service de seedbox premium qui rivalise avec les meilleurs serveurs du marché.",
|
||||
"torbox_account_linked": "Compte TorBox lié",
|
||||
"create_real_debrid_account": "Cliquez ici pour créer un compte Real-Debrid",
|
||||
"create_torbox_account": "Cliquez ici pour créer un compte TorBox",
|
||||
"real_debrid_account_linked": "Compte Real-Debrid lié",
|
||||
"name_min_length": "Le nom du thème doit comporter au moins 3 caractères",
|
||||
"import_theme": "Importer un thème",
|
||||
"import_theme_description": "Vous allez importer {{theme}} du magasin de thèmes",
|
||||
"error_importing_theme": "Erreur lors de l'importation du thème",
|
||||
"theme_imported": "Thème importé avec succès",
|
||||
"enable_friend_request_notifications": "Lors de réception de demande d'ami",
|
||||
"enable_auto_install": "Télécharger les mises à jour automatiquement",
|
||||
"common_redist": "Redistribuables communs",
|
||||
"common_redist_description": "Certains jeux nécessitent les redistribuables communs. L'installation est recommandée.",
|
||||
"install_common_redist": "Installer",
|
||||
"installing_common_redist": "Installation…",
|
||||
"show_download_speed_in_megabytes": "Afficher la vitesse de téléchargement en mégaoctets par seconde"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Téléchargement terminé",
|
||||
"game_ready_to_install": "{{title}} est prêt à être installé",
|
||||
"repack_list_updated": "Liste de repacks mise à jour",
|
||||
"repack_count_one": "{{count}} repack ajouté",
|
||||
"repack_count_other": "{{count}} repacks ajoutés"
|
||||
"repack_count_other": "{{count}} repacks ajoutés",
|
||||
"new_update_available": "Version {{version}} disponible",
|
||||
"restart_to_install_update": "Redémarrez Hydra pour installer la mise à jour",
|
||||
"notification_achievement_unlocked_title": "Succès débloqué pour {{game}}",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} et {{count}} autre(s) débloqués",
|
||||
"new_friend_request_description": "Vous avez reçu une nouvelle demande d'ami",
|
||||
"new_friend_request_title": "Nouvelle demande d'ami",
|
||||
"extraction_complete": "Extraction terminée",
|
||||
"game_extracted": "{{title}} extrait avec succès"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Ouvrir Hydra",
|
||||
"quit": "Quitter"
|
||||
},
|
||||
"game_card": {
|
||||
"available_one": "Disponible",
|
||||
"available_other": "Disponibles",
|
||||
"no_downloads": "Aucun téléchargement disponible"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
"title": "Programmes non installés",
|
||||
"description": "Les exécutables Wine ou Lutris sont introuvables sur votre système",
|
||||
"instructions": "Vérifiez la bonne façon d'installer l'un d'entre eux sur votre distribution Linux afin que le jeu puisse fonctionner normalement",
|
||||
"title": "Programmes non installés"
|
||||
"instructions": "Vérifiez la bonne façon d'installer l'un d'entre eux sur votre distribution Linux afin que le jeu puisse fonctionner normalement"
|
||||
},
|
||||
"catalogue": {
|
||||
"next_page": "Page suivante",
|
||||
"previous_page": "Page précédente"
|
||||
"modal": {
|
||||
"close": "Fermer la fenêtre"
|
||||
},
|
||||
"forms": {
|
||||
"toggle_password_visibility": "Afficher/Masquer le mot de passe"
|
||||
},
|
||||
"user_profile": {
|
||||
"amount_hours": "{{amount}} heures",
|
||||
"amount_minutes": "{{amount}} minutes",
|
||||
"last_time_played": "Dernière partie {{period}}",
|
||||
"activity": "Activité récente",
|
||||
"library": "Bibliothèque",
|
||||
"total_play_time": "Temps de jeu total",
|
||||
"no_recent_activity_title": "Hmm… rien ici",
|
||||
"no_recent_activity_description": "Vous n'avez pas joué récemment. Il est temps d'y remédier !",
|
||||
"display_name": "Nom d'affichage",
|
||||
"saving": "Enregistrement",
|
||||
"save": "Enregistrer",
|
||||
"edit_profile": "Modifier le profil",
|
||||
"saved_successfully": "Enregistré avec succès",
|
||||
"try_again": "Veuillez réessayer",
|
||||
"sign_out_modal_title": "Êtes-vous sûr ?",
|
||||
"cancel": "Annuler",
|
||||
"successfully_signed_out": "Déconnecté avec succès",
|
||||
"sign_out": "Se déconnecter",
|
||||
"playing_for": "En jeu depuis {{amount}}",
|
||||
"sign_out_modal_text": "Votre bibliothèque est liée à ce compte. Si vous vous déconnectez, elle ne sera plus visible et la progression ne sera pas sauvegardée. Continuer ?",
|
||||
"add_friends": "Ajouter des amis",
|
||||
"add": "Ajouter",
|
||||
"friend_code": "Code ami",
|
||||
"see_profile": "Voir le profil",
|
||||
"sending": "Envoi",
|
||||
"friend_request_sent": "Demande d'ami envoyée",
|
||||
"friends": "Amis",
|
||||
"friends_list": "Liste d'amis",
|
||||
"user_not_found": "Utilisateur introuvable",
|
||||
"block_user": "Bloquer l'utilisateur",
|
||||
"add_friend": "Ajouter un ami",
|
||||
"request_sent": "Demande envoyée",
|
||||
"request_received": "Demande reçue",
|
||||
"accept_request": "Accepter la demande",
|
||||
"ignore_request": "Ignorer la demande",
|
||||
"cancel_request": "Annuler la demande",
|
||||
"undo_friendship": "Retirer de la liste d'amis",
|
||||
"request_accepted": "Demande acceptée",
|
||||
"user_blocked_successfully": "Utilisateur bloqué avec succès",
|
||||
"user_block_modal_text": "Vous allez bloquer {{displayName}}",
|
||||
"blocked_users": "Utilisateurs bloqués",
|
||||
"unblock": "Débloquer",
|
||||
"no_friends_added": "Vous n'avez pas encore d'amis",
|
||||
"pending": "En attente",
|
||||
"no_pending_invites": "Aucune invitation en attente",
|
||||
"no_blocked_users": "Aucun utilisateur bloqué",
|
||||
"friend_code_copied": "Code ami copié",
|
||||
"undo_friendship_modal_text": "Vous allez retirer {{displayName}} de vos amis",
|
||||
"privacy_hint": "Pour changer qui voit ceci, allez dans les <0>Paramètres</0>",
|
||||
"locked_profile": "Ce profil est privé",
|
||||
"image_process_failure": "Erreur lors du traitement de l'image",
|
||||
"required_field": "Ce champ est requis",
|
||||
"displayname_min_length": "Le nom doit contenir au moins 3 caractères",
|
||||
"displayname_max_length": "Le nom doit contenir au maximum 50 caractères",
|
||||
"report_profile": "Signaler ce profil",
|
||||
"report_reason": "Pourquoi signaler ce profil ?",
|
||||
"report_description": "Informations supplémentaires",
|
||||
"report_description_placeholder": "Infos en plus",
|
||||
"report": "Signaler",
|
||||
"report_reason_hate": "Discours de haine",
|
||||
"report_reason_sexual_content": "Contenu sexuel",
|
||||
"report_reason_violence": "Violence",
|
||||
"report_reason_spam": "Spam",
|
||||
"report_reason_other": "Autre",
|
||||
"profile_reported": "Profil signalé",
|
||||
"your_friend_code": "Votre code ami :",
|
||||
"upload_banner": "Télécharger une bannière",
|
||||
"uploading_banner": "Téléversement de la bannière…",
|
||||
"background_image_updated": "Image de fond mise à jour",
|
||||
"stats": "Statistiques",
|
||||
"achievements": "Succès",
|
||||
"games": "Jeux",
|
||||
"top_percentile": "Top {{percentile}}%",
|
||||
"ranking_updated_weekly": "Classement mis à jour chaque semaine",
|
||||
"playing": "En train de jouer à {{game}}",
|
||||
"achievements_unlocked": "Succès débloqués",
|
||||
"earned_points": "Points gagnés",
|
||||
"show_achievements_on_profile": "Afficher vos succès sur votre profil",
|
||||
"show_points_on_profile": "Afficher vos points sur votre profil"
|
||||
},
|
||||
"achievement": {
|
||||
"achievement_unlocked": "Succès débloqué",
|
||||
"user_achievements": "Succès de {{displayName}}",
|
||||
"your_achievements": "Vos succès",
|
||||
"unlocked_at": "Débloqué le : {{date}}",
|
||||
"subscription_needed": "Un abonnement Hydra Cloud est requis",
|
||||
"new_achievements_unlocked": "{{achievementCount}} nouveaux succès débloqués sur {{gameCount}} jeux",
|
||||
"achievement_progress": "{{unlockedCount}}/{{totalCount}} succès",
|
||||
"achievements_unlocked_for_game": "{{achievementCount}} nouveaux succès débloqués sur {{gameTitle}}",
|
||||
"hidden_achievement_tooltip": "Ce succès est caché",
|
||||
"achievement_earn_points": "Gagnez {{points}} points avec ce succès",
|
||||
"earned_points": "Points gagnés :",
|
||||
"available_points": "Points disponibles :",
|
||||
"how_to_earn_achievements_points": "Comment gagner des points de succès ?"
|
||||
},
|
||||
"hydra_cloud": {
|
||||
"subscription_tour_title": "Abonnement Hydra Cloud",
|
||||
"subscribe_now": "S'abonner",
|
||||
"cloud_saving": "Sauvegarde Cloud",
|
||||
"cloud_achievements": "Sauvegardez vos succès dans le cloud",
|
||||
"animated_profile_picture": "Photo de profil animée",
|
||||
"premium_support": "Support premium",
|
||||
"show_and_compare_achievements": "Montrez et comparez vos succès avec d'autres utilisateurs",
|
||||
"animated_profile_banner": "Bannière de profil animée",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "Vous avez découvert une fonctionnalité Hydra Cloud !",
|
||||
"learn_more": "En savoir plus",
|
||||
"debrid_description": "Téléchargez jusqu'à 4x plus vite avec Nimbus"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,6 +106,12 @@
|
||||
"change": "Frissítés",
|
||||
"notifications": "Értesítések",
|
||||
"enable_download_notifications": "Amikor egy letöltés befejeződik",
|
||||
"cancel_button_confirmation_delete_all_sources": "Nem",
|
||||
"confirm_button_confirmation_delete_all_sources": "Igen, törölj mindent",
|
||||
"description_confirmation_delete_all_sources": "Törölni fog minden letöltési forrást",
|
||||
"title_confirmation_delete_all_sources": "Törölje az összes letöltési forrást",
|
||||
"removed_download_sources": "Betűtípusok eltávolítva",
|
||||
"button_delete_all_sources": "Távolítsa el az összes letöltési forrást",
|
||||
"enable_repack_list_notifications": "Amikor egy új repack hozzáadásra kerül"
|
||||
},
|
||||
"notifications": {
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
"options": "Opsi",
|
||||
"executable_section_title": "Eksekusi",
|
||||
"executable_section_description": "Path file eksekusi saat \"Main\" diklik",
|
||||
"downloads_secion_title": "Unduhan",
|
||||
"downloads_section_title": "Unduhan",
|
||||
"downloads_section_description": "Cek update atau versi lain dari game ini",
|
||||
"danger_zone_section_title": "Zona Berbahaya",
|
||||
"danger_zone_section_description": "Hapus game ini dari perpustakaan kamu atau file yang diunduh oleh Hydra",
|
||||
@@ -175,6 +175,12 @@
|
||||
"download_sources_description": "Hydra akan mencari link unduhan dari sini. URL harus menuju file .json dengan link unduhan.",
|
||||
"validate_download_source": "Validasi",
|
||||
"remove_download_source": "Hapus",
|
||||
"cancel_button_confirmation_delete_all_sources": "TIDAK",
|
||||
"confirm_button_confirmation_delete_all_sources": "Ya, hapus semuanya",
|
||||
"description_confirmation_delete_all_sources": "Anda akan menghapus semua sumber unduhan",
|
||||
"title_confirmation_delete_all_sources": "Hapus semua sumber unduhan",
|
||||
"removed_download_sources": "Font dihapus",
|
||||
"button_delete_all_sources": "Hapus semua sumber unduhan",
|
||||
"add_download_source": "Tambahkan sumber",
|
||||
"download_count_zero": "Tidak ada unduhan dalam daftar",
|
||||
"download_count_one": "{{countFormatted}} unduhan dalam daftar",
|
||||
|
||||
@@ -25,6 +25,7 @@ import cs from "./cs/translation.json";
|
||||
import nb from "./nb/translation.json";
|
||||
import et from "./et/translation.json";
|
||||
import bg from "./bg/translation.json";
|
||||
import uz from "./uz/translation.json";
|
||||
|
||||
export default {
|
||||
"pt-BR": ptBR,
|
||||
@@ -54,4 +55,5 @@ export default {
|
||||
cs,
|
||||
nb,
|
||||
et,
|
||||
uz,
|
||||
};
|
||||
|
||||
@@ -120,6 +120,12 @@
|
||||
"general": "Generale",
|
||||
"behavior": "Comportamento",
|
||||
"enable_real_debrid": "Abilita Real Debrid",
|
||||
"cancel_button_confirmation_delete_all_sources": "NO",
|
||||
"confirm_button_confirmation_delete_all_sources": "Sì, cancella tutto",
|
||||
"description_confirmation_delete_all_sources": "Eliminerai tutte le fonti di download",
|
||||
"title_confirmation_delete_all_sources": "Elimina tutte le fonti di download",
|
||||
"removed_download_sources": "Fonti di download rimosse",
|
||||
"button_delete_all_sources": "Rimuovi tutte le fonti di download",
|
||||
"debrid_api_token_hint": "Puoi trovare la tua chiave API <0>here</0>",
|
||||
"save_changes": "Salva modifiche"
|
||||
},
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
"options": "Параметрлер",
|
||||
"executable_section_title": "Файл",
|
||||
"executable_section_description": "\"Ойнау\" батырмасын басқанда іске қосылатын файл жолы",
|
||||
"downloads_secion_title": "Жүктеулер",
|
||||
"downloads_section_title": "Жүктеулер",
|
||||
"downloads_section_description": "Ойынның жаңартулары немесе басқа нұсқалары бар-жоғын тексеру",
|
||||
"danger_zone_section_title": "Қауіпті аймақ",
|
||||
"danger_zone_section_description": "Осы ойынды кітапханаңыздан жою немесе Hydra жүктеген файлдарды жою",
|
||||
@@ -173,6 +173,12 @@
|
||||
"download_sources_description": "Hydra осы көздерден жүктеу сілтемелерін алады. URL-да жүктеу сілтемелері бар .json файлына тікелей сілтеме болуы керек.",
|
||||
"validate_download_source": "Тексеру",
|
||||
"remove_download_source": "Жою",
|
||||
"cancel_button_confirmation_delete_all_sources": "Жоқ",
|
||||
"confirm_button_confirmation_delete_all_sources": "Иә, бәрін жойыңыз",
|
||||
"description_confirmation_delete_all_sources": "Барлық жүктеу көздерін жоясыз",
|
||||
"title_confirmation_delete_all_sources": "Барлық жүктеу көздерін жойыңыз",
|
||||
"removed_download_sources": "Қаріптер жойылды",
|
||||
"button_delete_all_sources": "Барлық жүктеу көздерін жойыңыз",
|
||||
"add_download_source": "Жүктеу көзін қосу",
|
||||
"download_count_zero": "Жүктеулер тізімінде жоқ",
|
||||
"download_count_one": "{{countFormatted}} жүктеу тізімде",
|
||||
|
||||
@@ -111,6 +111,12 @@
|
||||
"launch_with_system": "컴퓨터가 시작되었을 때 Hydra 실행",
|
||||
"general": "일반",
|
||||
"behavior": "행동",
|
||||
"cancel_button_confirmation_delete_all_sources": "아니요",
|
||||
"confirm_button_confirmation_delete_all_sources": "네, 모두 삭제합니다",
|
||||
"description_confirmation_delete_all_sources": "모든 다운로드 소스를 삭제합니다.",
|
||||
"title_confirmation_delete_all_sources": "모든 다운로드 소스 삭제",
|
||||
"removed_download_sources": "제거된 글꼴",
|
||||
"button_delete_all_sources": "모든 다운로드 소스 제거",
|
||||
"enable_real_debrid": "Real-Debrid 활성화",
|
||||
"debrid_api_token_hint": "API 키를 <0>이곳</0>에서 얻으세요.",
|
||||
"save_changes": "변경 사항 저장"
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
"options": "Valgmuligheter",
|
||||
"executable_section_title": "Kjørbar fil",
|
||||
"executable_section_description": "Sti til filen som skal brukes når det trykkes på \"Spill\"",
|
||||
"downloads_secion_title": "Nedlastinger",
|
||||
"downloads_section_title": "Nedlastinger",
|
||||
"downloads_section_description": "Sjekk for oppdateringer eller andre versjoner af dette spillet",
|
||||
"danger_zone_section_title": "Faresonen",
|
||||
"danger_zone_section_description": "Fjern dette spillet fra biblioteket ditt eller filene som har blitt lastet ned av Hydra",
|
||||
@@ -201,6 +201,12 @@
|
||||
"download_source_errored": "Mislyktes",
|
||||
"sync_download_sources": "Synkroniser kilder",
|
||||
"removed_download_source": "Nedlastingskilde fjernet",
|
||||
"cancel_button_confirmation_delete_all_sources": "Ingen",
|
||||
"confirm_button_confirmation_delete_all_sources": "Ja, slett alt",
|
||||
"description_confirmation_delete_all_sources": "Du vil slette alle nedlastingskilder",
|
||||
"title_confirmation_delete_all_sources": "Slett alle nedlastingskilder",
|
||||
"removed_download_sources": "Fonter fjernet",
|
||||
"button_delete_all_sources": "Fjern alle nedlastingskilder",
|
||||
"added_download_source": "La til Nedlastingskilde",
|
||||
"download_sources_synced": "Alle nedlastingskilder er synkroniserte",
|
||||
"insert_valid_json_url": "Innsett en gyldig JSON url",
|
||||
|
||||
@@ -112,6 +112,12 @@
|
||||
"launch_with_system": "Start Hydra bij het opstarten van het systeem",
|
||||
"general": "Algemeen",
|
||||
"behavior": "Gedrag",
|
||||
"cancel_button_confirmation_delete_all_sources": "Nee",
|
||||
"confirm_button_confirmation_delete_all_sources": "Ja, verwijder alles",
|
||||
"description_confirmation_delete_all_sources": "Je verwijdert alle downloadbronnen",
|
||||
"title_confirmation_delete_all_sources": "Verwijder alle downloadbronnen",
|
||||
"removed_download_sources": "Downloadbronnen verwijderd",
|
||||
"button_delete_all_sources": "Verwijder alle downloadbronnen",
|
||||
"enable_real_debrid": "Enable Real-Debrid",
|
||||
"debrid_api_token_hint": "U kunt uw API-sleutel <0>hier</0> verkrijgen.",
|
||||
"save_changes": "Wijzigingen opslaan"
|
||||
|
||||
@@ -120,6 +120,11 @@
|
||||
"general": "Ogólne",
|
||||
"behavior": "Zachowania",
|
||||
"language": "Język",
|
||||
"cancel_button_confirmation_delete_all_sources": "NIE",
|
||||
"confirm_button_confirmation_delete_all_sources": "Tak, usuń wszystko",
|
||||
"description_confirmation_delete_all_sources": "Usuniesz wszystkie źródła pobierania",
|
||||
"title_confirmation_delete_all_sources": "Usuń wszystkie źródła pobierania",
|
||||
"button_delete_all_sources": "Usuń wszystkie źródła pobierania",
|
||||
"enable_real_debrid": "Włącz Real-Debrid",
|
||||
"debrid_api_token_hint": "Możesz uzyskać swój klucz API <0>tutaj</0>",
|
||||
"save_changes": "Zapisz zmiany"
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
},
|
||||
"header": {
|
||||
"search": "Buscar jogos",
|
||||
|
||||
"catalogue": "Catálogo",
|
||||
"downloads": "Downloads",
|
||||
"search_results": "Resultados da busca",
|
||||
@@ -45,7 +44,10 @@
|
||||
"downloading_metadata": "Baixando metadados de {{title}}…",
|
||||
"downloading": "Baixando {{title}}… ({{percentage}} concluído) - Conclusão {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Baixando {{title}}… ({{percentage}} concluído) - Calculando tempo restante…",
|
||||
"checking_files": "Verificando arquivos de {{title}}…"
|
||||
"checking_files": "Verificando arquivos de {{title}}…",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "Instalação concluída",
|
||||
"installation_complete_message": "Componentes recomendados instalados com sucesso"
|
||||
},
|
||||
"game_details": {
|
||||
"open_download_options": "Ver opções de download",
|
||||
@@ -109,7 +111,7 @@
|
||||
"remove_from_library_title": "Tem certeza?",
|
||||
"executable_section_title": "Executável",
|
||||
"executable_section_description": "O caminho do arquivo que será executado ao clicar em \"Jogar\"",
|
||||
"downloads_secion_title": "Downloads",
|
||||
"downloads_section_title": "Downloads",
|
||||
"downloads_section_description": "Confira atualizações ou versões diferentes para este mesmo título",
|
||||
"danger_zone_section_title": "Zona de perigo",
|
||||
"danger_zone_section_description": "Remova o jogo da sua biblioteca ou os arquivos que foram baixados pelo Hydra",
|
||||
@@ -180,10 +182,12 @@
|
||||
"no_write_permission": "Não é possível baixar nesse diretório. Clique aqui para saber mais.",
|
||||
"download_error_gofile_quota_exceeded": "Você excedeu sua cota mensal do Gofile. Por favor, aguarde a cota resetar.",
|
||||
"download_error_real_debrid_account_not_authorized": "Sua conta do Real-Debrid não está autorizada a fazer novos downloads. Por favor, verifique sua assinatura e tente novamente.",
|
||||
"download_error_not_cached_in_real_debrid": "Este download não está disponível no Real-Debrid e a verificação do status do download não está disponível.",
|
||||
"download_error_not_cached_in_torbox": "Este download não está disponível no Torbox e a verificação do status do download não está disponível.",
|
||||
"download_error_not_cached_on_real_debrid": "Este download não está disponível no Real-Debrid e a verificação do status do download não está disponível.",
|
||||
"download_error_not_cached_on_torbox": "Este download não está disponível no TorBox e a verificação do status do download não está disponível.",
|
||||
"download_error_not_cached_on_hydra": "Este download não está disponível no Nimbus.",
|
||||
"game_removed_from_favorites": "Jogo removido dos favoritos",
|
||||
"game_added_to_favorites": "Jogo adicionado aos favoritos"
|
||||
"game_added_to_favorites": "Jogo adicionado aos favoritos",
|
||||
"automatically_extract_downloaded_files": "Extrair automaticamente os arquivos baixados"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Ativação",
|
||||
@@ -220,7 +224,9 @@
|
||||
"seeding": "Semeando",
|
||||
"stop_seeding": "Parar de semear",
|
||||
"resume_seeding": "Semear",
|
||||
"options": "Gerenciar"
|
||||
"options": "Gerenciar",
|
||||
"extract": "Extrair arquivos",
|
||||
"extracting": "Extraindo arquivos…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Diretório dos downloads",
|
||||
@@ -257,6 +263,12 @@
|
||||
"download_source_errored": "Falhou",
|
||||
"sync_download_sources": "Sincronizar",
|
||||
"removed_download_source": "Fonte removida",
|
||||
"removed_download_sources": "Fontes removidas",
|
||||
"cancel_button_confirmation_delete_all_sources": "Não",
|
||||
"confirm_button_confirmation_delete_all_sources": "Sim, excluir tudo",
|
||||
"title_confirmation_delete_all_sources": "Remover todas as fontes de download",
|
||||
"description_confirmation_delete_all_sources": "Você irá remover todas as fontes de download. Deseja prosseguir?",
|
||||
"button_delete_all_sources": "Remover todas",
|
||||
"added_download_source": "Fonte adicionada",
|
||||
"download_sources_synced": "As fontes foram sincronizadas",
|
||||
"insert_valid_json_url": "Insira a url de um JSON válido",
|
||||
@@ -314,15 +326,25 @@
|
||||
"delete_theme_description": "Isso irá deletar o tema {{theme}}",
|
||||
"cancel": "Cancelar",
|
||||
"appearance": "Aparência",
|
||||
"enable_torbox": "Habilitar Torbox",
|
||||
"enable_torbox": "Habilitar TorBox",
|
||||
"torbox_description": "TorBox é o seu serviço de seedbox premium que rivaliza até com os melhores servidores do mercado.",
|
||||
"torbox_account_linked": "Conta do TorBox vinculada",
|
||||
"create_real_debrid_account": "Clique aqui se você ainda não tem uma conta do Real-Debrid",
|
||||
"create_torbox_account": "Clique aqui se você ainda não tem uma conta do TorBox",
|
||||
"real_debrid_account_linked": "Conta Real-Debrid associada",
|
||||
"name_min_length": "O nome do tema deve ter pelo menos 3 caracteres",
|
||||
"import_theme": "Importar tema",
|
||||
"import_theme_description": "Você irá importar {{theme}} da loja de temas",
|
||||
"error_importing_theme": "Erro ao importar tema",
|
||||
"theme_imported": "Tema importado com sucesso"
|
||||
"theme_imported": "Tema importado com sucesso",
|
||||
"enable_friend_request_notifications": "Quando um pedido de amizade é recebido",
|
||||
"enable_auto_install": "Baixar atualizações automaticamente",
|
||||
"common_redist": "Componentes recomendados",
|
||||
"common_redist_description": "Componentes recomendados são necessários para executar alguns jogos. A instalação deles é recomendada para evitar problemas.",
|
||||
"install_common_redist": "Instalar",
|
||||
"installing_common_redist": "Instalando…",
|
||||
"show_download_speed_in_megabytes": "Exibir taxas de download em megabytes por segundo",
|
||||
"extract_files_by_default": "Extrair arquivos automaticamente após o download"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Download concluído",
|
||||
@@ -331,13 +353,19 @@
|
||||
"repack_count_one": "{{count}} novo repack",
|
||||
"repack_count_other": "{{count}} novos repacks",
|
||||
"new_update_available": "Versão {{version}} disponível",
|
||||
"restart_to_install_update": "Reinicie o Hydra para instalar a nova versão"
|
||||
"restart_to_install_update": "Reinicie o Hydra para instalar a nova versão",
|
||||
"new_friend_request_title": "Novo pedido de amizade",
|
||||
"new_friend_request_description": "Você recebeu um novo pedido de amizade",
|
||||
"extraction_complete": "Extração concluída",
|
||||
"game_extracted": "{{title}} extraído com sucesso"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Abrir Hydra",
|
||||
"quit": "Fechar"
|
||||
},
|
||||
"game_card": {
|
||||
"available_one": "Disponível",
|
||||
"available_other": "Disponíveis",
|
||||
"no_downloads": "Sem downloads disponíveis"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
@@ -468,6 +496,7 @@
|
||||
"animated_profile_banner": "Banner animado no perfil",
|
||||
"cloud_saving": "Saves de jogos em nuvem",
|
||||
"hydra_cloud_feature_found": "Você descobriu uma funcionalidade Hydra Cloud!",
|
||||
"learn_more": "Saiba mais"
|
||||
"learn_more": "Saiba mais",
|
||||
"debrid_description": "Baixe até 4x mais rápido com Nimbus"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
},
|
||||
"header": {
|
||||
"search": "Procurar jogos",
|
||||
|
||||
"catalogue": "Catálogo",
|
||||
"downloads": "Transferências",
|
||||
"search_results": "Resultados da pesquisa",
|
||||
@@ -103,12 +102,12 @@
|
||||
"open_download_location": "Ver ficheiros transferidos",
|
||||
"create_shortcut": "Criar atalho no ambiente de trabalho",
|
||||
"remove_files": "Remover ficheiros",
|
||||
"options": "Gerir",
|
||||
"options": "Opções",
|
||||
"remove_from_library_description": "Isto vai remover {{game}} da tua biblioteca",
|
||||
"remove_from_library_title": "Tens a certeza?",
|
||||
"executable_section_title": "Executável",
|
||||
"executable_section_description": "O caminho do ficheiro que vai ser executado ao clicar em \"Jogar\"",
|
||||
"downloads_secion_title": "Transferências",
|
||||
"downloads_section_title": "Transferências",
|
||||
"downloads_section_description": "Encontra atualizações ou versões diferentes para este mesmo título",
|
||||
"danger_zone_section_title": "Zona de perigo",
|
||||
"danger_zone_section_description": "Remove o jogo da tua biblioteca ou os ficheiros que foram transferidos pelo Hydra",
|
||||
@@ -159,7 +158,27 @@
|
||||
"no_download_option_info": "Sem informações disponíveis",
|
||||
"backup_deletion_failed": "Falha ao apagar o backup",
|
||||
"max_number_of_artifacts_reached": "Número máximo de backups atingido para este jogo",
|
||||
"achievements_not_sync": "As tuas conquistas não estão sincronizadas"
|
||||
"achievements_not_sync": "As tuas conquistas não estão sincronizadas",
|
||||
"backup_from": "Backup de {{date}}",
|
||||
"automatic_backup_from": "Backup automático de {{date}}",
|
||||
"enable_automatic_cloud_sync": "Ativar sincronização automática na nuvem",
|
||||
"custom_backup_location_set": "Localização customizada selecionada",
|
||||
"select_folder": "Selecione a pasta",
|
||||
"manage_files_description": "Gerencie quais arquivos serão feitos backup",
|
||||
"clear": "Limpar",
|
||||
"no_directory_selected": "Nenhum diretório selecionado",
|
||||
"reset_achievements": "Repor conquistas",
|
||||
"reset_achievements_description": "Isto irá apagar todas as conquistas de {{game}}",
|
||||
"reset_achievements_title": "Tem certeza?",
|
||||
"reset_achievements_success": "Conquistas repostas com sucesso",
|
||||
"reset_achievements_error": "Falha ao repor conquistas",
|
||||
"no_write_permission": "Não é possível descarregar neste diretório. Clique aqui para saber mais.",
|
||||
"download_error_gofile_quota_exceeded": "Você excedeu sua cota mensal do Gofile. Por favor, aguarde o reset da cota.",
|
||||
"download_error_real_debrid_account_not_authorized": "A sua conta do Real-Debrid não está autorizada a fazer novos downloads. Por favor, verifique a sua assinatura e tente novamente.",
|
||||
"download_error_not_cached_on_real_debrid": "Este download não está disponível no Real-Debrid e a verificação do status do download não está disponível.",
|
||||
"download_error_not_cached_on_torbox": "Este download não está disponível no TorBox e a verificação do status do download não está disponível.",
|
||||
"game_removed_from_favorites": "Jogo removido dos favoritos",
|
||||
"game_added_to_favorites": "Jogo adicionado aos favoritos"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Ativação",
|
||||
@@ -192,7 +211,11 @@
|
||||
"queued": "Na fila",
|
||||
"no_downloads_title": "Nada por aqui…",
|
||||
"no_downloads_description": "Ainda não descarregaste nada pelo Hydra, mas nunca é tarde para começar.",
|
||||
"checking_files": "A verificar ficheiros…"
|
||||
"checking_files": "A verificar ficheiros…",
|
||||
"seeding": "A semear",
|
||||
"stop_seeding": "Parar de semear",
|
||||
"resume_seeding": "Semear",
|
||||
"options": "Opções"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Local das transferências",
|
||||
@@ -232,6 +255,12 @@
|
||||
"download_source_errored": "Falhou",
|
||||
"sync_download_sources": "Sincronizar",
|
||||
"removed_download_source": "Fonte removida",
|
||||
"cancel_button_confirmation_delete_all_sources": "Não",
|
||||
"confirm_button_confirmation_delete_all_sources": "Sim, apague tudo",
|
||||
"description_confirmation_delete_all_sources": "Irá remover todas as fontes de download",
|
||||
"title_confirmation_delete_all_sources": "Remover todas as fontes de download",
|
||||
"removed_download_sources": "Fontes de download removidas",
|
||||
"button_delete_all_sources": "Remover todas",
|
||||
"added_download_source": "Fonte adicionada",
|
||||
"download_sources_synced": "As fontes foram sincronizadas",
|
||||
"insert_valid_json_url": "Insere o URL de um JSON válido",
|
||||
@@ -250,7 +279,57 @@
|
||||
"must_be_valid_url": "A fonte deve ser um URL válido",
|
||||
"blocked_users": "Utilizadores bloqueados",
|
||||
"user_unblocked": "Utilizador desbloqueado",
|
||||
"enable_achievement_notifications": "Quando uma conquista é desbloqueada"
|
||||
"enable_achievement_notifications": "Quando uma conquista é desbloqueada",
|
||||
"enable_friend_request_notifications": "Quando um pedido de amizade é recebido",
|
||||
"launch_minimized": "Iniciar Hydra minimizado",
|
||||
"disable_nsfw_alert": "Desativar alertas NSFW",
|
||||
"seed_after_download_complete": "Semear após concluir o download",
|
||||
"show_hidden_achievement_description": "Mostrar descrição de conquistas ocultas antes de as desbloquear",
|
||||
"account": "Conta",
|
||||
"no_users_blocked": "Não tem utilizadores bloqueados",
|
||||
"subscription_active_until": "O teu Hydra Cloud está ativo até {{date}}",
|
||||
"manage_subscription": "Gerir subscrições",
|
||||
"update_email": "Atualizar email",
|
||||
"update_password": "Atualizar password",
|
||||
"current_email": "Email atual:",
|
||||
"no_email_account": "Ainda não adicionou nenhum email à sua conta",
|
||||
"account_data_updated_successfully": "Dados da conta atualizados com sucesso",
|
||||
"renew_subscription": "Renovar Hydra Cloud",
|
||||
"subscription_expired_at": "A sua subscrição expirou a {{date}}",
|
||||
"no_subscription": "Aproveite o Hydra da melhor forma possível",
|
||||
"become_subscriber": "Subscreva o Hydra Cloud",
|
||||
"subscription_renew_cancelled": "A renovação automática está desativada",
|
||||
"subscription_renews_on": "Sua assinatura renova dia {{date}}",
|
||||
"bill_sent_until": "A próxima cobrança será enviada até esse dia",
|
||||
"no_themes": "Parece que ainda não tem nenhum tema. Não se preocupe, clique aqui para criar a sua primeira obra de arte.",
|
||||
"editor_tab_code": "Código",
|
||||
"editor_tab_info": "Info",
|
||||
"editor_tab_save": "Guardar",
|
||||
"web_store": "Loja de temas",
|
||||
"clear_themes": "Limpar",
|
||||
"create_theme": "Criar",
|
||||
"create_theme_modal_title": "Criar tema customizado",
|
||||
"create_theme_modal_description": "Criar um novo tema para customizar a aparência do Hydra",
|
||||
"theme_name": "Nome",
|
||||
"insert_theme_name": "Insira o nome do tema",
|
||||
"set_theme": "Definir tema",
|
||||
"unset_theme": "Redefinir tema",
|
||||
"delete_theme": "Apagar tema",
|
||||
"edit_theme": "Editar tema",
|
||||
"delete_all_themes": "Apagar todos os temas",
|
||||
"delete_all_themes_description": "Isto irá apagar todos os seus temas",
|
||||
"delete_theme_description": "Isto irá apagar o tema {{theme}}",
|
||||
"cancel": "Cancelar",
|
||||
"appearance": "Aparência",
|
||||
"enable_torbox": "Ativar TorBox",
|
||||
"torbox_description": "TorBox é um serviço de seedbox premium sendo um dos melhores servidores do mercado.",
|
||||
"torbox_account_linked": "Conta do TorBox associada",
|
||||
"real_debrid_account_linked": "Conta Real-Debrid associada",
|
||||
"name_min_length": "O nome do tema deve ter pelo menos 3 caracteres",
|
||||
"import_theme": "Importar tema",
|
||||
"import_theme_description": "Irá importar {{theme}} da loja de temas",
|
||||
"error_importing_theme": "Erro ao importar tema",
|
||||
"theme_imported": "Tema importado com sucesso"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Transferência concluída",
|
||||
@@ -259,13 +338,17 @@
|
||||
"repack_count_one": "{{count}} novo repack",
|
||||
"repack_count_other": "{{count}} novos repacks",
|
||||
"new_update_available": "Versão {{version}} disponível",
|
||||
"restart_to_install_update": "Reinicia o Hydra para instalar a nova versão"
|
||||
"restart_to_install_update": "Reinicia o Hydra para instalar a nova versão",
|
||||
"new_friend_request_title": "Novo pedido de amizade",
|
||||
"new_friend_request_description": "Recebeste um novo pedido de amizade"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Abrir o Hydra",
|
||||
"quit": "Sair"
|
||||
},
|
||||
"game_card": {
|
||||
"available_one": "Disponível",
|
||||
"available_other": "Disponíveis",
|
||||
"no_downloads": "Sem downloads disponíveis"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
@@ -275,7 +358,16 @@
|
||||
},
|
||||
"catalogue": {
|
||||
"next_page": "Página seguinte",
|
||||
"previous_page": "Página anterior"
|
||||
"previous_page": "Página anterior",
|
||||
"search": "Filtrar…",
|
||||
"developers": "Desenvolvedores",
|
||||
"genres": "Géneros",
|
||||
"tags": "Marcadores",
|
||||
"publishers": "Distribuidoras",
|
||||
"download_sources": "Fontes de download",
|
||||
"result_count": "{{resultCount}} resultados",
|
||||
"filter_count": "{{filterCount}} disponíveis",
|
||||
"clear_filters": "Limpar {{filterCount}} selecionados"
|
||||
},
|
||||
"modal": {
|
||||
"close": "Botão de fechar"
|
||||
@@ -352,7 +444,17 @@
|
||||
"profile_reported": "Perfil denunciado",
|
||||
"your_friend_code": "O teu código de amigo:",
|
||||
"upload_banner": "Fazer upload do banner",
|
||||
"uploading_banner": "A fazer upload do banner…"
|
||||
"uploading_banner": "A fazer upload do banner…",
|
||||
"background_image_updated": "Imagem de fundo salva",
|
||||
"stats": "Estatísticas",
|
||||
"achievements": "conquistas",
|
||||
"games": "Jogos",
|
||||
"ranking_updated_weekly": "O ranking é atualizado semanalmente",
|
||||
"playing": "A jogar {{game}}",
|
||||
"achievements_unlocked": "Conquistas desbloqueadas",
|
||||
"earned_points": "Pontos ganhos",
|
||||
"show_achievements_on_profile": "Mostre as suas conquistas no perfil",
|
||||
"show_points_on_profile": "Mostre os seus pontos ganhos no perfil"
|
||||
},
|
||||
"achievement": {
|
||||
"achievement_unlocked": "Conquista desbloqueada",
|
||||
@@ -360,15 +462,25 @@
|
||||
"user_achievements": "Conquistas de {{displayName}}",
|
||||
"unlocked_at": "Desbloqueada em: {{date}}",
|
||||
"subscription_needed": "Precisas de uma subscrição Hydra Cloud para visualizar este conteúdo",
|
||||
"new_achievements_unlocked": "{{achievementCount}} novas conquistas de {{gameCount}} jogos"
|
||||
"new_achievements_unlocked": "{{achievementCount}} novas conquistas de {{gameCount}} jogos",
|
||||
"achievement_progress": "{{unlockedCount}}/{{totalCount}} conquistas",
|
||||
"achievements_unlocked_for_game": "Desbloqueadas {{achievementCount}} novas conquistas em {{gameTitle}}",
|
||||
"hidden_achievement_tooltip": "Esta é uma conquista oculta",
|
||||
"achievement_earn_points": "Ganhe {{points}} pontos com essa conquista",
|
||||
"earned_points": "Pontos ganhos:",
|
||||
"available_points": "Pontos disponíveis:",
|
||||
"how_to_earn_achievements_points": "Como desbloquear pontos nas conquistas?"
|
||||
},
|
||||
"hydra_cloud": {
|
||||
"subscription_tour_title": "Subscrição Hydra Cloud",
|
||||
"subscribe_now": "Subscreve agora",
|
||||
"cloud_achievements": "Gravação de conquistas na nuvem",
|
||||
"animated_profile_picture": "Fotos de perfil animadas",
|
||||
"premium_support": "Apoio Premium",
|
||||
"premium_support": "Suporte Premium",
|
||||
"show_and_compare_achievements": "Mostra e compara as tuas conquistas com as de outros utilizadores",
|
||||
"animated_profile_banner": "Banner animado no perfil"
|
||||
"animated_profile_banner": "Banner animado no perfil",
|
||||
"cloud_saving": "Progresso dos jogos na nuvem",
|
||||
"hydra_cloud_feature_found": "Descubriste uma funcionalidade Hydra Cloud!",
|
||||
"learn_more": "Saber mais"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,6 +127,12 @@
|
||||
"behavior": "Comportament",
|
||||
"language": "Limbă",
|
||||
"api_token": "Token API",
|
||||
"cancel_button_confirmation_delete_all_sources": "Nu",
|
||||
"confirm_button_confirmation_delete_all_sources": "Da, șterge totul",
|
||||
"description_confirmation_delete_all_sources": "Veți șterge toate sursele de descărcare",
|
||||
"title_confirmation_delete_all_sources": "Ștergeți toate sursele de descărcare",
|
||||
"removed_download_sources": "Sursele de descărcare au fost eliminate",
|
||||
"button_delete_all_sources": "Eliminați toate sursele de descărcare",
|
||||
"enable_real_debrid": "Activează Real-Debrid",
|
||||
"real_debrid_description": "Real-Debrid este un descărcător fără restricții care îți permite să descarci fișiere instantaneu și la cea mai bună viteză a internetului tău.",
|
||||
"debrid_invalid_token": "Token API invalid",
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"hot": "Сейчас популярно",
|
||||
"start_typing": "Начинаю вводить текст...",
|
||||
"weekly": "📅 Лучшие игры недели",
|
||||
"achievements": "🏆 Игры, в которых нужно победить"
|
||||
"achievements": "🏆 Игры с достижениями"
|
||||
},
|
||||
"sidebar": {
|
||||
"catalogue": "Каталог",
|
||||
@@ -36,7 +36,7 @@
|
||||
"downloads": "Загрузки",
|
||||
"search_results": "Результаты поиска",
|
||||
"settings": "Настройки",
|
||||
"version_available_install": "Доступна версия {{version}}. Нажмите здесь для перезапуска и установки.",
|
||||
"version_available_install": "Доступна версия {{version}}. Нажмите здесь для установки.",
|
||||
"version_available_download": "Доступна версия {{version}}. Нажмите здесь для загрузки."
|
||||
},
|
||||
"bottom_panel": {
|
||||
@@ -44,13 +44,16 @@
|
||||
"downloading_metadata": "Загрузка метаданных {{title}}…",
|
||||
"downloading": "Загрузка {{title}}… ({{percentage}} завершено) - Окончание {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Загрузка {{title}}… ({{percentage}} завершено) - Подсчёт оставшегося времени…",
|
||||
"checking_files": "Проверка файлов {{title}}… ({{percentage}} завершено)"
|
||||
"checking_files": "Проверка файлов {{title}}… ({{percentage}} завершено)",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "Установка завершена",
|
||||
"installation_complete_message": "Библиотеки успешно установлены"
|
||||
},
|
||||
"catalogue": {
|
||||
"search": "Фильтр…",
|
||||
"developers": "Разработчики",
|
||||
"genres": "Жанры",
|
||||
"tags": "Маркеры",
|
||||
"tags": "Теги",
|
||||
"publishers": "Издательства",
|
||||
"download_sources": "Источники загрузки",
|
||||
"result_count": "{{resultCount}} результатов",
|
||||
@@ -120,7 +123,7 @@
|
||||
"options": "Настройки",
|
||||
"executable_section_title": "Файл",
|
||||
"executable_section_description": "Путь к файлу, который будет запущен при нажатии на \"Play\"",
|
||||
"downloads_secion_title": "Загрузки",
|
||||
"downloads_section_title": "Загрузки",
|
||||
"downloads_section_description": "Проверить наличие обновлений или других версий игры",
|
||||
"danger_zone_section_title": "Опасная зона",
|
||||
"danger_zone_section_description": "Вы можете удалить эту игру из вашей библиотеки или файлы скачанные из Hydra",
|
||||
@@ -183,15 +186,18 @@
|
||||
"custom_backup_location_set": "Установлено настраиваемое местоположение резервной копии",
|
||||
"no_directory_selected": "Не выбран каталог",
|
||||
"no_write_permission": "Невозможно загрузить в эту директорию. Нажмите здесь, чтобы узнать больше.",
|
||||
"reset_achievements": "Сброс достижений",
|
||||
"reset_achievements_description": "Это сбросит все достижения для {{game}}",
|
||||
"reset_achievements_title": "Вы уверены?",
|
||||
"reset_achievements_success": "Достижения успешно сброшены",
|
||||
"reset_achievements_error": "Не удалось сбросить достижения",
|
||||
"download_error_gofile_quota_exceeded": "Вы превысили месячную квоту Gofile. Пожалуйста, подождите, пока квота не будет восстановлена.",
|
||||
"download_error_real_debrid_account_not_authorized": "Ваш аккаунт Real-Debrid не авторизован для осуществления новых загрузок. Пожалуйста, проверьте настройки учетной записи и повторите попытку.",
|
||||
"download_error_not_cached_in_real_debrid": "Эта загрузка недоступна на Real-Debrid, а опрос статуса загрузки с Real-Debrid пока недоступен.",
|
||||
"download_error_not_cached_in_torbox": "Эта загрузка недоступна на Torbox, и опросить статус загрузки с Torbox пока невозможно.",
|
||||
"download_error_not_cached_on_real_debrid": "Эта загрузка недоступна на Real-Debrid, и получение статуса загрузки с Real-Debrid пока недоступно.",
|
||||
"download_error_not_cached_on_torbox": "Эта загрузка недоступна на TorBox, и получить статус загрузки с TorBox пока невозможно.",
|
||||
"game_added_to_favorites": "Игра добавлена в избранное",
|
||||
"game_removed_from_favorites": "Игра удалена из избранного"
|
||||
"game_removed_from_favorites": "Игра удалена из избранного",
|
||||
"automatically_extract_downloaded_files": "Автоматическая распаковка загруженных файлов"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Активировать Hydra",
|
||||
@@ -228,7 +234,9 @@
|
||||
"seeding": "Раздача",
|
||||
"stop_seeding": "Остановить раздачу",
|
||||
"resume_seeding": "Продолжить раздачу",
|
||||
"options": "Управлять"
|
||||
"options": "Управлять",
|
||||
"extract": "Распаковать файлы",
|
||||
"extracting": "Распаковка файлов…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Путь загрузок",
|
||||
@@ -267,9 +275,15 @@
|
||||
"download_source_up_to_date": "Обновлён",
|
||||
"download_source_errored": "Ошибка",
|
||||
"sync_download_sources": "Обновить источники",
|
||||
"removed_download_source": "Источник загрузок удален",
|
||||
"added_download_source": "Источник загрузок добавлен",
|
||||
"download_sources_synced": "Все источники загрузок синхронизированы",
|
||||
"removed_download_source": "Источник удален",
|
||||
"cancel_button_confirmation_delete_all_sources": "Нет",
|
||||
"confirm_button_confirmation_delete_all_sources": "Да, удалить все",
|
||||
"description_confirmation_delete_all_sources": "Вы удалите все источники",
|
||||
"title_confirmation_delete_all_sources": "Удалить все источники",
|
||||
"removed_download_sources": "Источники удалены",
|
||||
"button_delete_all_sources": "Удалить все источники",
|
||||
"added_download_source": "Источник добавлен",
|
||||
"download_sources_synced": "Все источники обновлены",
|
||||
"insert_valid_json_url": "Вставьте действительный URL JSON-файла",
|
||||
"found_download_option_zero": "Не найдено вариантов загрузки",
|
||||
"found_download_option_one": "Найден {{countFormatted}} вариант загрузки",
|
||||
@@ -277,7 +291,7 @@
|
||||
"import": "Импортировать",
|
||||
"blocked_users": "Заблокированные пользователи",
|
||||
"friends_only": "Только для друзей",
|
||||
"must_be_valid_url": "Источник должен быть действительным URL-адресом.",
|
||||
"must_be_valid_url": "У источника должен быть правильный URL",
|
||||
"privacy": "Конфиденциальность",
|
||||
"private": "Частный",
|
||||
"profile_visibility": "Видимость профиля",
|
||||
@@ -324,15 +338,24 @@
|
||||
"delete_theme_description": "Это приведет к удалению темы {{theme}}",
|
||||
"cancel": "Отменить",
|
||||
"appearance": "Внешний вид",
|
||||
"enable_torbox": "Включить Torbox",
|
||||
"enable_torbox": "Включить TorBox",
|
||||
"torbox_description": "TorBox - это ваш премиум-сервис, конкурирующий даже с лучшими серверами на рынке.",
|
||||
"torbox_account_linked": "Аккаунт TorBox привязан",
|
||||
"real_debrid_account_linked": "Аккаунт Real-Debrid привязан",
|
||||
"create_real_debrid_account": "Нажмите здесь, если у вас еще нет аккаунта Real-Debrid",
|
||||
"create_torbox_account": "Нажмите здесь, если у вас еще нет учетной записи TorBox",
|
||||
"name_min_length": "Название темы должно содержать не менее 3 символов",
|
||||
"import_theme": "Импортировать тему",
|
||||
"import_theme_description": "Вы импортируете {{theme}} из магазина тем",
|
||||
"error_importing_theme": "Ошибка при импорте темы",
|
||||
"theme_imported": "Тема успешно импортирована"
|
||||
"theme_imported": "Тема успешно импортирована",
|
||||
"enable_friend_request_notifications": "При получении запроса на добавление в друзья",
|
||||
"enable_auto_install": "Загружать обновления автоматически",
|
||||
"common_redist": "Библиотеки",
|
||||
"common_redist_description": "Для запуска некоторых игр требуются библиотеки. Во избежание проблем рекомендуется установить их.",
|
||||
"install_common_redist": "Установить",
|
||||
"installing_common_redist": "Установка…",
|
||||
"show_download_speed_in_megabytes": "Показать скорость загрузки в мегабайтах в секунду"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Загрузка завершена",
|
||||
@@ -343,13 +366,19 @@
|
||||
"new_update_available": "Доступна новая версия {{version}}",
|
||||
"restart_to_install_update": "Перезапустите Hydra для установки обновления",
|
||||
"notification_achievement_unlocked_title": "Достижение разблокировано для {{game}}",
|
||||
"notification_achievement_unlocked_body": "были разблокированы {{achievement}} и другие {{count}}"
|
||||
"notification_achievement_unlocked_body": "были разблокированы {{achievement}} и другие {{count}}",
|
||||
"new_friend_request_title": "Новый запрос на добавление в друзья",
|
||||
"new_friend_request_description": "Вы получили новый запрос на добавление в друзья",
|
||||
"extraction_complete": "Распаковка завершена",
|
||||
"game_extracted": "{{title}} успешно распакован"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Открыть Hydra",
|
||||
"quit": "Выйти"
|
||||
},
|
||||
"game_card": {
|
||||
"available_one": "Доступный",
|
||||
"available_other": "Доступный",
|
||||
"no_downloads": "Нет доступных источников"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
@@ -434,11 +463,13 @@
|
||||
"uploading_banner": "Загрузка баннера...",
|
||||
"background_image_updated": "Фоновое изображение обновлено",
|
||||
"stats": "Статистика",
|
||||
"achievements": "Достижения",
|
||||
"games": "Игры",
|
||||
"top_percentile": "Топ {{percentile}}%",
|
||||
"ranking_updated_weekly": "Рейтинг обновляется еженедельно",
|
||||
"playing": "Играет в {{game}}",
|
||||
"achievements_unlocked": "Достижения разблокированы",
|
||||
"earned_points": "Заработано очков:",
|
||||
"show_achievements_on_profile": "Покажите свои достижения в профиле",
|
||||
"show_points_on_profile": "Показывать заработанные очки в своем профиле"
|
||||
},
|
||||
@@ -468,6 +499,7 @@
|
||||
"animated_profile_banner": "Анимированный баннер профиля",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "Вы только что открыли для себя функцию Hydra Cloud!",
|
||||
"learn_more": "Подробнее"
|
||||
"learn_more": "Подробнее",
|
||||
"debrid_description": "Скачивайте в 4 раза быстрее с Nimbus"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
"catalogue": "Katalog",
|
||||
"downloads": "İndirilenler",
|
||||
"settings": "Ayarlar",
|
||||
"my_library": "Kütüphanem",
|
||||
"my_library": "Kütüphane",
|
||||
"downloading_metadata": "{{title}} (Meta verileri indiriliyor…)",
|
||||
"paused": "{{title}} (Durduruldu)",
|
||||
"downloading": "{{title}} ({{percentage}} - İndiriliyor…)",
|
||||
@@ -36,15 +36,18 @@
|
||||
"downloads": "İndirilenler",
|
||||
"search_results": "Arama sonuçları",
|
||||
"settings": "Ayarlar",
|
||||
"version_available_install": "Sürüm {{version}} mevcut. Yüklemek ve yeniden başlatmak için buraya tıklayın.",
|
||||
"version_available_download": "Sürüm {{version}} mevcut. İndirmek için buraya tıklayın."
|
||||
"version_available_install": "{{version}} sürümü mevcut. Yüklemek ve yeniden başlatmak için buraya tıklayın.",
|
||||
"version_available_download": "{{version}} sürümü mevcut. İndirmek için buraya tıklayın."
|
||||
},
|
||||
"bottom_panel": {
|
||||
"no_downloads_in_progress": "Devam eden indirme yok",
|
||||
"downloading_metadata": "{{title}} meta verileri indiriliyor…",
|
||||
"downloading": "{{title}} indiriliyor… ({{percentage}} tamamlandı) - Tamamlama: {{eta}} - Hız: {{speed}}",
|
||||
"downloading": "{{title}} indiriliyor… ({{percentage}} tamamlandı) - Tamamlanma: {{eta}} - Hız: {{speed}}",
|
||||
"calculating_eta": "{{title}} indiriliyor… ({{percentage}} tamamlandı) - Kalan süre hesaplanıyor…",
|
||||
"checking_files": "{{title}} dosyaları kontrol ediliyor… ({{percentage}} tamamlandı)"
|
||||
"checking_files": "{{title}} dosyaları kontrol ediliyor… ({{percentage}} tamamlandı)",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "İndirme tamamlandı",
|
||||
"installation_complete_message": "Genel bağımlılıklar başarıyla yüklendi."
|
||||
},
|
||||
"catalogue": {
|
||||
"search": "Filtrele…",
|
||||
@@ -116,14 +119,14 @@
|
||||
"clear": "Temizle",
|
||||
"remove_files": "Dosyaları kaldır",
|
||||
"remove_from_library_title": "Emin misiniz?",
|
||||
"remove_from_library_description": "Bu işlem {{game}} oyununu kütüphanenizden kaldıracaktır",
|
||||
"remove_from_library_description": "Bu işlem sonrasında {{game}} oyunu kütüphanenizden kaldıracaktır",
|
||||
"options": "Seçenekler",
|
||||
"executable_section_title": "Çalıştırılabilir dosya",
|
||||
"executable_section_description": "\"Oyna\" tıklandığında çalıştırılacak dosyanın yolu",
|
||||
"downloads_secion_title": "İndirmeler",
|
||||
"executable_section_description": "\"Oyna\" butonuna tıklandığında çalıştırılacak dosyanın yolu",
|
||||
"downloads_section_title": "İndirmeler",
|
||||
"downloads_section_description": "Bu oyun için güncellemeleri veya diğer sürümleri kontrol edin",
|
||||
"danger_zone_section_title": "Tehlike bölgesi",
|
||||
"danger_zone_section_description": "Bu oyunu kütüphanenizden veya Hydra tarafından indirilen dosyaları kaldırın",
|
||||
"danger_zone_section_description": "Bu oyunu kütüphanenizden kaldırın veya Hydra tarafından indirilen dosyaları silin.",
|
||||
"download_in_progress": "İndirme devam ediyor",
|
||||
"download_paused": "İndirme durduruldu",
|
||||
"last_downloaded_option": "Son indirilen seçenek",
|
||||
@@ -141,8 +144,8 @@
|
||||
"executable_path_in_use": "\"{{game}}\" tarafından kullanılan çalıştırılabilir dosya",
|
||||
"warning": "Uyarı:",
|
||||
"hydra_needs_to_remain_open": "Bu indirmenin tamamlanması için Hydra açık kalmalıdır. Eğer Hydra kapanırsa, ilerleme kaydedilmez.",
|
||||
"achievements": "Başarılar",
|
||||
"achievements_count": "Başarılar {{unlockedCount}}/{{achievementsCount}}",
|
||||
"achievements": "Başarımlar",
|
||||
"achievements_count": "Başarımlar {{unlockedCount}}/{{achievementsCount}}",
|
||||
"cloud_save": "Bulut kaydı",
|
||||
"cloud_save_description": "İlerlemenizi buluta kaydedin ve herhangi bir cihazda oynamaya devam edin",
|
||||
"backups": "Yedekler",
|
||||
@@ -150,15 +153,15 @@
|
||||
"delete_backup": "Sil",
|
||||
"create_backup": "Yeni yedek oluştur",
|
||||
"last_backup_date": "{{date}} tarihindeki son yedek",
|
||||
"no_backup_preview": "Bu oyun için kayıtlı oyun bulunamadı",
|
||||
"no_backup_preview": "Bu oyun için bir kayıt dosyası bulunamadı",
|
||||
"restoring_backup": "Yedek geri yükleniyor ({{progress}} tamamlandı)…",
|
||||
"uploading_backup": "Yedek yükleniyor…",
|
||||
"no_backups": "Bu oyun için henüz bir yedek oluşturmadınız",
|
||||
"backup_uploaded": "Yedek yüklendi",
|
||||
"backup_deleted": "Yedek silindi",
|
||||
"backup_restored": "Yedek geri yüklendi",
|
||||
"see_all_achievements": "Tüm başarıları gör",
|
||||
"sign_in_to_see_achievements": "Başarıları görmek için giriş yapın",
|
||||
"see_all_achievements": "Tüm başarımları gör",
|
||||
"sign_in_to_see_achievements": "Başarımları görmek için oturum açın",
|
||||
"mapping_method_automatic": "Otomatik",
|
||||
"mapping_method_manual": "Manuel",
|
||||
"mapping_method_label": "Eşleme yöntemi",
|
||||
@@ -169,29 +172,39 @@
|
||||
"wine_prefix": "Wine Prefix",
|
||||
"wine_prefix_description": "Bu oyunu çalıştırmak için kullanılan Wine Prefix",
|
||||
"launch_options": "Başlatma Seçenekleri",
|
||||
"launch_options_description": "İleri düzey kullanıcılar, başlatma seçeneklerine değişiklikler girebilir (deneysel özellik)",
|
||||
"launch_options_description": "İleri düzey kullanıcılar, başlatma seçeneklerine parametreler girebilir (deneysel özellik)",
|
||||
"launch_options_placeholder": "Belirtilen bir parametre yok",
|
||||
"no_download_option_info": "Bilgi mevcut değil",
|
||||
"backup_deletion_failed": "Yedek silinemedi",
|
||||
"max_number_of_artifacts_reached": "Bu oyun için maksimum yedek sayısına ulaşıldı",
|
||||
"achievements_not_sync": "Başarılarınızı senkronize etmeyi öğrenin",
|
||||
"achievements_not_sync": "Başarımlarınızı senkronize etmeyi öğrenin",
|
||||
"manage_files_description": "Hangi dosyaların yedeklenip geri yükleneceğini yönetin",
|
||||
"select_folder": "Klasör seç",
|
||||
"backup_from": "{{date}} tarihinden yedek",
|
||||
"automatic_backup_from": "{{date}} tarihinden otomatik kayıt",
|
||||
"enable_automatic_cloud_sync": "Otomatik bulut kaydı senkronizasyonunu aktifleştir",
|
||||
"custom_backup_location_set": "Özel yedekleme konumu ayarlandı",
|
||||
"no_directory_selected": "Bir dizin seçilmedi",
|
||||
"no_write_permission": "Bu dizine indirme yapılamaz. Daha fazla bilgi için buraya tıklayın.",
|
||||
"reset_achievements": "Başarıları sıfırla",
|
||||
"reset_achievements_description": "Bu işlem {{game}} için tüm başarıları sıfırlar",
|
||||
"reset_achievements": "Başarımları sıfırla",
|
||||
"reset_achievements_description": "Bu işlem {{game}} için tüm başarımları sıfırlar",
|
||||
"reset_achievements_title": "Emin misiniz?",
|
||||
"reset_achievements_success": "Başarılar başarıyla sıfırlandı",
|
||||
"reset_achievements_error": "Başarılar sıfırlanamadı"
|
||||
"reset_achievements_success": "Başarımlar başarıyla sıfırlandı",
|
||||
"reset_achievements_error": "Başarımlar sıfırlanamadı",
|
||||
"download_error_gofile_quota_exceeded": "Gofile aylık kotanızı doldurdunuz. Kotanın yenilenmesini bekleyin.",
|
||||
"download_error_real_debrid_account_not_authorized": "Real-Debrid hesabınız yeni indirme işlemleri yapmak için yetkilendirilmemiş. Lütfen hesap ayarlarınızı kontrol edip tekrar deneyin.",
|
||||
"download_error_not_cached_on_real_debrid": "Bu indirme Real-Debrid üzerinde mevcut değil ve Real-Debrid'den indirme durumu henüz sorgulanamıyor.",
|
||||
"download_error_not_cached_on_torbox": "Bu indirme TorBox'ta mevcut değil ve TorBox'tan indirme durumu henüz sorgulanamıyor.",
|
||||
"download_error_not_cached_on_hydra": "Bu indirme Nimbus'ta mevcut değil.",
|
||||
"game_removed_from_favorites": "Oyun favorilerden silindi",
|
||||
"game_added_to_favorites": "Oyun favorilere eklendi",
|
||||
"automatically_extract_downloaded_files": "Yüklenmiş dosyaları otomatik olarak çıkart"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Hydra'yı Aktive Et",
|
||||
"installation_id": "Kurulum Kimliği:",
|
||||
"enter_activation_code": "Aktivasyon kodunuzu girin",
|
||||
"message": "Bunu nereden soracağınızı bilmiyorsanız, bu sizin için olmamalı.",
|
||||
"message": "Bunu nasıl edineceğini bilmiyorsan, buna sahip olmamalısın.",
|
||||
"activate": "Aktive Et",
|
||||
"loading": "Yükleniyor…"
|
||||
},
|
||||
@@ -206,7 +219,7 @@
|
||||
"cancel": "İptal Et",
|
||||
"filter": "İndirilen oyunları filtrele",
|
||||
"remove": "Kaldır",
|
||||
"downloading_metadata": "Metadata indiriliyor…",
|
||||
"downloading_metadata": "Meta verileri indiriliyor…",
|
||||
"deleting": "Yükleyici siliniyor…",
|
||||
"delete": "Yükleyiciyi kaldır",
|
||||
"delete_modal_title": "Emin misiniz?",
|
||||
@@ -222,7 +235,9 @@
|
||||
"seeding": "Paylaşılıyor",
|
||||
"stop_seeding": "Paylaşımı durdur",
|
||||
"resume_seeding": "Paylaşımı sürdür",
|
||||
"options": "Yönet"
|
||||
"options": "Yönet",
|
||||
"extract": "Dosyaları çıkart",
|
||||
"extracting": "Dosyalar çıkartılıyor…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "İndirme yolu",
|
||||
@@ -231,7 +246,7 @@
|
||||
"enable_download_notifications": "Bir indirme tamamlandığında",
|
||||
"enable_repack_list_notifications": "Yeni bir repack eklendiğinde",
|
||||
"real_debrid_api_token_label": "Real-Debrid API anahtarı",
|
||||
"quit_app_instead_hiding": "Hydra'yı kapatırken gizlemeyin",
|
||||
"quit_app_instead_hiding": "Hydra'yı kapatınca sistem tepsisine gitmesin",
|
||||
"launch_with_system": "Hydra'yı sistem başlatıldığında çalıştır",
|
||||
"general": "Genel",
|
||||
"behavior": "Davranış",
|
||||
@@ -250,6 +265,12 @@
|
||||
"validate_download_source": "Doğrula",
|
||||
"remove_download_source": "Kaldır",
|
||||
"add_download_source": "Kaynak ekle",
|
||||
"cancel_button_confirmation_delete_all_sources": "Hayır",
|
||||
"confirm_button_confirmation_delete_all_sources": "Evet, her şeyi sil",
|
||||
"description_confirmation_delete_all_sources": "Tüm indirme kaynaklarını sileceksiniz",
|
||||
"title_confirmation_delete_all_sources": "Tüm indirme kaynaklarını sil",
|
||||
"removed_download_sources": "Yazı tipleri kaldırıldı",
|
||||
"button_delete_all_sources": "Tüm indirme kaynaklarını kaldır",
|
||||
"download_count_zero": "İndirme seçeneği yok",
|
||||
"download_count_one": "{{countFormatted}} indirme seçeneği",
|
||||
"download_count_other": "{{countFormatted}} indirme seçeneği",
|
||||
@@ -277,11 +298,65 @@
|
||||
"must_be_valid_url": "Kaynak geçerli bir URL olmalıdır",
|
||||
"blocked_users": "Engellenen kullanıcılar",
|
||||
"user_unblocked": "Kullanıcının engeli kaldırıldı",
|
||||
"enable_achievement_notifications": "Bir başarı kilidi açıldığında",
|
||||
"enable_achievement_notifications": "Bir başarım kilidi açıldığında",
|
||||
"launch_minimized": "Hydra'yı küçültülmüş başlat",
|
||||
"disable_nsfw_alert": "NSFW uyarısını devre dışı bırak",
|
||||
"seed_after_download_complete": "İndirme tamamlandıktan sonra paylaş",
|
||||
"show_hidden_achievement_description": "Gizli başarı açıklamalarını kilitlenmeden önce göster"
|
||||
"show_hidden_achievement_description": "Gizli başarım açıklamalarını kilitlenmeden önce göster",
|
||||
"account": "Hesap",
|
||||
"no_users_blocked": "Hiçbir kullanıcıyı engellemediniz",
|
||||
"subscription_active_until": "Hydra Cloud'unuz {{date}} tarihine kadar aktif",
|
||||
"manage_subscription": "Aboneliği yönet",
|
||||
"update_email": "E-posta'yı güncelle",
|
||||
"update_password": "Şifreyi güncelle",
|
||||
"current_email": "Aktif e-posta'nız",
|
||||
"no_email_account": "Henüz ayarlanmış bir e-postanız yok",
|
||||
"account_data_updated_successfully": "Hesap bilgileri başarıyla güncellendi",
|
||||
"renew_subscription": "Hydra Cloud'u yenile",
|
||||
"subscription_expired_at": "Aboneliğiniz {{date}} tarihinde sona erdi",
|
||||
"no_subscription": "Hydra'yı en iyi şekilde deneyimleyin",
|
||||
"become_subscriber": "Hydra Cloud'lu ol",
|
||||
"subscription_renew_cancelled": "Otomatik yenileme devre dışı",
|
||||
"subscription_renews_on": "Aboneliğiniz {{date}} tarihinde yenilenecek",
|
||||
"bill_sent_until": "Bir sonraki faturanız bu tarihe kadar gönderilecek",
|
||||
"no_themes": "Henüz bir temanız yok gibi görünüyor, ama endişelenmeyin, ilk şaheserinizi oluşturmak için buraya tıklayın.",
|
||||
"editor_tab_code": "Kod",
|
||||
"editor_tab_info": "Bilgi",
|
||||
"editor_tab_save": "Kaydet",
|
||||
"web_store": "İnternet mağazası",
|
||||
"clear_themes": "Temizle",
|
||||
"create_theme": "Oluştur",
|
||||
"create_theme_modal_title": "Tema oluştur",
|
||||
"create_theme_modal_description": "Hydra'nın görünümünü özelleştirmek için yeni bir tema oluştur",
|
||||
"theme_name": "İsim",
|
||||
"insert_theme_name": "Tema ismini gir",
|
||||
"set_theme": "Temayı seç",
|
||||
"unset_theme": "Tema seçimini kaldır",
|
||||
"delete_theme": "Temayı sil",
|
||||
"edit_theme": "Temayı düzenle",
|
||||
"delete_all_themes": "Tüm temaları sil",
|
||||
"delete_all_themes_description": "Bu tüm temalarınızı silecektir",
|
||||
"delete_theme_description": "Bu {{theme}} temasını silecektir",
|
||||
"cancel": "İptal",
|
||||
"appearance": "Görünüm",
|
||||
"enable_torbox": "TorBox'u etkinleştir",
|
||||
"torbox_description": "TorBox, piyasadaki en iyi sunucularla bile rekabet edebilen premium seedbox hizmetinizdir.",
|
||||
"torbox_account_linked": "TorBox hesabı bağlandı",
|
||||
"create_real_debrid_account": "Henüz bir Real-Debrid hesabınız yoksa buraya tıklayın",
|
||||
"create_torbox_account": "Henüz bir TorBox hesabınız yoksa buraya tıklayın",
|
||||
"real_debrid_account_linked": "Real-Debrid hesabı bağlandı",
|
||||
"name_min_length": "Tema ismi en az 3 karakter uzunluğunda olmalıdır",
|
||||
"import_theme": "Temayı içe aktar",
|
||||
"import_theme_description": "{{theme}} teması, tema mağazasından içeri aktarılacak",
|
||||
"error_importing_theme": "Temayı içe aktarmada bir sorun oluştu",
|
||||
"theme_imported": "Tema başarıyla içe aktarıldı",
|
||||
"enable_friend_request_notifications": "Bir arkadaşlık isteği alındığında",
|
||||
"enable_auto_install": "Güncellemeleri otomatik yükle",
|
||||
"common_redist": "Ortak bağımlılıklar",
|
||||
"common_redist_description": "Bazı oyunların çalışabilmesi için genel bağımlılıklar gereklidir. Sorun yaşamamak için bunların yüklenmesi önerilir.",
|
||||
"install_common_redist": "Yükle",
|
||||
"installing_common_redist": "Yükleniyor…",
|
||||
"show_download_speed_in_megabytes": "İndirme hızını megabayt/saniye (MB/s) cinsinden göster"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "İndirme tamamlandı",
|
||||
@@ -289,17 +364,23 @@
|
||||
"repack_list_updated": "Repack listesi güncellendi",
|
||||
"repack_count_one": "{{count}} repack eklendi",
|
||||
"repack_count_other": "{{count}} repack eklendi",
|
||||
"new_update_available": "Sürüm {{version}} mevcut",
|
||||
"new_update_available": "{{version}} sürümü mevcut",
|
||||
"restart_to_install_update": "Güncellemeyi yüklemek için Hydra'yı yeniden başlatın",
|
||||
"notification_achievement_unlocked_title": "{{game}} için başarı kilidi açıldı",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} ve diğer {{count}} başarılar açıldı"
|
||||
"notification_achievement_unlocked_title": "{{game}} için başarım kilidi açıldı",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} ve diğer {{count}} başarım açıldı",
|
||||
"new_friend_request_description": "Yeni bir arkadaşlık isteğin var",
|
||||
"new_friend_request_title": "Yeni arkadaşlık isteği",
|
||||
"extraction_complete": "Çıkartma tamamlandı",
|
||||
"game_extracted": "{{title}} başarıyla çıkartıldı"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Hydra'yı Aç",
|
||||
"quit": "Çık"
|
||||
},
|
||||
"game_card": {
|
||||
"no_downloads": "İndirilebilir içerik bulunmuyor"
|
||||
"no_downloads": "İndirilebilir içerik bulunmuyor",
|
||||
"available_one": "Mevcut",
|
||||
"available_other": "Mevcut"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
"title": "Programlar Yüklü Değil",
|
||||
@@ -332,7 +413,7 @@
|
||||
"successfully_signed_out": "Başarıyla çıkış yapıldı",
|
||||
"sign_out": "Çıkış yap",
|
||||
"playing_for": "{{amount}} oynanıyor",
|
||||
"sign_out_modal_text": "Kütüphaneniz mevcut hesabınıza bağlı. Çıkış yaptığınızda kütüphaneniz görünür olmayacak ve herhangi bir ilerleme kaydedilmeyecek. Çıkışa devam etmek istiyor musunuz?",
|
||||
"sign_out_modal_text": "Kütüphaneniz mevcut hesabınıza bağlı. Oturumu kapattığınızda kütüphaneniz görünür olmayacak ve herhangi bir ilerleme kaydedilmeyecek. Oturumu kapatmaya devam etmek istiyor musunuz?",
|
||||
"add_friends": "Arkadaş Ekle",
|
||||
"add": "Ekle",
|
||||
"friend_code": "Arkadaş kodu",
|
||||
@@ -383,42 +464,43 @@
|
||||
"uploading_banner": "Afiş yükleniyor…",
|
||||
"background_image_updated": "Arka plan görüntüsü güncellendi",
|
||||
"stats": "İstatistikler",
|
||||
"achievements": "Başarılar",
|
||||
"achievements": "Başarımlar",
|
||||
"games": "Oyunlar",
|
||||
"top_percentile": "En üst {{percentile}}%",
|
||||
"ranking_updated_weekly": "Sıralama haftalık olarak güncellenir",
|
||||
"playing": "{{game}} oynanıyor",
|
||||
"achievements_unlocked": "Başarılar açıldı",
|
||||
"achievements_unlocked": "Başarımlar açıldı",
|
||||
"earned_points": "Kazanılan puanlar",
|
||||
"show_achievements_on_profile": "Başarılarınızı profilinizde gösterin",
|
||||
"show_achievements_on_profile": "Başarımlarınızı profilinizde gösterin",
|
||||
"show_points_on_profile": "Kazandığınız puanları profilinizde gösterin"
|
||||
},
|
||||
"achievement": {
|
||||
"achievement_unlocked": "Başarı açıldı",
|
||||
"user_achievements": "{{displayName}}'in Başarıları",
|
||||
"your_achievements": "Başarılarınız",
|
||||
"achievement_unlocked": "Başarım açıldı",
|
||||
"user_achievements": "{{displayName}} oyununun Başarımları",
|
||||
"your_achievements": "Başarımlarınız",
|
||||
"unlocked_at": "Açılma zamanı: {{date}}",
|
||||
"subscription_needed": "Bu içeriği görmek için bir Hydra Cloud aboneliği gereklidir",
|
||||
"new_achievements_unlocked": "{{gameCount}} oyundan {{achievementCount}} yeni başarı açıldı",
|
||||
"achievement_progress": "{{unlockedCount}}/{{totalCount}} başarı",
|
||||
"achievements_unlocked_for_game": "{{gameTitle}} oyunu için {{achievementCount}} yeni başarı açıldı",
|
||||
"hidden_achievement_tooltip": "Bu gizli bir başarıdır",
|
||||
"achievement_earn_points": "Bu başarı ile {{points}} puan kazanın",
|
||||
"new_achievements_unlocked": "{{gameCount}} oyundan {{achievementCount}} yeni başarım açıldı",
|
||||
"achievement_progress": "{{unlockedCount}}/{{totalCount}} başarım",
|
||||
"achievements_unlocked_for_game": "{{gameTitle}} oyunu için {{achievementCount}} yeni başarım açıldı",
|
||||
"hidden_achievement_tooltip": "Bu gizli bir başarımdır",
|
||||
"achievement_earn_points": "Bu başarım ile {{points}} puan kazanın",
|
||||
"earned_points": "Kazanılan puanlar:",
|
||||
"available_points": "Mevcut puanlar:",
|
||||
"how_to_earn_achievements_points": "Başarı puanları nasıl kazanılır?"
|
||||
"how_to_earn_achievements_points": "Başarım puanları nasıl kazanılır?"
|
||||
},
|
||||
"hydra_cloud": {
|
||||
"subscription_tour_title": "Hydra Cloud Aboneliği",
|
||||
"subscribe_now": "Şimdi abone olun",
|
||||
"cloud_saving": "Bulut kaydetme",
|
||||
"cloud_achievements": "Başarılarınızı buluta kaydedin",
|
||||
"cloud_achievements": "Başarımlarınızı buluta kaydedin",
|
||||
"animated_profile_picture": "Animasyonlu profil resimleri",
|
||||
"premium_support": "Premium Destek",
|
||||
"show_and_compare_achievements": "Başarılarınızı diğer kullanıcılarla karşılaştırın ve gösterin",
|
||||
"show_and_compare_achievements": "Başarımlarınızı diğer kullanıcılarla karşılaştırın ve gösterin",
|
||||
"animated_profile_banner": "Animasyonlu profil afişi",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "Bir Hydra Cloud özelliği keşfettiniz!",
|
||||
"learn_more": "Daha Fazla Bilgi Edinin"
|
||||
"learn_more": "Daha Fazla Bilgi Edinin",
|
||||
"debrid_description": "Nimbus ile 4 kata kadar daha hızlı indirin"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,11 @@
|
||||
"home": {
|
||||
"featured": "Рекомендоване",
|
||||
"surprise_me": "Здивуй мене",
|
||||
"no_results": "Результатів не знайдено"
|
||||
"no_results": "Результатів не знайдено",
|
||||
"start_typing": "Почніть набирати текст для пошуку...",
|
||||
"hot": "Гарячі новинки",
|
||||
"weekly": "📅 Найкращі ігри цього тижня",
|
||||
"achievements": "🏆 Ігри на проходження"
|
||||
},
|
||||
"sidebar": {
|
||||
"catalogue": "Каталог",
|
||||
@@ -21,11 +25,12 @@
|
||||
"game_has_no_executable": "Не було вибрано файл для запуску гри",
|
||||
"queued": "{{title}} в черзі",
|
||||
"sign_in": "Увійти",
|
||||
"favorites": "Улюблені"
|
||||
"favorites": "Улюблені",
|
||||
"friends": "Друзі",
|
||||
"need_help": "Потрібна допомога?"
|
||||
},
|
||||
"header": {
|
||||
"search": "Пошук",
|
||||
|
||||
"home": "Головна",
|
||||
"catalogue": "Каталог",
|
||||
"downloads": "Завантаження",
|
||||
@@ -38,11 +43,22 @@
|
||||
"no_downloads_in_progress": "Немає активних завантажень",
|
||||
"downloading_metadata": "Завантаження метаданих {{title}}…",
|
||||
"downloading": "Завантаження {{title}}… ({{percentage}} завершено) - Закінчення {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Завантаження {{title}}… ({{percentage}} завершено) - Обчислення залишкового часу…"
|
||||
"calculating_eta": "Завантаження {{title}}… ({{percentage}} завершено) - Обчислення залишкового часу…",
|
||||
"checking_files": "Перевірка файлів {{title}} ({{percentage}} виповнено)",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "Встановлення завершено",
|
||||
"installation_complete_message": "Загальні розповсюджувані файли успішно встановлено"
|
||||
},
|
||||
"catalogue": {
|
||||
"next_page": "Наступна сторінка",
|
||||
"previous_page": "Попередня сторінка"
|
||||
"search": "Фільтрувати…",
|
||||
"developers": "Розробники",
|
||||
"genres": "Жанри",
|
||||
"tags": "Теги",
|
||||
"publishers": "Видавці",
|
||||
"download_sources": "Джерела",
|
||||
"result_count": "{{resultCount}} результатів",
|
||||
"filter_count": "{{filterCount}} доступно",
|
||||
"clear_filters": "Очистити {{filterCount}} вибрані"
|
||||
},
|
||||
"game_details": {
|
||||
"open_download_options": "Відкрити варіанти завантаження",
|
||||
@@ -86,18 +102,31 @@
|
||||
"download_now": "Завантажити зараз",
|
||||
"calculating_eta": "Обчислення залишкового часу…",
|
||||
"create_shortcut": "Створити ярлик на робочому столі",
|
||||
"create_shortcut_success": "Ярлик успішно створено",
|
||||
"create_shortcut_error": "Виникла помилка під час створення ярлику",
|
||||
"nsfw_content_title": "Ця гра містить неприйнятний контент",
|
||||
"nsfw_content_description": "{{title}} містить вміст, який може бути непридатним для всіх вікових груп. Ви впевнені, що хочете продовжити?",
|
||||
"allow_nsfw_content": "Продовжити",
|
||||
"refuse_nsfw_content": "Вернутись назад",
|
||||
"stats": "Статистика",
|
||||
"clear": "Очистити",
|
||||
"danger_zone_section_description": "Видалити цю гру з вашої бібліотеки або файли скачані Hydra",
|
||||
"danger_zone_section_title": "Небезпечна зона",
|
||||
"player_count": "Грають зараз",
|
||||
"download": "Завантажити",
|
||||
"download_count": "Завантажень",
|
||||
"download_in_progress": "Триває завантаження.",
|
||||
"download_options": "Варіантів завантаження",
|
||||
"download_path": "Тека для завантажень",
|
||||
"download_paused": "Завантаження призупинено",
|
||||
"download_settings": "Налаштування завантаження",
|
||||
"download_error": "Цей варіант завантаження не доступний",
|
||||
"downloader": "Завантажувач",
|
||||
"downloads_secion_title": "Завантаження",
|
||||
"downloads_section_title": "Завантаження",
|
||||
"downloads_section_description": "Перевірити наявність оновлень або інших версій гри",
|
||||
"executable_section_description": "Шлях до файлу, який буде запущений при натисканні на кнопку \"Play\"",
|
||||
"executable_section_title": "Файл",
|
||||
"executable_path_in_use": "Виконуваний файл наразі використовується \"{{game}}\"",
|
||||
"last_downloaded_option": "Останній варіант завантаження",
|
||||
"next_screenshot": "Наступний скрішнот",
|
||||
"no_executable_selected": "Файл не вибрано",
|
||||
@@ -112,7 +141,64 @@
|
||||
"remove_from_library_description": "{{game}} буде видалено з вашої бібліотеки",
|
||||
"remove_from_library_title": "Ви впевнені?",
|
||||
"screenshot": "Скріншот",
|
||||
"select_executable": "Обрати"
|
||||
"select_executable": "Обрати",
|
||||
"warning": "Попередження:",
|
||||
"hydra_needs_to_remain_open": "Hydra повинна залишатись відкритою до завершення завантаження. Якщо Hydra закриється до завершення, ви втратите прогрес.",
|
||||
"achievements": "Досягнення",
|
||||
"achievements_count": "Досягнень {{unlockedCount}}/{{achievementsCount}}",
|
||||
"cloud_save": "Хмарне Збереження",
|
||||
"cloud_save_description": "Збережіть свій ігровий процесс у хмарі та продовжіть грати з любого пристрою",
|
||||
"backups": "Резервні копії",
|
||||
"install_backup": "Встановити",
|
||||
"delete_backup": "Видалити",
|
||||
"create_backup": "Нова резервна копія",
|
||||
"last_backup_date": "Остання резервна копія {{date}}",
|
||||
"no_backup_preview": "Не було знайдено жодних збережень для цієї гри.",
|
||||
"restoring_backup": "Відновлення резервної копії ({{progress}} виконано)…",
|
||||
"uploading_backup": "Вивантаження резервної копії…",
|
||||
"no_backups": "Ви ще не створили жодних резеврних копій для цієї гри",
|
||||
"backup_uploaded": "Резервна копія вивантажена",
|
||||
"backup_deleted": "Резервна копія видалена",
|
||||
"backup_restored": "Резервна копія відновлена",
|
||||
"see_all_achievements": "Переглянути всі досягнення",
|
||||
"sign_in_to_see_achievements": "Увійдіть, що б переглянути усі досягнення",
|
||||
"mapping_method_automatic": "Автоматичний",
|
||||
"mapping_method_manual": "Ручний",
|
||||
"mapping_method_label": "Спосіб визначення файлів для резервного копіювання",
|
||||
"files_automatically_mapped": "Hydra автоматично вибере файли для резервного копіювання",
|
||||
"no_backups_created": "Для цієї гри не було створено резервних копій",
|
||||
"manage_files": "Керувати файлами",
|
||||
"loading_save_preview": "Виконується пошук збережень гри...",
|
||||
"wine_prefix": "Префікс Wine",
|
||||
"wine_prefix_description": "Префікс Wine використовувався для запуску цієї гри",
|
||||
"launch_options": "Параметри загрузки",
|
||||
"launch_options_description": "Досвідчені користувачі можуть ввести власні модифікації до параметрів запуску (експериментальна функція).",
|
||||
"launch_options_placeholder": "Параметри не вказано",
|
||||
"no_download_option_info": "Немає інформації",
|
||||
"backup_deletion_failed": "Виникла помилка при видалені резервної копії",
|
||||
"max_number_of_artifacts_reached": "Максимальну кількість резервних копій для цієї гри досягнуто",
|
||||
"achievements_not_sync": "Дізнайтеся, як синхронізувати свої досягнення",
|
||||
"manage_files_description": "Керуйте файлами, які буде збережено та відновлено",
|
||||
"select_folder": "Обрати папку",
|
||||
"backup_from": "Резервна копія від {{date}}",
|
||||
"automatic_backup_from": "Автоматична резервна копія від {{date}}",
|
||||
"enable_automatic_cloud_sync": "Увімкнути автоматичну синхронізацію з хмарою",
|
||||
"custom_backup_location_set": "Встановлено користувацьке місце збереження резервної копії",
|
||||
"no_directory_selected": "Папку не було вибрано",
|
||||
"no_write_permission": "Неможливо завантажити у дану папку. Натисніть сюда щоб дізнатись більше.",
|
||||
"reset_achievements": "Скинути досягнення",
|
||||
"reset_achievements_description": "Це скине всі досягнення для {{game}}",
|
||||
"reset_achievements_title": "Ви впевнені?",
|
||||
"reset_achievements_success": "Досягнення успішно скинуто",
|
||||
"reset_achievements_error": "Не вдалося скинути досягнення",
|
||||
"download_error_gofile_quota_exceeded": "Ви перевищили місячну квоту Gofile. Будь ласка, дочекайтесь, поки квота скинеться.",
|
||||
"download_error_real_debrid_account_not_authorized": "Ваш обліковий запис Real-Debrid не авторизований для нових завантажень. Будь ласка, перевірте налаштування облікового запису та спробуйте ще раз.",
|
||||
"download_error_not_cached_on_real_debrid": "Це завантаження недоступне на Real-Debrid, і перевірка статусу завантаження з Real-Debrid наразі недоступна.",
|
||||
"download_error_not_cached_on_torbox": "Це завантаження недоступне на TorBox, і перевірка статусу завантаження з TorBox наразі недоступна.",
|
||||
"download_error_not_cached_on_hydra": "Це завантаження недоступне через Nimbus.",
|
||||
"game_removed_from_favorites": "Гра видалена з улюбленних",
|
||||
"game_added_to_favorites": "Гра була добавлена у улюблені",
|
||||
"automatically_extract_downloaded_files": "Автоматично розархівувати завантаженні файли"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Активувати Hydra",
|
||||
@@ -144,7 +230,14 @@
|
||||
"no_downloads_title": "Тут так пусто...",
|
||||
"queued": "В черзі",
|
||||
"queued_downloads": "Завантаження в черзі",
|
||||
"removed": "Не завантажено"
|
||||
"removed": "Не завантажено",
|
||||
"checking_files": "Перевірка файлів…",
|
||||
"seeding": "Сідінг",
|
||||
"stop_seeding": "Зупинити сідінг",
|
||||
"resume_seeding": "Продовжити сідінг",
|
||||
"options": "Налаштування",
|
||||
"extract": "Розархівувати файли",
|
||||
"extracting": "Розархівовування файлів…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Тека завантажень",
|
||||
@@ -176,6 +269,12 @@
|
||||
"import": "Імпортувати",
|
||||
"insert_valid_json_url": "Вставте дійсний URL JSON-файлу",
|
||||
"language": "Мова",
|
||||
"cancel_button_confirmation_delete_all_sources": "немає",
|
||||
"confirm_button_confirmation_delete_all_sources": "Так, видалити все",
|
||||
"description_confirmation_delete_all_sources": "Ви видалите всі джерела завантаження",
|
||||
"title_confirmation_delete_all_sources": "Видалити всі джерела завантаження",
|
||||
"removed_download_sources": "Джерела завантажень видалено",
|
||||
"button_delete_all_sources": "Видаліть усі джерела завантаження",
|
||||
"api_token": "API-токен",
|
||||
"debrid_api_token_hint": "API токен можливо отримати <0>тут</0>",
|
||||
"real_debrid_api_token_label": "Real-Debrid API-токен",
|
||||
@@ -187,21 +286,101 @@
|
||||
"removed_download_source": "Джерело завантажень було видалено",
|
||||
"save_changes": "Зберегти зміни",
|
||||
"sync_download_sources": "Синхронізувати джерела",
|
||||
"validate_download_source": "Перевірити"
|
||||
"validate_download_source": "Перевірити",
|
||||
"public": "Публічний",
|
||||
"private": "Приватний",
|
||||
"friends_only": "Тільки для друзів",
|
||||
"privacy": "Приватність",
|
||||
"profile_visibility": "Видимість профілю",
|
||||
"profile_visibility_description": "Оберіть хто може бачити ваш профіль та бібліотеку",
|
||||
"required_field": "Це поле обов'язкове",
|
||||
"source_already_exists": "Це джерело уже додано",
|
||||
"must_be_valid_url": "Джерело має бути дійсною URL-адресою",
|
||||
"blocked_users": "Заблоковані користувачі",
|
||||
"user_unblocked": "Користувача було розблоковано",
|
||||
"enable_achievement_notifications": "Коли отримано нове досягнення",
|
||||
"launch_minimized": "Запустити Hydra у згорнутому вигляді",
|
||||
"disable_nsfw_alert": "Вимкнути сповіщення про NSFW",
|
||||
"seed_after_download_complete": "Cідувати по завершенню завантажень",
|
||||
"show_hidden_achievement_description": "Показувати опис прихованих досягнень до їх розблокування",
|
||||
"account": "Акаунт",
|
||||
"no_users_blocked": "У вас немає заблокованих користувачів",
|
||||
"subscription_active_until": "Ваша підписка на Hydra Cloud активна до {{date}}",
|
||||
"manage_subscription": "Керування підпискою",
|
||||
"update_email": "Змінити електронну пошту",
|
||||
"update_password": "Зміна паролю",
|
||||
"current_email": "Поточна електронна пошта",
|
||||
"no_email_account": "Ви ще не вказали електронну пошту",
|
||||
"account_data_updated_successfully": "Дані облікового запису успішно оновлено",
|
||||
"renew_subscription": "Поновити Hydra Cloud",
|
||||
"subscription_expired_at": "Ваша підписка закінчилася {{date}}",
|
||||
"no_subscription": "Насолоджуйтесь Hydra найкращим можливим чином",
|
||||
"become_subscriber": "Придбати підписку Hydra Cloud",
|
||||
"subscription_renew_cancelled": "Автоматичне поновлення виключено",
|
||||
"subscription_renews_on": "Ваша підписка поновиться {{date}}",
|
||||
"bill_sent_until": "Ваш наступний рахунок буде надіслано до цього дня",
|
||||
"no_themes": "Схоже, у вас ще немає тем, але не хвилюйтеся, натисніть тут, щоб створити свій перший шедевр.",
|
||||
"editor_tab_code": "Код",
|
||||
"editor_tab_info": "Інформація",
|
||||
"editor_tab_save": "Зберегти",
|
||||
"web_store": "Інтернет-магазин",
|
||||
"clear_themes": "Очистити",
|
||||
"create_theme": "Створити",
|
||||
"create_theme_modal_title": "Створити користувацьку тему",
|
||||
"create_theme_modal_description": "Створіть нову тему для налаштування зовнішнього вигляду Hydra",
|
||||
"theme_name": "Назва",
|
||||
"insert_theme_name": "Введіть назву теми",
|
||||
"set_theme": "Включити тему",
|
||||
"unset_theme": "Виключити тему",
|
||||
"delete_theme": "Видалити тему",
|
||||
"edit_theme": "Редагувати тему",
|
||||
"delete_all_themes": "Видалити усі теми",
|
||||
"delete_all_themes_description": "Це видалить усі ваші користувацькі теми",
|
||||
"delete_theme_description": "Це видалить тему {{theme}}",
|
||||
"cancel": "Відмінити",
|
||||
"appearance": "Вигляд",
|
||||
"enable_torbox": "Включити TorBox",
|
||||
"torbox_description": "TorBox — це ваш преміум-сервіс для сідінгу, що конкурує навіть з найкращими серверами на ринку.",
|
||||
"torbox_account_linked": "TorBox акаунт прив'язано",
|
||||
"create_real_debrid_account": "Натисніть тут, якщо у вас ще немає облікового запису Real-Debrid",
|
||||
"create_torbox_account": "Натисніть тут, якщо у вас ще немає облікового запису TorBox",
|
||||
"real_debrid_account_linked": "Real-Debrid акаунт прив'язано",
|
||||
"name_min_length": "Назва теми повинна містити не менше 3 символів",
|
||||
"import_theme": "Імпортувати тему",
|
||||
"import_theme_description": "Ви імпортуєте {{theme}} з магазину тем",
|
||||
"error_importing_theme": "Помилка при імпорті теми",
|
||||
"theme_imported": "Тема успішно імпортована",
|
||||
"enable_friend_request_notifications": "При отриманні запиту на дружбу",
|
||||
"enable_auto_install": "Автоматично завантажувати оновлення",
|
||||
"common_redist": "Загальні розповсюджувані компоненти",
|
||||
"common_redist_description": "Загальні розповсюджувані компоненти необхідні для запуску деяких ігор. Рекомендується їх встановити, щоб уникнути проблем.",
|
||||
"install_common_redist": "Встановити",
|
||||
"installing_common_redist": "Встановлюється…",
|
||||
"show_download_speed_in_megabytes": "Показувати швидкість завантаження в мегабайтах на секунду"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Завантаження завершено",
|
||||
"game_ready_to_install": "{{title}} готова до встановлення",
|
||||
"repack_list_updated": "Список репаків оновлено",
|
||||
"repack_count_one": "{{count}} репак додано",
|
||||
"repack_count_other": "{{count}} репаків додано"
|
||||
"repack_count_other": "{{count}} репаків додано",
|
||||
"new_update_available": "Версія {{version}} доступна",
|
||||
"restart_to_install_update": "Перезавантажте Hydra, щоб встановити оновлення",
|
||||
"notification_achievement_unlocked_title": "Розблоковано досягнення для {{game}}",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} та інші {{count}} було розблоковано",
|
||||
"new_friend_request_description": "Ви отримали новий запит на дружбу",
|
||||
"new_friend_request_title": "Новий запит на дружбу",
|
||||
"extraction_complete": "Витягування завершено",
|
||||
"game_extracted": "{{title}} успішно витягнуто"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Відкрити Hydra",
|
||||
"quit": "Вийти"
|
||||
},
|
||||
"game_card": {
|
||||
"no_downloads": "Немає доступних завантажень"
|
||||
"no_downloads": "Немає доступних завантажень",
|
||||
"available_one": "Доступний",
|
||||
"available_other": "Доступні"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
"title": "Програми не встановлені",
|
||||
@@ -234,6 +413,94 @@
|
||||
"sign_out_modal_title": "Ви впевнені?",
|
||||
"successfully_signed_out": "Успішний вихід з акаунту",
|
||||
"total_play_time": "Всього зіграно",
|
||||
"try_again": "Будь ласка, попробуйте ще раз"
|
||||
"try_again": "Будь ласка, попробуйте ще раз",
|
||||
"add_friends": "Добавити друзів",
|
||||
"add": "Добавити",
|
||||
"friend_code": "Код друга",
|
||||
"see_profile": "Переглянути профіль",
|
||||
"sending": "Надсилання",
|
||||
"friend_request_sent": "Запит на дружбу було надіслано",
|
||||
"friends": "Друзі",
|
||||
"friends_list": "Список друзів",
|
||||
"user_not_found": "Користувача не найдено",
|
||||
"block_user": "Заблокувати користувача",
|
||||
"add_friend": "Добавити друга",
|
||||
"request_sent": "Запит надіслано",
|
||||
"request_received": "Запит отримано",
|
||||
"accept_request": "Прийняти запит",
|
||||
"ignore_request": "Ігнорувати запит",
|
||||
"cancel_request": "Скасувати запит",
|
||||
"undo_friendship": "Видалити з друзів",
|
||||
"request_accepted": "Запит прийнято",
|
||||
"user_blocked_successfully": "Користувач успішно заблокований",
|
||||
"user_block_modal_text": "Це заблокує {{displayName}}",
|
||||
"blocked_users": "Заблоковані користувачі",
|
||||
"unblock": "Розблокувати",
|
||||
"no_friends_added": "У вас немає доданих друзів",
|
||||
"pending": "Очікування",
|
||||
"no_pending_invites": "У вас немає запитів, що очікують на підтвердження",
|
||||
"no_blocked_users": "У вас немає заблокованих користувачів",
|
||||
"friend_code_copied": "Код друга скопійовано",
|
||||
"undo_friendship_modal_text": "Це видалить з друзів {{displayName}}",
|
||||
"privacy_hint": "Щоб налаштувати, хто може це бачити, перейдіть до <0>Settings</0>",
|
||||
"locked_profile": "Цей профіль приватний",
|
||||
"image_process_failure": "Помилка при обробці зображення",
|
||||
"required_field": "Це поле обов'язкове",
|
||||
"displayname_min_length": "Ім'я користувача повинно містити не менше 3 символів",
|
||||
"displayname_max_length": "Ім'я користувача повинно містити не більше 50 символів",
|
||||
"report_profile": "Повідомити про цей профіль",
|
||||
"report_reason": "Чому ви повідомляєте про цей профіль?",
|
||||
"report_description": "Додаткова інформація",
|
||||
"report_description_placeholder": "Додаткова інформація",
|
||||
"report": "Повідомити",
|
||||
"report_reason_hate": "Мова ненависті",
|
||||
"report_reason_sexual_content": "Сексуальний контент",
|
||||
"report_reason_violence": "Насильство",
|
||||
"report_reason_spam": "Спам",
|
||||
"report_reason_other": "Інше",
|
||||
"profile_reported": "Профіль повідомлено",
|
||||
"your_friend_code": "Ваш код друга:",
|
||||
"upload_banner": "Upload banner",
|
||||
"uploading_banner": "Завантажити банер...",
|
||||
"background_image_updated": "Фонове зображення оновлено",
|
||||
"stats": "Статистика",
|
||||
"achievements": "Досягнення",
|
||||
"games": "Ігри",
|
||||
"top_percentile": "Топ {{percentile}}%",
|
||||
"ranking_updated_weekly": "Рейтинг оновлюється щотижня",
|
||||
"playing": "Грає у {{game}}",
|
||||
"achievements_unlocked": "Досягнень розблоковано",
|
||||
"earned_points": "Отримано балів",
|
||||
"show_achievements_on_profile": "Покажіть свої досягнення у своєму профілі",
|
||||
"show_points_on_profile": "Покажіть ваші отриманні бали у своєму профілі"
|
||||
},
|
||||
"achievement": {
|
||||
"achievement_unlocked": "Досягнення розблоковано",
|
||||
"user_achievements": "Досягнення користувача {{displayName}}",
|
||||
"your_achievements": "Ваші досягнення",
|
||||
"unlocked_at": "Розблоковано: {{date}}",
|
||||
"subscription_needed": "Для перегляду цього контенту потрібна підписка на Hydra Cloud",
|
||||
"new_achievements_unlocked": "Розблоковано {{achievementCount}} нових досягнень з {{gameCount}} ігор",
|
||||
"achievement_progress": "{{unlockedCount}}/{{totalCount}} досягнень",
|
||||
"achievements_unlocked_for_game": "Розблоковано {{achievementCount}} нових досягнень у грі {{gameTitle}}",
|
||||
"hidden_achievement_tooltip": "Це приховане досягнення",
|
||||
"achievement_earn_points": " Отримайте {{points}} балів за це досягнення",
|
||||
"earned_points": "Отримано балів:",
|
||||
"available_points": "Доступно балів:",
|
||||
"how_to_earn_achievements_points": "Як заробляти бали за досягнення?"
|
||||
},
|
||||
"hydra_cloud": {
|
||||
"subscription_tour_title": "Підписка Hydra Cloud",
|
||||
"subscribe_now": "Підписатися зараз",
|
||||
"cloud_saving": "Збереження в хмарі",
|
||||
"cloud_achievements": "Зберігайте свої досягнення в хмарі",
|
||||
"animated_profile_picture": "Анімовані аватари",
|
||||
"premium_support": "Преміум-підтримка",
|
||||
"show_and_compare_achievements": "Показуйте та порівнюйте свої досягнення з іншими користувачами",
|
||||
"animated_profile_banner": "Анімований банер профілю",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "Ви щойно виявили функцію Hydra Cloud!",
|
||||
"learn_more": "Дізнатися більше",
|
||||
"debrid_description": "Завантажуйте до 4 разів швидше з Nimbus"
|
||||
}
|
||||
}
|
||||
|
||||
476
src/locales/uz/translation.json
Normal file
476
src/locales/uz/translation.json
Normal file
@@ -0,0 +1,476 @@
|
||||
{
|
||||
"language_name": "Uzbek",
|
||||
"app": {
|
||||
"successfully_signed_in": "Kirish muvaffaqiyatli amalga oshirildi"
|
||||
},
|
||||
"home": {
|
||||
"featured": "Tavsiya etilgan",
|
||||
"surprise_me": "Hayratda qoldir",
|
||||
"no_results": "Natijalar topilmadi",
|
||||
"hot": "Eng mashhur",
|
||||
"start_typing": "Yozishni boshlayapman ...",
|
||||
"weekly": "📅 Haftaning eng yaxshi o'yinlari",
|
||||
"achievements": "🏆 Yutuqlar bilan o'yinlar"
|
||||
},
|
||||
"sidebar": {
|
||||
"catalogue": "Katalog",
|
||||
"downloads": "Yuklab olishlar",
|
||||
"settings": "Sozlamalar",
|
||||
"my_library": "Mening kutubxonam",
|
||||
"downloading_metadata": "{{title}} (Metamaʼlumotlar yuklanmoqda…)",
|
||||
"paused": "{{title}} (To'xtatildi)",
|
||||
"downloading": "{{title}} ({{percentage}} - Yuklanmoqda…)",
|
||||
"filter": "Qidiruv",
|
||||
"home": "Asosiy",
|
||||
"queued": "{{title}} (Navbatda)",
|
||||
"game_has_no_executable": "Oʻyinni ishga tushirish fayli tanlanmagan",
|
||||
"sign_in": "Kirish",
|
||||
"friends": "Do'stlar",
|
||||
"need_help": "Yordam kerakmi?",
|
||||
"favorites": "Sevimlilar"
|
||||
},
|
||||
"header": {
|
||||
"search": "Qidirish",
|
||||
"home": "Asosiy",
|
||||
"catalogue": "Katalog",
|
||||
"downloads": "Yuklab olishlar",
|
||||
"search_results": "Qidiruv natijalari",
|
||||
"settings": "Sozlamalar",
|
||||
"version_available_install": "{{version}} versiyasi mavjud. Oʻrnatish uchun shu yerni bosing.",
|
||||
"version_available_download": "{{version}} versiyasi mavjud. Yuklab olish uchun shu yerni bosing."
|
||||
},
|
||||
"bottom_panel": {
|
||||
"no_downloads_in_progress": "Faol yuklab olishlar yo'q",
|
||||
"downloading_metadata": "Metamaʼlumotlar yuklanmoqda {{title}}…",
|
||||
"downloading": "Yuklanmoqda {{title}}… ({{percentage}} yakunlandi) - Tugash vaqti {{eta}} - {{speed}}",
|
||||
"calculating_eta": "Yuklanmoqda {{title}}… ({{percentage}} yakunlandi) - Qolgan vaqt hisoblanmoqda…",
|
||||
"checking_files": "Fayllar tekshirilmoqda {{title}}… ({{percentage}} yakunlandi)",
|
||||
"installing_common_redist": "{{log}}…",
|
||||
"installation_complete": "O'rnatish yakunlandi",
|
||||
"installation_complete_message": "Kutubxonalar muvaffaqiyatli o'rnatildi"
|
||||
},
|
||||
"catalogue": {
|
||||
"search": "Filter…",
|
||||
"developers": "Ishlab chiquvchilar",
|
||||
"genres": "Janrlar",
|
||||
"tags": "Teglar",
|
||||
"publishers": "Nashriyotlar",
|
||||
"download_sources": "Yuklab olish manbalari",
|
||||
"result_count": "{{resultCount}} natija",
|
||||
"filter_count": "{{filterCount}} mavjud",
|
||||
"clear_filters": "{{filterCount}} tanlangan filtrni tozalash"
|
||||
},
|
||||
"game_details": {
|
||||
"play_time": "O'ynalgan vaqt {{amount}}",
|
||||
"last_time_played": "Oxirgi ishga tushirilgan {{period}}",
|
||||
"not_played_yet": "Siz hali {{title}}ni o'ynamagansiz",
|
||||
"next_suggestion": "Keyingi taklif",
|
||||
"play": "O'ynash",
|
||||
"deleting": "O'rnatuvchi o'chirilmoqda…",
|
||||
"close": "Yopish",
|
||||
"playing_now": "Hozir o'ynalmoqda",
|
||||
"change": "O'zgartirish",
|
||||
"repacks_modal_description": "Yuklab olish uchun repakni tanlang",
|
||||
"select_folder_hint": "Standart yuklab olish jildini o'zgartirish uchun <0>Sozlamalar</0>ni oching",
|
||||
"download_now": "Hozir yuklab olish",
|
||||
"no_shop_details": "Tavsif olib bo'lmadi",
|
||||
"download_options": "Manbalar",
|
||||
"download_path": "Yuklab olish yo'li",
|
||||
"previous_screenshot": "Oldingi skrinshot",
|
||||
"next_screenshot": "Keyingi skrinshot",
|
||||
"screenshot": "Skrinshot {{number}}",
|
||||
"open_screenshot": "{{number}}-skrinshotni ochish",
|
||||
"download_settings": "Yuklab olish sozlamalari",
|
||||
"downloader": "Yuklovchi",
|
||||
"select_executable": "Tanlash",
|
||||
"no_executable_selected": "Fayl tanlanmagan",
|
||||
"open_folder": "Jildni ochish",
|
||||
"open_download_location": "Yuklab olish jildini ko'rish",
|
||||
"create_shortcut": "Ish stoliga yorliq yaratish",
|
||||
"clear": "Tozalash",
|
||||
"remove_files": "Fayllarni o'chirish",
|
||||
"remove_from_library_title": "Ishonchingiz komilmi?",
|
||||
"remove_from_library_description": "{{game}} kutubxonangizdan o'chiriladi.",
|
||||
"options": "Sozlamalar",
|
||||
"executable_section_title": "Fayl",
|
||||
"executable_section_description": "\"O'ynash\" tugmasi bosilganda ishga tushiriladigan fayl yo'li",
|
||||
"downloads_section_title": "Yuklab olishlar",
|
||||
"downloads_section_description": "Yangilanishlar yoki o'yinning boshqa versiyalarini tekshirish",
|
||||
"danger_zone_section_title": "Xavfli zona",
|
||||
"danger_zone_section_description": "Bu o'yinni kutubxonangizdan yoki Hydradan yuklab olingan fayllarni o'chirishingiz mumkin",
|
||||
"download_in_progress": "Yuklab olish davom etmoqda",
|
||||
"download_paused": "Yuklab olish to'xtatilgan",
|
||||
"last_downloaded_option": "Oxirgi yuklab olish varianti",
|
||||
"create_shortcut_success": "Yorliq yaratildi",
|
||||
"create_shortcut_error": "Yorliq yaratib bo'lmadi",
|
||||
"allow_nsfw_content": "Davom etish",
|
||||
"download": "Yuklab olish",
|
||||
"download_count": "Yuklab olishlar",
|
||||
"download_error": "Bu yuklab olish varianti mavjud emas",
|
||||
"executable_path_in_use": "Bajarish fayli allaqachon \"{{game}}\" tomonidan ishlatilmoqda",
|
||||
"nsfw_content_description": "{{title}} barcha yoshdagilar uchun mos bo'lmasligi mumkin bo'lgan tarkibni o'z ichiga oladi. \nDavom etishni xohlaysizmi?",
|
||||
"nsfw_content_title": "Bu o'yin nomunosib tarkibga ega",
|
||||
"refuse_nsfw_content": "Orqaga",
|
||||
"stats": "Statistika",
|
||||
"player_count": "Faol o'yinchilar",
|
||||
"warning": "Ogohlantirish:",
|
||||
"hydra_needs_to_remain_open": "Bu yuklab olish uchun Hydra tugaguncha ochiq qolishi kerak. Agar Hydra tugashidan oldin yopilsa, jarayonni yo'qotasiz.",
|
||||
"achievements": "Yutuqlar",
|
||||
"achievements_count": "Yutuqlar {{unlockedCount}}/{{achievementsCount}}",
|
||||
"cloud_save": "Bulutli saqlash",
|
||||
"cloud_save_description": "O'yin jarayoningizni bulutda saqlang va istalgan qurilmada o'ynashni davom ettiring",
|
||||
"backups": "Zaxira nusxalar",
|
||||
"install_backup": "O'rnatish",
|
||||
"delete_backup": "O'chirish",
|
||||
"create_backup": "Yangi zaxira nusxa yaratish",
|
||||
"last_backup_date": "Oxirgi zaxira nusxa {{date}} dan",
|
||||
"no_backup_preview": "Bu sarlavha uchun saqlashlar topilmadi",
|
||||
"restoring_backup": "Zaxira nusxa tiklanmoqda ({{progress}} yakunlandi)…",
|
||||
"uploading_backup": "Zaxira nusxa yuklanmoqda…",
|
||||
"no_backups": "Siz hali bu o'yin uchun zaxira nusxa yaratmagansiz",
|
||||
"backup_uploaded": "Zaxira nusxa yuklandi",
|
||||
"backup_deleted": "Zaxira nusxa o'chirildi",
|
||||
"backup_restored": "Zaxira nusxa tiklandi",
|
||||
"see_all_achievements": "Barcha yutuqlarni ko'rish",
|
||||
"sign_in_to_see_achievements": "Yutuqlarni ko'rish uchun tizimga kiring",
|
||||
"mapping_method_automatic": "Avtomatik",
|
||||
"mapping_method_manual": "Qo'lda",
|
||||
"mapping_method_label": "Moslashtirish usuli",
|
||||
"files_automatically_mapped": "Fayllar avtomatik moslashtirildi",
|
||||
"no_backups_created": "Bu o'yin uchun zaxira nusxalar yaratilmagan",
|
||||
"manage_files": "Fayllarni boshqarish",
|
||||
"loading_save_preview": "Saqlashlar qidirilmoqda…",
|
||||
"wine_prefix": "Wine prefiksi",
|
||||
"wine_prefix_description": "Bu o'yinni ishga tushirish uchun ishlatiladigan Wine prefiksi",
|
||||
"launch_options": "Ishga tushirish parametrlari",
|
||||
"launch_options_description": "Tajribali foydalanuvchilar ishga tushirish parametrlarini o'zgartirishi mumkin",
|
||||
"launch_options_placeholder": "Parametr ko'rsatilmagan",
|
||||
"no_download_option_info": "Ma'lumot mavjud emas",
|
||||
"backup_deletion_failed": "Zaxira nusxani o'chirib bo'lmadi",
|
||||
"max_number_of_artifacts_reached": "Bu o'yin uchun maksimal zaxira nusxalar soniga yetildi",
|
||||
"achievements_not_sync": "Yutuqlaringiz sinxronlanmagan",
|
||||
"manage_files_description": "Saqlanishi va tiklanishi kerak bo'lgan fayllarni boshqaring",
|
||||
"select_folder": "Jildni tanlash",
|
||||
"backup_from": "{{date}} dan zaxira nusxa",
|
||||
"automatic_backup_from": "{{date}} dan avtomatik zaxira nusxa",
|
||||
"enable_automatic_cloud_sync": "Avtomatik bulutli sinxronlashni yoqish",
|
||||
"custom_backup_location_set": "Maxsus zaxira nusxa joylashuvi o'rnatildi",
|
||||
"no_directory_selected": "Katalog tanlanmagan",
|
||||
"no_write_permission": "Bu katalogga yuklab bo'lmaydi. Ko'proq ma'lumot olish uchun bu yerga bosing.",
|
||||
"reset_achievements": "Yutuqlarni tiklash",
|
||||
"reset_achievements_description": "Bu {{game}} uchun barcha yutuqlarni tiklaydi",
|
||||
"reset_achievements_title": "Ishonchingiz komilmi?",
|
||||
"reset_achievements_success": "Yutuqlar muvaffaqiyatli tiklandi",
|
||||
"reset_achievements_error": "Yutuqlarni tiklab bo'lmadi",
|
||||
"download_error_gofile_quota_exceeded": "Siz Gofile oylik kvotangizni oshirib yubordingiz. Iltimos, kvota tiklanguncha kuting.",
|
||||
"download_error_real_debrid_account_not_authorized": "Sizning Real-Debrid hisobingiz yangi yuklab olishlar uchun avtorizatsiya qilinmagan. Iltimos, hisob sozlamalarini tekshiring va qaytadan urinib ko'ring.",
|
||||
"download_error_not_cached_on_real_debrid": "Bu yuklab olish Real-Debrid'da mavjud emas, va Real-Debrid'dan yuklab olish holatini olish hozircha mavjud emas.",
|
||||
"download_error_not_cached_on_torbox": "Bu yuklab olish TorBox'da mavjud emas, va TorBox'dan yuklab olish holatini olish hozircha mumkin emas.",
|
||||
"game_added_to_favorites": "O'yin sevimlilarga qo'shildi",
|
||||
"game_removed_from_favorites": "O'yin sevimlilardan olib tashlandi",
|
||||
"automatically_extract_downloaded_files": "Yuklab olingan fayllarni avtomatik chiqarish"
|
||||
},
|
||||
"activation": {
|
||||
"title": "Hydra'ni faollashtirish",
|
||||
"installation_id": "O'rnatish ID'si:",
|
||||
"enter_activation_code": "Faollashtirish kodini kiriting",
|
||||
"message": "Agar qayerdan so'rash kerakligini bilmasangiz, u sizda bo'lmasligi kerak.",
|
||||
"activate": "Faollashtirish",
|
||||
"loading": "Yuklanmoqda…"
|
||||
},
|
||||
"downloads": {
|
||||
"resume": "Davom ettirish",
|
||||
"pause": "To'xtatib turish",
|
||||
"eta": "Tugash vaqti {{eta}}",
|
||||
"paused": "To'xtatilgan",
|
||||
"verifying": "Tekshirilmoqda…",
|
||||
"completed": "Yakunlandi",
|
||||
"removed": "Yuklab olinmagan",
|
||||
"cancel": "Bekor qilish",
|
||||
"filter": "Yuklab olingan o'yinlarni qidirish",
|
||||
"remove": "O'chirish",
|
||||
"downloading_metadata": "Metamaʼlumotlar yuklanmoqda…",
|
||||
"deleting": "O'rnatuvchi o'chirilmoqda…",
|
||||
"delete": "O'rnatuvchini o'chirish",
|
||||
"delete_modal_title": "Ishonchingiz komilmi?",
|
||||
"delete_modal_description": "Bu kompyuteringizdan barcha o'rnatuvchilarni o'chiradi",
|
||||
"install": "O'rnatish",
|
||||
"download_in_progress": "Jarayonda",
|
||||
"queued_downloads": "Navbatdagi yuklab olishlar",
|
||||
"downloads_completed": "Yakunlangan",
|
||||
"queued": "Navbatda",
|
||||
"no_downloads_title": "Bu yer juda bo'sh...",
|
||||
"no_downloads_description": "Siz hali Hydra orqali hech narsa yuklab olmadingiz, lekin boshlash uchun hech qachon kech emas.",
|
||||
"checking_files": "Fayllar tekshirilmoqda…",
|
||||
"seeding": "Ulashish",
|
||||
"stop_seeding": "Ulashishni to'xtatish",
|
||||
"resume_seeding": "Ulashishni davom ettirish",
|
||||
"options": "Boshqarish",
|
||||
"extract": "Fayllarni chiqarish",
|
||||
"extracting": "Fayllar chiqarilmoqda…"
|
||||
},
|
||||
"settings": {
|
||||
"downloads_path": "Yuklab olish yo'li",
|
||||
"change": "O'zgartirish",
|
||||
"notifications": "Bildirishnomalar",
|
||||
"enable_download_notifications": "Yuklab olish tugaganda",
|
||||
"enable_achievement_notifications": "Yutuq ochilganda",
|
||||
"enable_repack_list_notifications": "Yangi repak qo'shilganda",
|
||||
"real_debrid_api_token_label": "Real-Debrid API-tokeni",
|
||||
"quit_app_instead_hiding": "Ilovani trayga yig'ish o'rniga yopish",
|
||||
"launch_with_system": "Hydra'ni tizim bilan birga ishga tushirish",
|
||||
"launch_minimized": "Hydra'ni yig'ilgan holda ishga tushirish",
|
||||
"disable_nsfw_alert": "Noqulay kontent haqida ogohlantirishni o'chirish",
|
||||
"general": "Asosiy",
|
||||
"behavior": "Xatti-harakat",
|
||||
"download_sources": "Yuklab olish manbalari",
|
||||
"language": "Til",
|
||||
"api_token": "API kalit",
|
||||
"enable_real_debrid": "Real-Debrid'ni yoqish",
|
||||
"real_debrid_description": "Real-Debrid - bu cheksiz yuklab oluvchi bo'lib, internetda joylashtirilgan fayllarni tezda yuklab olishga yoki ularni xususiy tarmoq orqali pleerga zudlik bilan o'tkazishga imkon beradi, bu esa har qanday blokirovkalarni chetlab o'tishga imkon beradi.",
|
||||
"debrid_invalid_token": "Noto'g'ri API kalit",
|
||||
"debrid_api_token_hint": "API kalitni <0>bu yerda</0> olish mumkin",
|
||||
"real_debrid_free_account_error": "\"{{username}}\" hisobi - obunaga ega emas. Iltimos, Real-Debrid obunasini rasmiylashtiring",
|
||||
"debrid_linked_message": "\"{{username}}\" hisobi bog'langan",
|
||||
"save_changes": "O'zgarishlarni saqlash",
|
||||
"changes_saved": "O'zgarishlar muvaffaqiyatli saqlandi",
|
||||
"download_sources_description": "Hydra yuklab olish havolalarini ushbu manbalardan oladi. URL yuklab olish uchun havolalar bilan .json-fayliga to'g'ridan-to'g'ri havolani o'z ichiga olishi kerak.",
|
||||
"validate_download_source": "Tekshirish",
|
||||
"remove_download_source": "O'chirish",
|
||||
"add_download_source": "Manba qo'shish",
|
||||
"download_count_zero": "Ro'yxatda yuklab olishlar yo'q",
|
||||
"download_count_one": "Ro'yxatda {{countFormatted}} ta yuklab olish",
|
||||
"download_count_other": "Ro'yxatda {{countFormatted}} ta yuklab olish",
|
||||
"download_source_url": "Manba havolasi",
|
||||
"add_download_source_description": ".json-fayliga havolani joylang",
|
||||
"download_source_up_to_date": "Yangilangan",
|
||||
"download_source_errored": "Xato",
|
||||
"sync_download_sources": "Manbalarni yangilash",
|
||||
"removed_download_source": "Manba o'chirildi",
|
||||
"cancel_button_confirmation_delete_all_sources": "Yo'q",
|
||||
"confirm_button_confirmation_delete_all_sources": "Ha, barchasini o'chirish",
|
||||
"description_confirmation_delete_all_sources": "Siz barcha manbalarni o'chirasiz",
|
||||
"title_confirmation_delete_all_sources": "Barcha manbalarni o'chirish",
|
||||
"removed_download_sources": "Manbalar o'chirildi",
|
||||
"button_delete_all_sources": "Barcha manbalarni o'chirish",
|
||||
"added_download_source": "Manba qo'shildi",
|
||||
"download_sources_synced": "Barcha manbalar yangilandi",
|
||||
"insert_valid_json_url": "Amaldagi JSON-fayl URL'ini kiriting",
|
||||
"found_download_option_zero": "Yuklab olish variantlari topilmadi",
|
||||
"found_download_option_one": "{{countFormatted}} yuklab olish varianti topildi",
|
||||
"found_download_option_other": "{{countFormatted}} yuklab olish varianti topildi",
|
||||
"import": "Import qilish",
|
||||
"blocked_users": "Bloklangan foydalanuvchilar",
|
||||
"friends_only": "Faqat do'stlar uchun",
|
||||
"must_be_valid_url": "Manbada to'g'ri URL bo'lishi kerak",
|
||||
"privacy": "Maxfiylik",
|
||||
"private": "Shaxsiy",
|
||||
"profile_visibility": "Profil ko'rinuvchanligi",
|
||||
"profile_visibility_description": "Kim sizning profilingiz va kutubxonangizni ko'ra olishini tanlang",
|
||||
"public": "Ommaviy",
|
||||
"required_field": "Bu maydon to'ldirilishi shart",
|
||||
"source_already_exists": "Bu manba allaqachon qo'shilgan",
|
||||
"user_unblocked": "Foydalanuvchi blokdan chiqarildi",
|
||||
"seed_after_download_complete": "Yuklab olish tugagandan so'ng ulashish",
|
||||
"show_hidden_achievement_description": "Yashirin yutuqlarning tavsifini ularni olishdan oldin ko'rsatish",
|
||||
"account": "Hisob",
|
||||
"no_users_blocked": "Sizda bloklangan foydalanuvchilar yo'q",
|
||||
"subscription_active_until": "Hydra Cloud obunangiz {{date}} ga qadar faol",
|
||||
"manage_subscription": "Obunani boshqarish",
|
||||
"update_email": "Elektron pochtani yangilash",
|
||||
"update_password": "Parolni yangilash",
|
||||
"current_email": "Joriy elektron pochta:",
|
||||
"no_email_account": "Siz hali elektron pochta o'rnatmagansiz",
|
||||
"account_data_updated_successfully": "Hisob ma'lumotlari muvaffaqiyatli yangilandi",
|
||||
"renew_subscription": "Hydra Cloud obunasini yangilash",
|
||||
"subscription_expired_at": "Obunangiz muddati {{date}} da tugagan",
|
||||
"no_subscription": "Hydra'dan maksimal darajada bahramand bo'ling",
|
||||
"become_subscriber": "Hydra Cloud egasiga aylaning",
|
||||
"subscription_renew_cancelled": "Avtomatik yangilash o'chirilgan",
|
||||
"subscription_renews_on": "Obunangiz {{date}} da yangilanadi",
|
||||
"bill_sent_until": "Keyingi hisobingiz shu kungacha yuboriladi",
|
||||
"no_themes": "Sizda hali mavzular yo'qqa o'xshaydi, lekin tashvishlanmang, birinchi shoh asaringizni yaratish uchun shu yerni bosing",
|
||||
"editor_tab_code": "Kod",
|
||||
"editor_tab_info": "Ma'lumot",
|
||||
"editor_tab_save": "Saqlash",
|
||||
"web_store": "Veb-do'kon",
|
||||
"clear_themes": "Tozalash",
|
||||
"create_theme": "Yaratish",
|
||||
"create_theme_modal_title": "Maxsus mavzu yaratish",
|
||||
"create_theme_modal_description": "Hydra ko'rinishini sozlash uchun yangi mavzu yaratish",
|
||||
"theme_name": "Nomi",
|
||||
"insert_theme_name": "Mavzu nomini kiriting",
|
||||
"set_theme": "Mavzuni o'rnatish",
|
||||
"unset_theme": "Mavzuni olib tashlash",
|
||||
"delete_theme": "Mavzuni o'chirish",
|
||||
"edit_theme": "Mavzuni tahrirlash",
|
||||
"delete_all_themes": "Barcha mavzularni o'chirish",
|
||||
"delete_all_themes_description": "Bu barcha maxsus mavzularingizni o'chiradi",
|
||||
"delete_theme_description": "Bu {{theme}} mavzusini o'chirishga olib keladi",
|
||||
"cancel": "Bekor qilish",
|
||||
"appearance": "Tashqi ko'rinish",
|
||||
"enable_torbox": "TorBox'ni yoqish",
|
||||
"torbox_description": "TorBox - bu bozordagi eng yaxshi serverlar bilan ham raqobatlashadigan premium xizmatingiz.",
|
||||
"torbox_account_linked": "TorBox hisobi bog'langan",
|
||||
"real_debrid_account_linked": "Real-Debrid hisobi bog'langan",
|
||||
"create_real_debrid_account": "Agar sizda hali Real-Debrid hisobi bo'lmasa, shu yerni bosing",
|
||||
"create_torbox_account": "Agar sizda hali TorBox hisobi bo'lmasa, shu yerni bosing",
|
||||
"name_min_length": "Mavzu nomi kamida 3 ta belgi bo'lishi kerak",
|
||||
"import_theme": "Mavzuni import qilish",
|
||||
"import_theme_description": "Siz {{theme}} mavzusini mavzular do'konidan import qilmoqdasiz",
|
||||
"error_importing_theme": "Mavzuni import qilishda xato",
|
||||
"theme_imported": "Mavzu muvaffaqiyatli import qilindi",
|
||||
"enable_friend_request_notifications": "Do'stlar so'rovi olinganda",
|
||||
"enable_auto_install": "Yangilanishlarni avtomatik yuklab olish",
|
||||
"common_redist": "Kutubxonalar",
|
||||
"common_redist_description": "Ba'zi o'yinlarni ishga tushirish uchun kutubxonalar talab qilinadi. Muammolarning oldini olish uchun ularni o'rnatish tavsiya etiladi.",
|
||||
"install_common_redist": "O'rnatish",
|
||||
"installing_common_redist": "O'rnatilmoqda…",
|
||||
"show_download_speed_in_megabytes": "Yuklab olish tezligini sekundiga megabaytlarda ko'rsatish"
|
||||
},
|
||||
"notifications": {
|
||||
"download_complete": "Yuklab olish yakunlandi",
|
||||
"game_ready_to_install": "{{title}} o'rnatishga tayyor",
|
||||
"repack_list_updated": "Repaklar ro'yxati yangilandi",
|
||||
"repack_count_one": "{{count}} repak qo'shildi",
|
||||
"repack_count_other": "{{count}} repak qo'shildi",
|
||||
"new_update_available": "Yangi {{version}} versiyasi mavjud",
|
||||
"restart_to_install_update": "Yangilanishni o'rnatish uchun Hydra'ni qayta ishga tushiring",
|
||||
"notification_achievement_unlocked_title": "{{game}} uchun yutuq ochildi",
|
||||
"notification_achievement_unlocked_body": "{{achievement}} va boshqa {{count}} ta yutuq ochildi",
|
||||
"new_friend_request_title": "Yangi do'stlik so'rovi",
|
||||
"new_friend_request_description": "Siz yangi do'stlik so'rovini oldingiz",
|
||||
"extraction_complete": "Arxivdan chiqarish yakunlandi",
|
||||
"game_extracted": "{{title}} muvaffaqiyatli arxivdan chiqarildi"
|
||||
},
|
||||
"system_tray": {
|
||||
"open": "Hydra'ni ochish",
|
||||
"quit": "Chiqish"
|
||||
},
|
||||
"game_card": {
|
||||
"available_one": "Mavjud",
|
||||
"available_other": "Mavjud",
|
||||
"no_downloads": "Mavjud manbalar yo'q"
|
||||
},
|
||||
"binary_not_found_modal": {
|
||||
"title": "Dasturlar o'rnatilmagan",
|
||||
"description": "Wine yoki Lutris topilmadi",
|
||||
"instructions": "O'yin to'g'ri ishlashi uchun Linux distributivingizga ulardan birini o'rnatishning to'g'ri usulini bilib oling"
|
||||
},
|
||||
"modal": {
|
||||
"close": "Yopish"
|
||||
},
|
||||
"forms": {
|
||||
"toggle_password_visibility": "Parolni ko'rsatish"
|
||||
},
|
||||
"user_profile": {
|
||||
"amount_hours": "{{amount}} soat",
|
||||
"amount_minutes": "{{amount}} daqiqa",
|
||||
"last_time_played": "Oxirgi o'yin {{period}}",
|
||||
"activity": "So'nggi faollik",
|
||||
"library": "Kutubxona",
|
||||
"total_play_time": "Jami o'ynalgan vaqt",
|
||||
"no_recent_activity_title": "Hmm... Bu yerda hech narsa yo'q",
|
||||
"no_recent_activity_description": "Siz uzoq vaqtdan beri o'ynamagansiz. Buni o'zgartirish vaqti keldi!",
|
||||
"display_name": "Ko'rsatiladigan ism",
|
||||
"saving": "Saqlanmoqda",
|
||||
"save": "Saqlash",
|
||||
"edit_profile": "Profilni tahrirlash",
|
||||
"saved_successfully": "Muvaffaqiyatli saqlandi",
|
||||
"try_again": "Iltimos, qayta urinib ko'ring",
|
||||
"sign_out_modal_title": "Ishonchingiz komilmi?",
|
||||
"cancel": "Bekor qilish",
|
||||
"successfully_signed_out": "Tizimdan muvaffaqiyatli chiqdingiz",
|
||||
"sign_out": "Chiqish",
|
||||
"playing_for": "{{amount}} o'ynalgan",
|
||||
"sign_out_modal_text": "Sizning kutubxonangiz joriy hisob qaydnomangizga bog'langan. Tizimdan chiqsangiz, kutubxonangiz mavjud bo'lmaydi va progress saqlanmaydi. Chiqasizmi?",
|
||||
"add_friends": "Do'stlar qo'shish",
|
||||
"add": "Qo'shish",
|
||||
"friend_code": "Do'st kodi",
|
||||
"see_profile": "Profilni ko'rish",
|
||||
"sending": "Yuborilmoqda",
|
||||
"friend_request_sent": "Do'stlik so'rovi yuborildi",
|
||||
"friends": "Do'stlar",
|
||||
"friends_list": "Do'stlar ro'yxati",
|
||||
"user_not_found": "Foydalanuvchi topilmadi",
|
||||
"block_user": "Foydalanuvchini bloklash",
|
||||
"add_friend": "Do'st qo'shish",
|
||||
"request_sent": "So'rov yuborildi",
|
||||
"request_received": "So'rov qabul qilindi",
|
||||
"accept_request": "So'rovni qabul qilish",
|
||||
"ignore_request": "So'rovni e'tiborsiz qoldirish",
|
||||
"cancel_request": "So'rovni bekor qilish",
|
||||
"undo_friendship": "Do'stni o'chirish",
|
||||
"request_accepted": "So'rov qabul qilindi",
|
||||
"user_blocked_successfully": "Foydalanuvchi muvaffaqiyatli bloklandi",
|
||||
"user_block_modal_text": "{{displayName}} bloklanadi",
|
||||
"blocked_users": "Bloklangan foydalanuvchilar",
|
||||
"unblock": "Blokdan chiqarish",
|
||||
"no_friends_added": "Siz hali hech qanday do'st qo'shmagansiz",
|
||||
"pending": "Kutilmoqda",
|
||||
"no_pending_invites": "Sizda javob kutayotgan so'rovlar yo'q",
|
||||
"no_blocked_users": "Siz hech kimni bloklamagansiz",
|
||||
"friend_code_copied": "Do'st kodi nusxalandi",
|
||||
"displayname_max_length": "Ko'rsatiladigan ism 50 ta belgidan oshmasligi kerak",
|
||||
"displayname_min_length": "Ko'rsatiladigan ism kamida 3 ta belgidan iborat bo'lishi kerak",
|
||||
"image_process_failure": "Rasmni qayta ishlashda xatolik yuz berdi",
|
||||
"locked_profile": "Bu profil shaxsiy",
|
||||
"privacy_hint": "Uni kimlar ko'rishi mumkinligini belgilash uchun <0>Sozlamalar</0>ga o'ting",
|
||||
"profile_reported": "Profil haqida xabar berildi",
|
||||
"report": "Xabar berish",
|
||||
"report_description": "Qo'shimcha ma'lumot",
|
||||
"report_description_placeholder": "Qo'shimcha ma'lumot",
|
||||
"report_profile": "Bu profil haqida shikoyat qilish",
|
||||
"report_reason": "Nega bu profil haqida shikoyat qilyapsiz?",
|
||||
"report_reason_hate": "Nafrat qo'zg'atish",
|
||||
"report_reason_other": "Boshqa",
|
||||
"report_reason_sexual_content": "Jinsiy tarkib",
|
||||
"report_reason_spam": "Spam",
|
||||
"report_reason_violence": "Zo'ravonlik",
|
||||
"required_field": "Bu maydon to'ldirilishi shart",
|
||||
"undo_friendship_modal_text": "Bu {{displayName}} bilan do'stligingizni bekor qiladi",
|
||||
"your_friend_code": "Sizning do'st kodingiz:",
|
||||
"upload_banner": "Banner yuklash",
|
||||
"uploading_banner": "Banner yuklanmoqda...",
|
||||
"background_image_updated": "Fon rasmi yangilandi",
|
||||
"stats": "Statistika",
|
||||
"achievements": "Yutuqlar",
|
||||
"games": "O'yinlar",
|
||||
"top_percentile": "Yuqori {{percentile}}%",
|
||||
"ranking_updated_weekly": "Reyting har hafta yangilanadi",
|
||||
"playing": "{{game}}ni o'ynayapti",
|
||||
"achievements_unlocked": "Yutuqlar ochildi",
|
||||
"earned_points": "To'plangan ballar:",
|
||||
"show_achievements_on_profile": "Yutuqlaringizni profilingizda ko'rsating",
|
||||
"show_points_on_profile": "To'plangan ballarni profilingizda ko'rsating"
|
||||
},
|
||||
"achievement": {
|
||||
"achievement_unlocked": "Yutuq ochildi",
|
||||
"user_achievements": "{{displayName}}ning yutuqlari",
|
||||
"your_achievements": "Sizning yutuqlaringiz",
|
||||
"unlocked_at": "Ochilgan sana: {{date}}",
|
||||
"subscription_needed": "Bu kontentni ko'rish uchun Hydra Cloud obunasi kerak",
|
||||
"new_achievements_unlocked": "{{gameCount}} o'yindan {{achievementCount}} ta yangi yutuq ochildi",
|
||||
"achievement_progress": "{{unlockedCount}}/{{totalCount}} yutuq",
|
||||
"achievements_unlocked_for_game": "{{gameTitle}} uchun {{achievementCount}} ta yangi yutuq ochildi",
|
||||
"hidden_achievement_tooltip": "Bu yashirin yutuq",
|
||||
"achievement_earn_points": "Bu yutuq bilan {{points}} ball to'plang",
|
||||
"earned_points": "To'plangan ballar:",
|
||||
"available_points": "Mavjud ballar:",
|
||||
"how_to_earn_achievements_points": "Yutuq ballarini qanday to'plash mumkin?"
|
||||
},
|
||||
"hydra_cloud": {
|
||||
"subscription_tour_title": "Hydra Cloud obunasi",
|
||||
"subscribe_now": "Hoziroq obuna bo'ling",
|
||||
"cloud_saving": "Bulutli saqlash",
|
||||
"cloud_achievements": "Yutuqlaringizni bulutda saqlang",
|
||||
"animated_profile_picture": "Animatsiyali profil rasmi",
|
||||
"premium_support": "Premium qo'llab-quvvatlash",
|
||||
"show_and_compare_achievements": "Yutuqlaringizni boshqa foydalanuvchilarning yutuqlari bilan solishtiring va ko'rsating",
|
||||
"animated_profile_banner": "Animatsiyali profil banneri",
|
||||
"hydra_cloud": "Hydra Cloud",
|
||||
"hydra_cloud_feature_found": "Siz hozirgina Hydra Cloud funksiyasini kashf etdingiz!",
|
||||
"learn_more": "Batafsil ma'lumot",
|
||||
"debrid_description": "Nimbus bilan 4 barobar tezroq yuklab oling"
|
||||
}
|
||||
}
|
||||
@@ -111,7 +111,7 @@
|
||||
"options": "选项",
|
||||
"executable_section_title": "可执行文件",
|
||||
"executable_section_description": "点击 \"Play\" 时将执行的文件的路径",
|
||||
"downloads_secion_title": "下载",
|
||||
"downloads_section_title": "下载",
|
||||
"downloads_section_description": "查看此游戏的更新或其他版本",
|
||||
"danger_zone_section_title": "危险操作",
|
||||
"danger_zone_section_description": "从您的库或Hydra下载的文件中删除此游戏",
|
||||
@@ -226,6 +226,12 @@
|
||||
"download_sources_description": "Hydra 将从这些源获取下载链接。源 URL 必须是直接链接到包含下载链接的 .json 文件。",
|
||||
"validate_download_source": "验证",
|
||||
"remove_download_source": "移除",
|
||||
"cancel_button_confirmation_delete_all_sources": "不",
|
||||
"confirm_button_confirmation_delete_all_sources": "是的,删除所有内容",
|
||||
"description_confirmation_delete_all_sources": "您将删除所有下载源",
|
||||
"title_confirmation_delete_all_sources": "删除所有下载源",
|
||||
"removed_download_sources": "已删除字体",
|
||||
"button_delete_all_sources": "删除所有下载源",
|
||||
"add_download_source": "添加源",
|
||||
"download_count_zero": "列表中无下载",
|
||||
"download_count_one": "列表中有 {{countFormatted}} 个下载",
|
||||
|
||||
@@ -12,10 +12,9 @@ export const levelDatabasePath = path.join(
|
||||
`hydra-db${isStaging ? "-staging" : ""}`
|
||||
);
|
||||
|
||||
export const databaseDirectory = path.join(app.getPath("appData"), "hydra");
|
||||
export const databasePath = path.join(
|
||||
databaseDirectory,
|
||||
isStaging ? "hydra_test.db" : "hydra.db"
|
||||
export const commonRedistPath = path.join(
|
||||
app.getPath("userData"),
|
||||
"CommonRedist"
|
||||
);
|
||||
|
||||
export const logsPath = path.join(app.getPath("userData"), "logs");
|
||||
@@ -31,3 +30,5 @@ export const achievementSoundPath = app.isPackaged
|
||||
export const backupsPath = path.join(app.getPath("userData"), "Backups");
|
||||
|
||||
export const appVersion = app.getVersion() + (isStaging ? "-staging" : "");
|
||||
|
||||
export const MAIN_LOOP_INTERVAL = 1500;
|
||||
|
||||
@@ -4,11 +4,15 @@ import updater from "electron-updater";
|
||||
|
||||
const { autoUpdater } = updater;
|
||||
|
||||
const restartAndInstallUpdate = async (_event: Electron.IpcMainInvokeEvent) => {
|
||||
export const restartAndInstallUpdate = () => {
|
||||
autoUpdater.removeAllListeners();
|
||||
if (app.isPackaged) {
|
||||
autoUpdater.quitAndInstall(false);
|
||||
}
|
||||
};
|
||||
|
||||
registerEvent("restartAndInstallUpdate", restartAndInstallUpdate);
|
||||
const restartAndInstallUpdateEvent = async (
|
||||
_event: Electron.IpcMainInvokeEvent
|
||||
) => restartAndInstallUpdate();
|
||||
|
||||
registerEvent("restartAndInstallUpdate", restartAndInstallUpdateEvent);
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
import { CloudSync } from "@main/services";
|
||||
import { registerEvent } from "../register-event";
|
||||
import type { GameShop } from "@types";
|
||||
import { t } from "i18next";
|
||||
import { format } from "date-fns";
|
||||
|
||||
const uploadSaveGame = async (
|
||||
_event: Electron.IpcMainInvokeEvent,
|
||||
@@ -14,10 +12,7 @@ const uploadSaveGame = async (
|
||||
objectId,
|
||||
shop,
|
||||
downloadOptionTitle,
|
||||
t("backup_from", {
|
||||
ns: "game_details",
|
||||
date: format(new Date(), "dd/MM/yyyy"),
|
||||
})
|
||||
CloudSync.getBackupLabel(false)
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
13
src/main/events/download-sources/create-download-sources.ts
Normal file
13
src/main/events/download-sources/create-download-sources.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { HydraApi } from "@main/services";
|
||||
import { registerEvent } from "../register-event";
|
||||
|
||||
const createDownloadSources = async (
|
||||
_event: Electron.IpcMainInvokeEvent,
|
||||
urls: string[]
|
||||
) => {
|
||||
await HydraApi.post("/profile/download-sources", {
|
||||
urls,
|
||||
});
|
||||
};
|
||||
|
||||
registerEvent("createDownloadSources", createDownloadSources);
|
||||
8
src/main/events/download-sources/get-download-sources.ts
Normal file
8
src/main/events/download-sources/get-download-sources.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { HydraApi } from "@main/services";
|
||||
import { registerEvent } from "../register-event";
|
||||
|
||||
const getDownloadSources = async (_event: Electron.IpcMainInvokeEvent) => {
|
||||
return HydraApi.get("/profile/download-sources");
|
||||
};
|
||||
|
||||
registerEvent("getDownloadSources", getDownloadSources);
|
||||
18
src/main/events/download-sources/remove-download-source.ts
Normal file
18
src/main/events/download-sources/remove-download-source.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { HydraApi } from "@main/services";
|
||||
import { registerEvent } from "../register-event";
|
||||
|
||||
const removeDownloadSource = async (
|
||||
_event: Electron.IpcMainInvokeEvent,
|
||||
url?: string,
|
||||
removeAll = false
|
||||
) => {
|
||||
const params = new URLSearchParams({
|
||||
all: removeAll.toString(),
|
||||
});
|
||||
|
||||
if (url) params.set("url", url);
|
||||
|
||||
return HydraApi.delete(`/profile/download-sources?${params.toString()}`);
|
||||
};
|
||||
|
||||
registerEvent("removeDownloadSource", removeDownloadSource);
|
||||
@@ -20,6 +20,7 @@ import "./library/close-game";
|
||||
import "./library/delete-game-folder";
|
||||
import "./library/get-game-by-object-id";
|
||||
import "./library/get-library";
|
||||
import "./library/extract-game-download";
|
||||
import "./library/open-game";
|
||||
import "./library/open-game-executable-path";
|
||||
import "./library/open-game-installer";
|
||||
@@ -38,12 +39,15 @@ import "./misc/show-open-dialog";
|
||||
import "./misc/get-features";
|
||||
import "./misc/show-item-in-folder";
|
||||
import "./misc/get-badges";
|
||||
import "./misc/install-common-redist";
|
||||
import "./misc/can-install-common-redist";
|
||||
import "./torrenting/cancel-game-download";
|
||||
import "./torrenting/pause-game-download";
|
||||
import "./torrenting/resume-game-download";
|
||||
import "./torrenting/start-game-download";
|
||||
import "./torrenting/pause-game-seed";
|
||||
import "./torrenting/resume-game-seed";
|
||||
import "./torrenting/check-debrid-availability";
|
||||
import "./user-preferences/get-user-preferences";
|
||||
import "./user-preferences/update-user-preferences";
|
||||
import "./user-preferences/auto-launch";
|
||||
@@ -90,6 +94,9 @@ import "./themes/get-custom-theme-by-id";
|
||||
import "./themes/get-active-custom-theme";
|
||||
import "./themes/close-editor-window";
|
||||
import "./themes/toggle-custom-theme";
|
||||
import "./download-sources/create-download-sources";
|
||||
import "./download-sources/remove-download-source";
|
||||
import "./download-sources/get-download-sources";
|
||||
import { isPortableVersion } from "@main/helpers";
|
||||
|
||||
ipcMain.handle("ping", () => "pong");
|
||||
|
||||
@@ -13,35 +13,42 @@ const deleteGameFolder = async (
|
||||
objectId: string
|
||||
): Promise<void> => {
|
||||
const downloadKey = levelKeys.game(shop, objectId);
|
||||
|
||||
const download = await downloadsSublevel.get(downloadKey);
|
||||
|
||||
if (!download) return;
|
||||
if (!download?.folderName) return;
|
||||
|
||||
if (download.folderName) {
|
||||
const folderPath = path.join(
|
||||
download.downloadPath ?? (await getDownloadsPath()),
|
||||
download.folderName
|
||||
);
|
||||
const folderPath = path.join(
|
||||
download.downloadPath ?? (await getDownloadsPath()),
|
||||
download.folderName
|
||||
);
|
||||
|
||||
if (fs.existsSync(folderPath)) {
|
||||
const metaPath = `${folderPath}.meta`;
|
||||
|
||||
const deleteFile = async (filePath: string, isDirectory = false) => {
|
||||
if (fs.existsSync(filePath)) {
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
fs.rm(
|
||||
folderPath,
|
||||
{ recursive: true, force: true, maxRetries: 5, retryDelay: 200 },
|
||||
filePath,
|
||||
{
|
||||
recursive: isDirectory,
|
||||
force: true,
|
||||
maxRetries: 5,
|
||||
retryDelay: 200,
|
||||
},
|
||||
(error) => {
|
||||
if (error) {
|
||||
logger.error(error);
|
||||
reject();
|
||||
}
|
||||
|
||||
resolve();
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
await deleteFile(folderPath, true);
|
||||
await deleteFile(metaPath);
|
||||
await downloadsSublevel.del(downloadKey);
|
||||
};
|
||||
|
||||
|
||||
46
src/main/events/library/extract-game-download.ts
Normal file
46
src/main/events/library/extract-game-download.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import { registerEvent } from "../register-event";
|
||||
import { GameShop } from "@types";
|
||||
import path from "node:path";
|
||||
import { GameFilesManager } from "@main/services";
|
||||
import { downloadsSublevel, gamesSublevel, levelKeys } from "@main/level";
|
||||
import { FILE_EXTENSIONS_TO_EXTRACT } from "@shared";
|
||||
|
||||
const extractGameDownload = async (
|
||||
_event: Electron.IpcMainInvokeEvent,
|
||||
shop: GameShop,
|
||||
objectId: string
|
||||
): Promise<boolean> => {
|
||||
const gameKey = levelKeys.game(shop, objectId);
|
||||
|
||||
const [download, game] = await Promise.all([
|
||||
downloadsSublevel.get(gameKey),
|
||||
gamesSublevel.get(gameKey),
|
||||
]);
|
||||
|
||||
if (!download || !game) return false;
|
||||
|
||||
await downloadsSublevel.put(gameKey, {
|
||||
...download,
|
||||
extracting: true,
|
||||
});
|
||||
|
||||
const gameFilesManager = new GameFilesManager(shop, objectId);
|
||||
|
||||
if (
|
||||
FILE_EXTENSIONS_TO_EXTRACT.some((ext) => download.folderName?.endsWith(ext))
|
||||
) {
|
||||
gameFilesManager.extractDownloadedFile();
|
||||
} else {
|
||||
gameFilesManager
|
||||
.extractFilesInDirectory(
|
||||
path.join(download.downloadPath, download.folderName!)
|
||||
)
|
||||
.then(() => {
|
||||
gameFilesManager.setExtractionComplete(false);
|
||||
});
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
registerEvent("extractGameDownload", extractGameDownload);
|
||||
@@ -21,6 +21,8 @@ const updateExecutablePath = async (
|
||||
await gamesSublevel.put(gameKey, {
|
||||
...game,
|
||||
executablePath: parsedPath,
|
||||
automaticCloudSync:
|
||||
executablePath === null ? false : game.automaticCloudSync,
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
7
src/main/events/misc/can-install-common-redist.ts
Normal file
7
src/main/events/misc/can-install-common-redist.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import { registerEvent } from "../register-event";
|
||||
import { CommonRedistManager } from "@main/services/common-redist-manager";
|
||||
|
||||
const canInstallCommonRedist = async (_event: Electron.IpcMainInvokeEvent) =>
|
||||
CommonRedistManager.canInstallCommonRedist();
|
||||
|
||||
registerEvent("canInstallCommonRedist", canInstallCommonRedist);
|
||||
10
src/main/events/misc/install-common-redist.ts
Normal file
10
src/main/events/misc/install-common-redist.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { registerEvent } from "../register-event";
|
||||
import { CommonRedistManager } from "@main/services/common-redist-manager";
|
||||
|
||||
const installCommonRedist = async (_event: Electron.IpcMainInvokeEvent) => {
|
||||
if (await CommonRedistManager.canInstallCommonRedist()) {
|
||||
CommonRedistManager.installCommonRedist();
|
||||
}
|
||||
};
|
||||
|
||||
registerEvent("installCommonRedist", installCommonRedist);
|
||||
@@ -1,17 +1,59 @@
|
||||
import { MAIN_LOOP_INTERVAL } from "@main/constants";
|
||||
import { registerEvent } from "../register-event";
|
||||
import { HydraApi } from "@main/services";
|
||||
import { HydraApi, WindowManager } from "@main/services";
|
||||
import { publishNewFriendRequestNotification } from "@main/services/notifications";
|
||||
import { UserNotLoggedInError } from "@shared";
|
||||
import type { FriendRequestSync } from "@types";
|
||||
|
||||
const syncFriendRequests = async (_event: Electron.IpcMainInvokeEvent) => {
|
||||
return HydraApi.get<FriendRequestSync>(`/profile/friend-requests/sync`).catch(
|
||||
(err) => {
|
||||
if (err instanceof UserNotLoggedInError) {
|
||||
return { friendRequests: [] };
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
);
|
||||
interface SyncState {
|
||||
friendRequestCount: number | null;
|
||||
tick: number;
|
||||
}
|
||||
|
||||
const ticksToUpdate = (2 * 60 * 1000) / MAIN_LOOP_INTERVAL; // 2 minutes
|
||||
|
||||
const syncState: SyncState = {
|
||||
friendRequestCount: null,
|
||||
tick: 0,
|
||||
};
|
||||
|
||||
registerEvent("syncFriendRequests", syncFriendRequests);
|
||||
const syncFriendRequests = async () => {
|
||||
return HydraApi.get<FriendRequestSync>(`/profile/friend-requests/sync`)
|
||||
.then((res) => {
|
||||
if (
|
||||
syncState.friendRequestCount != null &&
|
||||
syncState.friendRequestCount < res.friendRequestCount
|
||||
) {
|
||||
publishNewFriendRequestNotification();
|
||||
}
|
||||
|
||||
syncState.friendRequestCount = res.friendRequestCount;
|
||||
|
||||
WindowManager.mainWindow?.webContents.send(
|
||||
"on-sync-friend-requests",
|
||||
res
|
||||
);
|
||||
|
||||
return res;
|
||||
})
|
||||
.catch((err) => {
|
||||
if (err instanceof UserNotLoggedInError) {
|
||||
return { friendRequestCount: 0 } as FriendRequestSync;
|
||||
}
|
||||
throw err;
|
||||
});
|
||||
};
|
||||
|
||||
const syncFriendRequestsEvent = async (_event: Electron.IpcMainInvokeEvent) => {
|
||||
return syncFriendRequests();
|
||||
};
|
||||
|
||||
export const watchFriendRequests = async () => {
|
||||
if (syncState.tick % ticksToUpdate === 0) {
|
||||
await syncFriendRequests();
|
||||
}
|
||||
|
||||
syncState.tick++;
|
||||
};
|
||||
|
||||
registerEvent("syncFriendRequests", syncFriendRequestsEvent);
|
||||
|
||||
11
src/main/events/torrenting/check-debrid-availability.ts
Normal file
11
src/main/events/torrenting/check-debrid-availability.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { HydraDebridClient } from "@main/services/download/hydra-debrid";
|
||||
import { registerEvent } from "../register-event";
|
||||
|
||||
const checkDebridAvailability = async (
|
||||
_event: Electron.IpcMainInvokeEvent,
|
||||
magnets: string[]
|
||||
) => {
|
||||
return HydraDebridClient.getAvailableMagnets(magnets);
|
||||
};
|
||||
|
||||
registerEvent("checkDebridAvailability", checkDebridAvailability);
|
||||
@@ -12,7 +12,15 @@ const startGameDownload = async (
|
||||
_event: Electron.IpcMainInvokeEvent,
|
||||
payload: StartGameDownloadPayload
|
||||
) => {
|
||||
const { objectId, title, shop, downloadPath, downloader, uri } = payload;
|
||||
const {
|
||||
objectId,
|
||||
title,
|
||||
shop,
|
||||
downloadPath,
|
||||
downloader,
|
||||
uri,
|
||||
automaticallyExtract,
|
||||
} = payload;
|
||||
|
||||
const gameKey = levelKeys.game(shop, objectId);
|
||||
|
||||
@@ -74,6 +82,8 @@ const startGameDownload = async (
|
||||
shouldSeed: false,
|
||||
timestamp: Date.now(),
|
||||
queued: true,
|
||||
extracting: false,
|
||||
automaticallyExtract,
|
||||
};
|
||||
|
||||
try {
|
||||
|
||||
@@ -23,10 +23,6 @@ const updateUserPreferences = async (
|
||||
patchUserProfile({ language: preferences.language }).catch(() => {});
|
||||
}
|
||||
|
||||
if (!preferences.downloadsPath) {
|
||||
preferences.downloadsPath = null;
|
||||
}
|
||||
|
||||
await db.put<string, UserPreferences>(
|
||||
levelKeys.userPreferences,
|
||||
{
|
||||
|
||||
@@ -3,12 +3,10 @@ import updater from "electron-updater";
|
||||
import i18n from "i18next";
|
||||
import path from "node:path";
|
||||
import url from "node:url";
|
||||
import kill from "kill-port";
|
||||
import { electronApp, optimizer } from "@electron-toolkit/utils";
|
||||
import { logger, WindowManager } from "@main/services";
|
||||
import resources from "@locales";
|
||||
import { PythonRPC } from "./services/python-rpc";
|
||||
import { Aria2 } from "./services/aria2";
|
||||
import { db, levelKeys } from "./level";
|
||||
import { loadState } from "./main";
|
||||
|
||||
@@ -59,7 +57,7 @@ app.whenReady().then(async () => {
|
||||
return net.fetch(url.pathToFileURL(decodeURI(filePath)).toString());
|
||||
});
|
||||
|
||||
await kill(PythonRPC.RPC_PORT).finally(() => loadState());
|
||||
await loadState();
|
||||
|
||||
const language = await db.get<string, string>(levelKeys.language, {
|
||||
valueEncoding: "utf-8",
|
||||
@@ -143,7 +141,6 @@ app.on("window-all-closed", () => {
|
||||
app.on("before-quit", () => {
|
||||
/* Disconnects libtorrent */
|
||||
PythonRPC.kill();
|
||||
Aria2.kill();
|
||||
});
|
||||
|
||||
app.on("activate", () => {
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
import knex from "knex";
|
||||
import { databasePath } from "./constants";
|
||||
import { app } from "electron";
|
||||
|
||||
export const knexClient = knex({
|
||||
debug: !app.isPackaged,
|
||||
client: "better-sqlite3",
|
||||
connection: {
|
||||
filename: databasePath,
|
||||
},
|
||||
});
|
||||
@@ -1,10 +0,0 @@
|
||||
const config = {
|
||||
development: {
|
||||
migrations: {
|
||||
extension: "ts",
|
||||
stub: "migrations/migration.stub",
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default config;
|
||||
@@ -13,5 +13,5 @@ export const levelKeys = {
|
||||
downloads: "downloads",
|
||||
userPreferences: "userPreferences",
|
||||
language: "language",
|
||||
sqliteMigrationDone: "sqliteMigrationDone",
|
||||
screenState: "screenState",
|
||||
};
|
||||
|
||||
174
src/main/main.ts
174
src/main/main.ts
@@ -1,31 +1,22 @@
|
||||
import { DownloadManager, logger, Ludusavi, startMainLoop } from "./services";
|
||||
import { Aria2, DownloadManager, Ludusavi, startMainLoop } from "./services";
|
||||
import { RealDebridClient } from "./services/download/real-debrid";
|
||||
import { HydraApi } from "./services/hydra-api";
|
||||
import { uploadGamesBatch } from "./services/library-sync";
|
||||
import { Aria2 } from "./services/aria2";
|
||||
import { downloadsSublevel } from "./level/sublevels/downloads";
|
||||
import { sortBy } from "lodash-es";
|
||||
import { Downloader } from "@shared";
|
||||
import {
|
||||
gameAchievementsSublevel,
|
||||
gamesSublevel,
|
||||
levelKeys,
|
||||
db,
|
||||
} from "./level";
|
||||
import { Auth, User, type UserPreferences } from "@types";
|
||||
import { knexClient } from "./knex-client";
|
||||
import { levelKeys, db } from "./level";
|
||||
import type { UserPreferences } from "@types";
|
||||
import { TorBoxClient } from "./services/download/torbox";
|
||||
import { CommonRedistManager } from "./services/common-redist-manager";
|
||||
|
||||
export const loadState = async () => {
|
||||
const userPreferences = await migrateFromSqlite().then(async () => {
|
||||
await db.put<string, boolean>(levelKeys.sqliteMigrationDone, true, {
|
||||
const userPreferences = await db.get<string, UserPreferences | null>(
|
||||
levelKeys.userPreferences,
|
||||
{
|
||||
valueEncoding: "json",
|
||||
});
|
||||
|
||||
return db.get<string, UserPreferences | null>(levelKeys.userPreferences, {
|
||||
valueEncoding: "json",
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
await import("./events");
|
||||
|
||||
@@ -41,7 +32,7 @@ export const loadState = async () => {
|
||||
|
||||
Ludusavi.addManifestToLudusaviConfig();
|
||||
|
||||
HydraApi.setupApi().then(() => {
|
||||
await HydraApi.setupApi().then(() => {
|
||||
uploadGamesBatch();
|
||||
});
|
||||
|
||||
@@ -52,6 +43,15 @@ export const loadState = async () => {
|
||||
return sortBy(games, "timestamp", "DESC");
|
||||
});
|
||||
|
||||
downloads.forEach((download) => {
|
||||
if (download.extracting) {
|
||||
downloadsSublevel.put(levelKeys.game(download.shop, download.objectId), {
|
||||
...download,
|
||||
extracting: false,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const [nextItemOnQueue] = downloads.filter((game) => game.queued);
|
||||
|
||||
const downloadsToSeed = downloads.filter(
|
||||
@@ -65,138 +65,6 @@ export const loadState = async () => {
|
||||
await DownloadManager.startRPC(nextItemOnQueue, downloadsToSeed);
|
||||
|
||||
startMainLoop();
|
||||
};
|
||||
|
||||
const migrateFromSqlite = async () => {
|
||||
const sqliteMigrationDone = await db.get(levelKeys.sqliteMigrationDone);
|
||||
|
||||
if (sqliteMigrationDone) {
|
||||
return;
|
||||
}
|
||||
|
||||
const migrateGames = knexClient("game")
|
||||
.select("*")
|
||||
.then((games) => {
|
||||
return gamesSublevel.batch(
|
||||
games.map((game) => ({
|
||||
type: "put",
|
||||
key: levelKeys.game(game.shop, game.objectID),
|
||||
value: {
|
||||
objectId: game.objectID,
|
||||
shop: game.shop,
|
||||
title: game.title,
|
||||
iconUrl: game.iconUrl,
|
||||
playTimeInMilliseconds: game.playTimeInMilliseconds,
|
||||
lastTimePlayed: game.lastTimePlayed,
|
||||
remoteId: game.remoteId,
|
||||
winePrefixPath: game.winePrefixPath,
|
||||
launchOptions: game.launchOptions,
|
||||
executablePath: game.executablePath,
|
||||
isDeleted: game.isDeleted === 1,
|
||||
},
|
||||
}))
|
||||
);
|
||||
})
|
||||
.then(() => {
|
||||
logger.info("Games migrated successfully");
|
||||
});
|
||||
|
||||
const migrateUserPreferences = knexClient("user_preferences")
|
||||
.select("*")
|
||||
.then(async (userPreferences) => {
|
||||
if (userPreferences.length > 0) {
|
||||
const { realDebridApiToken, ...rest } = userPreferences[0];
|
||||
|
||||
await db.put<string, UserPreferences>(
|
||||
levelKeys.userPreferences,
|
||||
{
|
||||
...rest,
|
||||
realDebridApiToken,
|
||||
preferQuitInsteadOfHiding: rest.preferQuitInsteadOfHiding === 1,
|
||||
runAtStartup: rest.runAtStartup === 1,
|
||||
startMinimized: rest.startMinimized === 1,
|
||||
disableNsfwAlert: rest.disableNsfwAlert === 1,
|
||||
seedAfterDownloadComplete: rest.seedAfterDownloadComplete === 1,
|
||||
showHiddenAchievementsDescription:
|
||||
rest.showHiddenAchievementsDescription === 1,
|
||||
downloadNotificationsEnabled:
|
||||
rest.downloadNotificationsEnabled === 1,
|
||||
repackUpdatesNotificationsEnabled:
|
||||
rest.repackUpdatesNotificationsEnabled === 1,
|
||||
achievementNotificationsEnabled:
|
||||
rest.achievementNotificationsEnabled === 1,
|
||||
},
|
||||
{ valueEncoding: "json" }
|
||||
);
|
||||
|
||||
if (rest.language) {
|
||||
await db.put<string, string>(levelKeys.language, rest.language, {
|
||||
valueEncoding: "utf-8",
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
.then(() => {
|
||||
logger.info("User preferences migrated successfully");
|
||||
});
|
||||
|
||||
const migrateAchievements = knexClient("game_achievement")
|
||||
.select("*")
|
||||
.then((achievements) => {
|
||||
return gameAchievementsSublevel.batch(
|
||||
achievements.map((achievement) => ({
|
||||
type: "put",
|
||||
key: levelKeys.game(achievement.shop, achievement.objectId),
|
||||
value: {
|
||||
achievements: JSON.parse(achievement.achievements),
|
||||
unlockedAchievements: JSON.parse(achievement.unlockedAchievements),
|
||||
},
|
||||
}))
|
||||
);
|
||||
})
|
||||
.then(() => {
|
||||
logger.info("Achievements migrated successfully");
|
||||
});
|
||||
|
||||
const migrateUser = knexClient("user_auth")
|
||||
.select("*")
|
||||
.then(async (users) => {
|
||||
if (users.length > 0) {
|
||||
await db.put<string, User>(
|
||||
levelKeys.user,
|
||||
{
|
||||
id: users[0].userId,
|
||||
displayName: users[0].displayName,
|
||||
profileImageUrl: users[0].profileImageUrl,
|
||||
backgroundImageUrl: users[0].backgroundImageUrl,
|
||||
subscription: users[0].subscription,
|
||||
},
|
||||
{
|
||||
valueEncoding: "json",
|
||||
}
|
||||
);
|
||||
|
||||
await db.put<string, Auth>(
|
||||
levelKeys.auth,
|
||||
{
|
||||
accessToken: users[0].accessToken,
|
||||
refreshToken: users[0].refreshToken,
|
||||
tokenExpirationTimestamp: users[0].tokenExpirationTimestamp,
|
||||
},
|
||||
{
|
||||
valueEncoding: "json",
|
||||
}
|
||||
);
|
||||
}
|
||||
})
|
||||
.then(() => {
|
||||
logger.info("User data migrated successfully");
|
||||
});
|
||||
|
||||
return Promise.allSettled([
|
||||
migrateGames,
|
||||
migrateUserPreferences,
|
||||
migrateAchievements,
|
||||
migrateUser,
|
||||
]);
|
||||
|
||||
CommonRedistManager.downloadCommonRedist();
|
||||
};
|
||||
|
||||
74
src/main/services/7zip.ts
Normal file
74
src/main/services/7zip.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import { app } from "electron";
|
||||
import cp from "node:child_process";
|
||||
import path from "node:path";
|
||||
import { logger } from "./logger";
|
||||
|
||||
export const binaryName = {
|
||||
linux: "7zzs",
|
||||
darwin: "7zz",
|
||||
win32: "7z.exe",
|
||||
};
|
||||
|
||||
export class SevenZip {
|
||||
private static readonly binaryPath = app.isPackaged
|
||||
? path.join(process.resourcesPath, binaryName[process.platform])
|
||||
: path.join(
|
||||
__dirname,
|
||||
"..",
|
||||
"..",
|
||||
"binaries",
|
||||
binaryName[process.platform]
|
||||
);
|
||||
|
||||
public static extractFile(
|
||||
{
|
||||
filePath,
|
||||
outputPath,
|
||||
cwd,
|
||||
passwords = [],
|
||||
}: {
|
||||
filePath: string;
|
||||
outputPath?: string;
|
||||
cwd?: string;
|
||||
passwords?: string[];
|
||||
},
|
||||
successCb: () => void,
|
||||
errorCb: () => void
|
||||
) {
|
||||
const tryPassword = (index = -1) => {
|
||||
const password = passwords[index] ?? "";
|
||||
logger.info(`Trying password ${password} on ${filePath}`);
|
||||
|
||||
const args = ["x", filePath, "-y", "-p" + password];
|
||||
|
||||
if (outputPath) {
|
||||
args.push("-o" + outputPath);
|
||||
}
|
||||
|
||||
const child = cp.execFile(this.binaryPath, args, {
|
||||
cwd,
|
||||
});
|
||||
|
||||
child.once("exit", (code) => {
|
||||
if (code === 0) {
|
||||
successCb();
|
||||
return;
|
||||
}
|
||||
|
||||
if (index < passwords.length - 1) {
|
||||
logger.info(
|
||||
`Failed to extract file: ${filePath} with password: ${password}. Trying next password...`
|
||||
);
|
||||
|
||||
tryPassword(index + 1);
|
||||
} else {
|
||||
logger.info(`Failed to extract file: ${filePath}`);
|
||||
|
||||
errorCb();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
tryPassword();
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,13 @@ export const getGameAchievementData = async (
|
||||
if (cachedAchievements && useCachedData)
|
||||
return cachedAchievements.achievements;
|
||||
|
||||
if (
|
||||
cachedAchievements &&
|
||||
Date.now() < (cachedAchievements.cacheExpiresTimestamp ?? 0)
|
||||
) {
|
||||
return cachedAchievements.achievements;
|
||||
}
|
||||
|
||||
const language = await db
|
||||
.get<string, string>(levelKeys.language, {
|
||||
valueEncoding: "utf-8",
|
||||
@@ -31,6 +38,7 @@ export const getGameAchievementData = async (
|
||||
await gameAchievementsSublevel.put(levelKeys.game(shop, objectId), {
|
||||
unlockedAchievements: cachedAchievements?.unlockedAchievements ?? [],
|
||||
achievements,
|
||||
cacheExpiresTimestamp: Date.now() + 1000 * 60 * 30, // 30 minutes
|
||||
});
|
||||
|
||||
return achievements;
|
||||
|
||||
@@ -2,6 +2,7 @@ import type {
|
||||
Game,
|
||||
GameShop,
|
||||
UnlockedAchievement,
|
||||
UpdatedUnlockedAchievements,
|
||||
UserPreferences,
|
||||
} from "@types";
|
||||
import { WindowManager } from "../window-manager";
|
||||
@@ -26,6 +27,7 @@ const saveAchievementsOnLocal = async (
|
||||
await gameAchievementsSublevel.put(levelKey, {
|
||||
achievements: gameAchievement?.achievements ?? [],
|
||||
unlockedAchievements: unlockedAchievements,
|
||||
cacheExpiresTimestamp: gameAchievement?.cacheExpiresTimestamp,
|
||||
});
|
||||
|
||||
if (!sendUpdateEvent) return;
|
||||
@@ -114,7 +116,7 @@ export const mergeAchievements = async (
|
||||
}
|
||||
|
||||
if (game.remoteId) {
|
||||
await HydraApi.put(
|
||||
await HydraApi.put<UpdatedUnlockedAchievements | undefined>(
|
||||
"/profile/games/achievements",
|
||||
{
|
||||
id: game.remoteId,
|
||||
@@ -123,10 +125,19 @@ export const mergeAchievements = async (
|
||||
{ needsSubscription: !newAchievements.length }
|
||||
)
|
||||
.then((response) => {
|
||||
if (response) {
|
||||
return saveAchievementsOnLocal(
|
||||
response.objectId,
|
||||
response.shop,
|
||||
response.achievements,
|
||||
publishNotification
|
||||
);
|
||||
}
|
||||
|
||||
return saveAchievementsOnLocal(
|
||||
response.objectId,
|
||||
response.shop,
|
||||
response.achievements,
|
||||
game.objectId,
|
||||
game.shop,
|
||||
mergedLocalAchievements,
|
||||
publishNotification
|
||||
);
|
||||
})
|
||||
|
||||
@@ -208,6 +208,19 @@ const processSkidrow = (unlockedAchievements: any): UnlockedAchievement[] => {
|
||||
const processGoldberg = (unlockedAchievements: any): UnlockedAchievement[] => {
|
||||
const newUnlockedAchievements: UnlockedAchievement[] = [];
|
||||
|
||||
if (Array.isArray(unlockedAchievements)) {
|
||||
for (const achievement of unlockedAchievements) {
|
||||
if (achievement?.earned) {
|
||||
newUnlockedAchievements.push({
|
||||
name: achievement.name,
|
||||
unlockTime: achievement.earned_time * 1000,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return newUnlockedAchievements;
|
||||
}
|
||||
|
||||
for (const achievement of Object.keys(unlockedAchievements)) {
|
||||
const unlockedAchievement = unlockedAchievements[achievement];
|
||||
|
||||
|
||||
@@ -2,8 +2,6 @@ import path from "node:path";
|
||||
import cp from "node:child_process";
|
||||
import { app } from "electron";
|
||||
|
||||
export const startAria2 = () => {};
|
||||
|
||||
export class Aria2 {
|
||||
private static process: cp.ChildProcess | null = null;
|
||||
|
||||
|
||||
@@ -13,10 +13,28 @@ import { logger } from "./logger";
|
||||
import { WindowManager } from "./window-manager";
|
||||
import axios from "axios";
|
||||
import { Ludusavi } from "./ludusavi";
|
||||
import { isFuture, isToday } from "date-fns";
|
||||
import { SubscriptionRequiredError } from "@shared";
|
||||
import { formatDate, SubscriptionRequiredError } from "@shared";
|
||||
import i18next, { t } from "i18next";
|
||||
|
||||
export class CloudSync {
|
||||
public static getBackupLabel(automatic: boolean) {
|
||||
const language = i18next.language;
|
||||
|
||||
const date = formatDate(new Date(), language);
|
||||
|
||||
if (automatic) {
|
||||
return t("automatic_backup_from", {
|
||||
ns: "game_details",
|
||||
date,
|
||||
});
|
||||
}
|
||||
|
||||
return t("backup_from", {
|
||||
ns: "game_details",
|
||||
date,
|
||||
});
|
||||
}
|
||||
|
||||
private static async bundleBackup(
|
||||
shop: GameShop,
|
||||
objectId: string,
|
||||
@@ -26,7 +44,11 @@ export class CloudSync {
|
||||
|
||||
// Remove existing backup
|
||||
if (fs.existsSync(backupPath)) {
|
||||
fs.rmSync(backupPath, { recursive: true });
|
||||
try {
|
||||
await fs.promises.rm(backupPath, { recursive: true });
|
||||
} catch (error) {
|
||||
logger.error("Failed to remove backup path", error);
|
||||
}
|
||||
}
|
||||
|
||||
await Ludusavi.backupGame(shop, objectId, backupPath, winePrefix);
|
||||
@@ -54,8 +76,8 @@ export class CloudSync {
|
||||
const hasActiveSubscription = await db
|
||||
.get<string, User>(levelKeys.user, { valueEncoding: "json" })
|
||||
.then((user) => {
|
||||
const expiresAt = user?.subscription?.expiresAt;
|
||||
return expiresAt && (isFuture(expiresAt) || isToday(expiresAt));
|
||||
const expiresAt = new Date(user?.subscription?.expiresAt ?? 0);
|
||||
return expiresAt > new Date();
|
||||
});
|
||||
|
||||
if (!hasActiveSubscription) {
|
||||
@@ -102,11 +124,10 @@ export class CloudSync {
|
||||
true
|
||||
);
|
||||
|
||||
fs.rm(bundleLocation, (err) => {
|
||||
if (err) {
|
||||
logger.error("Failed to remove tar file", err);
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
try {
|
||||
await fs.promises.unlink(bundleLocation);
|
||||
} catch (error) {
|
||||
logger.error("Failed to remove tar file", error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
109
src/main/services/common-redist-manager.ts
Normal file
109
src/main/services/common-redist-manager.ts
Normal file
@@ -0,0 +1,109 @@
|
||||
import { commonRedistPath } from "@main/constants";
|
||||
import axios from "axios";
|
||||
import fs from "node:fs";
|
||||
import cp from "node:child_process";
|
||||
import path from "node:path";
|
||||
import { logger } from "./logger";
|
||||
import { app } from "electron";
|
||||
import { WindowManager } from "./window-manager";
|
||||
|
||||
export class CommonRedistManager {
|
||||
private static readonly redistributables = [
|
||||
"dotNetFx40_Full_setup.exe",
|
||||
"dxwebsetup.exe",
|
||||
"oalinst.exe",
|
||||
"install.bat",
|
||||
"vcredist_2015-2019_x64.exe",
|
||||
"vcredist_2015-2019_x86.exe",
|
||||
"vcredist_x64.exe",
|
||||
"vcredist_x86.exe",
|
||||
"xnafx40_redist.msi",
|
||||
];
|
||||
private static readonly installationTimeout = 1000 * 60 * 5; // 5 minutes
|
||||
private static readonly installationLog = path.join(
|
||||
app.getPath("temp"),
|
||||
"common_redist_install.log"
|
||||
);
|
||||
|
||||
public static async installCommonRedist() {
|
||||
const abortController = new AbortController();
|
||||
const timeout = setTimeout(() => {
|
||||
abortController.abort();
|
||||
logger.error("Installation timed out");
|
||||
|
||||
WindowManager.mainWindow?.webContents.send("common-redist-progress", {
|
||||
log: "Installation timed out",
|
||||
complete: false,
|
||||
});
|
||||
}, this.installationTimeout);
|
||||
|
||||
const installationCompleteMessage = "Installation complete";
|
||||
|
||||
if (!fs.existsSync(this.installationLog)) {
|
||||
await fs.promises.writeFile(this.installationLog, "");
|
||||
}
|
||||
|
||||
fs.watch(this.installationLog, { signal: abortController.signal }, () => {
|
||||
fs.readFile(this.installationLog, "utf-8", (err, data) => {
|
||||
if (err) return logger.error("Error reading log file:", err);
|
||||
|
||||
const tail = data.split("\n").at(-2)?.trim();
|
||||
|
||||
if (tail?.includes(installationCompleteMessage)) {
|
||||
clearTimeout(timeout);
|
||||
if (!abortController.signal.aborted) {
|
||||
abortController.abort();
|
||||
}
|
||||
}
|
||||
|
||||
WindowManager.mainWindow?.webContents.send("common-redist-progress", {
|
||||
log: tail,
|
||||
complete: tail?.includes(installationCompleteMessage),
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
cp.exec(
|
||||
path.join(commonRedistPath, "install.bat"),
|
||||
{
|
||||
windowsHide: true,
|
||||
},
|
||||
(error) => {
|
||||
if (error) {
|
||||
logger.error("Failed to run install.bat", error);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public static async canInstallCommonRedist() {
|
||||
return this.redistributables.every((redist) => {
|
||||
const filePath = path.join(commonRedistPath, redist);
|
||||
|
||||
return fs.existsSync(filePath);
|
||||
});
|
||||
}
|
||||
|
||||
public static async downloadCommonRedist() {
|
||||
if (!fs.existsSync(commonRedistPath)) {
|
||||
await fs.promises.mkdir(commonRedistPath, { recursive: true });
|
||||
}
|
||||
|
||||
for (const redist of this.redistributables) {
|
||||
const filePath = path.join(commonRedistPath, redist);
|
||||
|
||||
if (fs.existsSync(filePath)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const response = await axios.get(
|
||||
`https://github.com/hydralauncher/hydra-common-redist/raw/refs/heads/main/${redist}`,
|
||||
{
|
||||
responseType: "arraybuffer",
|
||||
}
|
||||
);
|
||||
|
||||
await fs.promises.writeFile(filePath, response.data);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,14 @@
|
||||
import { Downloader, DownloadError } from "@shared";
|
||||
import { Downloader, DownloadError, FILE_EXTENSIONS_TO_EXTRACT } from "@shared";
|
||||
import { WindowManager } from "../window-manager";
|
||||
import { publishDownloadCompleteNotification } from "../notifications";
|
||||
import type { Download, DownloadProgress, UserPreferences } from "@types";
|
||||
import { GofileApi, QiwiApi, DatanodesApi, MediafireApi } from "../hosters";
|
||||
import {
|
||||
GofileApi,
|
||||
QiwiApi,
|
||||
DatanodesApi,
|
||||
MediafireApi,
|
||||
PixelDrainApi,
|
||||
} from "../hosters";
|
||||
import { PythonRPC } from "../python-rpc";
|
||||
import {
|
||||
LibtorrentPayload,
|
||||
@@ -16,6 +22,8 @@ import { logger } from "../logger";
|
||||
import { db, downloadsSublevel, gamesSublevel, levelKeys } from "@main/level";
|
||||
import { sortBy } from "lodash-es";
|
||||
import { TorBoxClient } from "./torbox";
|
||||
import { GameFilesManager } from "../game-files-manager";
|
||||
import { HydraDebridClient } from "./hydra-debrid";
|
||||
|
||||
export class DownloadManager {
|
||||
private static downloadingGameId: string | null = null;
|
||||
@@ -130,6 +138,8 @@ export class DownloadManager {
|
||||
);
|
||||
}
|
||||
|
||||
const shouldExtract = download.automaticallyExtract;
|
||||
|
||||
if (progress === 1 && download) {
|
||||
publishDownloadCompleteNotification(game);
|
||||
|
||||
@@ -137,23 +147,48 @@ export class DownloadManager {
|
||||
userPreferences?.seedAfterDownloadComplete &&
|
||||
download.downloader === Downloader.Torrent
|
||||
) {
|
||||
downloadsSublevel.put(gameId, {
|
||||
await downloadsSublevel.put(gameId, {
|
||||
...download,
|
||||
status: "seeding",
|
||||
shouldSeed: true,
|
||||
queued: false,
|
||||
extracting: shouldExtract,
|
||||
});
|
||||
} else {
|
||||
downloadsSublevel.put(gameId, {
|
||||
await downloadsSublevel.put(gameId, {
|
||||
...download,
|
||||
status: "complete",
|
||||
shouldSeed: false,
|
||||
queued: false,
|
||||
extracting: shouldExtract,
|
||||
});
|
||||
|
||||
this.cancelDownload(gameId);
|
||||
}
|
||||
|
||||
if (shouldExtract) {
|
||||
const gameFilesManager = new GameFilesManager(
|
||||
game.shop,
|
||||
game.objectId
|
||||
);
|
||||
|
||||
if (
|
||||
FILE_EXTENSIONS_TO_EXTRACT.some((ext) =>
|
||||
download.folderName?.endsWith(ext)
|
||||
)
|
||||
) {
|
||||
gameFilesManager.extractDownloadedFile();
|
||||
} else {
|
||||
gameFilesManager
|
||||
.extractFilesInDirectory(
|
||||
path.join(download.downloadPath, download.folderName!)
|
||||
)
|
||||
.then(() => {
|
||||
gameFilesManager.setExtractionComplete();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const downloads = await downloadsSublevel
|
||||
.values()
|
||||
.all()
|
||||
@@ -279,15 +314,18 @@ export class DownloadManager {
|
||||
url: downloadLink,
|
||||
save_path: download.downloadPath,
|
||||
header: `Cookie: accountToken=${token}`,
|
||||
allow_multiple_connections: true,
|
||||
connections_limit: 8,
|
||||
};
|
||||
}
|
||||
case Downloader.PixelDrain: {
|
||||
const id = download.uri.split("/").pop();
|
||||
const downloadUrl = await PixelDrainApi.getDownloadUrl(id!);
|
||||
|
||||
return {
|
||||
action: "start",
|
||||
game_id: downloadId,
|
||||
url: `https://cdn.pd5-gamedriveorg.workers.dev/api/file/${id}`,
|
||||
url: downloadUrl,
|
||||
save_path: download.downloadPath,
|
||||
};
|
||||
}
|
||||
@@ -329,13 +367,14 @@ export class DownloadManager {
|
||||
case Downloader.RealDebrid: {
|
||||
const downloadUrl = await RealDebridClient.getDownloadUrl(download.uri);
|
||||
|
||||
if (!downloadUrl) throw new Error(DownloadError.NotCachedInRealDebrid);
|
||||
if (!downloadUrl) throw new Error(DownloadError.NotCachedOnRealDebrid);
|
||||
|
||||
return {
|
||||
action: "start",
|
||||
game_id: downloadId,
|
||||
url: downloadUrl,
|
||||
save_path: download.downloadPath,
|
||||
allow_multiple_connections: true,
|
||||
};
|
||||
}
|
||||
case Downloader.TorBox: {
|
||||
@@ -348,6 +387,22 @@ export class DownloadManager {
|
||||
url,
|
||||
save_path: download.downloadPath,
|
||||
out: name,
|
||||
allow_multiple_connections: true,
|
||||
};
|
||||
}
|
||||
case Downloader.Hydra: {
|
||||
const downloadUrl = await HydraDebridClient.getDownloadUrl(
|
||||
download.uri
|
||||
);
|
||||
|
||||
if (!downloadUrl) throw new Error(DownloadError.NotCachedOnHydra);
|
||||
|
||||
return {
|
||||
action: "start",
|
||||
game_id: downloadId,
|
||||
url: downloadUrl,
|
||||
save_path: download.downloadPath,
|
||||
allow_multiple_connections: true,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
27
src/main/services/download/hydra-debrid.ts
Normal file
27
src/main/services/download/hydra-debrid.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { HydraApi } from "../hydra-api";
|
||||
|
||||
export class HydraDebridClient {
|
||||
public static getAvailableMagnets(
|
||||
magnets: string[]
|
||||
): Promise<Record<string, boolean>> {
|
||||
return HydraApi.put(
|
||||
"/debrid/check-availability",
|
||||
{
|
||||
magnets,
|
||||
},
|
||||
{ needsAuth: false }
|
||||
);
|
||||
}
|
||||
|
||||
public static async getDownloadUrl(magnet: string) {
|
||||
try {
|
||||
const response = await HydraApi.post("/debrid/request-file", {
|
||||
magnet,
|
||||
});
|
||||
|
||||
return response.downloadUrl;
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
158
src/main/services/game-files-manager.ts
Normal file
158
src/main/services/game-files-manager.ts
Normal file
@@ -0,0 +1,158 @@
|
||||
import path from "node:path";
|
||||
import fs from "node:fs";
|
||||
import type { GameShop } from "@types";
|
||||
import { downloadsSublevel, gamesSublevel, levelKeys } from "@main/level";
|
||||
import { FILE_EXTENSIONS_TO_EXTRACT } from "@shared";
|
||||
import { SevenZip } from "./7zip";
|
||||
import { WindowManager } from "./window-manager";
|
||||
import { publishExtractionCompleteNotification } from "./notifications";
|
||||
import { logger } from "./logger";
|
||||
|
||||
export class GameFilesManager {
|
||||
constructor(
|
||||
private readonly shop: GameShop,
|
||||
private readonly objectId: string
|
||||
) {}
|
||||
|
||||
private async clearExtractionState() {
|
||||
const gameKey = levelKeys.game(this.shop, this.objectId);
|
||||
const download = await downloadsSublevel.get(gameKey);
|
||||
|
||||
await downloadsSublevel.put(gameKey, {
|
||||
...download!,
|
||||
extracting: false,
|
||||
});
|
||||
|
||||
WindowManager.mainWindow?.webContents.send(
|
||||
"on-extraction-complete",
|
||||
this.shop,
|
||||
this.objectId
|
||||
);
|
||||
}
|
||||
|
||||
async extractFilesInDirectory(directoryPath: string) {
|
||||
if (!fs.existsSync(directoryPath)) return;
|
||||
const files = await fs.promises.readdir(directoryPath);
|
||||
|
||||
const compressedFiles = files.filter((file) =>
|
||||
FILE_EXTENSIONS_TO_EXTRACT.some((ext) => file.endsWith(ext))
|
||||
);
|
||||
|
||||
const filesToExtract = compressedFiles.filter(
|
||||
(file) => /part1\.rar$/i.test(file) || !/part\d+\.rar$/i.test(file)
|
||||
);
|
||||
|
||||
await Promise.all(
|
||||
filesToExtract.map((file) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
SevenZip.extractFile(
|
||||
{
|
||||
filePath: path.join(directoryPath, file),
|
||||
cwd: directoryPath,
|
||||
passwords: ["online-fix.me", "steamrip.com"],
|
||||
},
|
||||
() => {
|
||||
resolve(true);
|
||||
},
|
||||
() => {
|
||||
reject(new Error(`Failed to extract file: ${file}`));
|
||||
this.clearExtractionState();
|
||||
}
|
||||
);
|
||||
});
|
||||
})
|
||||
);
|
||||
|
||||
compressedFiles.forEach((file) => {
|
||||
const extractionPath = path.join(directoryPath, file);
|
||||
|
||||
if (fs.existsSync(extractionPath)) {
|
||||
fs.unlink(extractionPath, (err) => {
|
||||
if (err) {
|
||||
logger.error(`Failed to delete file: ${file}`, err);
|
||||
|
||||
this.clearExtractionState();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async setExtractionComplete(publishNotification = true) {
|
||||
const gameKey = levelKeys.game(this.shop, this.objectId);
|
||||
|
||||
const [download, game] = await Promise.all([
|
||||
downloadsSublevel.get(gameKey),
|
||||
gamesSublevel.get(gameKey),
|
||||
]);
|
||||
|
||||
await downloadsSublevel.put(gameKey, {
|
||||
...download!,
|
||||
extracting: false,
|
||||
});
|
||||
|
||||
WindowManager.mainWindow?.webContents.send(
|
||||
"on-extraction-complete",
|
||||
this.shop,
|
||||
this.objectId
|
||||
);
|
||||
|
||||
if (publishNotification) {
|
||||
publishExtractionCompleteNotification(game!);
|
||||
}
|
||||
}
|
||||
|
||||
async extractDownloadedFile() {
|
||||
const gameKey = levelKeys.game(this.shop, this.objectId);
|
||||
|
||||
const [download, game] = await Promise.all([
|
||||
downloadsSublevel.get(gameKey),
|
||||
gamesSublevel.get(gameKey),
|
||||
]);
|
||||
|
||||
if (!download || !game) return false;
|
||||
|
||||
const filePath = path.join(download.downloadPath, download.folderName!);
|
||||
|
||||
const extractionPath = path.join(
|
||||
download.downloadPath,
|
||||
path.parse(download.folderName!).name
|
||||
);
|
||||
|
||||
SevenZip.extractFile(
|
||||
{
|
||||
filePath,
|
||||
outputPath: extractionPath,
|
||||
passwords: ["online-fix.me", "steamrip.com"],
|
||||
},
|
||||
async () => {
|
||||
await this.extractFilesInDirectory(extractionPath);
|
||||
|
||||
if (fs.existsSync(extractionPath) && fs.existsSync(filePath)) {
|
||||
fs.unlink(filePath, (err) => {
|
||||
if (err) {
|
||||
logger.error(
|
||||
`Failed to delete file: ${download.folderName}`,
|
||||
err
|
||||
);
|
||||
|
||||
this.clearExtractionState();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
await downloadsSublevel.put(gameKey, {
|
||||
...download!,
|
||||
folderName: path.parse(download.folderName!).name,
|
||||
});
|
||||
|
||||
this.setExtractionComplete();
|
||||
},
|
||||
() => {
|
||||
this.clearExtractionState();
|
||||
}
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1,47 +1,71 @@
|
||||
import axios, { AxiosResponse } from "axios";
|
||||
import { wrapper } from "axios-cookiejar-support";
|
||||
import { CookieJar } from "tough-cookie";
|
||||
|
||||
export class DatanodesApi {
|
||||
private static readonly session = axios.create({});
|
||||
private static readonly jar = new CookieJar();
|
||||
|
||||
private static readonly session = wrapper(
|
||||
axios.create({
|
||||
jar: DatanodesApi.jar,
|
||||
withCredentials: true,
|
||||
})
|
||||
);
|
||||
|
||||
public static async getDownloadUrl(downloadUrl: string): Promise<string> {
|
||||
const parsedUrl = new URL(downloadUrl);
|
||||
const pathSegments = parsedUrl.pathname.split("/");
|
||||
try {
|
||||
const parsedUrl = new URL(downloadUrl);
|
||||
const pathSegments = parsedUrl.pathname.split("/").filter(Boolean);
|
||||
const fileCode = pathSegments[0];
|
||||
|
||||
const fileCode = decodeURIComponent(pathSegments[1]);
|
||||
const fileName = decodeURIComponent(pathSegments[pathSegments.length - 1]);
|
||||
await this.jar.setCookie("lang=english;", "https://datanodes.to");
|
||||
|
||||
const payload = new URLSearchParams({
|
||||
op: "download2",
|
||||
id: fileCode,
|
||||
rand: "",
|
||||
referer: "https://datanodes.to/download",
|
||||
method_free: "Free Download >>",
|
||||
method_premium: "",
|
||||
adblock_detected: "",
|
||||
});
|
||||
const payload = new URLSearchParams({
|
||||
op: "download2",
|
||||
id: fileCode,
|
||||
method_free: "Free Download >>",
|
||||
dl: "1",
|
||||
});
|
||||
|
||||
const response: AxiosResponse = await this.session.post(
|
||||
"https://datanodes.to/download",
|
||||
payload,
|
||||
{
|
||||
headers: {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
Cookie: `lang=english; file_name=${fileName}; file_code=${fileCode};`,
|
||||
Host: "datanodes.to",
|
||||
Origin: "https://datanodes.to",
|
||||
Referer: "https://datanodes.to/download",
|
||||
"User-Agent":
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
|
||||
},
|
||||
maxRedirects: 0,
|
||||
validateStatus: (status: number) => status === 302 || status < 400,
|
||||
const response: AxiosResponse = await this.session.post(
|
||||
"https://datanodes.to/download",
|
||||
payload,
|
||||
{
|
||||
headers: {
|
||||
"User-Agent":
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0",
|
||||
Referer: "https://datanodes.to/download",
|
||||
Origin: "https://datanodes.to",
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
},
|
||||
maxRedirects: 0,
|
||||
validateStatus: (status: number) => status === 302 || status < 400,
|
||||
}
|
||||
);
|
||||
|
||||
if (response.status === 302) {
|
||||
return response.headers["location"];
|
||||
}
|
||||
);
|
||||
|
||||
if (response.status === 302) {
|
||||
return response.headers["location"];
|
||||
if (typeof response.data === "object" && response.data.url) {
|
||||
return decodeURIComponent(response.data.url);
|
||||
}
|
||||
|
||||
const htmlContent = String(response.data);
|
||||
if (!htmlContent) {
|
||||
throw new Error("Empty response received");
|
||||
}
|
||||
|
||||
const downloadLinkRegex = /href=["'](https:\/\/[^"']+)["']/;
|
||||
const downloadLinkMatch = downloadLinkRegex.exec(htmlContent);
|
||||
if (downloadLinkMatch) {
|
||||
return downloadLinkMatch[1];
|
||||
}
|
||||
|
||||
throw new Error("Failed to get the download link");
|
||||
} catch (error) {
|
||||
console.error("Error fetching download URL:", error);
|
||||
throw error;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,3 +2,4 @@ export * from "./gofile";
|
||||
export * from "./qiwi";
|
||||
export * from "./datanodes";
|
||||
export * from "./mediafire";
|
||||
export * from "./pixeldrain";
|
||||
|
||||
42
src/main/services/hosters/pixeldrain.ts
Normal file
42
src/main/services/hosters/pixeldrain.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import axios from "axios";
|
||||
|
||||
export class PixelDrainApi {
|
||||
private static readonly browserHeaders = {
|
||||
"User-Agent":
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
|
||||
Accept:
|
||||
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
|
||||
"Accept-Language": "en-US,en;q=0.9",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
DNT: "1",
|
||||
Connection: "keep-alive",
|
||||
"Sec-Fetch-Dest": "document",
|
||||
"Sec-Fetch-Mode": "navigate",
|
||||
"Sec-Fetch-Site": "none",
|
||||
"Sec-Fetch-User": "?1",
|
||||
};
|
||||
|
||||
public static async getDownloadUrl(fileId: string): Promise<string> {
|
||||
try {
|
||||
const response = await axios.get(`https://pd.cybar.xyz/${fileId}`, {
|
||||
headers: this.browserHeaders,
|
||||
maxRedirects: 0,
|
||||
validateStatus: (status) =>
|
||||
status === 301 || status === 302 || status === 200,
|
||||
});
|
||||
|
||||
if (
|
||||
response.headers.location ||
|
||||
response.status === 301 ||
|
||||
response.status === 302
|
||||
) {
|
||||
return response.headers.location;
|
||||
}
|
||||
|
||||
throw new Error(`No redirect URL found (status: ${response.status})`);
|
||||
} catch (error) {
|
||||
console.error("Error fetching PixelDrain URL:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,6 @@ import { UserNotLoggedInError, SubscriptionRequiredError } from "@shared";
|
||||
import { omit } from "lodash-es";
|
||||
import { appVersion } from "@main/constants";
|
||||
import { getUserData } from "./user/get-user-data";
|
||||
import { isFuture, isToday } from "date-fns";
|
||||
import { db } from "@main/level";
|
||||
import { levelKeys } from "@main/level/sublevels";
|
||||
import type { Auth, User } from "@types";
|
||||
@@ -47,8 +46,8 @@ export class HydraApi {
|
||||
}
|
||||
|
||||
private static hasActiveSubscription() {
|
||||
const expiresAt = this.userAuth.subscription?.expiresAt;
|
||||
return expiresAt && (isFuture(expiresAt) || isToday(expiresAt));
|
||||
const expiresAt = new Date(this.userAuth.subscription?.expiresAt ?? 0);
|
||||
return expiresAt > new Date();
|
||||
}
|
||||
|
||||
static async handleExternalAuth(uri: string) {
|
||||
|
||||
@@ -8,3 +8,7 @@ export * from "./main-loop";
|
||||
export * from "./hydra-api";
|
||||
export * from "./ludusavi";
|
||||
export * from "./cloud-sync";
|
||||
export * from "./7zip";
|
||||
export * from "./game-files-manager";
|
||||
export * from "./common-redist-manager";
|
||||
export * from "./aria2";
|
||||
|
||||
@@ -3,18 +3,21 @@ import { DownloadManager } from "./download";
|
||||
import { watchProcesses } from "./process-watcher";
|
||||
import { AchievementWatcherManager } from "./achievements/achievement-watcher-manager";
|
||||
import { UpdateManager } from "./update-manager";
|
||||
import { watchFriendRequests } from "@main/events/profile/sync-friend-requests";
|
||||
import { MAIN_LOOP_INTERVAL } from "@main/constants";
|
||||
|
||||
export const startMainLoop = async () => {
|
||||
// eslint-disable-next-line no-constant-condition
|
||||
while (true) {
|
||||
await Promise.allSettled([
|
||||
watchProcesses(),
|
||||
watchFriendRequests(),
|
||||
DownloadManager.watchDownloads(),
|
||||
AchievementWatcherManager.watchAchievements(),
|
||||
DownloadManager.getSeedStatus(),
|
||||
UpdateManager.checkForUpdatePeriodically(),
|
||||
]);
|
||||
|
||||
await sleep(1500);
|
||||
await sleep(MAIN_LOOP_INTERVAL);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -12,6 +12,7 @@ import { logger } from "../logger";
|
||||
import { WindowManager } from "../window-manager";
|
||||
import type { Game, UserPreferences } from "@types";
|
||||
import { db, levelKeys } from "@main/level";
|
||||
import { restartAndInstallUpdate } from "@main/events/autoupdater/restart-and-install-update";
|
||||
|
||||
async function downloadImage(url: string | null) {
|
||||
if (!url) return undefined;
|
||||
@@ -72,10 +73,33 @@ export const publishNotificationUpdateReadyToInstall = async (
|
||||
ns: "notifications",
|
||||
}),
|
||||
icon: trayIcon,
|
||||
}).show();
|
||||
})
|
||||
.on("click", () => {
|
||||
restartAndInstallUpdate();
|
||||
})
|
||||
.show();
|
||||
};
|
||||
|
||||
export const publishNewFriendRequestNotification = async () => {};
|
||||
export const publishNewFriendRequestNotification = async () => {
|
||||
const userPreferences = await db.get<string, UserPreferences | null>(
|
||||
levelKeys.userPreferences,
|
||||
{
|
||||
valueEncoding: "json",
|
||||
}
|
||||
);
|
||||
|
||||
if (!userPreferences?.friendRequestNotificationsEnabled) return;
|
||||
|
||||
new Notification({
|
||||
title: t("new_friend_request_title", {
|
||||
ns: "notifications",
|
||||
}),
|
||||
body: t("new_friend_request_description", {
|
||||
ns: "notifications",
|
||||
}),
|
||||
icon: trayIcon,
|
||||
}).show();
|
||||
};
|
||||
|
||||
export const publishCombinedNewAchievementNotification = async (
|
||||
achievementCount,
|
||||
@@ -104,6 +128,17 @@ export const publishCombinedNewAchievementNotification = async (
|
||||
}
|
||||
};
|
||||
|
||||
export const publishExtractionCompleteNotification = async (game: Game) => {
|
||||
new Notification({
|
||||
title: t("extraction_complete", { ns: "notifications" }),
|
||||
body: t("game_extracted", {
|
||||
ns: "notifications",
|
||||
title: game.title,
|
||||
}),
|
||||
icon: trayIcon,
|
||||
}).show();
|
||||
};
|
||||
|
||||
export const publishNewAchievementNotification = async (info: {
|
||||
achievements: { displayName: string; iconUrl: string }[];
|
||||
unlockedAchievementCount: number;
|
||||
|
||||
@@ -6,9 +6,7 @@ import axios from "axios";
|
||||
import { exec } from "child_process";
|
||||
import { ProcessPayload } from "./download/types";
|
||||
import { gamesSublevel, levelKeys } from "@main/level";
|
||||
import { t } from "i18next";
|
||||
import { CloudSync } from "./cloud-sync";
|
||||
import { format } from "date-fns";
|
||||
|
||||
const commands = {
|
||||
findWineDir: `lsof -c wine 2>/dev/null | grep '/drive_c/windows$' | head -n 1 | awk '{for(i=9;i<=NF;i++) printf "%s ", $i; print ""}'`,
|
||||
@@ -234,10 +232,7 @@ function onOpenGame(game: Game) {
|
||||
game.objectId,
|
||||
game.shop,
|
||||
null,
|
||||
t("automatic_backup_from", {
|
||||
ns: "game_details",
|
||||
date: format(new Date(), "dd/MM/yyyy"),
|
||||
})
|
||||
CloudSync.getBackupLabel(true)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
@@ -308,10 +303,7 @@ const onCloseGame = (game: Game) => {
|
||||
game.objectId,
|
||||
game.shop,
|
||||
null,
|
||||
t("automatic_backup_from", {
|
||||
ns: "game_details",
|
||||
date: format(new Date(), "dd/MM/yyyy"),
|
||||
})
|
||||
CloudSync.getBackupLabel(true)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user