Fix admin permissions bounce, prefixes APIs, and Italian UI leftovers.
Local Build and Deploy / deploy (push) Successful in 56s

Gate permissions on ACL manage + resolve super-admin from live user ranks, restore prefixes API routes, and anglicize hardcoded admin copy with nav i18n.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
SimoandCursor committed 2026-07-15 20:33:00 +02:00
1 parent 0e89d03940
commit 3403d3b19f
38 files changed
+673 -208

No files matched your search

+21 -12
View File
@@ -698,6 +698,10 @@
"writeableBoxes": "Beschrijfbare boxes",
"photos": "Foto's",
"tickets": "Tickets",
"events": "Events",
"polls": "Polls",
"banners": "Banners",
"prefixes": "Prefixes",
"usersAndAccess": "Gebruikers & toegang",
"users": "Gebruikers",
"bans": "Bans",
@@ -706,6 +710,8 @@
"applications": "Sollicitaties",
"teams": "Teams",
"permissions": "Permissies",
"onlineUsers": "Online users",
"moderation": "Moderation",
"economy": "Economie",
"catalog": "Catalogus",
"shop": "Winkel",
@@ -732,9 +738,11 @@
"emulator": "Emulator",
"alerts": "Meldingen",
"logs": "Logboeken",
"auditLog": "Audit log",
"analytics": "Analytics",
"devops": "DevOps",
"wordFilter": "Woordfilter",
"maintenance": "Onderhoud",
"housekeeping": "Housekeeping",
"rooms": "Kamers",
"emailTemplates": "E-mailsjablonen",
"theme": "Thema",
@@ -745,6 +753,7 @@
"import": "Importeren",
"settings": "Instellingen",
"backToSite": "Terug naar site",
"housekeeping": "Housekeeping",
"hotelManagementPanel": "Hotelbeheerpaneel",
"rankLabel": "Rang {rank}"
},
@@ -1504,7 +1513,7 @@
},
"embedPage": {
"title": "Radio Embed",
"subtitle": "Copy-ready embed code for the live stream. Read-only \u2014 nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).",
"subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).",
"streamUrl": "Stream URL",
"configured": "Configured",
"missing": "Missing",
@@ -1521,7 +1530,7 @@
"audioSnippet": "Audio player snippet",
"audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.",
"iframeSnippet": "Iframe wrapper snippet",
"iframeSnippetDesc": "Embeds the site\u2019s own radio player page in an iframe \u2014 keeps your styling and now-playing info. Adjust width/height to taste.",
"iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.",
"audioUnsupported": "Your browser does not support the audio element."
},
"banners": {
@@ -1531,7 +1540,7 @@
"addBanner": "Banner toevoegen",
"createBanner": "Create banner",
"deleteBanner": "Banner verwijderen",
"noBanners": "No banners yet \u2014 add one above.",
"noBanners": "No banners yet — add one above.",
"existing": "Existing banners ({count})",
"save": "Save",
"delete": "Delete",
@@ -1562,7 +1571,7 @@
"description": "Description",
"createRank": "Create rank",
"existing": "Existing ranks ({count})",
"noRanks": "No ranks yet \u2014 add one above.",
"noRanks": "No ranks yet — add one above.",
"activeLabel": "active",
"inactiveLabel": "inactive",
"save": "Save",
@@ -1589,13 +1598,13 @@
},
"apiKeysForm": {
"title": "API-sleutels",
"subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked \u2014 copy the full value from the database when first issued.",
"subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.",
"dbError": "Could not load API keys (database unavailable).",
"totalKeys": "Total keys",
"active": "Active",
"inactive": "Inactive",
"generateKey": "Nieuwe sleutel genereren",
"generateHint": "The secret key is generated automatically with cryptographic randomness \u2014 you do not enter it.",
"generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.",
"name": "Name",
"namePlaceholder": "AzureCast bridge",
"rateLimit": "Rate limit (requests/min)",
@@ -1603,7 +1612,7 @@
"allowedIpsPlaceholder": "comma-separated, blank = any",
"generate": "Genereren",
"existingKeys": "Existing keys ({count})",
"noKeys": "No API keys yet \u2014 generate one above.",
"noKeys": "No API keys yet — generate one above.",
"colName": "Name",
"colKey": "Sleutel",
"colAllowedIps": "Allowed IPs",
@@ -1656,12 +1665,12 @@
"artist": "Artist",
"album": "Album",
"artworkUrl": "Artwork URL",
"artworkUrlPlaceholder": "https://\u2026/cover.png",
"artworkUrlPlaceholder": "https://…/cover.png",
"duration": "Duration (seconds)",
"durationPlaceholder": "e.g. 215",
"sortOrder": "Sort order",
"playlist": "Playlist ({count})",
"noTracks": "No AutoDJ tracks yet \u2014 add one above.",
"noTracks": "No AutoDJ tracks yet — add one above.",
"colOrder": "Order",
"colTitle": "Title",
"colArtist": "Artist",
@@ -1679,7 +1688,7 @@
},
"monitoring": {
"title": "Radiomonitoring",
"subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout \u2014 no data is written. Configure URLs under Settings.",
"subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.",
"stream": "Stream",
"online": "Online",
"offline": "Offline",
@@ -1694,7 +1703,7 @@
"noNowPlayingHint": "no now-playing API set",
"noListenersHint": "no listeners API set",
"endpointDiagnostics": "Endpoint diagnostics",
"diagnosticsLegend": "<span class=\"inline-block text-[0.72rem] font-bold px-2 py-0.5 rounded-full bg-green-600/20 text-[var(--color-text)]\">OK</span> reachable \u00b7 <span class=\"inline-block text-[0.72rem] font-bold px-2 py-0.5 rounded-full bg-[var(--color-primary)]/18 text-[var(--color-text)]\">WARN</span> not configured \u00b7 <span class=\"inline-block text-[0.72rem] font-bold px-2 py-0.5 rounded-full bg-red-500/22 text-[var(--color-text)]\">ERROR</span> fetch failed / timed out.",
"diagnosticsLegend": "<span class=\"inline-block text-[0.72rem] font-bold px-2 py-0.5 rounded-full bg-green-600/20 text-[var(--color-text)]\">OK</span> reachable · <span class=\"inline-block text-[0.72rem] font-bold px-2 py-0.5 rounded-full bg-[var(--color-primary)]/18 text-[var(--color-text)]\">WARN</span> not configured · <span class=\"inline-block text-[0.72rem] font-bold px-2 py-0.5 rounded-full bg-red-500/22 text-[var(--color-text)]\">ERROR</span> fetch failed / timed out.",
"streamUrl": "Stream URL",
"unreachable": "unreachable",
"refresh": "Vernieuwen"