Merge pull request #112 from an-anime-team/next

Release 1.5.3
This commit is contained in:
Observer KRypt0n_ 2024-03-24 13:09:20 +02:00 committed by GitHub
commit df0967d2f7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
71 changed files with 2017 additions and 1420 deletions

View file

@ -27,7 +27,7 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: | run: |
apt update apt update
apt install -y libgtk-4-dev libadwaita-1-dev git curl apt install -y build-essential libgtk-4-dev libadwaita-1-dev git curl
- uses: dtolnay/rust-toolchain@stable - uses: dtolnay/rust-toolchain@stable
with: with:

View file

@ -26,7 +26,7 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: | run: |
apt update apt update
apt install -y libgtk-4-dev libadwaita-1-dev git curl apt install -y build-essential libgtk-4-dev libadwaita-1-dev git curl
- uses: dtolnay/rust-toolchain@stable - uses: dtolnay/rust-toolchain@stable
with: with:

View file

@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
### Added
- Bundle `applications-system-symbolic` icon to the app
- Added "force grab cursor" option to the gamescope settings
- Added Thai
- Added Ukrainian
### Changed
- Update wish url
- Updated dependencies
- Improved app args parsing
- Updated locales
### Fixed
- Fixed GtkSwitch UI state representation
## [1.5.2] - 29.12.2023 ## [1.5.2] - 29.12.2023
### Fixed ### Fixed

1171
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -15,34 +15,35 @@ lto = true
opt-level = "s" opt-level = "s"
[build-dependencies] [build-dependencies]
glib-build-tools = "0.18" glib-build-tools = "0.19"
[dependencies.anime-launcher-sdk] [dependencies.anime-launcher-sdk]
git = "https://github.com/an-anime-team/anime-launcher-sdk" git = "https://github.com/an-anime-team/anime-launcher-sdk"
tag = "1.12.5" tag = "1.12.7"
features = ["all", "star-rail", "star-rail-patch"] features = ["all", "star-rail", "star-rail-patch"]
# path = "../anime-launcher-sdk" # ! for dev purposes only # path = "../anime-launcher-sdk" # ! for dev purposes only
[dependencies] [dependencies]
relm4 = { version = "0.7.0-beta.2", features = ["macros", "libadwaita"] } relm4 = { version = "0.8.1", features = ["macros", "libadwaita"] }
gtk = { package = "gtk4", version = "0.7.3", features = ["v4_12"] } gtk = { package = "gtk4", version = "0.8.1", features = ["v4_12"] }
adw = { package = "libadwaita", version = "0.5.3", features = ["v1_3"] } adw = { package = "libadwaita", version = "0.6.0", features = ["v1_4"] }
rfd = { version = "0.12.1", features = ["xdg-portal"], default-features = false } rfd = { version = "0.14.1", features = ["xdg-portal", "tokio"], default-features = false }
open = "5.0.0" open = "5.0.0"
whatadistro = "0.1.0" whatadistro = "0.1.0"
serde_json = "1.0" serde_json = "1.0"
anyhow = "1.0" anyhow = "1.0"
lazy_static = "1.4.0" lazy_static = "1.4.0"
cached = { version = "0.46", features = ["proc_macro"] } cached = { version = "0.49", features = ["proc_macro"] }
md-5 = { version = "0.10", features = ["asm"] } md-5 = { version = "0.10", features = ["asm"] }
enum-ordinalize = "4.3"
tracing = "0.1" tracing = "0.1"
tracing-subscriber = "0.3" tracing-subscriber = "0.3"
fluent-templates = "0.8" fluent-templates = "0.9"
unic-langid = "0.9" unic-langid = "0.9"
human-panic = "1.2.2" human-panic = "1.2.2"

View file

@ -1,8 +1,3 @@
<div float="left" align="center">
<img src="repository/logo.png" width="200px" height="200px">
<img src="repository/patchstatus.svg" height="200px">
</div>
| Modern style | Classic style | | Modern style | Classic style |
| :-: | :-: | | :-: | :-: |
| <picture><source media="(prefers-color-scheme: dark)" srcset="repository/main-modern-dark.png"><img src="repository/main-modern.png"></picture> | <picture><source media="(prefers-color-scheme: dark)" srcset="repository/main-classic-dark.png"><img src="repository/main-classic.png"></picture> | | <picture><source media="(prefers-color-scheme: dark)" srcset="repository/main-modern-dark.png"><img src="repository/main-modern.png"></picture> | <picture><source media="(prefers-color-scheme: dark)" srcset="repository/main-classic-dark.png"><img src="repository/main-classic.png"></picture> |

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
<path d="m 8 0 c -0.550781 0 -1 0.449219 -1 1 v 0.238281 c 0 0.46875 -0.375 0.902344 -0.820312 1.046875 c -0.023438 0.007813 -0.042969 0.011719 -0.0625 0.019532 c -0.445313 0.148437 -1.003907 0.019531 -1.28125 -0.359376 l -0.140626 -0.195312 c -0.15625 -0.214844 -0.390624 -0.359375 -0.652343 -0.398438 c -0.261719 -0.042968 -0.527344 0.019532 -0.742188 0.175782 c -0.449219 0.324218 -0.550781 0.953125 -0.222656 1.398437 l 0.140625 0.199219 c 0.277344 0.378906 0.226562 0.953125 -0.050781 1.328125 c -0.011719 0.015625 -0.023438 0.035156 -0.035157 0.050781 c -0.273437 0.378906 -0.804687 0.601563 -1.25 0.457032 l -0.230468 -0.074219 c -0.523438 -0.171875 -1.089844 0.117187 -1.257813 0.640625 c -0.171875 0.527344 0.113281 1.089844 0.640625 1.261718 l 0.222656 0.074219 c 0.445313 0.144531 0.738282 0.636719 0.75 1.101563 v 0.070312 c 0.015626 0.464844 -0.304687 0.960938 -0.746093 1.105469 l -0.226563 0.074219 c -0.527344 0.167968 -0.8125 0.734375 -0.640625 1.257812 c 0.167969 0.527344 0.734375 0.8125 1.257813 0.644532 l 0.230468 -0.078126 c 0.445313 -0.144531 0.976563 0.078126 1.25 0.457032 c 0.011719 0.019531 0.027344 0.035156 0.039063 0.050781 c 0.277344 0.375 0.324219 0.953125 0.050781 1.328125 l -0.144531 0.203125 c -0.324219 0.445313 -0.226563 1.070313 0.222656 1.394531 c 0.445313 0.324219 1.070313 0.226563 1.394531 -0.21875 l 0.144532 -0.199218 c 0.273437 -0.375 0.835937 -0.507813 1.277344 -0.359376 c 0.019531 0.007813 0.042968 0.011719 0.0625 0.019532 c 0.445312 0.140625 0.820312 0.578125 0.820312 1.046875 v 0.238281 c 0 0.550781 0.449219 1 1 1 c 0.554688 0 1 -0.449219 1 -1 v -0.238281 c 0 -0.46875 0.378906 -0.90625 0.824219 -1.046875 c 0.019531 -0.007813 0.039062 -0.015625 0.0625 -0.019532 c 0.441406 -0.148437 1.003906 -0.019531 1.277343 0.359376 l 0.144532 0.199218 c 0.324218 0.445313 0.949218 0.542969 1.394531 0.21875 c 0.445313 -0.324218 0.546875 -0.949218 0.222656 -1.394531 l -0.144531 -0.203125 c -0.277344 -0.375 -0.226562 -0.953125 0.050781 -1.328125 c 0.011719 -0.015625 0.023438 -0.03125 0.035157 -0.050781 c 0.273437 -0.378906 0.804687 -0.601563 1.25 -0.457032 l 0.234374 0.078126 c 0.523438 0.167968 1.089844 -0.117188 1.257813 -0.644532 c 0.171875 -0.523437 -0.117187 -1.089844 -0.640625 -1.257812 l -0.230469 -0.074219 c -0.445312 -0.144531 -0.734375 -0.640625 -0.742187 -1.105469 c -0.003906 -0.023437 -0.003906 -0.046875 -0.003906 -0.070312 c -0.015626 -0.464844 0.300781 -0.957032 0.746093 -1.101563 l 0.230469 -0.074219 c 0.523438 -0.171874 0.8125 -0.734374 0.640625 -1.261718 c -0.171875 -0.523438 -0.734375 -0.8125 -1.257813 -0.640625 l -0.230468 0.074219 c -0.445313 0.144531 -0.976563 -0.078126 -1.25 -0.457032 c -0.015625 -0.015625 -0.027344 -0.035156 -0.039063 -0.050781 c -0.277343 -0.375 -0.324219 -0.949219 -0.050781 -1.328125 l 0.144531 -0.199219 c 0.324219 -0.445312 0.226563 -1.074219 -0.222656 -1.398437 c -0.214844 -0.15625 -0.480469 -0.21875 -0.742187 -0.175782 c -0.261719 0.039063 -0.5 0.183594 -0.652344 0.398438 l -0.144532 0.195312 c -0.273437 0.378907 -0.835937 0.507813 -1.277343 0.363282 c -0.023438 -0.007813 -0.042969 -0.015625 -0.066407 -0.023438 c -0.441406 -0.140625 -0.820312 -0.578125 -0.820312 -1.046875 v -0.238281 c 0 -0.550781 -0.449219 -1 -1 -1 z m 0 4 c 0.871094 0 1.675781 0.273438 2.332031 0.742188 c 0.003907 0.007812 0.011719 0.015624 0.019531 0.023437 c 0.011719 0.003906 0.019532 0.007813 0.03125 0.015625 c 0.660157 0.484375 1.160157 1.175781 1.421876 1.976562 v 0.007813 s 0.003906 0.003906 0.003906 0.007813 c 0.292968 0.851562 0.15625 1.65625 0 2.457031 c 0 0 -0.003906 0.003906 -0.003906 0.007812 v 0.003907 c -0.257813 0.800781 -0.757813 1.488281 -1.414063 1.976562 c -0.015625 0.003906 -0.027344 0.011719 -0.039063 0.019531 c -0.007812 0.007813 -0.015624 0.011719 -0.019531 0.019531 c -0.65625 0.46875 -1.460937 0.742188 -2.332031 0.742188 c -0.855469 0 -1.644531 -0.265625 -2.289062 -0.714844 c -0.019532 -0.015625 -0.042969 -0.03125 -0.0625 -0.046875 c -0.011719 -0.007812 -0.023438 -0.015625 -0.035157 -0.019531 c -0.648437 -0.484375 -1.148437 -1.160156 -1.40625 -1.945312 c -0.003906 -0.011719 -0.007812 -0.023438 -0.011719 -0.035157 c -0.003906 -0.007812 -0.007812 -0.011719 -0.011718 -0.019531 c -0.28125 -0.847656 -0.148438 -1.644531 0 -2.4375 c 0.003906 -0.003906 0.007812 -0.011719 0.011718 -0.015625 c 0.003907 -0.015625 0.007813 -0.027344 0.011719 -0.039063 c 0.261719 -0.789062 0.761719 -1.464843 1.414063 -1.945312 c 0.007812 -0.007812 0.019531 -0.011719 0.027344 -0.015625 c 0.019531 -0.015625 0.042968 -0.035156 0.0625 -0.050781 c 0.644531 -0.449219 1.433593 -0.714844 2.289062 -0.714844 z m 0 0" fill="#2e3436"/>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -31,3 +31,5 @@ ja-jp = 日本語
ko-kr = 한국어 ko-kr = 한국어
id-id = Indonesia id-id = Indonesia
vi-vn = Tiếng Việt vi-vn = Tiếng Việt
uk-ua = Українська
th-th = ไทย

View file

@ -11,3 +11,6 @@ nis-description = Eine Open-Source-Upscaling-Technik, die von Nvidia als herstel
other-settings = Andere Einstellungen other-settings = Andere Einstellungen
framerate-limit = Framerate-Limit framerate-limit = Framerate-Limit
unfocused-framerate-limit = Unfokussiert Framerate-Limit unfocused-framerate-limit = Unfokussiert Framerate-Limit
force-grab-cursor = Cursor greifen erzwingen
force-grab-cursor-description = Verwende immer den relativen Mausmodus, anstatt abhängig von der Sichtbarkeit des Cursors umzuschalten. Der Mauszeiger wird korrekt in der Mitte des Spiels zentriert.

View file

@ -11,3 +11,6 @@ nis-description = An open source upscaling technique developed by Nvidia as a cr
other-settings = Other settings other-settings = Other settings
framerate-limit = Framerate limit framerate-limit = Framerate limit
unfocused-framerate-limit = Unfocused framerate limit unfocused-framerate-limit = Unfocused framerate limit
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -11,3 +11,6 @@ nis-description = Una técnica de escalado de código abierto desarrollada por N
other-settings = Otras opciones other-settings = Otras opciones
framerate-limit = Límite de framerate framerate-limit = Límite de framerate
unfocused-framerate-limit = Límite de framerate en segundo plano unfocused-framerate-limit = Límite de framerate en segundo plano
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -11,3 +11,6 @@ nis-description = Une technologie de mise à l'échelle Open Source développée
other-settings = Autres paramètres other-settings = Autres paramètres
framerate-limit = Limitation des FPS framerate-limit = Limitation des FPS
unfocused-framerate-limit = Limitation des FPS hors focus unfocused-framerate-limit = Limitation des FPS hors focus
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -48,8 +48,8 @@ fps-unlocker-description = Eltávolítja az fps limitet. Az anti-cheat észreveh
enabled = Bekapcsolva enabled = Bekapcsolva
fps-unlocker-interval = Overwrite interval fps-unlocker-interval = Felülírási időköz
fps-unlocker-interval-description = Delay in milliseconds between overwriting the FPS limit value. Periodic overwrites are necessary to prevent it from resetting fps-unlocker-interval-description = Milliszekundumban (ms) hogy mekkora időközönként van felülírva az fps limit értéke. Erre szükség van hogy ne állítsa vissza magát az fps limit
window-mode = Ablak mód window-mode = Ablak mód
borderless = Keretmentes borderless = Keretmentes

