Fix theme consistency, i18n completeness, CSS variable naming, and hardcoded strings

This commit is contained in:
openhands committed 2026-07-09 18:13:22 +02:00
1 parent 0abd490f67
commit b058a3827b
37 files changed
+431 -214

No files matched your search

+94 -36
View File
@@ -696,7 +696,8 @@
"settings": "Ajustes",
"backToSite": "Volver al sitio",
"hotelManagementPanel": "Panel de gestión del hotel",
"rankLabel": "Rango {rank}"
"rankLabel": "Rango {rank}",
"favicon": "Favicon"
},
"dashboard": {
"title": "Panel",
@@ -1412,7 +1413,28 @@
"apiKeys": "Claves de API",
"points": "Puntos",
"autoDj": "AutoDJ",
"monitoring": "Monitorización",
"monitoring": {
"title": "Monitorización de radio",
"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": "En línea",
"offline": "Fuera de línea",
"notConfigured": "Not configured",
"nowPlaying": "Now playing",
"nowPlayingApi": "Now-playing API",
"listenersApi": "Listeners API",
"listeners": "Oyentes",
"currentSong": "Canción actual",
"bitrate": "Bitrate",
"status": "Estado",
"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 · <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": "Actualizar"
},
"user": "User",
"message": "Message",
"posted": "Posted",
@@ -1455,7 +1477,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",
@@ -1472,7 +1494,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": {
@@ -1482,7 +1504,7 @@
"addBanner": "Añadir banner",
"createBanner": "Create banner",
"deleteBanner": "Eliminar banner",
"noBanners": "No banners yet \u2014 add one above.",
"noBanners": "No banners yet — add one above.",
"existing": "Existing banners ({count})",
"save": "Save",
"delete": "Delete",
@@ -1513,7 +1535,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",
@@ -1540,13 +1562,13 @@
},
"apiKeysForm": {
"title": "Claves de API",
"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": "Generar nueva clave",
"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)",
@@ -1554,7 +1576,7 @@
"allowedIpsPlaceholder": "comma-separated, blank = any",
"generate": "Generar",
"existingKeys": "Existing keys ({count})",
"noKeys": "No API keys yet \u2014 generate one above.",
"noKeys": "No API keys yet — generate one above.",
"colName": "Name",
"colKey": "Clave",
"colAllowedIps": "Allowed IPs",
@@ -1595,24 +1617,23 @@
"save": "Guardar configuración de puntos"
},
"autoDjForm": {
"title": "Configuración de AutoDJ",
"title": "Title",
"subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.",
"dbError": "Could not load the AutoDJ playlist (database unavailable).",
"tracks": "Tracks",
"active": "Active",
"inactive": "Inactive",
"addTrack": "Add track",
"title": "Title",
"titlePlaceholder": "Track title",
"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",
@@ -1628,28 +1649,6 @@
"activate": "Activate",
"delete": "Delete"
},
"monitoring": {
"title": "Monitorización de radio",
"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.",
"stream": "Stream",
"online": "En línea",
"offline": "Fuera de línea",
"notConfigured": "Not configured",
"nowPlaying": "Now playing",
"nowPlayingApi": "Now-playing API",
"listenersApi": "Listeners API",
"listeners": "Oyentes",
"currentSong": "Canción actual",
"bitrate": "Bitrate",
"status": "Estado",
"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.",
"streamUrl": "Stream URL",
"unreachable": "unreachable",
"refresh": "Actualizar"
},
"moderationPage": {
"title": "DJ Moderation",
"subtitle": "Review and remove radio shouts (50 most recent).",
@@ -1955,7 +1954,66 @@
"saving": "Guardando…",
"cancel": "Cancelar"
}
},
"favicon": {
"title": "Favicon",
"subtitle": "Upload and manage the site favicon",
"current": "Current favicon",
"uploadLabel": "Upload favicon",
"uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.",
"upload": "Upload",
"uploading": "Uploading…",
"delete": "Remove",
"deleting": "Removing…",
"saved": "Favicon saved successfully!",
"deleted": "Favicon removed successfully!",
"error": "Something went wrong",
"confirmDelete": "Remove the favicon? The site will no longer show a custom favicon.",
"generator": {
"title": "Generate favicon",
"text": "Text",
"bgColor": "Background color",
"textColor": "Text color",
"rounded": "Rounded corners",
"save": "Save as favicon"
}
}
},
"client": {
"title": "Nitro client",
"loading": "Loading client…",
"generatingTicket": "Generating SSO ticket…",
"connected": "Connected",
"welcome": "Welcome to {hotel}",
"openingClient": "Opening the client in a new tab…",
"fallbackLink": "If it doesn't open,",
"fallbackClick": "click here",
"errors": {
"unauthorized": "You need to be logged in to open the client.",
"generic": "Could not generate SSO ticket",
"loginRedirect": "Log in"
}
},
"radioRequests": {
"formTitle": "Submit a request",
"formSubtitle": "Ask the DJ to play your favourite track",
"songLabel": "Song",
"songPlaceholder": "Title of the song",
"artistLabel": "Artist",
"artistPlaceholder": "Name of the artist (optional)",
"submitButton": "Submit request",
"loginToRequest": "Log in to submit a request.",
"latestTitle": "Recent requests",
"latestSubtitle": "The most recently requested songs",
"empty": "No requests yet.",
"colSong": "Song",
"colArtist": "Artist",
"colRequester": "Requester",
"colDate": "Date",
"colStatus": "Status",
"statusPending": "Pending",
"statusApproved": "Approved",
"statusPlayed": "Played"
}
}
}
}