From 3187deede783f98eab590775ab546616d3bdc709 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 15:44:38 +0000 Subject: [PATCH 01/72] chore(deps): bump authlib from 1.6.7 to 1.6.9 Bumps [authlib](https://github.com/authlib/authlib) from 1.6.7 to 1.6.9. - [Release notes](https://github.com/authlib/authlib/releases) - [Changelog](https://github.com/authlib/authlib/blob/main/docs/changelog.rst) - [Commits](https://github.com/authlib/authlib/compare/v1.6.7...v1.6.9) --- updated-dependencies: - dependency-name: authlib dependency-version: 1.6.9 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- uv.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/uv.lock b/uv.lock index 8b7ded1c2..2ed16815d 100644 --- a/uv.lock +++ b/uv.lock @@ -178,14 +178,14 @@ wheels = [ [[package]] name = "authlib" -version = "1.6.7" +version = "1.6.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/49/dc/ed1681bf1339dd6ea1ce56136bad4baabc6f7ad466e375810702b0237047/authlib-1.6.7.tar.gz", hash = "sha256:dbf10100011d1e1b34048c9d120e83f13b35d69a826ae762b93d2fb5aafc337b", size = 164950, upload-time = "2026-02-06T14:04:14.171Z" } +sdist = { url = "https://files.pythonhosted.org/packages/af/98/00d3dd826d46959ad8e32af2dbb2398868fd9fd0683c26e56d0789bd0e68/authlib-1.6.9.tar.gz", hash = "sha256:d8f2421e7e5980cc1ddb4e32d3f5fa659cfaf60d8eaf3281ebed192e4ab74f04", size = 165134, upload-time = "2026-03-02T07:44:01.998Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/00/3ed12264094ec91f534fae429945efbaa9f8c666f3aa7061cc3b2a26a0cd/authlib-1.6.7-py2.py3-none-any.whl", hash = "sha256:c637340d9a02789d2efa1d003a7437d10d3e565237bcb5fcbc6c134c7b95bab0", size = 244115, upload-time = "2026-02-06T14:04:12.141Z" }, + { url = "https://files.pythonhosted.org/packages/53/23/b65f568ed0c22f1efacb744d2db1a33c8068f384b8c9b482b52ebdbc3ef6/authlib-1.6.9-py2.py3-none-any.whl", hash = "sha256:f08b4c14e08f0861dc18a32357b33fbcfd2ea86cfe3fe149484b4d764c4a0ac3", size = 244197, upload-time = "2026-03-02T07:44:00.307Z" }, ] [[package]] From 877c19fdb1d307df255a5e9267a7c5d2d05b21d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 16:50:50 +0000 Subject: [PATCH 02/72] chore(deps): bump memray from 1.17.2 to 1.19.2 Bumps [memray](https://github.com/bloomberg/memray) from 1.17.2 to 1.19.2. - [Release notes](https://github.com/bloomberg/memray/releases) - [Changelog](https://github.com/bloomberg/memray/blob/main/NEWS.rst) - [Commits](https://github.com/bloomberg/memray/compare/v1.17.2...v1.19.2) --- updated-dependencies: - dependency-name: memray dependency-version: 1.19.2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- uv.lock | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/uv.lock b/uv.lock index 2ed16815d..d6de8c38f 100644 --- a/uv.lock +++ b/uv.lock @@ -1141,21 +1141,33 @@ wheels = [ [[package]] name = "memray" -version = "1.17.2" +version = "1.19.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jinja2" }, { name = "rich" }, { name = "textual" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/40/66e6ae86c0a22b8b998779fa8d6c0ab9ee63f0943198adcf714934286cbf/memray-1.17.2.tar.gz", hash = "sha256:eb75c075874a6eccddf361513d9d4a9223dd940580c6370a6ba5339bae5d0ba2", size = 1025995, upload-time = "2025-05-09T02:03:29.899Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e9/db/56ff21f47be261ab781105b233d1851d3f2fcdd4f08ebf689f6d6fd84f0d/memray-1.19.2.tar.gz", hash = "sha256:680cb90ac4564d140673ac9d8b7a7e07a8405bd1fb8f933da22616f93124ca84", size = 2410256, upload-time = "2026-03-13T15:22:31.825Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/36/5ccb56f1a8f39e24025c2b8203b68980607810731735a33b14b5db3823f4/memray-1.17.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:aa655a28d10958a6a4feb98f123e4d7bbf156a7fef79edebbfca6198509aada2", size = 880681, upload-time = "2025-05-09T02:02:55.6Z" }, - { url = "https://files.pythonhosted.org/packages/a5/b2/1f74ee01af4c7eedf94ad12e48e40f96ef522141d5c2efaf7282a971c256/memray-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b7d9c90ab17629a0b38851fd004c5301de0f3c4668a88986da22dd016c4416cd", size = 857837, upload-time = "2025-05-09T02:02:56.664Z" }, - { url = "https://files.pythonhosted.org/packages/75/30/62b2da40ef34afefe0df91a9d098bcaed46e9848d8e74c8742a11684d325/memray-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e816e7157b4e2e17ec3fa08fa59a058a5ba264dddd35e04e44862e7800db07f3", size = 7885010, upload-time = "2025-05-09T02:02:57.818Z" }, - { url = "https://files.pythonhosted.org/packages/a6/74/9f5fb772cdb7b203ece295dc429507a28e0ecda9fef6c3dc2fdf02c7f1cd/memray-1.17.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48fe99afa391bdc67f2415b968b31c1ace5d045a0af91312a8e24cfa4ff577c6", size = 7956125, upload-time = "2025-05-09T02:02:59.351Z" }, - { url = "https://files.pythonhosted.org/packages/b9/69/06c3b2776c90257354176d6a3caf3c4a74f2d2920c96c456b149109a6456/memray-1.17.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e871af5a88006f9c0d16cb234e9d18244ffeb28f5c8aa17bd6babc8418fdda1d", size = 8235642, upload-time = "2025-05-09T02:03:00.913Z" }, - { url = "https://files.pythonhosted.org/packages/a6/d4/7adf788b3bb1652131bdd086434ec4e337c46fc8df9809a8d0887aebd400/memray-1.17.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:63f0a8d5d9d179648e7e336f8a185e8f4a1b70f28ec62476e193c024aa992313", size = 8183003, upload-time = "2025-05-09T02:03:02.792Z" }, + { url = "https://files.pythonhosted.org/packages/34/10/cbf57c122988d6e3bd148aa374e91e0e2f156cc7db1ac6397eb6db3946d1/memray-1.19.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:13aa87ad34cc88b3f31f7205e0a4543c391032e8600dc0c0cbf22555ff816d97", size = 2182910, upload-time = "2026-03-13T15:21:11.357Z" }, + { url = "https://files.pythonhosted.org/packages/5c/0e/7979dfe7e2b034431e44e3bab86356d9bc2c4f3ed0eb1594cb0ceb38c859/memray-1.19.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d6b249618a3e4fa8e10291445a2b2dfaf6f188e7cc1765966aac8fb52cb22066", size = 2161575, upload-time = "2026-03-13T15:21:13.051Z" }, + { url = "https://files.pythonhosted.org/packages/f9/92/2f0ca3936cdf4c59bc8c59fc8738ce8854ba24fd8519988f2ece0eba10fa/memray-1.19.2-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:34985e5e638ef8d4d54de8173c5e4481c478930f545bd0eb4738a631beb63d04", size = 9732172, upload-time = "2026-03-13T15:21:15.115Z" }, + { url = "https://files.pythonhosted.org/packages/52/23/de78510b4e3a0668b793d8b5dff03f2af20eef97943ca5b3263effff799c/memray-1.19.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ee0fcfafd1e8535bdc0d0ed75bcdd48d436a6f62d467df91871366cbb3bbaebc", size = 9999447, upload-time = "2026-03-13T15:21:18.099Z" }, + { url = "https://files.pythonhosted.org/packages/00/0d/b0e50537470f93bddfa2c134177fe9332c20be44a571588866776ff92b82/memray-1.19.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:846185c393ff0dc6bca55819b1c83b510b77d8d561b7c0c50f4873f69579e35d", size = 9379158, upload-time = "2026-03-13T15:21:21.003Z" }, + { url = "https://files.pythonhosted.org/packages/5c/53/78f6de5c7208821b15cfbbb9da44ab4a5a881a7cc5075f9435a1700320e8/memray-1.19.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8cc31327ed71e9f6ef7e9ed558e764f0e9c3f01da13ad8547734eb65fbeade1d", size = 12226753, upload-time = "2026-03-13T15:21:24.041Z" }, + { url = "https://files.pythonhosted.org/packages/e1/f4/3d8205b9f46657d26d54d1e644f27d09955b737189354a01907d8a08c7e2/memray-1.19.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:410377c0eae8d544421f74b919a18e119279fe1a2fa5ff381404b55aeb4c6514", size = 2184823, upload-time = "2026-03-13T15:21:27.176Z" }, + { url = "https://files.pythonhosted.org/packages/fb/07/7a342801317eff410a8267b55cb7514e156ee1f574e690852eb240bbe9fd/memray-1.19.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a53dc4032581ed075fcb62a4acc0ced14fb90a8269159d4e53dfac7af269c255", size = 2163669, upload-time = "2026-03-13T15:21:29.123Z" }, + { url = "https://files.pythonhosted.org/packages/d4/00/2c342b1472f9f03018bb88c80760cdfa6979404d63c4300c607fd0562607/memray-1.19.2-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:a7630865fbf3823aa2d1a6f7536f7aec88cf8ccf5b2498aad44adbc733f6bd2e", size = 9732615, upload-time = "2026-03-13T15:21:31.038Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ae/2cf960526c9b1f6d46977fc70e11de29ca6b9eafeeb42d1cec7d3bcb056a/memray-1.19.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c23e2b4be22a23cf5cae08854549e3460869a36c5f4bedc739b646ac97da4a60", size = 9979299, upload-time = "2026-03-13T15:21:34.072Z" }, + { url = "https://files.pythonhosted.org/packages/e1/78/73ee3d0ebee3c38fbb2d51766854d2932beec6481063532a6019bf340a2d/memray-1.19.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:95b6c02ca7f8555b5bee1c54c50cbbcf2033e07ebca95dade2ac3a27bb36b320", size = 9375722, upload-time = "2026-03-13T15:21:36.884Z" }, + { url = "https://files.pythonhosted.org/packages/3b/c6/2f02475e85ccd32fa306736986f1f77f99365066ecdc859f5078148ebc40/memray-1.19.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:907470e2684568eb91a993ae69a08b1430494c8f2f6ef489b4b78519d9dae3d0", size = 12220041, upload-time = "2026-03-13T15:21:40.16Z" }, + { url = "https://files.pythonhosted.org/packages/76/12/01bb32188c011e6d802469e04c1d7c8054eb8300164e2269c830f5b26a8e/memray-1.19.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:124138f35fea36c434256c417f1b8cb32f78769f208530c1e56bf2c2b7654120", size = 2201353, upload-time = "2026-03-13T15:21:42.607Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e0/d9b59f8be00f27440f60b95da5db6515a1c44c481651b8d2fa8f3468fc35/memray-1.19.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:240192dc98ff0b3501055521bfd73566d339808b11bd5af10865afe6ae18abef", size = 2180420, upload-time = "2026-03-13T15:21:44.623Z" }, + { url = "https://files.pythonhosted.org/packages/a5/5c/30aca63f4b88dca79ba679675200938652c816edee34c12565d2f17ea936/memray-1.19.2-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:edb7a3c2a9e97fb409b352f6c316598c7c0c3c22732e73704d25b9eb75ae2f2d", size = 9697953, upload-time = "2026-03-13T15:21:47.088Z" }, + { url = "https://files.pythonhosted.org/packages/9f/02/9e4a68bdd5ebc9079f97bdf287cc0ccc51c18e9edc205de7d41648315809/memray-1.19.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b6a43db4c1466446a905a77944813253231ac0269f758c6c6bc03ceb1821c1b6", size = 9944517, upload-time = "2026-03-13T15:21:50.125Z" }, + { url = "https://files.pythonhosted.org/packages/4a/f0/3adad59ebed6841c2f88b43c9b90cc9c03ff086129a8aef3cff23c92d6ac/memray-1.19.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cf951dae8d27d502fbc549f6784460a70cce05b1e71bf5446d8692a74051f14f", size = 9365528, upload-time = "2026-03-13T15:21:53.141Z" }, + { url = "https://files.pythonhosted.org/packages/45/0e/083e00fe74e576b463e7b00e4214b8962f27bd70c5c77e494c0211a77342/memray-1.19.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8033b78232555bb1856b3298bef2898ec8b334d3d465c1822c665206d1fa910a", size = 12143894, upload-time = "2026-03-13T15:21:56.486Z" }, ] [[package]] From 5203341da1e83189bdb124ef7ad7f6159818c616 Mon Sep 17 00:00:00 2001 From: Denislav Denev Date: Wed, 18 Mar 2026 23:11:57 +0200 Subject: [PATCH 03/72] Add bg_BG locale scaffold --- frontend/src/locales/bg_BG/collection.json | 21 +++ frontend/src/locales/bg_BG/common.json | 63 ++++++++ frontend/src/locales/bg_BG/console.json | 43 +++++ frontend/src/locales/bg_BG/emptyStates.json | 11 ++ frontend/src/locales/bg_BG/gallery.json | 4 + frontend/src/locales/bg_BG/home.json | 4 + frontend/src/locales/bg_BG/login.json | 16 ++ frontend/src/locales/bg_BG/patcher.json | 34 ++++ frontend/src/locales/bg_BG/platform.json | 61 +++++++ frontend/src/locales/bg_BG/play.json | 24 +++ frontend/src/locales/bg_BG/rom.json | 106 ++++++++++++ frontend/src/locales/bg_BG/scan.json | 47 ++++++ frontend/src/locales/bg_BG/settings.json | 171 ++++++++++++++++++++ frontend/src/locales/bg_BG/setup.json | 28 ++++ 14 files changed, 633 insertions(+) create mode 100644 frontend/src/locales/bg_BG/collection.json create mode 100644 frontend/src/locales/bg_BG/common.json create mode 100644 frontend/src/locales/bg_BG/console.json create mode 100644 frontend/src/locales/bg_BG/emptyStates.json create mode 100644 frontend/src/locales/bg_BG/gallery.json create mode 100644 frontend/src/locales/bg_BG/home.json create mode 100644 frontend/src/locales/bg_BG/login.json create mode 100644 frontend/src/locales/bg_BG/patcher.json create mode 100644 frontend/src/locales/bg_BG/platform.json create mode 100644 frontend/src/locales/bg_BG/play.json create mode 100644 frontend/src/locales/bg_BG/rom.json create mode 100644 frontend/src/locales/bg_BG/scan.json create mode 100644 frontend/src/locales/bg_BG/settings.json create mode 100644 frontend/src/locales/bg_BG/setup.json diff --git a/frontend/src/locales/bg_BG/collection.json b/frontend/src/locales/bg_BG/collection.json new file mode 100644 index 000000000..36921cced --- /dev/null +++ b/frontend/src/locales/bg_BG/collection.json @@ -0,0 +1,21 @@ +{ + "add-collection": "Add collection", + "create-collection": "Create collection", + "create-smart-collection": "Create smart collection", + "current-filters": "Current Filters", + "danger-zone": "Danger zone", + "delete-collection": "Delete collection", + "description": "Description", + "edit-collection": "Edit collection", + "name": "Name", + "owner": "Owner", + "private": "Private", + "private-desc": "Private (only visible to me)", + "public": "Public", + "public-desc": "Public (visible to everyone)", + "removing-collection-1": "Removing collection", + "removing-collection-2": "from RomM. Do you confirm?", + "removing-smart-collection-1": "Removing smart collection", + "removing-smart-collection-2": "from RomM. Do you confirm?", + "search-collection": "Search collection" +} diff --git a/frontend/src/locales/bg_BG/common.json b/frontend/src/locales/bg_BG/common.json new file mode 100644 index 000000000..4cbf3da3d --- /dev/null +++ b/frontend/src/locales/bg_BG/common.json @@ -0,0 +1,63 @@ +{ + "about": "About", + "add": "Add", + "administration": "Administration", + "and": "and", + "apply": "Apply", + "ascii-only": "ASCII characters only", + "cancel": "Cancel", + "collection": "Collection", + "collections": "Collections", + "confirm": "Confirm", + "confirm-deletion": "Confirm Deletion", + "core": "Core", + "create": "Create", + "delete": "Delete", + "dropzone-description": "Drag and drop your ROM files here, or click to browse", + "dropzone-drag-over": "Release to upload", + "dropzone-title": "Drop files here", + "edit": "Edit", + "exclude-on-delete": "Exclude on delete", + "filter": "Filter", + "firmware": "Firmware", + "games-n": "{n} Game | {n} Games", + "invalid-email": "Invalid email", + "invalid-name": "Invalid name", + "last-updated": "Last updated", + "library-management": "Library management", + "logout": "Logout", + "name": "Name", + "password-length": "Password must be between 6 and 255 characters", + "patcher": "Patcher", + "platform": "Platform", + "platforms": "Platforms", + "platforms-n": "{n} Platform | {n} Platforms", + "profile": "Profile", + "random": "Random", + "removing-from-filesystem": "Removing from filesystem", + "required": "Required", + "save": "Save", + "saves": "Saves", + "saves-n": "{n} Save | {n} Saves", + "screenshots-n": "{n} Screenshot | {n} Screenshots", + "search": "Search", + "server-stats": "Server stats", + "size-on-disk": "Size on disk", + "slug": "Slug", + "smart-collection": "Smart Collection", + "smart-collections": "Smart Collections", + "state": "State", + "states": "States", + "states-n": "{n} State | {n} States", + "sync": "Sync", + "type": "Type", + "update": "Update", + "upload": "Upload", + "upload-files-selected": "{count} file selected | {count} files selected", + "user-interface": "User interface", + "username-chars": "Username can only contain letters, numbers, underscores, and hyphens", + "username-length": "Username must be between 3 and 255 characters", + "virtual-collection": "Autogenerated collection", + "virtual-collections": "Autogenerated collections", + "warning": "WARNING:" +} diff --git a/frontend/src/locales/bg_BG/console.json b/frontend/src/locales/bg_BG/console.json new file mode 100644 index 000000000..8da99138b --- /dev/null +++ b/frontend/src/locales/bg_BG/console.json @@ -0,0 +1,43 @@ +{ + "collections": "Collections", + "console": "Console", + "console-settings": "Console Settings", + "default": "Default", + "detail-file": "File", + "detail-size": "File Size", + "disabled": "Disabled", + "emulator-cdn": "Loading emulator (CDN)…", + "emulator-failed": "Failed to load emulator", + "emulator-loading": "Loading emulator…", + "enabled": "Enabled", + "exit-console-mode": "Exit Console Mode", + "exit-game": "Press Start + Select (or Backspace) to exit", + "fullscreen": "Fullscreen", + "game-detail": "Details", + "game-exit": "Exit Game", + "game-exit-cancel": "Cancel", + "game-exit-cancel-desc": "Return to the game", + "game-exit-nosave": "Exit Without Saving", + "game-exit-nosave-desc": "Leave immediately, progress since last save state is lost", + "game-exit-save": "Save & Exit", + "game-exit-save-desc": "Save current state, then quit", + "game-play": "Play", + "game-saving": "SAVING…", + "games-n": "{n} game | {n} games", + "loading-platforms": "Loading Platforms…", + "nav-back": "Back", + "nav-delete": "Delete", + "nav-favorite": "Favorite", + "nav-menu": "Menu", + "nav-navigation": "Navigation", + "nav-select": "Select", + "platforms": "Platforms", + "recently-played": "Recently Played", + "save-states": "SAVE STATES", + "screenshots": "Screenshots", + "settings": "Settings", + "smart-collections": "Smart Collections", + "sound-effects": "Sound Effects", + "theme": "Theme", + "virtual-collections": "Autogenerated Collections" +} diff --git a/frontend/src/locales/bg_BG/emptyStates.json b/frontend/src/locales/bg_BG/emptyStates.json new file mode 100644 index 000000000..a77e1c7d1 --- /dev/null +++ b/frontend/src/locales/bg_BG/emptyStates.json @@ -0,0 +1,11 @@ +{ + "404-subtitle": "The page you are looking for does not exist", + "404-title": "Page not found", + "firmware-text": "The firmwares/BIOS you were looking for does not exist", + "firmware-title": "No firmwares/BIOS to show", + "home-headline": "No games in your library", + "home-text": "Ready to play?", + "home-title": "Run a quick scan to automatically detect games on your system", + "manual-match": "Search for games across all metadata providers", + "search-for-games": "Search for games across all platforms" +} diff --git a/frontend/src/locales/bg_BG/gallery.json b/frontend/src/locales/bg_BG/gallery.json new file mode 100644 index 000000000..987687a18 --- /dev/null +++ b/frontend/src/locales/bg_BG/gallery.json @@ -0,0 +1,4 @@ +{ + "all-loaded": "All games have been loaded", + "load-more": "Load more" +} diff --git a/frontend/src/locales/bg_BG/home.json b/frontend/src/locales/bg_BG/home.json new file mode 100644 index 000000000..e00fd0220 --- /dev/null +++ b/frontend/src/locales/bg_BG/home.json @@ -0,0 +1,4 @@ +{ + "continue-playing": "Continue playing", + "recently-added": "Recently added" +} diff --git a/frontend/src/locales/bg_BG/login.json b/frontend/src/locales/bg_BG/login.json new file mode 100644 index 000000000..666acf6e8 --- /dev/null +++ b/frontend/src/locales/bg_BG/login.json @@ -0,0 +1,16 @@ +{ + "back-to-login": "Back to login", + "confirm-new-password": "Confirm new password", + "forgot-password": "Forgot your password?", + "login": "Login", + "login-oidc": "Login with {oidc}", + "new-password": "New password", + "or": "or", + "password": "Password", + "register": "Register", + "reset-password": "Reset password", + "reset-sent": "Reset link sent. Contact your admin.", + "send-reset-link": "Send reset link", + "setup-wizard": "Setup wizard", + "username": "Username" +} diff --git a/frontend/src/locales/bg_BG/patcher.json b/frontend/src/locales/bg_BG/patcher.json new file mode 100644 index 000000000..845e341b6 --- /dev/null +++ b/frontend/src/locales/bg_BG/patcher.json @@ -0,0 +1,34 @@ +{ + "apply-download": "Apply & Download", + "apply-download-upload": "Apply, Download & Upload", + "apply-upload": "Apply & Upload", + "choose-patch": "Choose patch", + "choose-rom": "Choose ROM", + "download-locally": "Download patched ROM", + "drag-drop-patch": "Drag & drop a patch file or click to browse.", + "drag-drop-rom": "Drag & drop a ROM file or click to browse.", + "drop-patch-here": "Drop patch here", + "drop-rom-here": "Drop ROM here", + "error-no-action": "Please select at least one action: download or upload.", + "error-no-patch": "Please select a patch file.", + "error-no-platform": "Please select a platform to upload to.", + "error-no-rom": "Please select a ROM file.", + "error-upload-failed": "Unable to upload ROM: {error}", + "output-filename": "Output filename (optional)", + "patch-file": "Patch file", + "powered-by": "Powered by patcherjs", + "replace": "Replace", + "rom-file": "ROM file", + "status-downloading": "Downloading patched ROM...", + "status-preparing": "Preparing files...", + "status-uploading": "Uploading to RomM...", + "subtitle": "Choose a base ROM and a patch file, then apply to download the patched ROM.", + "success-downloaded": "downloaded", + "success-message": "Patched ROM {actions} successfully!", + "success-uploaded": "uploaded", + "supported-formats": "Supported patch formats", + "title": "ROM Patcher", + "upload-errors": " (with some errors)", + "upload-success": "Patched ROM uploaded successfully{errors}. Starting scan...", + "upload-to-romm": "Upload to RomM" +} diff --git a/frontend/src/locales/bg_BG/platform.json b/frontend/src/locales/bg_BG/platform.json new file mode 100644 index 000000000..1b683a019 --- /dev/null +++ b/frontend/src/locales/bg_BG/platform.json @@ -0,0 +1,61 @@ +{ + "active-multi-select": "Active multi-select", + "age-rating": "Age rating", + "category": "Category", + "change-view": "Change view", + "collection": "Collection", + "company": "Company", + "cover-style": "Cover style", + "danger-zone": "Danger zone", + "delete-platform": "Delete platform", + "export": "Export", + "family": "Family", + "filter-gallery": "Filter gallery", + "firmware-deleted-successfully": "Firmware deleted successfully! | {count} firmwares deleted successfully!", + "firmware-remove-warning": "You are going to remove {count} firmware from your filesystem. This action can't be reverted! | You are going to remove {count} firmwares from your filesystem. This action can't be reverted!", + "firmware-select-to-remove": "Select the firmware files you want to remove from your filesystem, otherwise they will only be deleted from RomM database.", + "firmware-uploaded-successfully": "{count} file uploaded successfully. | {count} files uploaded successfully.", + "firmware-uploading": "Uploading {count} firmware file to {platform}... | Uploading {count} firmware files to {platform}...", + "franchise": "Franchise", + "generation": "Generation", + "genre": "Genre", + "language": "Language", + "match-all-logic": "Match ALL of the selected values (AND logic)", + "match-any-logic": "Match ANY of the selected values (OR logic)", + "match-none-logic": "Match NONE of the selected values (NOT logic)", + "missing-from-filesystem": "Missing platform from filesystem", + "no-firmware-found": "No firmware found", + "old-horizontal-cases": "Old horizontal cases", + "old-squared-cases": "Old squared cases", + "player-count": "Player count", + "region": "Region", + "removing-firmware": "Removing {n} firmware file from RomM | Removing {n} firmware files from RomM", + "removing-platform-1": "Removing platform", + "removing-platform-2": "] from RomM. Do you confirm?", + "reset-filters": "Reset filters", + "search-platform": "Search platform", + "settings": "Settings", + "show-duplicates": "Show duplicates", + "show-duplicates-only": "Show duplicate ROMs only", + "show-favorites": "Show favourites", + "show-favorites-only": "Show favourite ROMs only", + "show-firmwares": "Show firmwares/BIOS", + "show-matched": "Show Matched", + "show-missing": "Show missing", + "show-missing-only": "Show missing ROMs only", + "show-not-duplicates-only": "Show non-duplicate ROMs only", + "show-not-favorites-only": "Show non-favourite ROMs only", + "show-not-missing-only": "Show non-missing ROMs only", + "show-not-playables-only": "Show non-playable ROMs only", + "show-not-ra-only": "Show ROMs without RetroAchievements only", + "show-not-verified-only": "Show non-verified ROMs only", + "show-playables": "Show playables", + "show-playables-only": "Show playable ROMs only", + "show-ra": "Show Retroachievements", + "show-ra-only": "Show ROMs with RetroAchievements only", + "show-unmatched": "Show unmatched", + "show-verified": "Show verified", + "show-verified-only": "Show verified ROMs only", + "status": "Status", + "upload-roms": "Upload ROMs" +} diff --git a/frontend/src/locales/bg_BG/play.json b/frontend/src/locales/bg_BG/play.json new file mode 100644 index 000000000..35b309f70 --- /dev/null +++ b/frontend/src/locales/bg_BG/play.json @@ -0,0 +1,24 @@ +{ + "back-to-gallery": "Back to gallery", + "back-to-game-details": "Back to game details", + "background-color": "Background color", + "change-save": "Change save", + "change-state": "Change state", + "clear-cache": "Clear EmulatorJS Cache", + "clear-cache-description": "Any saves or states stored on the server will not be affected.", + "clear-cache-title": "Are you sure you want to clear the EmulatorJS cache?", + "clear-cache-warning": "This will remove all saves and states stored in the browser.", + "deselect-save": "Deselect save", + "deselect-state": "Deselect state", + "full-screen": "Full screen", + "no-save-selected": "No save selected", + "no-saves-available": "No saves available", + "no-state-selected": "No state selected", + "no-states-available": "No states available", + "play": "Play", + "quit": "Quit", + "save-and-quit": "Save and quit", + "select-background-color": "Select background color", + "select-save": "Select save", + "select-state": "Select state" +} diff --git a/frontend/src/locales/bg_BG/rom.json b/frontend/src/locales/bg_BG/rom.json new file mode 100644 index 000000000..418716f09 --- /dev/null +++ b/frontend/src/locales/bg_BG/rom.json @@ -0,0 +1,106 @@ +{ + "add-new-note": "Add New Note", + "add-note": "Add Note", + "add-to-collection": "Add to collection", + "add-to-favorites": "Add to favourites", + "adding-to-collection": "Adding {n} ROMs to collection", + "additional-content": "Additional content", + "age-rating": "Age rating", + "all-styles": "All Styles", + "backlogged": "Backlogged", + "by": "by", + "cant-copy-link": "Can't copy link to clipboard, copy it manually", + "collections": "Collections", + "community-notes": "Community Notes", + "companies": "Companies", + "completion": "Completion", + "completionist": "Completionist", + "confirm-delete-note": "Are you sure you want to delete the note \"{title}\"?", + "copy-link": "Copy download link", + "default": "Set default", + "delete": "Delete", + "delete-filesystem-warning": "You are going to remove {n} ROM from your filesystem. This action can't be reverted! | You are going to remove {n} ROMs from your filesystem. This action can't be reverted!", + "delete-manual-button": "Delete", + "delete-manual-confirm-body": "The manual file will be permanently removed from the filesystem.", + "delete-manual-confirm-title": "Are you sure you want to delete the manual?", + "delete-select-instruction": "Select the games you want to remove from your filesystem, otherwise they will only be deleted from RomM database.", + "deleted-from-database": "{count} ROM deleted from the database | {count} ROMs deleted from the database", + "deleted-from-filesystem": "{count} ROM deleted from the filesystem | {count} ROMs deleted from the filesystem", + "details": "Details", + "difficulty": "Difficulty", + "download": "Download", + "file": "File", + "filename": "File name", + "filename-required": "Cannot save: file name is required", + "files": "Files", + "folder-name": "Folder name", + "franchises": "Franchises", + "genres": "Genres", + "hidden": "Hidden", + "how-long-to-beat": "How Long to Beat", + "info": "Info", + "languages": "Languages", + "main-plus-extra": "Main + Extra", + "main-story": "Main Story", + "make-private": "Make Private", + "make-public": "Make Public", + "manual": "Manual", + "manual-match": "Manual match", + "manual-remove-failed": "Failed to remove manual: {error}", + "manual-removed": "Manual removed successfully", + "manuals-upload-failed": "Unable to upload manuals: {error}", + "manuals-upload-skipped": "All manuals skipped, nothing to upload.", + "manuals-upload-success": "{count} manual uploaded successfully ({failed} skipped/failed). | {count} manuals uploaded successfully ({failed} skipped/failed).", + "metadata": "Metadata", + "metadata-ids": "Metadata IDs", + "my-notes": "My notes", + "no-metadata-source": "No metadata source enabled", + "no-notes": "No notes found", + "no-notes-desc": "Click the Add Note button to create your first note", + "no-saves-found": "No saves found", + "no-states-found": "No states found", + "note-content": "Note Content", + "note-title": "Note Title", + "note-title-exists": "A note with this title already exists", + "now-playing": "Now playing", + "personal": "Personal", + "player-count": "Players", + "private": "Private", + "public": "Public", + "public-notes": "Public notes", + "rating": "Rating", + "refresh-metadata": "Refresh metadata", + "regions": "Regions", + "related-content": "Related content", + "remove-from-collection": "Remove from collection", + "remove-from-favorites": "Remove from favourites", + "remove-from-playing": "Remove from playing", + "removing-from-collection": "Removing {n} ROMs from collection", + "removing-title": "Removing {n} game from RomM | Removing {n} games from RomM", + "rename-file-details": "File will be renamed from {from} to {to}. File tags won't be affected.", + "rename-file-title": "Rename file to match {source} title", + "results-found": "Results found", + "save-data": "Save data", + "select-all": "Select all", + "select-cover-image": "Select a cover image", + "set-as-default": "Set ROM as default", + "show-earned-only": "Show earned only", + "size": "Size", + "status": "Status", + "status-backlogged": "Backlogged", + "status-completed-100": "Completed 100%", + "status-finished": "Finished", + "status-hidden": "Hidden", + "status-incomplete": "Incomplete", + "status-never-playing": "Never Playing", + "status-now-playing": "Now Playing", + "status-retired": "Retired", + "summary": "Summary", + "switch-version": "Switch version", + "tags": "Tags", + "unmatch": "Unmatch ROM", + "unmatch-success": "ROM unmatched successfully", + "unselect-all": "Unselect all", + "update-success": "ROM updated successfully!", + "updated": "Updated" +} diff --git a/frontend/src/locales/bg_BG/scan.json b/frontend/src/locales/bg_BG/scan.json new file mode 100644 index 000000000..1255f4fc6 --- /dev/null +++ b/frontend/src/locales/bg_BG/scan.json @@ -0,0 +1,47 @@ +{ + "abort": "Abort", + "api-key-invalid": "API key invalid!", + "api-key-missing": "API key missing or invalid", + "api-key-missing-or-disabled": "API key missing or source disabled", + "api-key-missing-short": "API key missing!", + "api-key-set": "API key set", + "api-key-valid": "API key set and valid", + "calculate-hashes": "Calculate hashes", + "complete-rescan": "Complete rescan", + "complete-rescan-desc": "Total rescan of selected platforms (slowest)", + "connection-failed": "Connection failed", + "connection-in-progress": "Connection in progress...", + "connection-successful": "Connection successful", + "disabled-by-admin": "Disabled by the administrator", + "firmware-found": "Firmware found: {n} file | Firmware found: {n} files", + "firmware-scanned-n": "Firmware: {n} scanned", + "firmware-scanned-with-details": "Firmware: {n_scanned_firmware} scanned, with {n_new_firmware} new", + "hash-calculation-disabled": "Hash calculation is disabled", + "hasheous-requires-hashes": "Hasheous requires hash calculation to be enabled", + "hashes": "Recalculate hashes", + "hashes-desc": "Recalculates hashes for selected platforms", + "hashes-disabled-tooltip": "File hash calculation disabled.

Hashes (MD5, SHA1, CRC32) are unique fingerprints that identify ROM files precisely.

Without them, Hasheous and RetroAchievements cannot match games to their databases, but scanning will be faster.", + "hashes-enabled-tooltip": "File hash calculation enabled.

Hashes (MD5, SHA1, CRC32) will be calculated to create unique fingerprints for each ROM file.

This enables Hasheous and RetroAchievements to accurately identify games in their databases.", + "manage-library": "Manage library", + "metadata-sources": "Metadata sources", + "new-platforms": "New platforms", + "new-platforms-desc": "Scan new platforms only (fastest)", + "no-new-roms": "No new/changed ROMs found", + "not-identified": "Not identified", + "platforms-scanned-n": "Platforms: {n} scanned", + "platforms-scanned-with-details": "Platforms: {n_scanned_platforms} scanned out of {n_total_platforms}, with {n_new_platforms} new and {n_identified_platforms} identified", + "quick-scan": "Quick scan", + "quick-scan-desc": "Scan new games only", + "retroachievements-requires-hashes": "RetroAchievements requires hash calculation to be enabled", + "roms-scanned-n": "ROMs: {n} scanned", + "roms-scanned-with-details": "ROMs: {n_scanned_roms} scanned out of {n_total_roms}, with {n_new_roms} new and {n_identified_roms} identified", + "scan": "Scan", + "scan-options": "Scan options", + "scan-types-info": "New Platforms: This will only look for platforms that are not already in RomM.

Quick Scan: Scans for games that are not in the library yet (fastest).

Unmatched Games: Attempts to match games that are not matched with the selected metadata sources.
For example, selecting IGDB and ScreenScraper will scan games that are not matched with IGDB or ScreenScraper.

Update Metadata: Updates the metadata for games that have been matched with selected metadata sources using the external ID (e.g. IGDB ID).
For example, selecting IGDB and ScreenScraper will update the metadata for games that are matched with IGDB or ScreenScraper, and will use igdb_id and/or ssfr_id to refetch the metadata from the respective providers.

Recalculate Hashes: Recalculates hashes for all files in the selected platforms.

Total Rescan: Rescans and rematches all games in the selected platforms (slowest).
This will wipe all existing metadata matches, including the external IDs, and attempt to match them again, like on a fresh scan. Saves, states and notes will be preserved.", + "scan-types-more-info": "More information", + "select-one-source": "Please select at least one metadata source to enrich your library with artwork and metadata", + "unmatched-games": "Unmatched games", + "unmatched-games-desc": "Scan games with missing metadata matches", + "update-metadata": "Update metadata", + "update-metadata-desc": "Update metadata for matched games" +} diff --git a/frontend/src/locales/bg_BG/settings.json b/frontend/src/locales/bg_BG/settings.json new file mode 100644 index 000000000..445c3e8d9 --- /dev/null +++ b/frontend/src/locales/bg_BG/settings.json @@ -0,0 +1,171 @@ +{ + "add-exclusion-for": "Add a new exclusion for", + "add-folder-alias": "Add folder alias", + "add-folder-mapping": "Add folder mapping", + "add-mapping-type": "Select mapping type:", + "add-platform-variant": "Add platform variant", + "auto-detected": "Auto-detected", + "backlogged": "Backlogged", + "boxart-box3d": "3D Box", + "boxart-cover": "2D Box", + "boxart-desc": "Choose the boxart style for game cards", + "boxart-miximage": "Mix Image", + "boxart-physical": "Physical", + "boxart-style": "Boxart style", + "canceled": "Canceled", + "client-api-tokens": "Client API Tokens", + "client-token-confirm-delete": "Are you sure you want to revoke this token? Any device using it will lose access.", + "client-token-confirm-regenerate": "This will invalidate the current credential. Any device using the old token will need to be re-paired.", + "client-token-copied": "Token copied to clipboard", + "client-token-created": "Token created successfully", + "client-token-deleted": "Token revoked successfully", + "client-token-delivery-hint": "This token will not be shown again.", + "client-token-expiry-30d": "30 days", + "client-token-expiry-90d": "90 days", + "client-token-expiry-1y": "1 year", + "client-token-expiry-never": "Never", + "client-token-name": "Token name", + "client-token-pair-claimed": "Device paired successfully!", + "client-token-pair-expired": "Pairing code expired", + "client-token-regenerated": "Token regenerated successfully", + "client-token-scopes": "Permissions", + "client-token-select-expiry": "Expiration", + "cleanup": "Cleanup", + "cleanup-all": "Clean up all", + "cleanup-all-confirm": "This will permanently delete all missing ROMs{platform} from the database and their resource directories. This action cannot be undone.", + "completed": "Completed", + "config-file-not-mounted-desc": "The config.yml file has not been mounted. Any changes made to the configuration will not persist after the application restarts.", + "config-file-not-mounted-title": "Configuration file not mounted!", + "config-file-not-writable-desc": "The config.yml file is not writable. Any changes made to the configuration will not persist after the application restarts.", + "config-file-not-writable-title": "Configuration file not writable!", + "config-tab": "Config", + "confirm-delete-mapping": "Do you confirm?", + "continue-playing-as-grid": "Continue playing as grid", + "continue-playing-as-grid-desc": "View continue playing ROM cards as a grid at the home page", + "conversion": "Conversion", + "couldnt-fetch-missing-roms": "Couldn't fetch missing ROMs: {error}", + "deferred": "Deferred", + "deleting-mapping": "Deleting", + "disable-animations": "Disable animations", + "disable-animations-desc": "Disable all animations in the gallery (CD spinning, cartridge loading, hover videos)", + "edit-user": "Edit user", + "email": "Email", + "enable-3d-effect": "Enable 3D effect", + "enable-3d-effect-desc": "Enable 3D effect for the game/platform/collection cards", + "enable-experimental-cache": "Enable experimental request cache", + "enable-experimental-cache-desc": "Enable experimental request caching to improve performance (may cause issues)", + "excluded": "Excluded", + "excluded-multi-rom-files": "Multi ROM files", + "excluded-multi-rom-parts-extensions": "Multi ROM parts extensions", + "excluded-multi-rom-parts-files": "Multi ROM parts files", + "excluded-single-rom-extensions": "Single ROM extensions", + "excluded-single-rom-files": "Single ROM files", + "exclusion-placeholder": "e.g., *.tmp or test_file.rom", + "exclusion-value": "Exclusion value", + "exclusions-item": "item", + "exclusions-items": "items", + "exclusions-multi-files-desc": "File names to exclude from multi-file ROM scanning", + "exclusions-multi-parts-ext-desc": "File extensions to exclude from multi-part ROM scanning", + "exclusions-multi-parts-files-desc": "File names to exclude from multi-part ROM scanning", + "exclusions-none": "No exclusions configured", + "exclusions-platforms-desc": "Platforms to exclude from scanning", + "exclusions-single-ext-desc": "File extensions to exclude from single ROM scanning", + "exclusions-single-files-desc": "File names to exclude from single ROM scanning", + "exclusions-tooltip": "Configure which files, extensions, and platforms should be excluded during library scanning. Items added here will be ignored when RomM scans your library.", + "failed": "Failed", + "folder-alias": "Folder alias", + "folder-alias-description": "Maps a custom folder name to an official RomM platform. For example, map 'Nintendo-64' to 'n64'.", + "folder-mappings": "Folder mappings", + "folder-mappings-mutually-exclusive": "Note: a folder cannot be both an alias and a variant.", + "folder-mappings-tooltip-aliases": "Use this to map a folder in your library to an official RomM platform. For example, if your Nintendo 64 games are in a folder named 'Nintendo-64', you can bind it to the 'n64' platform here. This becomes the primary identifier for that platform in RomM.", + "folder-mappings-tooltip-variants": "Use this if you have a separate folder for a platform variant and want it to use the metadata of a main platform. For example, mapping a folder named 'fbneo' as a version of 'arcade' will cause RomM to search for Arcade metadata when scanning 'fbneo' games.", + "folder-name": "Folder name", + "folder-name-header": "Folder name", + "gallery": "Gallery", + "group-roms": "Group ROMs", + "group-roms-desc": "Group versions of the same ROM together in the gallery", + "home": "Home", + "interface": "Interface", + "invite-link": "Invite link", + "language": "Language", + "main-platform": "Main platform", + "manual": "Manual", + "missing-games-none": "No missing ROMs found", + "missing-games-tab": "Missing games", + "missing-platform-from-fs": "Missing platform from filesystem", + "no-missing-roms-to-delete": "No missing ROMs to delete", + "no-tasks-in-history": "No tasks in history", + "parent-platform": "Parent platform", + "password": "Password", + "password-placeholder": "Leave empty to keep current password", + "passwords-must-match": "Passwords must match", + "platform-mapping-created": "Platform mapping created", + "platform-mapping-deleted": "Platform mapping deleted", + "platform-mapping-updated": "Platform mapping updated", + "platform-variant": "Platform variant", + "platform-variant-description": "Maps a folder to a parent platform's metadata. For example, map 'n64dd' as a variant of 'n64' to inherit N64 metadata.", + "platform-version": "Platform version", + "platforms-bindings": "Folder aliases", + "platforms-drawer": "Platforms menu", + "platforms-drawer-group-by": "Group by", + "platforms-versions": "Platform variants", + "progress": "Progress", + "queued": "Queued", + "recently-added-as-grid": "Recently added ROMs as grid", + "recently-added-as-grid-desc": "View recently added ROM cards as a grid at the home page", + "removed": "Removed", + "repeat-password": "Repeat password", + "repeat-password-required": "Repeat password is required", + "role": "Role", + "romm-platform": "RomM platform", + "romm-platform-header": "RomM platform", + "running": "Running", + "scan": "Scan", + "scheduled": "Scheduled", + "select-exclusion-type": "Select what to exclude", + "show-actionbar": "Show action bar", + "show-actionbar-desc": "Show action bar in the game card always", + "show-collections": "Show collections", + "show-collections-as-grid": "Collections as grid", + "show-collections-as-grid-desc": "View collection cards as a grid at the home page", + "show-collections-desc": "Show collections section at the home page", + "show-continue-playing": "Show continue playing", + "show-continue-playing-desc": "Show continue playing section at the home page", + "show-game-titles": "Show game titles", + "show-game-titles-desc": "Always show game titles on game cards", + "show-languages": "Show languages", + "show-languages-desc": "Show language flags in the gallery", + "show-platforms": "Show platforms", + "show-platforms-as-grid": "Platforms as grid", + "show-platforms-as-grid-desc": "View platform cards as a grid at the home page", + "show-platforms-desc": "Show platforms section at the home page", + "show-recently-added": "Show recently added ROMs", + "show-recently-added-desc": "Show recently added ROMs section at the home page", + "show-regions": "Show regions", + "show-regions-desc": "Show region flags in the gallery", + "show-siblings": "Show siblings", + "show-siblings-desc": "Show siblings count in the gallery when \"Group ROMs\" option is enabled", + "show-stats": "Show stats", + "show-stats-desc": "Show stats summary at the home page", + "show-status": "Show status", + "show-status-desc": "Show status icons in the gallery (backlogged, playing, completed, etc)", + "show-virtual-collections": "Show autogenerated collections", + "show-virtual-collections-desc": "Displayed in the homepage and collections sidebar.", + "stopped": "Stopped", + "task-history": "Task History", + "tasks": "Tasks", + "theme": "Theme", + "theme-auto": "Auto", + "theme-dark": "Dark", + "theme-light": "Light", + "type-header": "Type", + "unable-to-create-platform-mapping": "Unable to create platform mapping: {detail}", + "unable-to-delete-platform-mapping": "Unable to delete platform mapping: {detail}", + "unable-to-get-supported-platforms": "Unable to get supported platforms: {detail}", + "unable-to-update-platform-mapping": "Unable to update platform mapping: {detail}", + "update": "Update", + "username": "Username", + "variant-folder": "Variant folder", + "virtual-collection-type": "Virtual collection type (ROM grouping method)", + "watcher": "Watcher" +} diff --git a/frontend/src/locales/bg_BG/setup.json b/frontend/src/locales/bg_BG/setup.json new file mode 100644 index 000000000..25e98327f --- /dev/null +++ b/frontend/src/locales/bg_BG/setup.json @@ -0,0 +1,28 @@ +{ + "admin-user-step": "Create an admin user", + "cancel": "Cancel", + "check-metadata-step": "Check metadata sources", + "confirm-create-platforms": "RomM will create Structure {structure} ({pattern}) with {count} platform{plural}. Continue?", + "confirm-no-platforms": "No folder structure detected and no platforms selected. You will need to create the folder structure manually. Continue?", + "confirm-no-structure": "No folder structure detected. RomM will create Structure A (roms/{platform}) with {count} platform{plural}. Continue?", + "continue": "Continue", + "deselect-all": "Deselect All", + "detected-platforms": "Detected Platforms", + "finish": "Finish", + "folder-structure": "Folder structure", + "game": "game", + "games": "games", + "library-structure-step": "Setup library structure", + "metadata-missing": "API key missing or invalid", + "next": "Next", + "no-structure-detected": "No structure detected - Structure A will be created", + "platform": "platform", + "platforms": "platforms", + "previous": "previous", + "select-all": "Select All", + "select-platforms": "Select Platforms to Create", + "selected": "selected", + "structure-a-detected": "Structure A detected", + "structure-b-detected": "Structure B detected", + "supported-platforms": "Supported Platforms" +} From df054017a3cec9dbb0dce677fb9311a1b20178a3 Mon Sep 17 00:00:00 2001 From: Denislav Denev Date: Thu, 19 Mar 2026 00:09:58 +0200 Subject: [PATCH 04/72] feat(i18n): add partial Bulgarian (bg_BG) translation Translated: collection, common, emptyStates, gallery, home, login Remaining: console, patcher, platform, play, rom, scan, settings --- frontend/src/locales/bg_BG/collection.json | 38 ++++++++++----------- frontend/src/locales/bg_BG/emptyStates.json | 18 +++++----- frontend/src/locales/bg_BG/gallery.json | 4 +-- frontend/src/locales/bg_BG/home.json | 4 +-- frontend/src/locales/bg_BG/login.json | 28 +++++++-------- 5 files changed, 46 insertions(+), 46 deletions(-) diff --git a/frontend/src/locales/bg_BG/collection.json b/frontend/src/locales/bg_BG/collection.json index 36921cced..eb252597a 100644 --- a/frontend/src/locales/bg_BG/collection.json +++ b/frontend/src/locales/bg_BG/collection.json @@ -1,21 +1,21 @@ { - "add-collection": "Add collection", - "create-collection": "Create collection", - "create-smart-collection": "Create smart collection", - "current-filters": "Current Filters", - "danger-zone": "Danger zone", - "delete-collection": "Delete collection", - "description": "Description", - "edit-collection": "Edit collection", - "name": "Name", - "owner": "Owner", - "private": "Private", - "private-desc": "Private (only visible to me)", - "public": "Public", - "public-desc": "Public (visible to everyone)", - "removing-collection-1": "Removing collection", - "removing-collection-2": "from RomM. Do you confirm?", - "removing-smart-collection-1": "Removing smart collection", - "removing-smart-collection-2": "from RomM. Do you confirm?", - "search-collection": "Search collection" + "add-collection": "Добави колекция", + "create-collection": "Създай колекция", + "create-smart-collection": "Създай смарт колекция", + "current-filters": "Текущи филтри", + "danger-zone": "Опасна зона", + "delete-collection": "Изтрий колекция", + "description": "Описание", + "edit-collection": "Редактирай колекция", + "name": "Име", + "owner": "Собственик", + "private": "Частна", + "private-desc": "Частна (видима само за мен)", + "public": "Публична", + "public-desc": "Публична (видима за всички)", + "removing-collection-1": "Премахване на колекция", + "removing-collection-2": "от RomM. Потвърди?", + "removing-smart-collection-1": "Премахване на смарт колекция", + "removing-smart-collection-2": "от RomM. Потвърди?", + "search-collection": "Търси колекция" } diff --git a/frontend/src/locales/bg_BG/emptyStates.json b/frontend/src/locales/bg_BG/emptyStates.json index a77e1c7d1..424dc6956 100644 --- a/frontend/src/locales/bg_BG/emptyStates.json +++ b/frontend/src/locales/bg_BG/emptyStates.json @@ -1,11 +1,11 @@ { - "404-subtitle": "The page you are looking for does not exist", - "404-title": "Page not found", - "firmware-text": "The firmwares/BIOS you were looking for does not exist", - "firmware-title": "No firmwares/BIOS to show", - "home-headline": "No games in your library", - "home-text": "Ready to play?", - "home-title": "Run a quick scan to automatically detect games on your system", - "manual-match": "Search for games across all metadata providers", - "search-for-games": "Search for games across all platforms" + "404-subtitle": "Страницата, която търсиш, не съществува", + "404-title": "Страницата не е намерена", + "firmware-text": "Търсеният фърмуер/BIOS не съществува", + "firmware-title": "Няма фърмуер/BIOS за показване", + "home-headline": "Няма игри в библиотеката ти", + "home-text": "Готов ли си да играеш?", + "home-title": "Пусни бързо сканиране за автоматично откриване на игри", + "manual-match": "Търси игри във всички източници на метаданни", + "search-for-games": "Търси игри за всички платформи" } diff --git a/frontend/src/locales/bg_BG/gallery.json b/frontend/src/locales/bg_BG/gallery.json index 987687a18..afe2ecebb 100644 --- a/frontend/src/locales/bg_BG/gallery.json +++ b/frontend/src/locales/bg_BG/gallery.json @@ -1,4 +1,4 @@ { - "all-loaded": "All games have been loaded", - "load-more": "Load more" + "all-loaded": "Всички игри са заредени", + "load-more": "Зареди още" } diff --git a/frontend/src/locales/bg_BG/home.json b/frontend/src/locales/bg_BG/home.json index e00fd0220..7468ce301 100644 --- a/frontend/src/locales/bg_BG/home.json +++ b/frontend/src/locales/bg_BG/home.json @@ -1,4 +1,4 @@ { - "continue-playing": "Continue playing", - "recently-added": "Recently added" + "continue-playing": "Продължи играта", + "recently-added": "Наскоро добавени" } diff --git a/frontend/src/locales/bg_BG/login.json b/frontend/src/locales/bg_BG/login.json index 666acf6e8..21e919161 100644 --- a/frontend/src/locales/bg_BG/login.json +++ b/frontend/src/locales/bg_BG/login.json @@ -1,16 +1,16 @@ { - "back-to-login": "Back to login", - "confirm-new-password": "Confirm new password", - "forgot-password": "Forgot your password?", - "login": "Login", - "login-oidc": "Login with {oidc}", - "new-password": "New password", - "or": "or", - "password": "Password", - "register": "Register", - "reset-password": "Reset password", - "reset-sent": "Reset link sent. Contact your admin.", - "send-reset-link": "Send reset link", - "setup-wizard": "Setup wizard", - "username": "Username" + "back-to-login": "Обратно към входа", + "confirm-new-password": "Потвърди новата парола", + "forgot-password": "Забравена парола?", + "login": "Вход", + "login-oidc": "Вход с {oidc}", + "new-password": "Нова парола", + "or": "или", + "password": "Парола", + "register": "Регистрация", + "reset-password": "Възстановяване на парола", + "reset-sent": "Линкът за възстановяване е изпратен. Свържи се с администратора.", + "send-reset-link": "Изпрати линк за възстановяване", + "setup-wizard": "Съветник за настройка", + "username": "Потребителско име" } From 47949fc42a9290ba5693b4ae0d16d68f42ffc25d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 03:51:00 +0000 Subject: [PATCH 05/72] chore(deps): bump socket.io-parser from 4.2.5 to 4.2.6 in /frontend Bumps [socket.io-parser](https://github.com/socketio/socket.io) from 4.2.5 to 4.2.6. - [Release notes](https://github.com/socketio/socket.io/releases) - [Changelog](https://github.com/socketio/socket.io/blob/main/CHANGELOG.md) - [Commits](https://github.com/socketio/socket.io/compare/socket.io-parser@4.2.5...socket.io-parser@4.2.6) --- updated-dependencies: - dependency-name: socket.io-parser dependency-version: 4.2.6 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 86 +++++++++++++++++++++++++++++--------- 1 file changed, 67 insertions(+), 19 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 94cf78bf7..082e51722 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -108,7 +108,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -3627,6 +3626,70 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.8.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.8.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.1", + "dev": true, + "inBundle": true, + "license": "0BSD", + "optional": true + }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.1.tgz", @@ -3825,7 +3888,6 @@ "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", @@ -4357,7 +4419,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "devOptional": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4715,7 +4776,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -5520,7 +5580,6 @@ "integrity": "sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", @@ -6156,7 +6215,6 @@ "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -7361,7 +7419,6 @@ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", "license": "MIT", - "peer": true, "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", @@ -8165,7 +8222,6 @@ "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -8517,9 +8573,9 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.5.tgz", - "integrity": "sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", @@ -9009,7 +9065,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -9226,7 +9281,6 @@ "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -9374,7 +9428,6 @@ "integrity": "sha512-Q4SC/4TqbNvaZIFb9YsfBqkGlYHbJJJ6uU3CnRBZqLUF3s5eCMVZAaV4GkTbehIH/bhSj42lMXztOwc71u6rVw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@vuetify/loader-shared": "^2.1.2", "debug": "^4.3.3", @@ -9401,7 +9454,6 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.29.tgz", "integrity": "sha512-BZqN4Ze6mDQVNAni0IHeMJ5mwr8VAJ3MQC9FmprRhcBYENw+wOAAjRj8jfmN6FLl0j96OXbR+CjWhmAmM+QGnA==", "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.29", "@vue/compiler-sfc": "3.5.29", @@ -9424,7 +9476,6 @@ "integrity": "sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0 || ^9.0.0", @@ -9522,7 +9573,6 @@ "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.12.2.tgz", "integrity": "sha512-cVQa4+5iQpDs00ToMUnWRHlMdv1d5tEH2wcZIthqSCmBipQAG4rQKE55zFwZFYlPyiDhUVY1RcAFtXCuHNcCww==", "license": "MIT", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/johnleider" @@ -9855,7 +9905,6 @@ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -9939,7 +9988,6 @@ "integrity": "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "rollup": "dist/bin/rollup" }, From 56bc8c58ddf4d63044093abe2605b66359ea04d7 Mon Sep 17 00:00:00 2001 From: zurdi Date: Fri, 20 Mar 2026 13:24:19 +0000 Subject: [PATCH 06/72] feat: update RAHasher to version 1.8.3 and add Wii platform support --- DEVELOPER_SETUP.md | 3 +-- Dockerfile | 9 ++------- backend/adapters/services/rahasher.py | 3 ++- backend/handler/metadata/ra_handler.py | 1 + 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/DEVELOPER_SETUP.md b/DEVELOPER_SETUP.md index 0523a86d5..f834506d1 100644 --- a/DEVELOPER_SETUP.md +++ b/DEVELOPER_SETUP.md @@ -76,9 +76,8 @@ sudo apt install libmariadb3 libmariadb-dev libpq-dev # Users on macOS can skip this step as RAHasher is not supported git clone --recursive https://github.com/RetroAchievements/RALibretro.git cd ./RALibretro -git checkout 1.8.0 +git checkout 1.8.3 git submodule update --init --recursive -sed -i '22a #include ' ./src/Util.h make HAVE_CHD=1 -f ./Makefile.RAHasher cp ./bin64/RAHasher /usr/bin/RAHasher ``` diff --git a/Dockerfile b/Dockerfile index 6f475d50b..62fdc0ba9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,14 +43,9 @@ RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | b ENV PATH="$NVM_DIR/versions/node/v24.13.1/bin:$PATH" # Build and install RAHasher (optional for RA hashes) -RUN git clone --recursive --branch 1.8.1 --depth 1 https://github.com/RetroAchievements/RALibretro.git /tmp/RALibretro +RUN git clone --recursive --branch 1.8.3 --depth 1 https://github.com/RetroAchievements/RALibretro.git /tmp/RALibretro WORKDIR /tmp/RALibretro -RUN sed -i '22a #include ' ./src/Util.h \ - && sed -i '6a #include ' \ - ./src/libchdr/deps/zlib-1.3.1/gzlib.c \ - ./src/libchdr/deps/zlib-1.3.1/gzread.c \ - ./src/libchdr/deps/zlib-1.3.1/gzwrite.c \ - && make HAVE_CHD=1 -f ./Makefile.RAHasher \ +RUN make HAVE_CHD=1 -f ./Makefile.RAHasher \ && cp ./bin64/RAHasher /usr/bin/RAHasher RUN rm -rf /tmp/RALibretro diff --git a/backend/adapters/services/rahasher.py b/backend/adapters/services/rahasher.py index c52aa2c1a..725188e57 100644 --- a/backend/adapters/services/rahasher.py +++ b/backend/adapters/services/rahasher.py @@ -65,6 +65,7 @@ PLATFORM_SLUG_TO_RETROACHIEVEMENTS_ID: dict[UPS, int] = { UPS.WASM_4: 72, UPS.SUPERVISION: 63, UPS.WIN: 102, + UPS.WII: 19, UPS.WONDERSWAN: 53, UPS.WONDERSWAN_COLOR: 53, } @@ -96,7 +97,7 @@ class RAHasherService: return "" return_code = await proc.wait() - if return_code != 1: + if return_code != 0: if proc.stderr is not None: stderr = (await proc.stderr.read()).decode("utf-8") else: diff --git a/backend/handler/metadata/ra_handler.py b/backend/handler/metadata/ra_handler.py index e1fe44a64..7a3f648ea 100644 --- a/backend/handler/metadata/ra_handler.py +++ b/backend/handler/metadata/ra_handler.py @@ -464,6 +464,7 @@ RA_PLATFORM_LIST: dict[UPS, SlugToRAId] = { "name": "Watara/QuickShot Supervision", }, UPS.WIN: {"id": 102, "name": "Windows"}, + UPS.WII: {"id": 19, "name": "Wii"}, UPS.WONDERSWAN: {"id": 53, "name": "WonderSwan"}, UPS.WONDERSWAN_COLOR: {"id": 53, "name": "WonderSwan Color"}, } From f1729b15abcba17b0f4731c835fe6ed6da6cac7b Mon Sep 17 00:00:00 2001 From: zurdi Date: Fri, 20 Mar 2026 13:33:31 +0000 Subject: [PATCH 07/72] fix: update mock_proc.wait return value to 0 for successful hash calculations --- backend/tests/adapters/services/test_rahasher.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/tests/adapters/services/test_rahasher.py b/backend/tests/adapters/services/test_rahasher.py index 5ae07e1c2..2505e557e 100644 --- a/backend/tests/adapters/services/test_rahasher.py +++ b/backend/tests/adapters/services/test_rahasher.py @@ -51,7 +51,7 @@ class TestRAHasherService: async def test_calculate_hash_success(self, service): """Test successful hash calculation.""" mock_proc = AsyncMock() - mock_proc.wait.return_value = 1 # RAHasher returns 1 on success + mock_proc.wait.return_value = 0 # RAHasher returns 0 on success mock_proc.stdout.read.return_value = b"a1b2c3d4e5f6789012345678901234ab\n" mock_proc.stderr = None @@ -136,7 +136,7 @@ class TestRAHasherService: async def test_calculate_hash_with_extra_output(self, service): """Test when RAHasher returns hash with extra text.""" mock_proc = AsyncMock() - mock_proc.wait.return_value = 1 + mock_proc.wait.return_value = 0 mock_proc.stdout.read.return_value = ( b"Processing file... Hash: a1b2c3d4e5f6789012345678901234ab Done.\n" ) @@ -181,7 +181,7 @@ class TestRAHasherService: for platform_id, file_path, platform_slug in test_cases: mock_proc = AsyncMock() - mock_proc.wait.return_value = 1 + mock_proc.wait.return_value = 0 mock_proc.stdout.read.return_value = b"a1b2c3d4e5f6789012345678901234ab\n" mock_proc.stderr = None @@ -289,7 +289,7 @@ class TestRAHasherServicePerformance: async def test_concurrent_hash_calculations(self, service): """Test multiple concurrent hash calculations.""" mock_proc = AsyncMock() - mock_proc.wait.return_value = 1 + mock_proc.wait.return_value = 0 mock_proc.stdout.read.return_value = b"a1b2c3d4e5f6789012345678901234ab\n" mock_proc.stderr = None From a18fd9c459c49f1939c706f2206e6a8fc4866cd4 Mon Sep 17 00:00:00 2001 From: zurdi Date: Fri, 20 Mar 2026 13:43:47 +0000 Subject: [PATCH 08/72] fix: remove conditional check for mariadb connectors installation --- .github/workflows/pytest.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 78c987907..301e558d7 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -53,7 +53,6 @@ jobs: uses: actions/checkout@v4.3.0 - name: Install mariadb connectors - if: matrix.db == 'mariadb' run: | sudo apt-get update sudo apt-get install -y libmariadb3 libmariadb-dev From 94e348cd0c7a290bba8b58ed8c27d269bae1dd84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Mar 2026 14:35:58 +0000 Subject: [PATCH 09/72] chore(deps-dev): bump flatted from 3.3.4 to 3.4.2 in /frontend Bumps [flatted](https://github.com/WebReflection/flatted) from 3.3.4 to 3.4.2. - [Commits](https://github.com/WebReflection/flatted/compare/v3.3.4...v3.4.2) --- updated-dependencies: - dependency-name: flatted dependency-version: 3.4.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 082e51722..55f0ddb99 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -5936,9 +5936,9 @@ } }, "node_modules/flatted": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.4.tgz", - "integrity": "sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, "license": "ISC" }, From 7fce50a3c586ef899f67c6ea2089ef17b57e1ff4 Mon Sep 17 00:00:00 2001 From: zurdi Date: Fri, 20 Mar 2026 17:57:45 +0000 Subject: [PATCH 10/72] fix: update ThemeOption component to bind value correctly and simplify vuetify theme logic --- .../Settings/UserInterface/ThemeOption.vue | 2 +- frontend/src/plugins/vuetify.ts | 12 ++++-------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/frontend/src/components/Settings/UserInterface/ThemeOption.vue b/frontend/src/components/Settings/UserInterface/ThemeOption.vue index d62fdd0be..5200a8ff2 100644 --- a/frontend/src/components/Settings/UserInterface/ThemeOption.vue +++ b/frontend/src/components/Settings/UserInterface/ThemeOption.vue @@ -10,7 +10,7 @@ withDefaults(defineProps<{ text: string; icon: string }>(), { });