View file

@ -11,3 +11,6 @@ nis-description = Open source upscaling technika az Nvidia-tól, alternatíva a
other-settings = Egyéb beállítások other-settings = Egyéb beállítások
framerate-limit = FPS limit framerate-limit = FPS limit
unfocused-framerate-limit = Fókuszon kívüli FPS limit unfocused-framerate-limit = Fókuszon kívüli FPS limit
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -48,8 +48,8 @@ fps-unlocker-description = Meniadakan batas maksimum frame yang dapat dirender o
enabled = Aktifkan enabled = Aktifkan
fps-unlocker-interval = Overwrite interval fps-unlocker-interval = Interval penulisan ulang FPS
fps-unlocker-interval-description = Delay in milliseconds between overwriting the FPS limit value. Periodic overwrites are necessary to prevent it from resetting fps-unlocker-interval-description = Jeda antara penulisan ulang nilai batas FPS dalam milidetik. Penulisan ulang secara berkala dibutuhkan untuk mencegah nilai batas FPS kembali seperti semula
window-mode = Window Mode window-mode = Window Mode
borderless = Tanpa border borderless = Tanpa border

View file

@ -11,3 +11,6 @@ nis-description = Teknik peningkatan skala yang dikembangkan oleh Nvidia sebagai
other-settings = Pengaturan lainnya other-settings = Pengaturan lainnya
framerate-limit = Batas framerate framerate-limit = Batas framerate
unfocused-framerate-limit = Batas framerate saat tidak fokus unfocused-framerate-limit = Batas framerate saat tidak fokus
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -48,8 +48,8 @@ fps-unlocker-description = Rimuovi la limitazione del rendering dei frame modifi
enabled = Abilitato enabled = Abilitato
fps-unlocker-interval = Overwrite interval fps-unlocker-interval = Intervallo di sovrascrittura
fps-unlocker-interval-description = Delay in milliseconds between overwriting the FPS limit value. Periodic overwrites are necessary to prevent it from resetting fps-unlocker-interval-description = Ritardo in millisecondi tra le sovrascritture del valore limite FPS. Sovrascritture periodiche sono necessarie per impedire che si reimposti al valore predefinito
window-mode = Modalità della finestra window-mode = Modalità della finestra
borderless = Senza bordi borderless = Senza bordi

View file

@ -11,3 +11,6 @@ nis-description = Una tecnica di upscaling open-source sviluppata da Nvidia per
other-settings = Altre impostazioni other-settings = Altre impostazioni
framerate-limit = Limite del framerate framerate-limit = Limite del framerate
unfocused-framerate-limit = Limite del framerate quando fuori dal focus unfocused-framerate-limit = Limite del framerate quando fuori dal focus
force-grab-cursor = Forza la cattura del cursore
force-grab-cursor-description = Usa sempre la modalità relativa del mouse invece di cambiare in base alla visibilità del cursore. Il cursore del mouse verrà correttamente centrato nel gioco

View file

@ -11,3 +11,6 @@ nis-description = An open source upscaling technique developed by Nvidia as a cr
other-settings = その他の設定 other-settings = その他の設定
framerate-limit = FPS制限 framerate-limit = FPS制限
unfocused-framerate-limit = 非フォーカス時の最大FPS unfocused-framerate-limit = 非フォーカス時の最大FPS
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -11,3 +11,6 @@ nis-description = Nvidia가 독점 DLSS 솔루션에 대한 낮은 오버헤드
other-settings = 기타 설정 other-settings = 기타 설정
framerate-limit = 프레임 속도 제한 framerate-limit = 프레임 속도 제한
unfocused-framerate-limit = 초점이 맞지 않는 프레임 속도 제한 unfocused-framerate-limit = 초점이 맞지 않는 프레임 속도 제한
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -11,3 +11,6 @@ nis-description = Een open source opschalingstechniek ontwikkeld door Nvidia als
other-settings = Andere instellingen other-settings = Andere instellingen
framerate-limit = Frameratelimiet framerate-limit = Frameratelimiet
unfocused-framerate-limit = Ongefocuste frameratelimiet unfocused-framerate-limit = Ongefocuste frameratelimiet
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -11,3 +11,6 @@ nis-description = Technika skalowania otwartego źródła opracowana przez Nvidi
other-settings = Inne ustawienia other-settings = Inne ustawienia
framerate-limit = Limit klatek na sekundę framerate-limit = Limit klatek na sekundę
unfocused-framerate-limit = Limit klatek na sekundę po utraceniu skupienia unfocused-framerate-limit = Limit klatek na sekundę po utraceniu skupienia
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -11,3 +11,6 @@ nis-description = Uma técnica de upscaling de código aberto desenvolvida pela
other-settings = Outras configuraões other-settings = Outras configuraões
framerate-limit = Limite de taxa de quadros framerate-limit = Limite de taxa de quadros
unfocused-framerate-limit = Limite de taxa de quadros desfocado unfocused-framerate-limit = Limite de taxa de quadros desfocado
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -11,3 +11,6 @@ nis-description = Открытая техника масштабирования
other-settings = Другие настройки other-settings = Другие настройки
framerate-limit = Лимит числа кадров framerate-limit = Лимит числа кадров
unfocused-framerate-limit = Лимит числа кадров вне фокуса unfocused-framerate-limit = Лимит числа кадров вне фокуса
force-grab-cursor = Принудительный захват курсора
force-grab-cursor-description = Использовать относительный режим мыши вместо переворачивания в зависимости от видимости курсора. Курсор мыши будет правильно центрирован в игре

View file

@ -11,3 +11,6 @@ nis-description = En uppskalningsteknik med öppen källkod som utvecklats av Nv
other-settings = Andra inställningar other-settings = Andra inställningar
framerate-limit = Gräns för bilduppdateringshastighet framerate-limit = Gräns för bilduppdateringshastighet
unfocused-framerate-limit = Gräns för bilduppdateringshastighet utan fokus unfocused-framerate-limit = Gräns för bilduppdateringshastighet utan fokus
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -0,0 +1,20 @@
components = ส่วนประกอบ
components-description = จัดการเวอร์ชัน Wine และ DXVK
selected-version = เวอร์ชันที่เลือก
recommended-only = แสดงเเวอร์ชั่นที่แนะนำเท่านั้น
wine-version = เวอร์ชันของ Wine
wine-recommended-description = แสดงเฉพาะเวอร์ชัน Wine ที่แนะนำเท่านั้น
wine-options = การตั้งค่าของ Wine
wine-use-shared-libraries = ใช้ไลบรารีที่ใช้ร่วมกันของ Wine
wine-use-shared-libraries-description = ตั้งค่าตัว LD_LIBRARY_PATH เพื่อโหลดไลบรารีระบบจากบิลด์ Wine ที่เลือก
gstreamer-use-shared-libraries = ใช้ไลบรารีที่ใช้ร่วมกันของ gstreamer
gstreamer-use-shared-libraries-description = ตั้งค่าตัวแปร GST_PLUGIN_PATH เพื่อโหลดไลบรารี gstreamer จากบิลด์ Wine ที่เลือก
dxvk-version = เวอร์ชันของ DXVK
dxvk-selection-disabled = การเลือก DXVK ถูกปิดใช้งานโดยการตั้งค่ากลุ่ม Wine ของคุณ
dxvk-recommended-description = แสดงเฉพาะเวอร์ชัน DXVK ที่แนะนำเท่านั้น

View file

@ -0,0 +1,57 @@
game-settings-description = จัดการการตั้งค่าในเกมและเซสชันบัญชี
sandbox-settings-description = รันเกมในแซนด์บ็อกซ์ คล้ายกับที่ Flatpak ทำ
environment-settings-description = ระบุตัวแปรสภาวะแวดล้อมและคำสั่งเปิดเกม
wine = Wine
synchronization = การซิงโครไนซ์
wine-sync-description = เทคโนโลยีที่ใช้ในการประสานเหตุการณ์ Wine ภายใน
language = ภาษา
wine-lang-description = ภาษาที่ใช้ในสภาพแวดล้อมไวน์ สามารถแก้ไขปัญหารูปแบบแป้นพิมพ์ได้
system = ระบบ
borderless-window = หน้าต่างไร้ขอบ
virtual-desktop = เดสก์ท็อปเสมือน
map-drive-c = เชื่อม ไดรฟ์ C:
map-drive-c-description = เชื่อมโยง ไดรฟ์ C: จาก Wine prefix ไปยังระบบ dosdevices โดยอัตโนมัติ
map-game-folder = เชื่อม โฟลเดอร์เกม
map-game-folder-description = เชื่อมโยงโฟลเดอร์เกมไปยังระบบ dosdevices โดยอัตโนมัติ
game = เกม
hud = HUD
fsr = FSR
fsr-description = ยกระดับความชัดเกมให้เข้ากับขนาดจอภาพของคุณ หากต้องการใช้เลือกความละเอียดที่ต่ำกว่าในการตั้งค่าของเกมแล้วกด Alt+Enter
ultra-quality = คุณภาพเยี่ยม
quality = คุณภาพ
balanced = พอประมาณ
performance = เร็วที่สุด
gamemode = Gamemode
gamemode-description = จัดลำดับความสำคัญของเกมเหนือกระบวนการอื่น
gamescope = Gamescope
gamescope-description = Gamescope เป็นเครื่องมือจาก Valve ที่ช่วยให้เกมทำงานในอินสแตนซ์ Xwayland ที่แยกจากระบบ และรองรับ GPU ของ AMD, Intel และ Nvidia
discord-rpc = Discord RPC
discord-rpc-description = Discord RPC อนุญาตให้คุณให้ข้อมูล Discord ที่คุณกำลังเล่นเกมอยู่เพื่อแจ้งให้เพื่อนของคุณทราบ
icon = ไอคอน
title = หัวข้อ
description = คำอธิบาย
fps-unlocker = FPS Unlocker
fps-unlocker-description = ลบข้อจำกัดในการเรนเดอร์เฟรมโดยการปรับเปลี่ยนหน่วยความจำของเกม สามารถตรวจจับได้โดยระบบการป้องกันการโกงของเกม
enabled = เปิดใช้งาน
fps-unlocker-interval = เขียนทับช่วงเวลา
fps-unlocker-interval-description = การเขียนทับค่าจำกัด FPS ทุกมิลลิวินาที จำเป็นต้องเขียนทับเป็นระยะเพื่อป้องกันไม่ให้รีเซ็ต
window-mode = โหมดหน้าต่างเกม
borderless = โหมดไร้ขอบเขต
popup = ป๊อปอัพ
fullscreen = เต็มจอ

View file

@ -0,0 +1,7 @@
environment = สภาวะแวดล้อม
game-command = คำสั่งเกม
game-command-description = คำสั่งที่ใช้ในการเปิดเกม ตัวยึดตำแหน่ง %command% ถูกสร้างขึ้นโดยอัตโนมัติโดยตัวเรียกใช้งาน ตัวอย่างเช่น: gamemoderun '%command%'
new-variable = ตัวแปรใหม่
name = ชื่อ
value = ค่า
add = เพิ่ม

View file

