diff --git a/frontend/index.html b/frontend/index.html index 7c213a1..5be30e5 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -156,7 +156,7 @@
diff --git a/frontend/js/app.js b/frontend/js/app.js index 3be469e..88881c5 100644 --- a/frontend/js/app.js +++ b/frontend/js/app.js @@ -54,6 +54,23 @@ function renderNavLabels() { }); } +// Translate any element marked with data-i18n / data-i18n-placeholder / +// data-i18n-html. Runs on init and on every language change. Used for static +// HTML in index.html (e.g. the Add-Display modal) where t() can't be inlined +// at template time. +function translateStaticDom(root = document) { + root.querySelectorAll('[data-i18n]').forEach((el) => { + const key = el.getAttribute('data-i18n'); + el.textContent = t(key); + }); + root.querySelectorAll('[data-i18n-html]').forEach((el) => { + el.innerHTML = t(el.getAttribute('data-i18n-html')); + }); + root.querySelectorAll('[data-i18n-placeholder]').forEach((el) => { + el.placeholder = t(el.getAttribute('data-i18n-placeholder')); + }); +} + function isAuthenticated() { return !!localStorage.getItem('token'); } @@ -249,7 +266,11 @@ function updateSidebarUser() { // Initialize renderNavLabels(); -window.addEventListener('language-changed', renderNavLabels); +translateStaticDom(); +window.addEventListener('language-changed', () => { + renderNavLabels(); + translateStaticDom(); +}); if (isAuthenticated()) { connectSocket(); diff --git a/frontend/js/i18n/de.js b/frontend/js/i18n/de.js index 66d387d..3f430ae 100644 --- a/frontend/js/i18n/de.js +++ b/frontend/js/i18n/de.js @@ -1048,4 +1048,18 @@ export default { 'help.shortcuts': 'Tastaturkürzel', 'help.shortcut_esc': 'Web-Player zurücksetzen (auf Player-Seite)', 'help.shortcut_f': 'Vollbild umschalten (Web-Player)', + + // Add Display modal + 'add_display.title': 'Bildschirm hinzufügen', + 'add_display.intro': 'Geben Sie den 6-stelligen Kopplungscode ein, der auf dem Bildschirm angezeigt wird.', + 'add_display.pairing_code': 'Kopplungscode', + 'add_display.display_name': 'Anzeigename (optional)', + 'add_display.name_placeholder': 'z. B. Lobby-TV', + 'add_display.need_player': 'Player-App benötigt? Installieren Sie eine, um einen Kopplungscode zu erhalten:', + 'add_display.android_apk': 'Android-APK', + 'add_display.web_player': 'Web-Player', + 'add_display.raspberry_pi': 'Raspberry Pi', + 'add_display.windows': 'Windows', + 'add_display.smart_tv_note': 'Smart TVs (LG/Samsung): öffnen Sie den integrierten Browser und navigieren Sie zu/player',
+ 'add_display.pair_btn': 'Bildschirm koppeln',
};
diff --git a/frontend/js/i18n/en.js b/frontend/js/i18n/en.js
index 37bef7c..67ffcd1 100644
--- a/frontend/js/i18n/en.js
+++ b/frontend/js/i18n/en.js
@@ -1084,4 +1084,18 @@ export default {
'help.shortcuts': 'Keyboard Shortcuts',
'help.shortcut_esc': 'Reset web player (on player page)',
'help.shortcut_f': 'Toggle fullscreen (web player)',
+
+ // Add Display modal (in index.html)
+ 'add_display.title': 'Add Display',
+ 'add_display.intro': 'Enter the 6-digit pairing code shown on the display.',
+ 'add_display.pairing_code': 'Pairing Code',
+ 'add_display.display_name': 'Display Name (optional)',
+ 'add_display.name_placeholder': 'e.g., Lobby TV',
+ 'add_display.need_player': 'Need a player app? Install one to get a pairing code:',
+ 'add_display.android_apk': 'Android APK',
+ 'add_display.web_player': 'Web Player',
+ 'add_display.raspberry_pi': 'Raspberry Pi',
+ 'add_display.windows': 'Windows',
+ 'add_display.smart_tv_note': 'Smart TVs (LG/Samsung): open the built-in browser and navigate to /player',
+ 'add_display.pair_btn': 'Pair Display',
};
diff --git a/frontend/js/i18n/es.js b/frontend/js/i18n/es.js
index 452ef50..cbcbd20 100644
--- a/frontend/js/i18n/es.js
+++ b/frontend/js/i18n/es.js
@@ -1047,4 +1047,18 @@ export default {
'help.shortcuts': 'Atajos de teclado',
'help.shortcut_esc': 'Reiniciar reproductor web (en la página del reproductor)',
'help.shortcut_f': 'Alternar pantalla completa (reproductor web)',
+
+ // Add Display modal
+ 'add_display.title': 'Agregar pantalla',
+ 'add_display.intro': 'Ingresa el código de vinculación de 6 dígitos mostrado en la pantalla.',
+ 'add_display.pairing_code': 'Código de vinculación',
+ 'add_display.display_name': 'Nombre (opcional)',
+ 'add_display.name_placeholder': 'p. ej., TV Vestíbulo',
+ 'add_display.need_player': '¿Necesitas la app del reproductor? Instala una para obtener un código:',
+ 'add_display.android_apk': 'APK Android',
+ 'add_display.web_player': 'Reproductor web',
+ 'add_display.raspberry_pi': 'Raspberry Pi',
+ 'add_display.windows': 'Windows',
+ 'add_display.smart_tv_note': 'Smart TVs (LG/Samsung): abre el navegador integrado y ve a /player',
+ 'add_display.pair_btn': 'Vincular pantalla',
};
diff --git a/frontend/js/i18n/fr.js b/frontend/js/i18n/fr.js
index 9a5ba4b..114c230 100644
--- a/frontend/js/i18n/fr.js
+++ b/frontend/js/i18n/fr.js
@@ -1048,4 +1048,18 @@ export default {
'help.shortcuts': 'Raccourcis clavier',
'help.shortcut_esc': 'Réinitialiser le lecteur web (sur la page du lecteur)',
'help.shortcut_f': 'Basculer le plein écran (lecteur web)',
+
+ // Add Display modal
+ 'add_display.title': 'Ajouter un écran',
+ 'add_display.intro': 'Saisissez le code d\'appairage à 6 chiffres affiché sur l\'écran.',
+ 'add_display.pairing_code': 'Code d\'appairage',
+ 'add_display.display_name': 'Nom (facultatif)',
+ 'add_display.name_placeholder': 'ex. TV du hall',
+ 'add_display.need_player': 'Besoin d\'une app de lecture ? Installez-en une pour obtenir un code :',
+ 'add_display.android_apk': 'APK Android',
+ 'add_display.web_player': 'Lecteur web',
+ 'add_display.raspberry_pi': 'Raspberry Pi',
+ 'add_display.windows': 'Windows',
+ 'add_display.smart_tv_note': 'Smart TVs (LG/Samsung) : ouvrez le navigateur intégré et allez à /player',
+ 'add_display.pair_btn': 'Apparier l\'écran',
};
diff --git a/frontend/js/i18n/pt.js b/frontend/js/i18n/pt.js
index cec946c..f2ba3d8 100644
--- a/frontend/js/i18n/pt.js
+++ b/frontend/js/i18n/pt.js
@@ -1048,4 +1048,18 @@ export default {
'help.shortcuts': 'Atalhos de teclado',
'help.shortcut_esc': 'Reiniciar player web (na página do player)',
'help.shortcut_f': 'Alternar tela cheia (player web)',
+
+ // Add Display modal
+ 'add_display.title': 'Adicionar tela',
+ 'add_display.intro': 'Digite o código de pareamento de 6 dígitos exibido na tela.',
+ 'add_display.pairing_code': 'Código de pareamento',
+ 'add_display.display_name': 'Nome (opcional)',
+ 'add_display.name_placeholder': 'ex. TV do lobby',
+ 'add_display.need_player': 'Precisa de um app player? Instale um para obter um código:',
+ 'add_display.android_apk': 'APK Android',
+ 'add_display.web_player': 'Player web',
+ 'add_display.raspberry_pi': 'Raspberry Pi',
+ 'add_display.windows': 'Windows',
+ 'add_display.smart_tv_note': 'Smart TVs (LG/Samsung): abra o navegador integrado e vá para /player',
+ 'add_display.pair_btn': 'Parear tela',
};
diff --git a/server/player/index.html b/server/player/index.html
index 4c3f50b..6d4ec98 100644
--- a/server/player/index.html
+++ b/server/player/index.html
@@ -85,11 +85,85 @@