From ae375f9b6e220b788a0ccf991e107c0cc9e250ad Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Tue, 27 Jan 2026 03:44:24 +0800 Subject: [PATCH] Release Stable Build v2.1.1 (#197) * fix: resolve cross-platform EPERM permissions errors modManager.js: - Switch from hardcoded 'junction' to dynamic symlink type based on OS (fixing Linux EPERM). - Add retry logic for directory removal to handle file locking race conditions. - Improve broken symlink detection during profile sync. gameManager.js: - Implement retry loop (3 attempts) for game directory removal in updateGameFiles to prevent EBUSY/EPERM errors on Windows. paths.js: - Prevent fs.mkdirSync failure in getModsPath by pre-checking for broken symbolic links. * fix: missing pacman builds * Update README.md Windows Prequisites for ARM64 builds * fix: remove broken symlink after detected * fix: add pathexists for paths.js to check symlink * fix: isbrokenlink should be true to remove the symlink * add arch package .pkg.tar.zst for release * fix: release workflow for build-arch and build-linux * build-arch job now only build arch .pkg.tar.zst package instead of the whole generic linux. * build-linux job now exclude .pacman package since its deprecated and should not be used. * fix: removes pacman build as it replaced by tar.zst and adds build:arch shortcut for pkgbuild * aur: add proper VCS (-git) PKGBUILD created clean VCS-based PKGBUILD following arch packaging conventions. this explicitly marked as a rolling (-git) build and derives its version dynamically from git tags and commit history via pkgver(). previous hybrid approach has been changed. key changes: - use -git suffix to clearly indicate rolling source builds - set pkgver=0 and compute the actual version via pkgver() - build only a directory layout using electron-builder (--dir) - avoid generating AppImage, deb, rpm, or pacman installers - align build and package steps with Arch packaging guidelines note: this PKGBUILD is intended for development and AUR use only and is not suitable for binary redistribution or release artifacts. * ci: add fixed-version PKGBUILD for Arch Linux releases this PKGBUILD intended for CI and GitHub release artifacts. targets tagged releases only and uses a fixed pkgver that matches the corresponding git tag. all of the VCS logic has been removed to PKGBUILD-git to ensure reproducible builds and stable versioning suitable for binary distribution. the build process relies on electron-builder directory output (--dir) and packages only the unpacked application into a standard Arch Linux package (.pkg.tar.zst). other distro format are excluded from this path and handled separately. this change establishes a clear separation between: - rolling AUR development builds (-git) - CI-generated, versioned Arch Linux release packages the result is predictable artifact naming, correct version alignment, and Arch-compliant packaging for downstream users. * Update README.md adds information for Arch build * Update README.md BUILD.md location was changed and now this link is poiting to nothing * Update PKGBUILD * Update PKGBUILD-git * chore: fix ubuntu/debian part in README.md * Polish language support (#195) * add hardware specification in support_request.yml * Add logs text field in bug_report.yml * chore: add changelog in README.md * fix screenshot input in feature_request.yml * add hardware spec input in bug_report.yml --------- Co-authored-by: TalesAmaral <57869141+TalesAmaral@users.noreply.github.com> Co-authored-by: walti0 <95646872+walti0@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/bug_report.yml | 20 +- .github/ISSUE_TEMPLATE/feature_request.yml | 4 +- .github/ISSUE_TEMPLATE/support_request.yml | 11 +- GUI/js/i18n.js | 3 +- GUI/locales/pl-PL.json | 234 +++++++++++++++++++++ README.md | 11 +- 6 files changed, 273 insertions(+), 10 deletions(-) create mode 100644 GUI/locales/pl-PL.json diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index dafdc62..f138ffc 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -55,6 +55,15 @@ body: validations: required: true + - type: textarea + id: hardwarespec + attributes: + label: Hardware Specification + description: Tell us your CPU, iGPU, dGPU, VRAM, and RAM information. + placeholder: "CPU: Intel i9-14900K 6.0 GHz | GPU: NVIDIA RTX 4090 | VRAM: 24 GB | RAM: 32 GB" + validations: + required: true + - type: dropdown id: os attributes: @@ -71,8 +80,17 @@ body: validations: required: true + - type: textarea + id: logs + attributes: + label: Logs or Error Messages + description: If applicable, paste any error messages or logs here. + render: shell + validations: + required: true + - type: textarea id: additional attributes: label: Additional context - description: Add any other context about the problem here. \ No newline at end of file + description: Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 6d1d5d4..44c8816 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -39,7 +39,7 @@ body: validations: required: true - - type: screenshots + - type: textarea id: screenshots attributes: label: Screenshots (Optional) @@ -49,4 +49,4 @@ body: id: additional attributes: label: Additional context - description: Add any other context or screenshots about the feature request here. \ No newline at end of file + description: Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/support_request.yml b/.github/ISSUE_TEMPLATE/support_request.yml index 71d98e1..53dfe8d 100644 --- a/.github/ISSUE_TEMPLATE/support_request.yml +++ b/.github/ISSUE_TEMPLATE/support_request.yml @@ -28,6 +28,15 @@ body: validations: required: true + - type: textarea + id: hardwarespec + attributes: + label: Hardware Specification + description: Tell us your CPU, iGPU, dGPU, VRAM, and RAM information. + placeholder: "CPU: Intel i9-14900K 6.0 GHz | GPU: NVIDIA RTX 4090 | VRAM: 24 GB | RAM: 32 GB" + validations: + required: true + - type: input id: version attributes: @@ -66,4 +75,4 @@ body: id: additional attributes: label: Additional Information - description: Any other information that might help us assist you. \ No newline at end of file + description: Any other information that might help us assist you. diff --git a/GUI/js/i18n.js b/GUI/js/i18n.js index faf6847..b2ec9e0 100644 --- a/GUI/js/i18n.js +++ b/GUI/js/i18n.js @@ -6,7 +6,8 @@ const i18n = (() => { { code: 'en', name: 'English' }, { code: 'es-ES', name: 'Español (España)' }, { code: 'pt-BR', name: 'Portuguese (Brazil)' }, - { code: 'tr-TR', name: 'Turkish (Turkey)' } + { code: 'tr-TR', name: 'Turkish (Turkey)' }, + { code: 'pl-PL', name: 'Polish (Poland)' } ]; // Load single language file diff --git a/GUI/locales/pl-PL.json b/GUI/locales/pl-PL.json new file mode 100644 index 0000000..7d03edf --- /dev/null +++ b/GUI/locales/pl-PL.json @@ -0,0 +1,234 @@ +{ + "nav": { + "play": "Graj", + "mods": "Mody", + "news": "Wiadomości", + "chat": "Chat z graczami", + "settings": "Ustawienia", + "skins": "Skiny" + }, + "header": { + "playersLabel": "Graczy:", + "manageProfiles": "Zarządzaj Profilami", + "defaultProfile": "Domyślny", + "f2p": "FREE TO PLAY" + }, + "install": { + "title": "FREE TO PLAY LAUNCHER", + "playerName": "Nazwa Gracza", + "playerNamePlaceholder": "Wprowadź Nazwę", + "customInstallation": "Dostosuj Instalacje", + "installationFolder": "Folder docelowy", + "pathPlaceholder": "Domyślna lokalizacja", + "browse": "Przeglądaj", + "installButton": "ZAINSTALUJ HYTALE", + "installing": "INSTALOWANIE..." + }, + "play": { + "ready": "GOTOWE", + "subtitle": "Uruchom Hytale i rozpocznij przygodę", + "playButton": "GRAJ W HYTALE", + "latestNews": "NAJNOWSZE WIADOMOŚCI", + "viewAll": "ZOBACZ CAŁOŚĆ", + "checking": "SPRAWDZANIE...", + "play": "GRAJ" + }, + "mods": { + "searchPlaceholder": "Wyszukaj mody...", + "myMods": "MOJE MODY", + "previous": "POPRZEDNIA", + "next": "NASTĘPNA", + "page": "Strona", + "of": "z", + "modalTitle": "MOJE MODY", + "noModsFound": "Nie Znaleziono Modów", + "noModsFoundDesc": "Spróbuj dostosować wyszukiwanie", + "noModsInstalled": "Brak Zainstalowanych Modów", + "noModsInstalledDesc": "Dodaj mody z CurseForge lub zaimportuj lokalne pliki", + "view": "WIDOK", + "install": "ZAINSTALUJ", + "installed": "ZAINSTALOWANE", + "enable": "WŁĄCZ", + "disable": "WYŁĄCZ", + "active": "AKTYWNE", + "disabled": "WYŁĄCZONE", + "delete": "Usuń mod", + "noDescription": "Brak opisu", + "confirmDelete": "Czy na pewno chcesz usunąć \"{name}\"?", + "confirmDeleteDesc": "Tej czynności nie można cofnąć.", + "confirmDeletion": "Potwierdź" + }, + "news": { + "title": "WSZYSTKIE WIADOMOŚCI", + "readMore": "Zobacz Więcej" + }, + "chat": { + "title": "Chat z graczami", + "pickColor": "Kolor", + "inputPlaceholder": "Wprowadź swoją wiadomość...", + "send": "Wyślij", + "online": "online", + "charCounter": "{current}/{max}", + "secureChat": "Bezpieczny czat – Linki są ocenzurowane", + "joinChat": "Dołącz do Czatu", + "chooseUsername": "Wybierz nazwę użytkownika, aby dołączyć do Czatu z graczami", + "username": "Nazwa Gracza", + "usernamePlaceholder": "Wprowadź swoją nazwę...", + "usernameHint": "Między 3-20 znaków, tylko litery, cyfry i znaki - i _", + "joinButton": "Dołącz do Czatu", + "colorModal": { + "title": "Dostosuj Kolor Użytkownika", + "chooseSolid": "Wybierz jednolity kolor:", + "customColor": "Kolor niestandardowy:", + "preview": "Podgląd:", + "previewUsername": "Nazwa", + "apply": "Zastosuj Kolor" + } + }, + "settings": { + "title": "USTAWIENIA", + "java": "Środowisko Java", + "useCustomJava": "Użyj niestandardowej ścieżki Java", + "javaDescription": "Zastąp dołączone środowisko wykonawcze Java własnym", + "javaPath": "Ścieżka Wykonywalna Java", + "javaPathPlaceholder": "Wybierz ścieżkę Java...", + "javaBrowse": "Przeglądaj", + "javaHint": "Wybierz folder instalacyjny Java (obsługiwane Windows, Mac, Linux)", + "discord": "Integracja z Discordem", + "enableRPC": "Włącz Discord Rich Presence", + "discordDescription": "Pokaż swoją aktywność na Discordzie", + "game": "Opcje gry", + "playerName": "Nazwa Gracza", + "playerNamePlaceholder": "Wprowadź swoją nazwę", + "playerNameHint": "Ta nazwa będzie używana w grze (1-16 znaków)", + "openGameLocation": "Otwórz Lokalizację Gry", + "openGameLocationDesc": "Otwórz folder instalacyjny gry", + "account": "Zarządzanie identyfikatorami UUID gracza", + "currentUUID": "Obecny UUID", + "uuidPlaceholder": "Ładowanie UUID...", + "copyUUID": "Skopiuj UUID", + "regenerateUUID": "Generuj UUID", + "uuidHint": "Twój unikalny identyfikator gracza dla tej nazwy użytkownika", + "manageUUIDs": "Zarządzaj wszystkimi UUID", + "manageUUIDsDesc": "Wyświetl i zarządzaj wszystkimi identyfikatorami UUID graczy", + "language": "Język", + "selectLanguage": "Wybierz Język", + "repairGame": "Napraw Grę", + "reinstallGame": "Zainstaluj ponownie pliki gry (zachowuje dane)", + "gpuPreference": "Preferencje GPU", + "gpuHint": "Wybierz preferowany procesor graficzny (Linux: wpływa na DRI_PRIME)", + "gpuAuto": "Auto", + "gpuIntegrated": "Zintegrowana", + "gpuDedicated": "Dedykowana", + "logs": "SYSTEM LOGS", + "logsCopy": "Kopiuj", + "logsRefresh": "Odśwież", + "logsFolder": "Otwórz Folder", + "logsLoading": "Ładowanie logów..." + }, + "uuid": { + "modalTitle": "Zarządzanie UUID", + "currentUserUUID": "Aktualny UUID użytkownika", + "allPlayerUUIDs": "Wszystkie identyfikatory UUID graczy", + "generateNew": "Wygeneruj nowy UUID", + "loadingUUIDs": "Ładowanie UUID...", + "setCustomUUID": "Ustaw niestandardowy UUID", + "customPlaceholder": "Wprowadź niestandardowy UUID (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)", + "setUUID": "Ustaw UUID", + "warning": "Ostrzeżenie: Ustawienie niestandardowego identyfikatora UUID spowoduje zmianę Twojego obecnego identyfikatora gracza", + "copyTooltip": "Kopiuj UUID", + "regenerateTooltip": "Wygeneruj nowy UUID" + }, + "profiles": { + "modalTitle": "Zarządzaj Profilami", + "newProfilePlaceholder": "Nowa Nazwa Profilu", + "createProfile": "Utwórz Profil" + }, + "discord": { + "notificationText": "Dołącz do naszej społeczności Discord!", + "joinButton": "Dołącz Discord" + }, + "skins": { + "title": "Skiny", + "comingSoon": "Personalizacja skórek już wkrótce..." + }, + "common": { + "confirm": "Potwierdź", + "cancel": "Anuluj", + "save": "Zapisz", + "close": "Zamknij", + "delete": "Usuń", + "edit": "Edytuj", + "loading": "Ładowanie...", + "apply": "Zastosuj" + }, + "notifications": { + "gameDataNotFound": "Błąd: Nie znaleziono danych gry", + "gameUpdatedSuccess": "Gra została zaktualizowana pomyślnie! 🎉", + "updateFailed": "Aktualizacja nie powiodła się: {error}", + "updateError": "Błąd aktualizacji: {error}", + "discordEnabled": "Discord Rich Presence włączony", + "discordDisabled": "Discord Rich Presence wyłączony", + "discordSaveFailed": "Nie udało się zapisać ustawień Discorda", + "playerNameRequired": "Proszę podać prawidłową nazwę gracza", + "playerNameSaved": "Nazwa gracza została zapisana pomyślnie", + "playerNameSaveFailed": "Nie udało się zapisać nazwy gracza", + "uuidCopied": "Identyfikator UUID skopiowany do schowka!", + "uuidCopyFailed": "Nie udało się skopiować UUID", + "uuidRegenNotAvailable": "Ponowna gerowanie UUID niedostępne", + "uuidRegenFailed": "Nie udało się ponownie wygenerować UUID", + "uuidGenerated": "Nowy UUID został pomyślnie wygenerowany!", + "uuidGeneratedShort": "Wygenerowano nowy UUID!", + "uuidGenerateFailed": "Nie udało się wygenerować nowego UUID", + "uuidRequired": "Wprowadzić UUID", + "uuidInvalidFormat": "Nieprawidłowy format UUID", + "uuidSetFailed": "Nie udało się ustawić niestandardowego UUID", + "uuidSetSuccess": "Niestandardowy UUID został ustawiony pomyślnie!", + "uuidDeleteFailed": "Nie udało się usunąć UUID", + "uuidDeleteSuccess": "UUID został pomyślnie usunięty!", + "modsDownloading": "Pobieranie {name}...", + "modsTogglingMod": "Przełączanie moda...", + "modsDeletingMod": "Usuwanie moda...", + "modsLoadingMods": "Ładowanie modów z CurseForge...", + "modsInstalledSuccess": "{name} zainstalowany pomyślnie! 🎉", + "modsDeletedSuccess": "{name} usunięto pomyślnie", + "modsDownloadFailed": "Nie udało się pobrać moda: {error}", + "modsToggleFailed": "Nie udało się przełączyć moda: {error}", + "modsDeleteFailed": "Nie udało się usunąć moda: {error}", + "modsModNotFound": "Nie znaleziono informacji o modzie" + }, + "confirm": { + "defaultTitle": "Potwierdź działanie", + "regenerateUuidTitle": "Wygeneruj nowy UUID", + "regenerateUuidMessage": "Czy na pewno chcesz wygenerować nowy UUID? To spowoduje zmianę Twojego identyfikatora gracza.", + "regenerateUuidButton": "Generuj", + "setCustomUuidTitle": "Ustaw niestandardowy UUID", + "setCustomUuidMessage": "Czy na pewno chcesz ustawić ten UUID? To spowoduje zmianę Twojego identyfikatora gracza.", + "setCustomUuidButton": "Ustaw UUID", + "deleteUuidTitle": "Usuń UUID", + "deleteUuidMessage": "Czy na pewno chcesz usunąć UUID dla \"{username}\"? Tej czynności nie można cofnąć.", + "deleteUuidButton": "Usuń", + "uninstallGameTitle": "Odinstaluj grę", + "uninstallGameMessage": "Czy na pewno chcesz odinstalować Hytale? Wszystkie pliki gry zostaną usunięte.", + "uninstallGameButton": "Odinstaluj" + }, + "progress": { + "initializing": "Inicjalizacja...", + "downloading": "Pobieranie...", + "installing": "Instalowanie...", + "extracting": "Ekstraktowanie...", + "verifying": "Weryfikowanie...", + "switchingProfile": "Przełączanie profilu...", + "profileSwitched": "Profil zmieniony!", + "startingGame": "Uruchamianie gry...", + "launching": "URUCHAMIANIE...", + "uninstallingGame": "Odinstalowywanie gry...", + "gameUninstalled": "Gra została pomyślnie odinstalowana!", + "uninstallFailed": "Odinstalowanie nie powiodło się: {error}", + "startingUpdate": "Rozpoczynanie obowiązkowej aktualizacji gry...", + "installationComplete": "Instalacja zakończona pomyślnie!", + "installationFailed": "Instalacja nie powiodła się: {error}", + "installingGameFiles": "Instalowanie plików gry...", + "installComplete": "Instalacja zakończona!" + } +} diff --git a/README.md b/README.md index b35c9e4..7ff99b0 100644 --- a/README.md +++ b/README.md @@ -308,20 +308,21 @@ See [BUILD.md](docs/BUILD.md) for comprehensive build instructions. ## 📋 Changelog ### 🆕 v2.1.1 -- 🛠️ **Fix EPERM** Issue -- 🅰️ **Adds Better Arch Build** -- +- 🛠️ **Fix Bug EPERM**: EPERM or Error Permission in creating/removing process in reinstalling is now fixed. +- 🅰️ **Adds .pkg.tar.zst Build for Arch Users**: This Arch-package has been needed since the first release. +- ❎ **Removes .pacman Build for Arch**: Based on the established conventions within the Arch Linux community, the file extension .pacman should not be used for package files. +- 🌎 **New Translation**: New Polish 🇵🇱 Translation added to the Launcher.
Click here to see older Changelogs -### 🆕 v2.1.0 +### 🔄 v2.1.0 - 🚨 **Auto-Retry Downloads and Auto-Patch Files** — - ⚡ **Hardware Acceleration** — - 🔎 **Browse CurseForge Mods** — Browsing mods now easier with our dedicated CurseForge API Key. - 🌎 **Fixes and Release New Translation** — Fixed 🇪🇸 🇧🇷 and added more translation for current build. Turkish 🇹🇷 language now added. -### 🆕 v2.0.2b *(Minor Update: Performance & Utilities)* +### 🔄 v2.0.2b *(Minor Update: Performance & Utilities)* - 🌎 **Language Translation** — A big welcome for Spanish 🇪🇸 and Portuguese (Brazil) 🇧🇷 players! **Language setting can be found in the bottom part of Settings pane.** - 💻 **Laptop/Hybrid GPU Performance Issue Fix** — Added automatic GPU detection system and options to choose which GPU will be used for the game, *specifically for Linux users*. - 👨‍💻 **In-App Logging** — Reporting bugs and issues to `Github Issues` tab or `Open A Ticket` channel in our Discord Server has been made easier for players, no more finding logs file manually.