@ -0,0 +1,66 @@
launcher-folder-opening-error = ไม่สามารถเปิดโฟลเดอร์ Launcher ได้
game-folder-opening-error = ไม่สามารถเปิดโฟลเดอร์เกมได้
config-file-opening-error = ไม่สามารถเปิดไฟล์ config ได้
debug-file-opening-error = ไม่สามารถเปิดไฟล์ debug ได้
wish-url-search-failed = ไม่พบ URL การอธิษฐาน
wish-url-opening-error = ไม่สามารถเปิด URL การอธิษฐานได้
wine-run-error = ล้มเหลวในการปฏิบัติการเรียกใช้ไฟล์ {$executable} โดยใช้ Wine
game-launching-failed = ไม่สามารถเปิดเกมได้
failed-get-selected-wine = ไม่สามารถดาวน์โหลดเวอร์ชัน wine ที่เลือกไปได้
downloading-failed = การดาวน์โหลดล้มเหลว
unpacking-failed = การแกะไฟล์ล้มเหลว
kill-game-process-failed = ไม่สามารถฆ่ากระบวนการของเกมได้
game-file-repairing-error = ไม่สามารถซ่อมแซมไฟล์เกมได้
integrity-files-getting-error = ไม่สามารถรับไฟล์การตรวจสอบความสมบูรณ์ได้
background-downloading-failed = ดาวน์โหลดภาพพื้นหลังไม่สำเร็จ
components-index-sync-failed = ไม่สามารถซิงค์ index ส่วนประกอบ
components-index-verify-failed = ไม่สามารถตรวจสอบ index ส่วนประกอบได้
config-update-error = บันทึกการกำหนดค่าไม่สำเร็จ
wine-prefix-update-failed = ไม่สามารถอัปเดตการตั้งค่า Wine
dxvk-install-failed = ติดตั้ง DXVK ไม่สำเร็จ
voice-package-deletion-error = ลบแพ็คเกจเสียงไม่สำเร็จ
game-diff-finding-error = ไม่พบความแตกต่างของเกม
patch-info-fetching-error = ไม่สามารถเรียกข้อมูลแพตช์ได้
launcher-state-updating-error = อัปเดตสถานะ launcher ไม่สำเร็จ
package-not-available = ไม่พบแพ็คเกจนี้: {$package}
wine-download-error = ดาวน์โหลด Wine ไม่สำเร็จ
wine-unpack-errror = ไม่สามารถแกะไฟล์ Wine ได้
wine-install-failed = ไม่สามารถติดตั้ง Wine ได้
dxvk-download-error = ดาวน์โหลด DXVK ไม่สำเร็จ
dxvk-unpack-error = ไม่สามารถแกะไฟล์ DXVK ได้
dxvk-apply-error = ไม่สามารถติดตั้ง DXVK ได้
downloaded-wine-list-failed = ไม่สามารถแสดงเวอร์ชัน Wine ที่ดาวน์โหลดไปแล้วได้
patch-sync-failed = ไม่สามารถซิงค์โฟลเดอร์แพตช์ได้
patch-state-check-failed = ไม่สามารถตรวจสอบสถานะโฟลเดอร์แพตช์ได้
game-patching-error = ไม่สามารถแพตช์เกมได้
# Disable telemetry
telemetry-servers-disabling-error = ไม่สามารถปิดใช้งานเซิร์ฟเวอร์การวัดและส่งข้อมูล
# Sandbox
documentation-url-open-failed = ไม่สามารถเปิด URL เอกสารประกอบ
# Game
game-session-add-failed = ไม่สามารถเพิ่มเซสชันเกมได้
game-session-update-failed = ไม่สามารถอัปเดตเซสชันเกมได้
game-session-remove-failed = ไม่สามารถลบเซสชันเกมได้
game-session-set-current-failed = ไม่สามารถตั้งเซสชันเกมปัจจุบันได้
game-session-apply-failed = ไม่สามารถติดตั้งเซสชันเกมได้
# Enhancements
discord-rpc-icons-fetch-failed = ไม่สามารถดึงไอคอน Discord RPC
discord-rpc-icon-download-failed = ไม่สามารถดาวน์โหลดไอคอน Discord RPC

View file

@ -0,0 +1,64 @@
welcome = ยินดีต้อนรับ
welcome-page-message =
สวัสดี! ยินดีต้อนรับสู่ An Anime Game Launcher
เราจำเป็นต้องเตรียมบางสิ่งและดาวน์โหลดส่วนประกอบเริ่มต้นก่อนที่คุณจะสามารถเล่นเกมได้
tos-violation-warning = คำเตือนการละเมิดข้อตกลงการใช้บริการของเกม
tos-violation-warning-message =
Launcher นี้เป็นเครื่องมือที่ไม่การเกี่ยวข้องแต่อย่างใดกับ {company-name} หรือ {company-alter-name}.
เครื่องมือนี้ออกแบบมาเพื่ออำนวยความสะดวกในการเล่น {game-name} บน Linux และสร้างขึ้นโดยมีวัตถุประสงค์เพียงอย่างเดียวในการติดตั้งและรันเกมโดยมีความยุ่งยากที่น้อยลง
Launcher นี้ทำงานได้โดยใช้คอมโพเนนต์ที่มีอยู่แล้ว ผู้ใช้จึงจะได้รับประสบการณ์ที่เรียบง่าย
อย่างไรก็ตาม ส่วนประกอบบางอย่างที่ใช้อาจฝ่าฝืนข้อกำหนดในการให้บริการของ {company-name} สำหรับเกม {game-name}
หากคุณใช้ Launcher นี้ บัญชีของคุณอาจถูกระบุว่าไม่เป็นไปตามข้อกำหนดของ {company-name}/{company-alter-name}.
หากเกิดเหตุการณ์เช่นนี้ เนื่องจากบัญชีของคุณไม่ปฏิบัติตามข้อกำหนด, {company-name}/{company-alter-name} จึงมีอิสระที่จะทำสิ่งที่พวกเขาอยาก รวมถึงการแบนบัญชีของคุณ
หากคุณเข้าใจถึงความเสี่ยงในการพยายามเล่นเกมอย่างไม่เป็นทางการ ให้กด ตกลง เพื่อดำเนินการต่อ
tos-dialog-title = คุณแน่ใจหรือว่าคุณเข้าใจสิ่งที่เราพูด?
tos-dialog-message =
1. อย่าเผยแพร่ข้อมูลใดๆ เกี่ยวกับโครงการนี้
2. อย่าใช้มันในทางที่ผิดโดยใช้ไคลเอนต์ดัดแปลง
3. ถามคำถามเป็นพิเศษในเซิร์ฟเวอร์ Discord หรือ Matrix ของเรา
dependencies = โปรแกรมที่จำเป็น
missing-dependencies-title = คุณขาดโปรแกรมที่จำเป็น!
missing-dependencies-message = คุณต้องติดตั้งแพ็คเกจบางอย่างให้กับระบบของคุณก่อนที่จะดำเนินการติดตั้งต่อ
default-paths = เส้นทางเริ่มต้น
choose-default-paths = เลือกเส้นทางเริ่มต้น
show-all-folders = ฉันรู้ว่าฉันกำลังทำอะไรอยู่
show-all-folders-subtitle = แสดงการตั้งค่าการเลือกเส้นทางเพิ่มเติม (ทำตามที่ฉันบอก...)
runners-folder = โฟลเดอร์ Runners
dxvks-folder = โฟลเดอร์ DXVKs
wine-prefix-folder = โฟลเดอร์ prefix ของ Wine
global-game-installation-folder = โฟลเดอร์การติดตั้งเวอร์ชันเกมสากล
chinese-game-installation-folder = โฟลเดอร์การติดตั้งเวอร์ชันเกมจีน
fps-unlocker-folder = โฟลเดอร์ FPS Unlocker
components-index = Index ส่วนประกอบ
patch-folder = โฟลเดอร์แพทช์
temp-folder = โฟลเดอร์ชั่วคราว
migrate = ย้าย
select-voice-packages = เลือกแพ็คเกจภาษาเสียง
download-components = ดาวน์โหลดส่วนประกอบ
download-dxvk = ดาวน์โหลด DXVK
apply-dxvk = ติดตั้ง DXVK
finish = สำเร็จ
finish-title = ทุกอย่างเสร็จแล้ว!
finish-message = ดาวน์โหลดส่วนประกอบพื้นฐานทั้งหมดแล้ว ตอนนี้คุณสามารถรีสตาร์ท Launcher และดาวน์โหลดเกมได้ ยินดีต้อนรับสู่ club ของเรา!

View file

@ -0,0 +1,7 @@
game-sessions = เซสชันเกม
active-sessions = เซสชันที่ใช้งานอยู่
active-session-description = เซสชั่นเกมที่เลือกในปัจจุบัน อัปเดตหลังจากเปิดตัวเกมแต่ละครั้ง
update-session = อัปเดตเซสชันโดยใช้ค่าตั้งค่า Wine ปัจจุบัน
delete-session = ลบเซสชัน

View file

@ -0,0 +1,16 @@
game-resolution = ความละเอียดของเกม
gamescope-resolution = ความละเอียดของ Gamescope
upscaling = การเพิ่มขนาดความละเอียด
integer-scaling = มาตราส่วนจำนวนเต็ม
integer-scaling-description = เปลี่ยนแต่ละพิกเซลเป็นกลุ่มสี่เหลี่ยมจัตุรัสหรือสี่เหลี่ยมของจำนวนเต็มของพิกเซลสีเดียวกัน ป้องกันการสูญเสียความคมชัดเมื่อปรับขนาด Full HD เป็น 4K
gamescope-fsr-description = เทคนิคการขยายขนาดที่พัฒนาโดย AMD เพื่อคุณภาพการขยายขนาดที่ดีขึ้น
nis-description = เทคนิคการขยายขนาดโอเพ่นซอร์สที่พัฒนาโดย Nvidia เป็นทางเลือกข้ามผู้จำหน่ายและมีค่าใช้จ่ายต่ำแทนโซลูชัน DLSS ที่เป็นกรรมสิทธิ์ ซึ่งหมายความว่าใช้งานได้กับ AMD และ Intel GPU รวมถึง Nvidia GPU
other-settings = การตั้งค่าอื่นๆ
framerate-limit = ขีดจำกัดเฟรมเรต
unfocused-framerate-limit = เฟรมเรทจำกัดขณะไม่ได้โฟกัส
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -0,0 +1,70 @@
appearance = รูปร่าง
modern = โมเดิร์น
classic = คลาสสิค
update-background = อัพเดตภาพพื้นหลัง
update-background-description = ดาวน์โหลดภาพพื้นหลังสำหรับ launcher คุณสามารถปิดการใช้งานเพื่อใช้รูปภาพที่คุณกำหนดเองแทนได้
launcher-language = ภาษาของ launcher
launcher-language-description = ใช้หลังจากรีสตาร์ท launcher
game-edition = ฉบับเกม
global = สากล
china = จีน
game-environment = สภาพแวดล้อมของเกม
game-environment-description = รับคุณสมบัติเฉพาะ เช่น วิธีการชำระเงินอื่นๆ
game-voiceovers = ภาษาพากย์เสียงเกม
game-voiceovers-description = ภาษาเสียงพากย์เกมที่ดาวน์โหลดได้ คุณสามารถเลือกในการตั้งค่าเกม
english = ภาษาอังกฤษ
japanese = ภาษาญี่ปุ่น
korean = ภาษาเกาหลี
chinese = ภาษาจีน
migrate-installation = ย้ายการติดตั้งเกม
migrate-installation-description = เปิดหน้าต่างพิเศษที่คุณสามารถเปลี่ยนโฟลเดอร์การติดตั้งเกมของคุณได้
repair-game = ซ่อมแซมการติดตั้งเกม
status = สถานะ
game-version = เวอร์ชันเกม
game-not-installed = ยังไม่ได้ติดตั้ง
game-predownload-available = มีการอัปเดตเกมให้ดาวน์โหลดได้ล่วงหน้าแล้ว: {$old} -> {$new}
game-update-available = มีอัปเดตเวอร์ชันเกมใหม่: {$old} -> {$new}
game-outdated = เวอร์ชันเกมล้าสมัยเกินไปและไม่สามารถอัปเดตได้. เวอร์ชันล่าสุด: {$latest}
player-patch-version = เวอร์ชั่นแพทช์
player-patch-version-description = แพทช์หลักที่ให้คุณเล่นเกมบน Linux
patch-not-available = ไม่พร้อมใช้งาน
patch-not-available-tooltip = ไม่สามารถเข้าถึงเซิร์ฟเวอร์แพทช์ได้
patch-outdated = แพทช์ล้าสมัย ({$current})
patch-outdated-tooltip = แพทช์ล้าสมัยแล้ว: {$current} -> {$latest}
patch-preparation = เตรียมการ
patch-preparation-tooltip = แพทช์อยู่ระหว่างการพัฒนา
patch-testing-tooltip = มีแพทช์ทดสอบให้ใช้งาน
patch-not-applied-tooltip = แพทช์ยังไม่มีการติดตั้ง
apply-main-patch = ติดตั้งแพทช์หลัก
apply-main-patch-description = การทดลอง. การปิดใช้งานจะทำให้คุณสามารถรันเกมได้โดยไม่ต้องใช้แพตช์ สิ่งนี้อาจไม่ทำงานหรือต้องมีการแก้ไขไฟล์ด้วยตนเอง ใใช้เฉพาะเมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่
disable-mhypbase = ปิดการใช้งาน mhypbase
disable-mhypbase-description = การทดลอง. หากเปิดใช้งาน launcher จะปิดใช้งาน mhypbase.dll ในระหว่างการติดตั้งแพตช์หลัก ซึ่งในปัจจุบันเทียบเท่ากับแพตช์ xlua ปรับปรุงประสิทธิภาพและลดการใช้งาน CPU
ask-superuser-permissions = ขอสิทธิ์ผู้ใช้ขั้นสูง (superuser)
ask-superuser-permissions-description = Launcher จะใช้ไฟล์เหล่านี้เพื่ออัปเดตไฟล์โฮสต์ของคุณโดยอัตโนมัติ สิ่งนี้ไม่จำเป็นในรุ่น flatpak
launcher-behavior = พฤติกรรม Launcher
launcher-behavior-description = หน้าต่าง Launcher ควรทำอย่างไรเมื่อเริ่มเกม
wine-tools = เครื่องมือ Wine
command-line = Command line
registry-editor = Registry editor
explorer = Explorer
task-manager = Task manager
configuration = Configuration
debugger = Debugger

View file

@ -0,0 +1,76 @@
custom = กำหนดเอง
none = ไม่ใช้
default = ค่าเริ่มต้น
details = รายละเอียด
options = ตัวเลือก
width = ความกว้าง
height = ความสูง
# Menu items
launcher-folder = โฟลเดอร์ Launcher
game-folder = โฟลเดอร์เกม
config-file = ไฟล์ Config
debug-file = ไฟล์ Debug
wish-url = เปิด URL การอธิษฐาน
about = เกี่ยวกับ
close = ปิด
hide = ซ่อน
nothing = ไม่ทำอะไร
save = บันทึก
continue = ดำเนินการต่อ
resume = ดำเนินการต่อ
exit = ออก
check = ตรวจสอบ
restart = เริ่มต้นใหม่
agree = ตกลง
loading-data = กำลังโหลดข้อมูล
downloading-background-picture = กำลังดาวน์โหลดภาพพื้นหลัง
updating-components-index = กำลังอัปเดต index ส่วนประกอบ
loading-game-version = กำลังโหลดเวอร์ชั่นเกม
loading-patch-status = กำลังโหลดสถานะแพทช์
loading-launcher-state = กำลังโหลดสถานะ launcher
loading-launcher-state--game = กำลังโหลดสถานะ launcher: กำลังตรวจสอบเวอร์ชันเกม
loading-launcher-state--voice = กำลังโหลดสถานะ launcher: กำลังตรวจสอบภาษาพากย์เสียง {$locale}
loading-launcher-state--patch = กำลังโหลดสถานะ launcher: กำลังตรวจสอบแพตช์ที่ติดตั้ง
checking-free-space = กำลังตรวจสอบพื้นที่ว่าง
downloading = กำลังดาวน์โหลด
updating-permissions = กำลังอัปเดตสิทธิ์
unpacking = กำลังแกะ
verifying-files = กำลังตรวจสอบไฟล์
repairing-files = กำลังซ่อมแซมไฟล์
migrating-folders = กำลังย้ายโฟลเดอร์
applying-hdiff = กำลังติดตั้งแพตช์ hdiff
removing-outdated = กำลังลบไฟล์ที่ล้าสมัย
components-index-updated = อัปเดตส่วนประกอบแล้ว
launch = เริ่มเกมส์
migrate-folders = ย้ายโฟลเดอร์
migrate-folders-tooltip = อัพเดตโครงสร้างโฟลเดอร์เกม
apply-patch = ติดตั้งแพทช์
disable-telemetry = ปิดใช้งานการวัดและส่งข้อมูล
download-wine = ดาวน์โหลด Wine
create-prefix = สร้างการตั้งค่า Wine
update = อัปเดต
download = ดาวน์โหลด
predownload-update = ดาวน์โหลดล่วงหน้า {$version} อัปเดต ({$size})
kill-game-process = ฆ่ากระบวนการเกม
main-window--patch-unavailable-tooltip = เซิร์ฟเวอร์แพตช์ไม่พร้อมใช้งานและ launcher ไม่สามารถตรวจสอบสถานะการแพตช์ของเกมได้ คุณสามารถรันเกมได้แต่ต้องยอมรับความเสี่ยงเอง
main-window--patch-outdated-tooltip = โแพตช์ล้าสมัยหรืออยู่ในสถานะเตรียมการ ดังนั้นจึงไม่สามารถใช้งานได้ โปรดกลับมาใหม่ในภายหลังเพื่อดูสถานะ
main-window--version-outdated-tooltip = เวอร์ชันล้าสมัยเกินไปและไม่สามารถอัปเดตได้
preferences = การตั้งค่า
general = ทั่วไป
enhancements = การปรับปรุง

View file

@ -0,0 +1,28 @@
sandbox = แซนด์บ็อกซ์
sandbox-description = รันเกมที่แยกออกจากระบบ เพื่อป้องกันไม่ให้เข้าถึงข้อมูลส่วนบุคคลของคุณ
enable-sandboxing = เปิดใช้งานแซนด์บ็อกซ์
enable-sandboxing-description = รันเกมในระบบไฟล์รูทของคุณแบบอ่านได้อย่างเดียว
hide-home-directory = ซ่อนโฮมไดเร็กตอรี่
hide-home-directory-description = ซ่อนโฟลเดอร์ /home, /var/home/$USER และ $HOME ของคุณจากเกม
hostname = ชื่อโฮสต์
additional-arguments = arguments เพิ่มเติม
private-directories = ไดเรกทอรีส่วนตัว
private-directories-description = โฟลเดอร์เหล่านี้จะถูกแทนที่ด้วยระบบไฟล์เสมือนที่ว่างเปล่า (tmpfs) และไฟล์เหล่านั้นจะไม่สามารถเข้าถึงได้โดยเกมแซนด์บ็อกซ์
path = เส้นทาง
shared-directories = ไดเรกทอรีใช้ร่วมกัน
shared-directories-description = ไดเร็กทอรีเหล่านี้จะเชื่อมโยงกับไดเร็กทอรีในระบบโฮสต์ของคุณ
original-path = เส้นทางเดิม
new-path = เส้นทางใหม่
read-only = อ่านได้เท่านั้น
read-only-description = ห้ามเกมเขียนข้อมูลใดๆ ลงในไดเร็กทอรีนี้
symlinks = Symlinks
symlinks-description = สร้าง Symbolic Link จากตำแหน่งเดิมไปยังตำแหน่งใหม่ภายในแซนด์บ็อกซ์ของคุณ

View file

@ -11,3 +11,6 @@ nis-description = DLSS teknolojisine düşük maliyetli bir alternatif olarak Nv
other-settings = Diğer ayarlar other-settings = Diğer ayarlar
framerate-limit = Kare hızı limiti framerate-limit = Kare hızı limiti
unfocused-framerate-limit = Odakta değilken kare hızı limiti unfocused-framerate-limit = Odakta değilken kare hızı limiti
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -0,0 +1,20 @@
components = Компоненти
components-description = Керування версіями Wine і DXVK
selected-version = Обрана версія
recommended-only = Тільки рекомендоване
wine-version = Версія Wine
wine-recommended-description = Показувати тільки рекомендовані версії Wine
wine-options = Опції Wine
wine-use-shared-libraries = Використовувати динамічні бібліотеки Wine
wine-use-shared-libraries-description = Встановити змінну LD_LIBRARY_PATH, щоб завантажувати системні бібліотеки з обраної збірки Wine
gstreamer-use-shared-libraries = Використовувати динамічні бібліотеки gstreamer
gstreamer-use-shared-libraries-description = Встановити змінну GST_PLUGIN_PATH, щоб завантажувати бібліотеки gstreamer з обраної збірки Wine
dxvk-version = Версія DXVK
dxvk-selection-disabled = Вибір версії DXVK вимкнено налаштуваннями обраного вами Wine
dxvk-recommended-description = Показувати тільки рекомендовані версії DXVK

View file

@ -0,0 +1,57 @@
game-settings-description = Керування налаштуваннями гри та сесією акаунту
sandbox-settings-description = Запускати гру в bubblewrap пісочниці, схожу на ту яку використовує Flatpak
environment-settings-description = Вказати змінні середовища та команду запуску гри
wine = Wine
synchronization = Синхронізація
wine-sync-description = Технологія, що використовується для синхронізації внутрішніх подій Wine
language = Мова
wine-lang-description = Мова, яка використовується в середовищі Wine. Може виправити проблеми з розкладкою клавіатури
system = Системний
borderless-window = Вікно без рамок
virtual-desktop = Віртуальний робочий стіл
map-drive-c = Створювати диск C:
map-drive-c-description = Автоматично створювати посилання на drive_c з префіксу Wine в dosdevices
map-game-folder = Створювати диск з грою
map-game-folder-description = Автоматично створювати посилання на теку гри в dosdevices
game = Гра
hud = HUD
fsr = FSR
fsr-description = Для використання встановіть нижчу роздільну здатність в грі та настисність Alt+Enter
ultra-quality = Ультра
quality = Гарно
balanced = Баланс
performance = Картопля
gamemode = Gamemode
gamemode-description = Ставити грі вищий пріоритет над процесами
gamescope = Gamescope
gamescope-description = Програма від Valve, яка дозволяє запускати програми в ізольовоному середевощі Xwayland і підтримує відеокарти від AMD, Intel, та Nvidia
discord-rpc = Discord RPC
discord-rpc-description = Discord RPC дозволяє вам показувати в Discord інформацію про гру в яку ви зараз граєте
icon = Іконка
title = Заголовок
description = Опис
fps-unlocker = FPS Unlocker
fps-unlocker-description = Змінити обмеження кадрів в грі шляхом модифікування пам'яті гри. Може бути виявлено античитом гри
enabled = Ввімкнений
fps-unlocker-interval = Затримка між перезаписами
fps-unlocker-interval-description = Затримка між перезаписами в мілісекунадх. Періодичний перезапис значення обмеження необхідна для запобігання його скидання
window-mode = Режим вікна
borderless = Безрамковий
popup = Спливаючий
fullscreen = Повноекранний

View file

@ -0,0 +1,7 @@
environment = Середовище
game-command = Команда запуска
game-command-description = Команда, яка використовується для запуску гри. Ключ %command% генерується лаунчером автоматично. Наприклад: gamemoderun '%command%'
new-variable = Нова змінна
name = Ім'я
value = Значення
add = Додати

View file

@ -0,0 +1,66 @@
launcher-folder-opening-error = Не вдалося відкрити папку лаунчера
game-folder-opening-error = Не вдалося відкрити папку гри
config-file-opening-error = Не вдалося відкрити файл налаштувань
debug-file-opening-error = Не вдалося відкрити файл налагодження
wish-url-search-failed = Посилання на історію молитов не знайдено
wish-url-opening-error = Не вдалося відкрити посилання з історією молитов
wine-run-error = Не вдалося запустити {$executable} використовуючи Wine
game-launching-failed = Не вдалося запустити гру
failed-get-selected-wine = Не вдалося знайти обрану версію Wine
downloading-failed = Помилка завантаження
unpacking-failed = Помилка розпакування
kill-game-process-failed = Не вдалося вбити процес гри
game-file-repairing-error = Не вдалося відремонтувати гру
integrity-files-getting-error = Не вдалося отримати вірні дані про файли гри
background-downloading-failed = Не вдалося завантажити фонове зображення
components-index-sync-failed = Не вдалося синхронізувати індекс компонентів
components-index-verify-failed = Не вдалося перевірити індекс компонентів
config-update-error = Помилка збереження налаштувань
wine-prefix-update-failed = Помилка оновлення префікса Wine
dxvk-install-failed = Помилка встановлення DXVK
voice-package-deletion-error = Не вдалося видалити мовний пакет
game-diff-finding-error = Не вдалося визначити оновлення гри
patch-info-fetching-error = Не вдалося отримати інформацію про патч
launcher-state-updating-error = Не вдалося оновити стан лаунчера
package-not-available = Пакет недоступний: {$package}
wine-download-error = Помилка завантаження Wine
wine-unpack-errror = Помилка розпакування Wine
wine-install-failed = Помилка встановлення Wine
dxvk-download-error = Помилка завантаження DXVK
dxvk-unpack-error = Помилка розпакування DXVK
dxvk-apply-error = Не вдалося застосувати DXVK
downloaded-wine-list-failed = Не вдалося отримати список встановлених версій Wine
patch-sync-failed = Помилка синхронізації папки патча
patch-state-check-failed = Помилка перевірки статусу папки патча
game-patching-error = Не вдалося встановити патч гри
# Disable telemetry
telemetry-servers-disabling-error = Не вдалося відключити сервери телеметрії
# Sandbox
documentation-url-open-failed = Не вдалося відкрити посилання з документацією
# Game
game-session-add-failed = Не вдалося додати гру
game-session-update-failed = Не вдалося оновити гру
game-session-remove-failed = Не вдалося видалити гру
game-session-set-current-failed = Не вдалося вибрати гру
game-session-apply-failed = Не вдалося застосувати гру
# Enhancements
discord-rpc-icons-fetch-failed = Не вдалося отримати список іконок Discord RPC
discord-rpc-icon-download-failed = Не вдалося завантажити іконку Discord RPC

View file

@ -0,0 +1,66 @@
welcome = Ласкаво просимо
welcome-page-message =
Вітаю! Ласкаво просимо до An Anime Game Launcher
Нам потрібно підготувати декілька речей і встановити стандартні компоненти, перш ніж ти зможеш запустити гру
tos-violation-warning = Порушення угоди користувача
tos-violation-warning-message =
Цей лаунчер є неофіційним і ніяк не відноситься до {company-name} або {company-alter-name}.
Він був розроблений з метою надання можливості грати в {game-name} на Linux.
Його головна мета - допомогти встановити і запустити гру з меншими клопотами.
Це досягається за рахунок використання існуючих компонентів і спрощення роботи користувача.
Однак, деякі компоненти, що використовуються тут, ймовірно порушують угоду користувача {game-name}, що належить {company-name}.
Якщо ви використовуєте цей лаунчер - ваш геймерський аккаунт може бути визнаний як порушуючий угоду користувача {company-name}/{company-alter-name}.
Якщо це станеться - оскільки ваш обліковий запис буде порушувати правила, {company-name}/{company-alter-name} будуть вільні робити те, що захочуть, включаючи блокування вашого аккаунта.
Якщо ви усвідомлюєте ризик використання неофіційних засобів гри - натисніть "Продовжити"
tos-dialog-title = Ви точно впевнені, що розумієте, що ми хочемо сказати?
tos-dialog-message =
1. Не публікуйте жодної інформації про проект
2. Не використовуйте його разом з модифікованими клієнтами та подібним
3. Задавайте питання виключно на нашому discord або matrix сервері
dependencies = Залежності
missing-dependencies-title = У вас не встановлено деякі компоненти!
missing-dependencies-message = Ви повинні встановити деякі системні пакети, щоб продовжити процес встановлення
default-paths = Шляхи за замовчуванням
choose-default-paths = Вибрати шляхи за замовчуванням
show-all-folders = Я знаю, що я роблю
show-all-folders-subtitle = Відобразити додаткові опції вибору шляхів
runners-folder = Папка версій Wine
dxvks-folder = Папка версій DXVK
wine-prefix-folder = Папка префікса Wine
global-game-installation-folder = Шлях встановлення глобальної версії гри
chinese-game-installation-folder = Шлях встановлення китайської версії гри
fps-unlocker-folder = Папка FPS Unlocker
components-index = Індекс компонентів
patch-folder = Папка завантаження патча
temp-folder = Тимчасова папка
migrate = Мігрувати
select-voice-packages = Вибрати мовні пакети
download-components = Завантажити компоненти
download-dxvk = Завантажити DXVK
apply-dxvk = Застосувати DXVK
finish = Завершення
finish-title = Робота завершена!
finish-message = Всі базові компоненти були встановлені. Тепер ви можете перезапустити лаунчер і встановити гру. Ласкаво просимо до клубу!

View file

@ -0,0 +1,7 @@
game-sessions = Ігрові сесії
active-sessions = Активна сесія
active-session-description = Обрана ігрова сесія. Оновлюється після кожного запуску гри
update-session = Оновити сесію, використовуючи значення реєстру з префікса Wine
delete-session = Видалити сесію

View file

@ -0,0 +1,16 @@
game-resolution = Роздільна здатність гри
gamescope-resolution = Роздільна здатність Gamescope
upscaling = Масштабування
integer-scaling = Цілочисельне масштабування
integer-scaling-description = Кожен піксель перетворюється на квадрат або прямокутник з цілого числа пікселів одного кольору. Запобігає втраті чіткості при масштабуванні Full HD до 4K
gamescope-fsr-description = Відкрита техніка масштабування зі збереженням хорошої якості зображення, розроблена AMD
nis-description = Відкрита техніка масштабування зі збереженням хорошої якості зображення, розроблена Nvidia для заміни DLSS і працює на відеокартах AMD, Intel і Nvidia
other-settings = Інші налаштування
framerate-limit = Обмеження кількості кадрів
unfocused-framerate-limit = Обмеження кількості кадрів поза фокусом
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -0,0 +1,70 @@
appearance = Зовнішній вигляд
modern = Сучасний
classic = Класичний
update-background = Оновлювати фонове зображення
update-background-description = Завантажувати фонове зображення для лаунчера. Ви можете вимкнути це, щоб використовувати власне зображення
launcher-language = Мова лаунчера
launcher-language-description = Застосовується після перезапуску
game-edition = Редакція гри
global = Глобальна
china = Китайська
game-environment = Оточення гри
game-environment-description = Отримати спеціальні функції, такі як додаткові методи оплати
game-voiceovers = Мова озвучення
game-voiceovers-description = Список встановлених озвучок гри. Ви можете вибрати їх в налаштуваннях гри
english = Англійська
japanese = Японська
korean = Корейська
chinese = Китайська
migrate-installation = Перенести лаунчер
migrate-installation-description = Відкрити спеціальне вікно, в якому ви зможете перенести встановлену гру
repair-game = Відновити гру
status = Статус
game-version = Версія гри
game-not-installed = не встановлена
game-predownload-available = Доступне попереднє завантаження оновлення гри: {$old} -> {$new}
game-update-available = Доступне оновлення гри: {$old} -> {$new}
game-outdated = Версія гри застаріла і не може бути оновлена. Остання версія: {$latest}
player-patch-version = Версія основного патча
player-patch-version-description = Основний патч, який дозволяє вам грати в гру на Linux
patch-not-available = недоступний
patch-not-available-tooltip = Сервери патча недоступні
patch-outdated = застарілий ({$current})
patch-outdated-tooltip = Версія патча застаріла: {$current} -> {$latest}
patch-preparation = підготовка
patch-preparation-tooltip = Патч у розробці
patch-testing-tooltip = Доступна тестова версія патча
patch-not-applied-tooltip = Патч не застосовано
apply-main-patch = Застосовувати основний патч
apply-main-patch-description = Експериментально. Вимкнення опції дозволяє запускати гру без застосування патча. Це може не працювати або вимагати ручної зміни файлів. Використовуйте, якщо знаєте, що робите
disable-mhypbase = Вимкнути mhypbase
disable-mhypbase-description = Експериментально. Коли включено, лаунчер буде вимикати mhypbase.dll під час застосування основного патча, що зараз є еквівалентом патча xlua. Покращує продуктивність і знижує навантаження на процесор
ask-superuser-permissions = Запитувати права суперкористувача
ask-superuser-permissions-description = Лаунчер буде використовувати їх, щоб автоматично оновлювати ваш файл hosts для вимкнення телеметрії гри. Не потрібно при використанні flatpak
launcher-behavior = Поведінка лаунчера
launcher-behavior-description = Що повинно робити вікно лаунчера, коли воно запускає гру
wine-tools = Інструменти Wine
command-line = Командний рядок
registry-editor = Редактор реєстру
explorer = Провідник
task-manager = Диспетчер завдань
configuration = Налаштування
debugger = Відлагоджувач

View file

@ -0,0 +1,87 @@
custom = Своє значення
none = Немає
default = За замовчуванням
details = Детальніше
options = Опції
width = Ширина
height = Висота
# Menu items
launcher-folder = Папка лаунчера
game-folder = Папка гри
config-file = Файл налаштувань
debug-file = Журнал відлагодження
wish-url = Історія молитв
about = Про програму
close = { $form ->
[verb] Закриватися
*[noun] Закрити
}
hide = { $form ->
[verb] Ховатися
*[noun] Сховати
}
nothing = Нічого
save = Зберегти
continue = Продовжити
resume = Відновити
exit = Вийти
check = Перевірити
restart = Перезапустити
agree = Підтвердити
loading-data = Завантаження даних
downloading-background-picture = Завантаження фонового зображення
updating-components-index = Оновлення індексу компонентів
loading-game-version = Завантаження версії гри
loading-patch-status = Завантаження статусу патча
loading-launcher-state = Завантаження статусу лаунчера
loading-launcher-state--game = Завантаження статусу лаунчера: перевірка версії гри
loading-launcher-state--voice = Завантаження статусу лаунчера: перевірка {$locale ->
[English] англійської
[Japanese] японської
[Korean] корейської
[Chinese] китайської
*[other] $locale
} мови пакета
loading-launcher-state--patch = Завантаження статусу лаунчера: перевірка встановленого патча
checking-free-space = Перевірка вільного місця
downloading = Завантаження
updating-permissions = Оновлення привілеїв
unpacking = Розпакування
verifying-files = Перевірка файлів
repairing-files = Відновлення файлів
migrating-folders = Переміщення папок
applying-hdiff = Застосування патчів hdiff
removing-outdated = Видалення застарілих файлів
components-index-updated = Індекс компонентів було оновлено
launch = Запустити
migrate-folders = Перемістити папки
migrate-folders-tooltip = Оновити структуру файлів гри
apply-patch = Застосувати патч
disable-telemetry = Вимкнути телеметрію
download-wine = Встановити Wine
create-prefix = Створити префікс
update = Оновити
download = Встановити
predownload-update = Попередньо встановити оновлення {$version} ({$size})
kill-game-process = Завершити процес гри
main-window--patch-unavailable-tooltip = Сервери патча недоступні, і лаунчер не може перевірити статус патча гри. Ви можете запустити гру на свій страх і ризик
main-window--patch-outdated-tooltip = Патч застарів або знаходиться в процесі розробки, тому не може бути застосований. Поверніться пізніше, щоб перевірити його статус
main-window--version-outdated-tooltip = Версія занадто стара і не може бути оновлена
preferences = Налаштування
general = Основне
enhancements = Покращення

View file

@ -0,0 +1,28 @@
sandbox = Пісочниця
sandbox-description = Запускати гру в ізольованому середовищі, що запобігає доступу до ваших особистих даних
enable-sandboxing = Використовувати пісочницю
enable-sandboxing-description = Запускати гру в копії кореневої файлової системи комп'ютера без прав на зміну файлів
hide-home-directory = Приховувати домашню директорію
hide-home-directory-description = Ізолювати ваші директорії /home, /var/home/$USER, і $HOME від гри
hostname = Ім'я хоста
additional-arguments = Додаткові аргументи
private-directories = Приватні директорії
private-directories-description = Ці папки будуть замінені порожньою віртуальною файловою системою (tmpfs) і їх початковий вміст не буде доступний грі
path = Шлях
shared-directories = Спільні директорії
shared-directories-description = Ці директорії будуть доступні для гри
original-path = Початковий шлях
new-path = Шлях в пісочниці
read-only = Тільки для читання
read-only-description = Заборонити грі змінювати вміст цієї директорії
symlinks = Посилання
symlinks-description = Додати посилання на оригінальний файл або папку в вашу пісочницю

View file

@ -11,3 +11,6 @@ nis-description = Một kỹ thuật nâng cấp mã nguồn mở do Nvidia phá
other-settings = Cài đặt khác other-settings = Cài đặt khác
framerate-limit = Giới hạn tốc độ khung hình framerate-limit = Giới hạn tốc độ khung hình
unfocused-framerate-limit = Giới hạn tốc độ khung hình khi không tập trung unfocused-framerate-limit = Giới hạn tốc độ khung hình khi không tập trung
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -1,6 +1,11 @@
game-resolution = 游戏分辨率 game-resolution = 游戏分辨率
gamescope-resolution = Gamescope 分辨率 gamescope-resolution = Gamescope 分辨率
integer-scaling = 整数倍数缩放
other-settings = 其它设置 other-settings = 其它设置
framerate-limit = 帧率限制 framerate-limit = 帧率限制
unfocused-framerate-limit = 切出游戏帧率限制 unfocused-framerate-limit = 切出游戏帧率限制
integer-scaling = 整数倍数缩放
force-grab-cursor = Force grab cursor
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game

View file

@ -26,6 +26,7 @@
<file preprocess="xml-stripblanks" alias="list-add-symbolic.svg">images/icons/list-add-symbolic.svg</file> <file preprocess="xml-stripblanks" alias="list-add-symbolic.svg">images/icons/list-add-symbolic.svg</file>
<file preprocess="xml-stripblanks" alias="view-refresh-symbolic.svg">images/icons/view-refresh-symbolic.svg</file> <file preprocess="xml-stripblanks" alias="view-refresh-symbolic.svg">images/icons/view-refresh-symbolic.svg</file>
<file preprocess="xml-stripblanks" alias="applications-games-symbolic.svg">images/icons/applications-games-symbolic.svg</file> <file preprocess="xml-stripblanks" alias="applications-games-symbolic.svg">images/icons/applications-games-symbolic.svg</file>
<file preprocess="xml-stripblanks" alias="applications-system-symbolic.svg">images/icons/applications-system-symbolic.svg</file>
<file preprocess="xml-stripblanks" alias="applications-graphics-symbolic.svg">images/icons/applications-graphics-symbolic.svg</file> <file preprocess="xml-stripblanks" alias="applications-graphics-symbolic.svg">images/icons/applications-graphics-symbolic.svg</file>
<file preprocess="xml-stripblanks" alias="go-next-symbolic.svg">images/icons/go-next-symbolic.svg</file> <file preprocess="xml-stripblanks" alias="go-next-symbolic.svg">images/icons/go-next-symbolic.svg</file>
<file preprocess="xml-stripblanks" alias="dialog-information-symbolic.svg">images/icons/dialog-information-symbolic.svg</file> <file preprocess="xml-stripblanks" alias="dialog-information-symbolic.svg">images/icons/dialog-information-symbolic.svg</file>

Binary file not shown.

View file

@ -1,52 +0,0 @@
<svg fill="none" viewBox="0 0 600 300" width="600" height="300" xmlns="http://www.w3.org/2000/svg">
<foreignObject width="100%" height="100%">
<div xmlns="http://www.w3.org/1999/xhtml">
<style>
.container {
margin-left: 50px;
color: white;
font-size: 45px;
font-family: -apple-system, BlinkMacSystemFont, "Dejavu Sans", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
@media (prefers-color-scheme: light) {
.container {
color: black;
}
}
.container section {
position: relative;
left: 70px;
}
.state, .version {
color: rgb(95, 117, 233);
}
.verification-icon {
top: 90px;
position: relative;
}
.verification-icon .exclamation {
width: 50px;
height: 50px;
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AYht+mSkWrDu2g4pChOtlFRRxrFYpQIdQKrTqYXPoHTRqSFBdHwbXg4M9i1cHFWVcHV0EQ/AFxdXFSdJESv2sKLWI8uLuH97735e47QKiXmWZ1xQBNt81UIi5msqti4BV9GECI1mGZWcacJCXhOb7u4eP7XZRnedf9OfrVnMUAn0gcY4ZpE28Qz2zaBud94jAryirxOfGESRckfuS64vIb50KTBZ4ZNtOpeeIwsVjoYKWDWdHUiKeJI6qmU76QcVnlvMVZK1dZ6578hcGcvrLMdZqjSGARS5AgQkEVJZRhI0q7ToqFFJ3HPfwjTb9ELoVcJTByLKACDXLTD/4Hv3tr5acm3aRgHOh+cZyPMSCwCzRqjvN97DiNE8D/DFzpbX+lDsx+kl5ra5EjYHAbuLhua8oecLkDDD0Zsik3JT9NIZ8H3s/om7JA6BboXXP71jrH6QOQpl4lb4CDQ2C8QNnrHu/u6ezbvzWt/v0AY0JyoIwWTZgAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfnCw4TDhtaHD7zAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAAAzhJREFUaN7tmstLVFEcxz93nLHHLaxMsgyyuj4K7ElhyEmSLGphL1zZzp1Fiwpq1UbBCAr1f2jXQqGN5e4GRSFhQqkde2Bgkj0oj+KMelt0KitrxpkzM3fC7+pw7++c3/mc77lzHgwsaEEL+pesZDWspCgCrgHV+tFd4JLtuAMZA6Kk2Ag8AnJ/e/Ue2GM77kvTOQNJMqRtDgj0s7aMcERJcQjojBJ22HbcO74FUVIEgR5ga5TQZ1hssze7U36dWg0xQABswaPBl44oKXKB58DKGKt8BIpsx33vN0ca5wGBjm30lSNKijLgMZA1z6rTwE7bcXv94khLHBDoOi2+mFpKihNAVQJNVCkpTqZ1aikpFgFPgU0J9uMFsNV23Ml0OXLeAAS6jfNpcURJsRboB5Yb+s6+ACW24w6n2pHmWCDCkQDhSExplus2U+eIkmIv8CBa/ZdvltF2Mw+Ac3Xv2Lh+LFrTHlBuO+7DpDsy/vqABbTGMgj3unOYDFtMhi3udefEOrCtE337raSDeJGpOqA8lthIxJqzHEXlM0HvdFJBlBQ2cDUFJ9dmnStpjlwGClIAUqBzmQdRUhQCF1J4n3BR5zTuyDVgSQpBFuuc5kCUFJVAbRpueWp17sRBlBTGdqjx7qzVoMgy4Ug9sCONIDvwqE8IREmxAmgi/WrSfYnbkStAng9A8nRf5g+ipCgBzuIfnVVSlMbjyA0g5COQEHB9XiBKiiPA0UQzr1sT/rlUzyonoKO6b9G38UqKEPAEKE00azgS4FHvKgD2lH0gOzRjAqbfgm1LHfeXkQnOEXjGBARAdmiGil2jpqdYifftRrPlr44oKfKAAWAF/tYnoNh23Hd/+0YaTUKoiSAdXfl0dOUzPhE0CfLH+mbNcmM70E18F21zqqMrn877SwE4vG+cYwffmoSZBnbbjtvzwxE1KL4fX7PIHGUBrWrw27E4qI/8p4BK05mqK0aB1bPKxlWJ550Cbln6trAPKCQz9QooDQDHMhgC3feaAFBE5qs4AAz9ByBDAaAdGMlgiBGgPWA77mfgODCcgRDDwHHbcT/PXhBtoAbYQBL/2mFInv61um077hgL8qG+AjY84IemfpY1AAAAAElFTkSuQmCC')
}
.verification-icon .checkmark {
width: 50px;
height: 50px;
background: url('data:image/png;base64,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')
}
.verification-icon .cancel {
width: 50px;
height: 50px;
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AYht+mSkWrDu2g4pChOtlFRRxrFYpQIdQKrTqYXPoHTRqSFBdHwbXg4M9i1cHFWVcHV0EQ/AFxdXFSdJESv2sKLWI8uLuH97735e47QKiXmWZ1xQBNt81UIi5msqti4BV9GECI1mGZWcacJCXhOb7u4eP7XZRnedf9OfrVnMUAn0gcY4ZpE28Qz2zaBud94jAryirxOfGESRckfuS64vIb50KTBZ4ZNtOpeeIwsVjoYKWDWdHUiKeJI6qmU76QcVnlvMVZK1dZ6578hcGcvrLMdZqjSGARS5AgQkEVJZRhI0q7ToqFFJ3HPfwjTb9ELoVcJTByLKACDXLTD/4Hv3tr5acm3aRgHOh+cZyPMSCwCzRqjvN97DiNE8D/DFzpbX+lDsx+kl5ra5EjYHAbuLhua8oecLkDDD0Zsik3JT9NIZ8H3s/om7JA6BboXXP71jrH6QOQpl4lb4CDQ2C8QNnrHu/u6ezbvzWt/v0AY0JyoIwWTZgAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfnCw4TDgI+d5YzAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAABQtJREFUaN7Vmu9PHEUYxz+7d7dI7xJBJB4Bw6KQ0r5TQHghqBFfSf1Z/wPmvdakTYwxMTGNmogmvuv8BzZUjeebFmMKvoBAa2KiJYHgYiRcLFia3EHYu+N8ccv1gLvd2dujh9+3N7u3n3lmnvnOM6NRQ1nj4zqa1gucAbqAx4FTzs87wCZgAYuapv3eeeVKrlb/rQX+eCFagLeAMeAF4FHFR9PADPAjMGlKuV4XEEuIAeAC8CbQELA/skAC+NKUcvqhgFhCnAE+dyJwHPoZeN+U8tdjAbGEiAAfAZeACMerHPA18IEp5U7NQCwhOoGrwAAPV38A500p7wQGsYQYBH4AWqmP7jswU26NdA+Il4CpOkLgZMGEJcTrVUXEicRPQJSToV1grFJkNJc5MV/nSFQaZkOmlIueQ8vJTt+oQNjpNLlMJniKymSw02nVYTZpCdGoMkc+BJ7zjHMqxfr1aZJzC4FgcpkMyblbrF+fZjeVUnnkLHDZdWhZQpwGfgMML4jk1Ax79wq9aPS0Ex/sJxSJVAVhL/1d6NWmKPFXhmmIxVTWmYHSRfNwRD7zCwFgL62RnF0gl8n6gMiSnF0oQgDsbaVJTs2oRCYEfFE2IpYQzwK3/EKUyuhuJz40QCgSVoCYx15eK78mqEdmxJRy5nBE3vOa2MkblSEA7OU1krPzrpHxgihG5saMSgK4cGBoWUI0AeddY2k0EG5t9hwybjAqEPsKtzYTMgyvZmOWEPHSiLwBPOIKEgkTH+zH6OnwAZM5OLEVIYyeDuKDfSrJIwy8XQqiZMl9wzipuZidVCC621Uh9vUqgLYqhJaHf5xtqY+Mo9q77YB2IDu5Qigki0NKaZrWFM4/2FsrKxQJEx8aIOn0vGtkltaU3lklBEAsn8+f1Z1CgW+FImHahgYwutsDW5QAEPvq1YGnqn1adyKjMmeOEQKgS/c7rIIkgLLZaag/KARAiw40Bn1LNTA+UqyKGvVa1LYKyh9ze49hDmzXYj9R6mJVZC+tBd4ClGhbBzaCQRx1sb5gfLrmCtrQgZVgEGoLYxCjqaAVHbhTL4gawizqGvzpd3j5sygdPo2mb5j7wKLeKWUeuOl7TvhwsUFcs4JumlLu7bvfhHp2WsBeVjSAzjpRrWtWVKLUxn9H4SDGPRKKKfaB7YgcXTQVvJmP1GwD14ogppRbwKQriG2T3bgXyDv5MZrZjS1ytu3V7Jop5ebhPfuE6wdGTxEfHUFvjgUygEWj6QKjN0eJj45gRD2rtRNHykFOjeh7t6caYlHio8Poj8UCudiQi2vWm2PER0doiHlCJEwp5yvVtS45484d5uXhA5GpxsWWSwCFSAyrQNjAxcOFrqK+un17892+vjDwouuO3zBo7Ggjvb5O5Mknqnaxekgn2hZnZydFPp9TjQTAZVPKqxVLpk5pKAL8gkL9105vEzKMwPuJXCZLzt5VmRNQOCV43pTSdgVxYE7qscJdCjXf1XI2/oichuconIWfFKWBc+UgKoI4MHMnCCblQMxVavB/OAy9C7xmSjnrtUN0ldML/cBcHSDmnTkxq7LVRQHmL/L5YeBjr3WmRrKBT5zstKryQDVXOE4Dn1IofB+HEsBFlUsCgUBKgJ6hcKbyDh6VfAXtOi52wpRyoZoX1OKaU5MTnf1rTqoFv01gmsI1p29NKf8N8h1aLceENT6uoWldQC/wNNDC0YtnK8AisGJKuVer//4PsDBp3eZTATwAAAAASUVORK5CYII=')
}
</style>
<div class="container">
<div class="verification-icon"><div class="checkmark"></div></div>
<section>
<p>Patch version: <span class="version">1.4.0</span></p>
<p>Patch state: <span class="state">verified</span></p>
</section>
</div>
</div>
</foreignObject>
</svg>

Before

Width:  |  Height:  |  Size: 8 KiB

View file

@ -26,7 +26,9 @@ pub const SUPPORTED_LANGUAGES: &[LanguageIdentifier] = &[
langid!("pt-br"), langid!("pt-br"),
langid!("pl-pl"), langid!("pl-pl"),
langid!("vi-vn"), langid!("vi-vn"),
langid!("nl-nl") langid!("nl-nl"),
langid!("uk-ua"),
langid!("th-th")
]; ];
pub static mut LANG: LanguageIdentifier = langid!("en-us"); pub static mut LANG: LanguageIdentifier = langid!("en-us");
@ -104,9 +106,7 @@ macro_rules! tr {
use fluent_templates::Loader; use fluent_templates::Loader;
#[allow(unused_unsafe)] #[allow(unused_unsafe)]
$crate::i18n::LOCALES $crate::i18n::LOCALES.lookup(unsafe { &$crate::i18n::LANG }, $id)
.lookup(unsafe { &$crate::i18n::LANG }, $id)
.expect(&format!("Failed to find a message with given id: {}", stringify!($id)))
} }
}; };
@ -124,9 +124,7 @@ macro_rules! tr {
)* )*
#[allow(unused_unsafe)] #[allow(unused_unsafe)]
$crate::i18n::LOCALES $crate::i18n::LOCALES.lookup_complete(unsafe { &$crate::i18n::LANG }, $id, Some(&args))
.lookup_complete(unsafe { &$crate::i18n::LANG }, $id, Some(&args))
.expect(&format!("Failed to find a message with given id: {}", stringify!($id)))
} }
}; };
} }

View file

@ -70,6 +70,36 @@ lazy_static::lazy_static! {
/// ///
/// Standard is `$HOME/.local/share/honkers-railway-launcher/.first-run` /// Standard is `$HOME/.local/share/honkers-railway-launcher/.first-run`
pub static ref FIRST_RUN_FILE: PathBuf = LAUNCHER_FOLDER.join(".first-run"); pub static ref FIRST_RUN_FILE: PathBuf = LAUNCHER_FOLDER.join(".first-run");
/// Global app's css
static ref GLOBAL_CSS: String = format!("
progressbar > text {{
margin-bottom: 4px;
}}
window.classic-style {{
background: url(\"file://{}\");
background-repeat: no-repeat;
background-size: cover;
}}
window.classic-style progressbar {{
background-color: #00000020;
border-radius: 16px;
padding: 8px 16px;
}}
window.classic-style progressbar:hover {{
background-color: #00000060;
color: #ffffff;
transition-duration: 0.5s;
transition-timing-function: linear;
}}
.round-bin {{
border-radius: 24px;
}}
", BACKGROUND_FILE.to_string_lossy());
} }
fn main() -> anyhow::Result<()> { fn main() -> anyhow::Result<()> {
@ -105,22 +135,24 @@ fn main() -> anyhow::Result<()> {
let mut no_verbose_tracing = false; let mut no_verbose_tracing = false;
let args = std::env::args().collect::<Vec<_>>(); let args = std::env::args().collect::<Vec<_>>();
let mut gtk_args = Vec::new();
// Parse arguments // Parse arguments
for i in 0..args.len() { for i in 0..args.len() {
if args[i] == "--debug" { match args[i].as_str() {
force_debug = true; "--debug" => force_debug = true,
} else if args[i] == "--run-game" { "--run-game" => run_game = true,
run_game = true; "--just-run-game" => just_run_game = true,
} else if args[i] == "--just-run-game" { "--no-verbose-tracing" => no_verbose_tracing = true,
just_run_game = true;
} else if args[i] == "--no-verbose-tracing" { "--session" => {
no_verbose_tracing = true;
} else if args[i] == "--session" {
// Switch active session prior running the app // Switch active session prior running the app
if let Some(session) = args.get(i + 1) { if let Some(session) = args.get(i + 1) {
Sessions::set_current(session.to_owned())?; Sessions::set_current(session.to_owned())?;
} }
},
arg => gtk_args.push(arg.to_string())
} }
} }
@ -170,36 +202,6 @@ fn main() -> anyhow::Result<()> {
gtk::glib::set_application_name("The Honkers Railway Launcher"); gtk::glib::set_application_name("The Honkers Railway Launcher");
gtk::glib::set_program_name(Some("The Honkers Railway Launcher")); gtk::glib::set_program_name(Some("The Honkers Railway Launcher"));
// Set global css
relm4::set_global_css(&format!("
progressbar > text {{
margin-bottom: 4px;
}}
window.classic-style {{
background: url(\"file://{}\");
background-repeat: no-repeat;
background-size: cover;
}}
window.classic-style progressbar {{
background-color: #00000020;
border-radius: 16px;
padding: 8px 16px;
}}
window.classic-style progressbar:hover {{
background-color: #00000060;
color: #ffffff;
transition-duration: 0.5s;
transition-timing-function: linear;
}}
.round-bin {{
border-radius: 24px;
}}
", BACKGROUND_FILE.to_string_lossy()));
// Set UI language // Set UI language
let lang = CONFIG.launcher.language.parse().expect("Wrong language format used in config"); let lang = CONFIG.launcher.language.parse().expect("Wrong language format used in config");
@ -210,7 +212,11 @@ fn main() -> anyhow::Result<()> {
// Run FirstRun window if .first-run file persist // Run FirstRun window if .first-run file persist
if FIRST_RUN_FILE.exists() { if FIRST_RUN_FILE.exists() {
// Create the app // Create the app
let app = RelmApp::new(APP_ID); let app = RelmApp::new(APP_ID)
.with_args(gtk_args);
// Set global css
app.set_global_css(&GLOBAL_CSS);
// Show first run window // Show first run window
app.run::<FirstRunApp>(()); app.run::<FirstRunApp>(());
@ -285,7 +291,11 @@ fn main() -> anyhow::Result<()> {
} }
// Create the app // Create the app
let app = RelmApp::new(APP_ID); let app = RelmApp::new(APP_ID)
.with_args(gtk_args);
// Set global css
app.set_global_css(&GLOBAL_CSS);
// Show main window // Show main window
app.run::<App>(()); app.run::<App>(());

View file

@ -82,7 +82,9 @@ impl SimpleComponent for AboutDialog {
"日本語 — @zozonteq https://github.com/zozonteq", "日本語 — @zozonteq https://github.com/zozonteq",
"한국어 — @project-dy https://github.com/project-dy", "한국어 — @project-dy https://github.com/project-dy",
"Indonesia — @yumekarisu https://github.com/yumekarisu", "Indonesia — @yumekarisu https://github.com/yumekarisu",
"Tiếng Việt — Nguyễn Hữu Chánh https://github.com/Chanhnh" "Tiếng Việt — Nguyễn Hữu Chánh https://github.com/Chanhnh",
"Українська — Іван Потієнко https://github.com/xxanqw",
"ไทย — @thegooglerider https://github.com/TheGoogleRider2"
].join("\n"), ].join("\n"),
set_debug_info: &[ set_debug_info: &[
@ -97,20 +99,29 @@ impl SimpleComponent for AboutDialog {
set_release_notes_version: &APP_VERSION, set_release_notes_version: &APP_VERSION,
set_release_notes: &[ set_release_notes: &[
"<p>Fixed</p>", "<p>Added</p>",
"<ul>", "<ul>",
"<li>Fixed \"Kill game process\" button</li>", "<li>Bundle applications-system-symbolic icon to the app</li>",
"<li>Added force grab cursor option to the gamescope settings</li>",
"<li>Added Thai</li>",
"<li>Added Ukrainian</li>",
"</ul>", "</ul>",
"<p>Changed</p>", "<p>Changed</p>",
"<ul>", "<ul>",
"<li>Updated Turkish</li>", "<li>Update wish url</li>",
"<li>Updated German</li>", "<li>Updated dependencies</li>",
"<li>Updated Polish</li>", "<li>Improved app args parsing</li>",
"<li>Updated Chinese</li>", "<li>Updated locales</li>",
"</ul>", "</ul>",
"<p>Fixed</p>",
"<ul>",
"<li>Fixed GtkSwitch UI state representation</li>",
"</ul>"
].join("\n"), ].join("\n"),
set_modal: true, set_modal: true,
@ -127,11 +138,7 @@ impl SimpleComponent for AboutDialog {
} }
} }
fn init( fn init(_init: Self::Init, root: Self::Root, sender: ComponentSender<Self>) -> ComponentParts<Self> {
_init: Self::Init,
root: &Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
tracing::info!("Initializing about dialog"); tracing::info!("Initializing about dialog");
let model = Self { let model = Self {

View file

@ -287,11 +287,7 @@ impl SimpleAsyncComponent for DefaultPathsApp {
} }
} }
async fn init( async fn init(init: Self::Init, root: Self::Root, _sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
init: Self::Init,
root: Self::Root,
_sender: AsyncComponentSender<Self>,
) -> AsyncComponentParts<Self> {
let model = Self { let model = Self {
progress_bar: ProgressBar::builder() progress_bar: ProgressBar::builder()
.launch(ProgressBarInit { .launch(ProgressBarInit {

View file

@ -135,11 +135,7 @@ impl SimpleAsyncComponent for DependenciesApp {
} }
} }
async fn init( async fn init(_init: Self::Init, root: Self::Root, _sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
_init: Self::Init,
root: Self::Root,
_sender: AsyncComponentSender<Self>,
) -> AsyncComponentParts<Self> {
let distro = whatadistro::identify(); let distro = whatadistro::identify();
let model = Self { let model = Self {

View file

@ -264,11 +264,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
} }
} }
async fn init( async fn init(_init: Self::Init, root: Self::Root, sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
_init: Self::Init,
root: Self::Root,
sender: AsyncComponentSender<Self>,
) -> AsyncComponentParts<Self> {
let model = Self { let model = Self {
progress_bar: ProgressBar::builder() progress_bar: ProgressBar::builder()
.launch(ProgressBarInit { .launch(ProgressBarInit {

View file

@ -68,11 +68,7 @@ impl SimpleAsyncComponent for FinishApp {
} }
} }
async fn init( async fn init(_init: Self::Init, root: Self::Root, _sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
_init: Self::Init,
root: Self::Root,
_sender: AsyncComponentSender<Self>,
) -> AsyncComponentParts<Self> {
let model = Self; let model = Self;
let widgets = view_output!(); let widgets = view_output!();

View file

@ -115,11 +115,7 @@ impl SimpleComponent for FirstRunApp {
} }
} }
fn init( fn init(_parent: Self::Init, root: Self::Root, sender: ComponentSender<Self>) -> ComponentParts<Self> {
_parent: Self::Init,
root: &Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
tracing::info!("Initializing first run window"); tracing::info!("Initializing first run window");
let toast_overlay = adw::ToastOverlay::new(); let toast_overlay = adw::ToastOverlay::new();

View file

@ -51,7 +51,7 @@ impl SimpleAsyncComponent for SelectVoiceoversApp {
#[local_ref] #[local_ref]
add_suffix = english -> gtk::Switch { add_suffix = english -> gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: true set_active: true
} }
}, },
@ -110,11 +110,7 @@ impl SimpleAsyncComponent for SelectVoiceoversApp {
} }
} }
async fn init( async fn init(_init: Self::Init, root: Self::Root, _sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
_init: Self::Init,
root: Self::Root,
_sender: AsyncComponentSender<Self>,
) -> AsyncComponentParts<Self> {
let model = Self { let model = Self {
english: gtk::Switch::new(), english: gtk::Switch::new(),
japanese: gtk::Switch::new(), japanese: gtk::Switch::new(),

View file

@ -66,11 +66,7 @@ impl SimpleAsyncComponent for WelcomeApp {
} }
} }
async fn init( async fn init(_init: Self::Init, root: Self::Root, _sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
_init: Self::Init,
root: Self::Root,
_sender: AsyncComponentSender<Self>,
) -> AsyncComponentParts<Self> {
let model = Self; let model = Self;
let widgets = view_output!(); let widgets = view_output!();

View file

@ -682,11 +682,7 @@ impl SimpleComponent for App {
} }
} }
fn init( fn init(_init: Self::Init, root: Self::Root, sender: ComponentSender<Self>) -> ComponentParts<Self> {
_init: Self::Init,
root: &Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
tracing::info!("Initializing main window"); tracing::info!("Initializing main window");
let model = App { let model = App {
@ -819,8 +815,8 @@ impl SimpleComponent for App {
Ok(web_cache) => { Ok(web_cache) => {
let web_cache = String::from_utf8_lossy(&web_cache); let web_cache = String::from_utf8_lossy(&web_cache);
// https://webstatic-sea.[ho-yo-ver-se].com/hkrpg/event/e20211215gacha-v2/index.html?...... // https://webstatic-sea.[ho-yo-ver-se].com/hkrpg/event/e20211215gacha-v3/index.html?......
if let Some(url) = web_cache.lines().rev().find(|line| line.contains("gacha-v2/index.html")) { if let Some(url) = web_cache.lines().rev().find(|line| line.contains("gacha-v3/index.html")) {
let url_begin_pos = url.find("https://").unwrap(); let url_begin_pos = url.find("https://").unwrap();
let url_end_pos = url_begin_pos + url[url_begin_pos..].find("\0\0\0\0").unwrap(); let url_end_pos = url_begin_pos + url[url_begin_pos..].find("\0\0\0\0").unwrap();

View file

@ -36,11 +36,7 @@ impl SimpleComponent for MigrateInstallationApp {
} }
} }
fn init( fn init(_init: Self::Init, root: Self::Root, _sender: ComponentSender<Self>) -> ComponentParts<Self> {
_init: Self::Init,
root: &Self::Root,
_sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
tracing::info!("Initializing migration window"); tracing::info!("Initializing migration window");
let model = Self { let model = Self {

View file

@ -71,21 +71,15 @@ impl SimpleAsyncComponent for EnvironmentPage {
type Output = EnhancementsAppMsg; type Output = EnhancementsAppMsg;
view! { view! {
gtk::Box { adw::NavigationPage {
#[wrap(Some)]
set_child = &gtk::Box {
set_orientation: gtk::Orientation::Vertical, set_orientation: gtk::Orientation::Vertical,
adw::HeaderBar { adw::HeaderBar {
#[wrap(Some)] #[wrap(Some)]
set_title_widget = &adw::WindowTitle { set_title_widget = &adw::WindowTitle {
set_title: &tr!("environment") set_title: &tr!("environment")
},
pack_start = &gtk::Button {
set_icon_name: "go-previous-symbolic",
connect_clicked[sender] => move |_| {
sender.output(EnhancementsAppMsg::OpenMainPage).unwrap();
}
} }
}, },
@ -150,12 +144,9 @@ impl SimpleAsyncComponent for EnvironmentPage {
} }
} }
} }
}
async fn init( async fn init(_init: Self::Init, root: Self::Root, sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
_init: Self::Init,
root: Self::Root,
sender: AsyncComponentSender<Self>,
) -> AsyncComponentParts<Self> {
tracing::info!("Initializing environment settings"); tracing::info!("Initializing environment settings");
let mut model = Self { let mut model = Self {

View file

@ -74,11 +74,7 @@ impl AsyncFactoryComponent for GameSession {
} }
} }
async fn init_model( async fn init_model(init: Self::Init, _index: &DynamicIndex, _sender: AsyncFactorySender<Self>) -> Self {
init: Self::Init,
_index: &DynamicIndex,
_sender: AsyncFactorySender<Self>,
) -> Self {
init init
} }
} }
@ -105,21 +101,15 @@ impl SimpleAsyncComponent for GamePage {
type Output = EnhancementsAppMsg; type Output = EnhancementsAppMsg;
view! { view! {
gtk::Box { adw::NavigationPage {
#[wrap(Some)]
set_child = &gtk::Box {
set_orientation: gtk::Orientation::Vertical, set_orientation: gtk::Orientation::Vertical,
adw::HeaderBar { adw::HeaderBar {
#[wrap(Some)] #[wrap(Some)]
set_title_widget = &adw::WindowTitle { set_title_widget = &adw::WindowTitle {
set_title: &tr!("game") set_title: &tr!("game")
},
pack_start = &gtk::Button {
set_icon_name: "go-previous-symbolic",
connect_clicked[sender] => move |_| {
sender.output(EnhancementsAppMsg::OpenMainPage).unwrap();
}
} }
}, },
@ -150,12 +140,9 @@ impl SimpleAsyncComponent for GamePage {
} }
} }
} }
}
async fn init( async fn init(_init: Self::Init, root: Self::Root, sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
_init: Self::Init,
root: Self::Root,
sender: AsyncComponentSender<Self>,
) -> AsyncComponentParts<Self> {
tracing::info!("Initializing game settings"); tracing::info!("Initializing game settings");
let mut model = Self { let mut model = Self {

View file

@ -17,6 +17,8 @@ use anime_launcher_sdk::anime_game_core::installer::downloader::Downloader;
use anime_launcher_sdk::discord_rpc::DiscordRpc; use anime_launcher_sdk::discord_rpc::DiscordRpc;
use anime_launcher_sdk::is_available; use anime_launcher_sdk::is_available;
use enum_ordinalize::Ordinalize;
pub mod game; pub mod game;
pub mod sandbox; pub mod sandbox;
pub mod environment; pub mod environment;
@ -232,12 +234,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
add_suffix = &gtk::Switch { add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: CONFIG.game.wine.borderless, set_active: CONFIG.game.wine.borderless,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.game.wine.borderless = switch.state(); config.game.wine.borderless = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -277,12 +279,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
add_suffix = &gtk::Switch { add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: CONFIG.game.wine.virtual_desktop.enabled, set_active: CONFIG.game.wine.virtual_desktop.enabled,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.game.wine.virtual_desktop.enabled = switch.state(); config.game.wine.virtual_desktop.enabled = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -298,12 +300,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
add_suffix = &gtk::Switch { add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: CONFIG.game.wine.drives.drive_c, set_active: CONFIG.game.wine.drives.drive_c,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.game.wine.drives.drive_c = switch.state(); config.game.wine.drives.drive_c = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -343,12 +345,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
add_suffix = &gtk::Switch { add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: CONFIG.game.wine.drives.game_folder.is_some(), set_active: CONFIG.game.wine.drives.game_folder.is_some(),
connect_state_notify[map_game_folder_row] => move |switch| { connect_state_notify[map_game_folder_row] => move |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
if switch.state() { if switch.is_active() {
config.game.wine.drives.game_folder = Some(AllowedDrives::list()[map_game_folder_row.selected() as usize]); config.game.wine.drives.game_folder = Some(AllowedDrives::list()[map_game_folder_row.selected() as usize]);
} else { } else {
config.game.wine.drives.game_folder = None; config.game.wine.drives.game_folder = None;
@ -415,12 +417,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
add_suffix = &gtk::Switch { add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: CONFIG.game.enhancements.fsr.enabled, set_active: CONFIG.game.enhancements.fsr.enabled,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.game.enhancements.fsr.enabled = switch.state(); config.game.enhancements.fsr.enabled = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -438,12 +440,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
add_suffix = &gtk::Switch { add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: CONFIG.game.enhancements.gamemode, set_active: CONFIG.game.enhancements.gamemode,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.game.enhancements.gamemode = switch.state(); config.game.enhancements.gamemode = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -470,12 +472,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
add_suffix = &gtk::Switch { add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: CONFIG.game.enhancements.gamescope.enabled, set_active: CONFIG.game.enhancements.gamescope.enabled,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.game.enhancements.gamescope.enabled = switch.state(); config.game.enhancements.gamescope.enabled = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -494,12 +496,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
add_suffix = &gtk::Switch { add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: CONFIG.launcher.discord_rpc.enabled, set_active: CONFIG.launcher.discord_rpc.enabled,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.launcher.discord_rpc.enabled = switch.state(); config.launcher.discord_rpc.enabled = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -546,13 +548,13 @@ impl SimpleAsyncComponent for EnhancementsApp {
}, },
#[local_ref] #[local_ref]
game_page -> gtk::Box {}, game_page -> adw::NavigationPage,
#[local_ref] #[local_ref]
sandbox_page -> gtk::Box {}, sandbox_page -> adw::NavigationPage,
#[local_ref] #[local_ref]
environment_page -> gtk::Box {} environment_page -> adw::NavigationPage,
} }
async fn init( async fn init(
@ -688,28 +690,28 @@ impl SimpleAsyncComponent for EnhancementsApp {
PREFERENCES_WINDOW.as_ref() PREFERENCES_WINDOW.as_ref()
.unwrap_unchecked() .unwrap_unchecked()
.widget() .widget()
.close_subpage(); .pop_subpage();
} }
EnhancementsAppMsg::OpenGameSettingsPage => unsafe { EnhancementsAppMsg::OpenGameSettingsPage => unsafe {
PREFERENCES_WINDOW.as_ref() PREFERENCES_WINDOW.as_ref()
.unwrap_unchecked() .unwrap_unchecked()
.widget() .widget()
.present_subpage(self.game_page.widget()); .push_subpage(self.game_page.widget());
} }
EnhancementsAppMsg::OpenSandboxSettingsPage => unsafe { EnhancementsAppMsg::OpenSandboxSettingsPage => unsafe {
PREFERENCES_WINDOW.as_ref() PREFERENCES_WINDOW.as_ref()
.unwrap_unchecked() .unwrap_unchecked()
.widget() .widget()
.present_subpage(self.sandbox_page.widget()); .push_subpage(self.sandbox_page.widget());
} }
EnhancementsAppMsg::OpenEnvironmentSettingsPage => unsafe { EnhancementsAppMsg::OpenEnvironmentSettingsPage => unsafe {
PREFERENCES_WINDOW.as_ref() PREFERENCES_WINDOW.as_ref()
.unwrap_unchecked() .unwrap_unchecked()
.widget() .widget()
.present_subpage(self.environment_page.widget()); .push_subpage(self.environment_page.widget());
} }
EnhancementsAppMsg::Toast { title, description } => { EnhancementsAppMsg::Toast { title, description } => {

View file

@ -98,21 +98,15 @@ impl SimpleAsyncComponent for SandboxPage {
type Output = EnhancementsAppMsg; type Output = EnhancementsAppMsg;
view! { view! {
gtk::Box { adw::NavigationPage {
#[wrap(Some)]
set_child = &gtk::Box {
set_orientation: gtk::Orientation::Vertical, set_orientation: gtk::Orientation::Vertical,
adw::HeaderBar { adw::HeaderBar {
#[wrap(Some)] #[wrap(Some)]
set_title_widget = &adw::WindowTitle { set_title_widget = &adw::WindowTitle {
set_title: &tr!("sandbox") set_title: &tr!("sandbox")
},
pack_start = &gtk::Button {
set_icon_name: "go-previous-symbolic",
connect_clicked[sender] => move |_| {
sender.output(EnhancementsAppMsg::OpenMainPage).unwrap();
}
} }
}, },
@ -133,12 +127,12 @@ impl SimpleAsyncComponent for SandboxPage {
add_suffix = &gtk::Switch { add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: CONFIG.sandbox.enabled, set_active: CONFIG.sandbox.enabled,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.sandbox.enabled = switch.state(); config.sandbox.enabled = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -154,12 +148,12 @@ impl SimpleAsyncComponent for SandboxPage {
add_suffix = &gtk::Switch { add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: CONFIG.sandbox.isolate_home, set_active: CONFIG.sandbox.isolate_home,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.sandbox.isolate_home = switch.state(); config.sandbox.isolate_home = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -321,12 +315,9 @@ impl SimpleAsyncComponent for SandboxPage {
} }
} }
} }
}
async fn init( async fn init(_init: Self::Init, root: Self::Root, sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
_init: Self::Init,
root: Self::Root,
sender: AsyncComponentSender<Self>,
) -> AsyncComponentParts<Self> {
tracing::info!("Initializing sandbox settings"); tracing::info!("Initializing sandbox settings");
let mut model = Self { let mut model = Self {

View file

@ -6,6 +6,8 @@ use anime_launcher_sdk::star_rail::config::Config;
use anime_launcher_sdk::config::schema_blanks::prelude::*; use anime_launcher_sdk::config::schema_blanks::prelude::*;
use enum_ordinalize::Ordinalize;
use crate::*; use crate::*;
pub struct GamescopeApp; pub struct GamescopeApp;
@ -128,12 +130,12 @@ impl SimpleAsyncComponent for GamescopeApp {
add_suffix = &gtk::Switch { add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: CONFIG.game.enhancements.gamescope.integer_scaling, set_active: CONFIG.game.enhancements.gamescope.integer_scaling,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.game.enhancements.gamescope.integer_scaling = switch.state(); config.game.enhancements.gamescope.integer_scaling = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -148,12 +150,12 @@ impl SimpleAsyncComponent for GamescopeApp {
add_suffix = &gtk::Switch { add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: CONFIG.game.enhancements.gamescope.fsr, set_active: CONFIG.game.enhancements.gamescope.fsr,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.game.enhancements.gamescope.fsr = switch.state(); config.game.enhancements.gamescope.fsr = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -168,12 +170,12 @@ impl SimpleAsyncComponent for GamescopeApp {
add_suffix = &gtk::Switch { add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
set_state: CONFIG.game.enhancements.gamescope.nis, set_active: CONFIG.game.enhancements.gamescope.nis,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.game.enhancements.gamescope.nis = switch.state(); config.game.enhancements.gamescope.nis = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -250,17 +252,33 @@ impl SimpleAsyncComponent for GamescopeApp {
} }
} }
} }
},
adw::ActionRow {
set_title: &tr!("force-grab-cursor"),
set_subtitle: &tr!("force-grab-cursor-description"),
add_suffix = &gtk::Switch {
set_valign: gtk::Align::Center,
set_active: CONFIG.game.enhancements.gamescope.force_grab_cursor,
connect_state_notify => |switch| {
if is_ready() {
if let Ok(mut config) = Config::get() {
config.game.enhancements.gamescope.force_grab_cursor = switch.is_active();
Config::update(config);
}
}
}
}
} }
} }
} }
} }
} }
async fn init( async fn init(_init: Self::Init, root: Self::Root, _sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
_init: Self::Init,
root: Self::Root,
_sender: AsyncComponentSender<Self>,
) -> AsyncComponentParts<Self> {
tracing::info!("Initializing gamescope settings"); tracing::info!("Initializing gamescope settings");
let model = Self; let model = Self;

View file

@ -49,21 +49,15 @@ impl SimpleAsyncComponent for ComponentsPage {
type Output = GeneralAppMsg; type Output = GeneralAppMsg;
view! { view! {
gtk::Box { adw::NavigationPage {
#[wrap(Some)]
set_child = &gtk::Box {
set_orientation: gtk::Orientation::Vertical, set_orientation: gtk::Orientation::Vertical,
adw::HeaderBar { adw::HeaderBar {
#[wrap(Some)] #[wrap(Some)]
set_title_widget = &adw::WindowTitle { set_title_widget = &adw::WindowTitle {
set_title: &tr!("components") set_title: &tr!("components")
},
pack_start = &gtk::Button {
set_icon_name: "go-previous-symbolic",
connect_clicked[sender] => move |_| {
sender.output(GeneralAppMsg::OpenMainPage).unwrap();
}
} }
}, },
@ -107,11 +101,11 @@ impl SimpleAsyncComponent for ComponentsPage {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
#[block_signal(wine_recommended_notify)] #[block_signal(wine_recommended_notify)]
set_state: true, set_active: true,
connect_state_notify[sender] => move |switch| { connect_state_notify[sender] => move |switch| {
if is_ready() { if is_ready() {
sender.input(ComponentsPageMsg::WineRecommendedOnly(switch.state())); sender.input(ComponentsPageMsg::WineRecommendedOnly(switch.is_active()));
} }
} @wine_recommended_notify } @wine_recommended_notify
} }
@ -133,12 +127,12 @@ impl SimpleAsyncComponent for ComponentsPage {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
#[block_signal(wine_shared_libraries_notify)] #[block_signal(wine_shared_libraries_notify)]
set_state: CONFIG.game.wine.shared_libraries.wine, set_active: CONFIG.game.wine.shared_libraries.wine,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.game.wine.shared_libraries.wine = switch.state(); config.game.wine.shared_libraries.wine = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -155,12 +149,12 @@ impl SimpleAsyncComponent for ComponentsPage {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
#[block_signal(gstreamer_shared_libraries_notify)] #[block_signal(gstreamer_shared_libraries_notify)]
set_state: CONFIG.game.wine.shared_libraries.gstreamer, set_active: CONFIG.game.wine.shared_libraries.gstreamer,
connect_state_notify => |switch| { connect_state_notify => |switch| {
if is_ready() { if is_ready() {
if let Ok(mut config) = Config::get() { if let Ok(mut config) = Config::get() {
config.game.wine.shared_libraries.gstreamer = switch.state(); config.game.wine.shared_libraries.gstreamer = switch.is_active();
Config::update(config); Config::update(config);
} }
@ -219,11 +213,11 @@ impl SimpleAsyncComponent for ComponentsPage {
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,
#[block_signal(dxvk_recommended_notify)] #[block_signal(dxvk_recommended_notify)]
set_state: true, set_active: true,
connect_state_notify[sender] => move |switch| { connect_state_notify[sender] => move |switch| {
if is_ready() { if is_ready() {
sender.input(ComponentsPageMsg::DxvkRecommendedOnly(switch.state())); sender.input(ComponentsPageMsg::DxvkRecommendedOnly(switch.is_active()));
} }
} @dxvk_recommended_notify } @dxvk_recommended_notify
} }
@ -239,12 +233,9 @@ impl SimpleAsyncComponent for ComponentsPage {
} }
} }
} }
}
async fn init( async fn init(_init: Self::Init, root: Self::Root, sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
_init: Self::Init,
root: Self::Root,
sender: AsyncComponentSender<Self>,
) -> AsyncComponentParts<Self> {
tracing::info!("Initializing general settings -> components page"); tracing::info!("Initializing general settings -> components page");
let model = Self { let model = Self {

View file

@ -238,7 +238,7 @@ impl SimpleAsyncComponent for GeneralApp {
connect_state_notify => |switch| { connect_state_notify => |switch| {
#[allow(unused_must_use)] #[allow(unused_must_use)]
if switch.state() { if switch.is_active() {
std::fs::remove_file(KEEP_BACKGROUND_FILE.as_path()); std::fs::remove_file(KEEP_BACKGROUND_FILE.as_path());
} else { } else {
std::fs::write(KEEP_BACKGROUND_FILE.as_path(), ""); std::fs::write(KEEP_BACKGROUND_FILE.as_path(), "");
@ -542,7 +542,7 @@ impl SimpleAsyncComponent for GeneralApp {
}, },
#[local_ref] #[local_ref]
components_page -> gtk::Box {} components_page -> adw::NavigationPage,
} }
async fn init( async fn init(
@ -684,14 +684,14 @@ impl SimpleAsyncComponent for GeneralApp {
PREFERENCES_WINDOW.as_ref() PREFERENCES_WINDOW.as_ref()
.unwrap_unchecked() .unwrap_unchecked()
.widget() .widget()
.close_subpage(); .pop_subpage();
} }
GeneralAppMsg::OpenComponentsPage => unsafe { GeneralAppMsg::OpenComponentsPage => unsafe {
PREFERENCES_WINDOW.as_ref() PREFERENCES_WINDOW.as_ref()
.unwrap_unchecked() .unwrap_unchecked()
.widget() .widget()
.present_subpage(self.components_page.widget()); .push_subpage(self.components_page.widget());
} }
#[allow(unused_must_use)] #[allow(unused_must_use)]

View file

@ -74,11 +74,7 @@ impl SimpleAsyncComponent for PreferencesApp {
} }
} }
async fn init( async fn init(parent: Self::Init, root: Self::Root, sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
parent: Self::Init,
root: Self::Root,
sender: AsyncComponentSender<Self>,
) -> AsyncComponentParts<Self> {
tracing::info!("Initializing preferences window"); tracing::info!("Initializing preferences window");
let model = Self { let model = Self {