feat(console): label optional UX 3.5 shell switch as Beta

Keep classic as the default production chrome. Mark the opt-in switcher
with a BETA badge/tooltip and show a topbar chip while UX 3.5 is active.
This commit is contained in:
UNITRONIX
2026-07-31 20:12:42 +02:00
parent 8cbb7a3f6c
commit 8956ec653d
34 changed files with 332 additions and 86 deletions
+3
View File
@@ -1,6 +1,9 @@
## [Unreleased]
### Changed
- **UX 3.5 labeled Beta (opt-in):** classic console remains the default shell. The navbar switch to UX 3.5 shows a **BETA** badge/tooltip; while UX 3.5 is active a small BETA chip appears in the topbar. Escape hatch back to classic is unchanged. Ships via panel update.
### Fixed
- _(none yet)_
---
+4 -4
View File
@@ -1,16 +1,16 @@
# UX 3.5 — Console shell (optional)
# UX 3.5 — Console shell (optional Beta)
UX 3.5 is an **optional management console chrome** in BetterDesk `web-nodejs`. The **default** shell is the classic TeamViewer-style **icon rail + flyout**. Operators can switch to UX 3.5 (full-list sidebar + topbar) from the navbar; the choice is stored in cookie `bd_ui_shell`.
UX 3.5 is an **optional Beta** management console chrome in BetterDesk `web-nodejs`. The **default** shell is the classic TeamViewer-style **icon rail + flyout**. Operators can opt in to UX 3.5 (full-list sidebar + topbar) from the navbar; the choice is stored in cookie `bd_ui_shell`. Classic remains the supported production default until UX 3.5 leaves Beta.
## Switching shells
| Action | How |
|--------|-----|
| Classic → UX 3.5 | Navbar button (view_sidebar icon) or `?ui=ux35` |
| Classic → UX 3.5 (Beta) | Navbar button (view_sidebar icon + **BETA** badge) or `?ui=ux35` |
| UX 3.5 → Classic | Topbar button (dashboard_customize icon) or `?ui=classic` |
| Persist | Cookie `bd_ui_shell=classic\|ux35` (1 year, SameSite=Lax) |
Default when no cookie: **classic**.
Default when no cookie: **classic**. While UX 3.5 is active, a small **BETA** chip appears in the topbar next to the brand.
Client helper: `web-nodejs/public/js/ui-shell.js`. SSR selects partials in `main.ejs` via `res.locals.uiShell` (middleware in `server.js`).
+4 -2
View File
@@ -4346,7 +4346,9 @@
"resize_sidebar": "تغيير عرض الشريط الجانبي",
"open_menu": "فتح القائمة",
"theme_mode_hint": "الفاتح والداكن مدمجان. يُفعَّل المخصص عند تعديل الألوان أدناه.",
"switch_to_ux35": "التبديل إلى UX 3.5",
"switch_to_classic": "التبديل إلى الواجهة الكلاسيكية"
"switch_to_ux35": "التبديل إلى UX 3.5 (تجريبي)",
"switch_to_classic": "التبديل إلى الواجهة الكلاسيكية",
"beta_badge": "تجريبي",
"beta_tooltip": "تخطيط لوحة تجريبي — اختياري؛ تبقى الواجهة الكلاسيكية الافتراضية."
}
}
+4 -2
View File
@@ -4339,7 +4339,9 @@
"resize_sidebar": "Změnit šířku postranního panelu",
"open_menu": "Otevřít nabídku",
"theme_mode_hint": "Světlý a tmavý jsou vestavěné. Vlastní se aktivuje při úpravě barev níže.",
"switch_to_ux35": "Přepnout na UX 3.5",
"switch_to_classic": "Přepnout na klasické rozhraní"
"switch_to_ux35": "Přepnout na UX 3.5 (Beta)",
"switch_to_classic": "Přepnout na klasické rozhraní",
"beta_badge": "BETA",
"beta_tooltip": "Beta rozložení konzole — volitelné; výchozí zůstává klasické UI."
}
}
+4 -2
View File
@@ -4345,7 +4345,9 @@
"resize_sidebar": "Tilpas sidepanelbredde",
"open_menu": "Åbn menu",
"theme_mode_hint": "Lys og mørk er indbygget. Tilpasset aktiveres, når du redigerer farverne nedenfor.",
"switch_to_ux35": "Skift til UX 3.5",
"switch_to_classic": "Skift til klassisk UI"
"switch_to_ux35": "Skift til UX 3.5 (Beta)",
"switch_to_classic": "Skift til klassisk UI",
"beta_badge": "BETA",
"beta_tooltip": "Beta-konsollayout — valgfrit; klassisk UI forbliver standard."
}
}
+4 -2
View File
@@ -4339,7 +4339,9 @@
"resize_sidebar": "Seitenleiste skalieren",
"open_menu": "Menü öffnen",
"theme_mode_hint": "Hell und Dunkel sind integriert. Benutzerdefiniert wird aktiviert, wenn Sie unten Farben ändern.",
"switch_to_ux35": "Zu UX 3.5 wechseln",
"switch_to_classic": "Zur klassischen Oberfläche wechseln"
"switch_to_ux35": "Zu UX 3.5 wechseln (Beta)",
"switch_to_classic": "Zur klassischen Oberfläche wechseln",
"beta_badge": "BETA",
"beta_tooltip": "Beta-Konsolenlayout — optional; die klassische Oberfläche bleibt Standard."
}
}
+4 -2
View File
@@ -2919,8 +2919,10 @@
"resize_sidebar": "Resize sidebar",
"open_menu": "Open menu",
"theme_mode_hint": "Light and Dark are built-in. Custom activates when you edit colors below.",
"switch_to_ux35": "Switch to UX 3.5",
"switch_to_classic": "Switch to classic UI"
"switch_to_ux35": "Switch to UX 3.5 (Beta)",
"switch_to_classic": "Switch to classic UI",
"beta_badge": "BETA",
"beta_tooltip": "Beta console layout — optional; classic UI remains the default."
},
"days": {
"mon": "Mon",
+4 -2
View File
@@ -4339,7 +4339,9 @@
"resize_sidebar": "Cambiar ancho de la barra lateral",
"open_menu": "Abrir menú",
"theme_mode_hint": "Claro y Oscuro son predefinidos. Personalizado se activa al editar los colores abajo.",
"switch_to_ux35": "Cambiar a UX 3.5",
"switch_to_classic": "Cambiar a la interfaz clásica"
"switch_to_ux35": "Cambiar a UX 3.5 (Beta)",
"switch_to_classic": "Cambiar a la interfaz clásica",
"beta_badge": "BETA",
"beta_tooltip": "Diseño de consola en beta — opcional; la interfaz clásica sigue siendo la predeterminada."
}
}
+4 -2
View File
@@ -4345,7 +4345,9 @@
"resize_sidebar": "Muuta sivupalkin leveyttä",
"open_menu": "Avaa valikko",
"theme_mode_hint": "Vaalea ja Tumma ovat sisäänrakennettuja. Mukautettu otetaan käyttöön, kun muokkaat värejä alla.",
"switch_to_ux35": "Vaihda UX 3.5 -tilaan",
"switch_to_classic": "Vaihda klassiseen käyttöliittymään"
"switch_to_ux35": "Vaihda UX 3.5 -tilaan (Beta)",
"switch_to_classic": "Vaihda klassiseen käyttöliittymään",
"beta_badge": "BETA",
"beta_tooltip": "Beta-konsolin asettelu — valinnainen; klassinen käyttöliittymä pysyy oletuksena."
}
}
+4 -2
View File
@@ -4343,7 +4343,9 @@
"resize_sidebar": "Redimensionner la barre latérale",
"open_menu": "Ouvrir le menu",
"theme_mode_hint": "Clair et Sombre sont intégrés. Personnalisé sactive lorsque vous modifiez les couleurs ci-dessous.",
"switch_to_ux35": "Passer à UX 3.5",
"switch_to_classic": "Passer à linterface classique"
"switch_to_ux35": "Passer à UX 3.5 (Bêta)",
"switch_to_classic": "Passer à linterface classique",
"beta_badge": "BÊTA",
"beta_tooltip": "Disposition console en bêta — optionnelle ; linterface classique reste la valeur par défaut."
}
}
+4 -2
View File
@@ -4345,7 +4345,9 @@
"resize_sidebar": "साइडबार की चौड़ाई बदलें",
"open_menu": "मेनू खोलें",
"theme_mode_hint": "लाइट और डार्क बिल्ट-इन हैं। नीचे रंग बदलने पर कस्टम सक्रिय होता है।",
"switch_to_ux35": "UX 3.5 पर स्विच करें",
"switch_to_classic": "क्लासिक UI पर स्विच करें"
"switch_to_ux35": "UX 3.5 पर स्विच करें (बीटा)",
"switch_to_classic": "क्लासिक UI पर स्विच करें",
"beta_badge": "बीटा",
"beta_tooltip": "बीटा कंसोल लेआउट — वैकल्पिक; क्लासिक UI डिफ़ॉल्ट रहता है।"
}
}
+4 -2
View File
@@ -4345,7 +4345,9 @@
"resize_sidebar": "Oldalsáv átméretezése",
"open_menu": "Menü megnyitása",
"theme_mode_hint": "A Világos és a Sötét beépített. Az Egyéni a színek szerkesztésekor aktiválódik.",
"switch_to_ux35": "Váltás UX 3.5-re",
"switch_to_classic": "Váltás klasszikus felületre"
"switch_to_ux35": "Váltás UX 3.5-re (Béta)",
"switch_to_classic": "Váltás klasszikus felületre",
"beta_badge": "BÉTA",
"beta_tooltip": "Béta konzol elrendezés — opcionális; az alapértelmezett a klasszikus felület marad."
}
}
+4 -2
View File
@@ -4345,7 +4345,9 @@
"resize_sidebar": "Ubah lebar bilah samping",
"open_menu": "Buka menu",
"theme_mode_hint": "Terang dan Gelap bawaan. Kustom aktif saat Anda mengubah warna di bawah.",
"switch_to_ux35": "Beralih ke UX 3.5",
"switch_to_classic": "Beralih ke UI klasik"
"switch_to_ux35": "Beralih ke UX 3.5 (Beta)",
"switch_to_classic": "Beralih ke UI klasik",
"beta_badge": "BETA",
"beta_tooltip": "Tata letak konsol Beta — opsional; UI klasik tetap default."
}
}
+4 -2
View File
@@ -4339,7 +4339,9 @@
"resize_sidebar": "Ridimensiona barra laterale",
"open_menu": "Apri menu",
"theme_mode_hint": "Chiaro e Scuro sono integrati. Personalizzato si attiva modificando i colori sotto.",
"switch_to_ux35": "Passa a UX 3.5",
"switch_to_classic": "Passa allinterfaccia classica"
"switch_to_ux35": "Passa a UX 3.5 (Beta)",
"switch_to_classic": "Passa allinterfaccia classica",
"beta_badge": "BETA",
"beta_tooltip": "Layout console in beta — opzionale; linterfaccia classica resta predefinita."
}
}
+4 -2
View File
@@ -4339,7 +4339,9 @@
"resize_sidebar": "サイドバーの幅を変更",
"open_menu": "メニューを開く",
"theme_mode_hint": "ライトとダークは標準です。下で色を編集するとカスタムになります。",
"switch_to_ux35": "UX 3.5 に切り替え",
"switch_to_classic": "クラシック UI に切り替え"
"switch_to_ux35": "UX 3.5 に切り替え(ベータ)",
"switch_to_classic": "クラシック UI に切り替え",
"beta_badge": "ベータ",
"beta_tooltip": "ベータ版コンソールレイアウト — 任意。既定はクラシック UI のままです。"
}
}
+4 -2
View File
@@ -4339,7 +4339,9 @@
"resize_sidebar": "사이드바 너비 조절",
"open_menu": "메뉴 열기",
"theme_mode_hint": "밝게와 어둡게는 기본입니다. 아래에서 색상을 편집하면 사용자 지정이 활성화됩니다.",
"switch_to_ux35": "UX 3.5로 전환",
"switch_to_classic": "클래식 UI로 전환"
"switch_to_ux35": "UX 3.5로 전환 (베타)",
"switch_to_classic": "클래식 UI로 전환",
"beta_badge": "베타",
"beta_tooltip": "베타 콘솔 레이아웃 — 선택 사항이며 기본값은 클래식 UI입니다."
}
}
+4 -2
View File
@@ -4345,7 +4345,9 @@
"resize_sidebar": "Endre sidepanelbredde",
"open_menu": "Åpne meny",
"theme_mode_hint": "Lys og Mørk er innebygd. Tilpasset aktiveres når du redigerer fargene nedenfor.",
"switch_to_ux35": "Bytt til UX 3.5",
"switch_to_classic": "Bytt til klassisk UI"
"switch_to_ux35": "Bytt til UX 3.5 (Beta)",
"switch_to_classic": "Bytt til klassisk UI",
"beta_badge": "BETA",
"beta_tooltip": "Beta-konsollayout — valgfritt; klassisk UI forblir standard."
}
}
+4 -2
View File
@@ -4339,7 +4339,9 @@
"resize_sidebar": "Zijbalkbreedte aanpassen",
"open_menu": "Menu openen",
"theme_mode_hint": "Licht en Donker zijn ingebouwd. Aangepast wordt actief wanneer u hieronder kleuren bewerkt.",
"switch_to_ux35": "Overschakelen naar UX 3.5",
"switch_to_classic": "Overschakelen naar klassieke UI"
"switch_to_ux35": "Overschakelen naar UX 3.5 (Beta)",
"switch_to_classic": "Overschakelen naar klassieke UI",
"beta_badge": "BETA",
"beta_tooltip": "Beta-consolelay-out — optioneel; de klassieke UI blijft de standaard."
}
}
+4 -2
View File
@@ -4339,7 +4339,9 @@
"resize_sidebar": "Zmień szerokość paska bocznego",
"open_menu": "Otwórz menu",
"theme_mode_hint": "Jasny i Ciemny są wbudowane. Niestandardowy włącza się po edycji kolorów poniżej.",
"switch_to_ux35": "Przełącz na UX 3.5",
"switch_to_classic": "Przełącz na klasyczny interfejs"
"switch_to_ux35": "Przełącz na UX 3.5 (Beta)",
"switch_to_classic": "Przełącz na klasyczny interfejs",
"beta_badge": "BETA",
"beta_tooltip": "Układ konsoli w wersji beta — opcjonalny; klasyczny UI pozostaje domyślny."
}
}
+4 -2
View File
@@ -4339,7 +4339,9 @@
"resize_sidebar": "Redimensionar barra lateral",
"open_menu": "Abrir menu",
"theme_mode_hint": "Claro e Escuro são predefinidos. Personalizado ativa-se ao editar as cores abaixo.",
"switch_to_ux35": "Mudar para UX 3.5",
"switch_to_classic": "Mudar para a interface clássica"
"switch_to_ux35": "Mudar para UX 3.5 (Beta)",
"switch_to_classic": "Mudar para a interface clássica",
"beta_badge": "BETA",
"beta_tooltip": "Layout da consola em beta — opcional; a UI clássica continua a ser a predefinida."
}
}
+4 -2
View File
@@ -4345,7 +4345,9 @@
"resize_sidebar": "Redimensionați bara laterală",
"open_menu": "Deschide meniul",
"theme_mode_hint": "Deschis și Întunecat sunt integrate. Personalizat se activează când editați culorile de mai jos.",
"switch_to_ux35": "Comutați la UX 3.5",
"switch_to_classic": "Comutați la interfața clasică"
"switch_to_ux35": "Comutați la UX 3.5 (Beta)",
"switch_to_classic": "Comutați la interfața clasică",
"beta_badge": "BETA",
"beta_tooltip": "Aspect consolă beta — opțional; UI-ul clasic rămâne implicit."
}
}
+4 -2
View File
@@ -4345,7 +4345,9 @@
"resize_sidebar": "Ändra sidopanelens bredd",
"open_menu": "Öppna meny",
"theme_mode_hint": "Ljust och Mörkt är inbyggda. Anpassad aktiveras när du redigerar färgerna nedan.",
"switch_to_ux35": "Växla till UX 3.5",
"switch_to_classic": "Växla till klassiskt gränssnitt"
"switch_to_ux35": "Växla till UX 3.5 (Beta)",
"switch_to_classic": "Växla till klassiskt gränssnitt",
"beta_badge": "BETA",
"beta_tooltip": "Beta-konsollayout — valfritt; klassiskt UI förblir standard."
}
}
+4 -2
View File
@@ -4345,7 +4345,9 @@
"resize_sidebar": "ปรับความกว้างแถบด้านข้าง",
"open_menu": "เปิดเมนู",
"theme_mode_hint": "สว่างและมืดมีให้ในตัว กำหนดเองจะเปิดเมื่อคุณแก้ไขสีด้านล่าง",
"switch_to_ux35": "สลับไป UX 3.5",
"switch_to_classic": "สลับไป UI คลาสสิก"
"switch_to_ux35": "สลับไป UX 3.5 (เบต้า)",
"switch_to_classic": "สลับไป UI คลาสสิก",
"beta_badge": "เบต้า",
"beta_tooltip": "เลย์เอาต์คอนโซลเบต้า — ไม่บังคับ UI คลาสสิกยังเป็นค่าเริ่มต้น"
}
}
+4 -2
View File
@@ -4345,7 +4345,9 @@
"resize_sidebar": "Kenar çubuğu genişliğini ayarla",
"open_menu": "Menüyü aç",
"theme_mode_hint": "Açık ve Koyu yerleşiktir. Aşağıdaki renkleri düzenlediğinizde Özel etkinleşir.",
"switch_to_ux35": "UX 3.5e geç",
"switch_to_classic": "Klasik arayüze geç"
"switch_to_ux35": "UX 3.5e geç (Beta)",
"switch_to_classic": "Klasik arayüze geç",
"beta_badge": "BETA",
"beta_tooltip": "Beta konsol düzeni — isteğe bağlı; klasik arayüz varsayılan kalır."
}
}
+4 -2
View File
@@ -4345,7 +4345,9 @@
"resize_sidebar": "Змінити ширину бічної панелі",
"open_menu": "Відкрити меню",
"theme_mode_hint": "Світла і Темна вбудовані. Власний активується під час редагування кольорів нижче.",
"switch_to_ux35": "Перемкнути на UX 3.5",
"switch_to_classic": "Перемкнути на класичний інтерфейс"
"switch_to_ux35": "Перемкнути на UX 3.5 (Бета)",
"switch_to_classic": "Перемкнути на класичний інтерфейс",
"beta_badge": "БЕТА",
"beta_tooltip": "Бета-макет консолі — необов’язково; класичний UI лишається типовим."
}
}
+4 -2
View File
@@ -4345,7 +4345,9 @@
"resize_sidebar": "Đổi độ rộng thanh bên",
"open_menu": "Mở menu",
"theme_mode_hint": "Sáng và Tối là mặc định. Tùy chỉnh bật khi bạn chỉnh màu bên dưới.",
"switch_to_ux35": "Chuyển sang UX 3.5",
"switch_to_classic": "Chuyển sang giao diện cổ điển"
"switch_to_ux35": "Chuyển sang UX 3.5 (Beta)",
"switch_to_classic": "Chuyển sang giao diện cổ điển",
"beta_badge": "BETA",
"beta_tooltip": "Bố cục console Beta — tùy chọn; giao diện cổ điển vẫn là mặc định."
}
}
+4 -2
View File
@@ -4343,7 +4343,9 @@
"resize_sidebar": "調整側邊欄寬度",
"open_menu": "開啟選單",
"theme_mode_hint": "淺色與深色為內建。編輯下方顏色時會啟用自訂。",
"switch_to_ux35": "切換至 UX 3.5",
"switch_to_classic": "切換至經典介面"
"switch_to_ux35": "切換至 UX 3.5(測試版)",
"switch_to_classic": "切換至經典介面",
"beta_badge": "測試版",
"beta_tooltip": "測試版主控台版面 — 可選;經典介面仍為預設。"
}
}
+4 -2
View File
@@ -4339,7 +4339,9 @@
"resize_sidebar": "调整侧边栏宽度",
"open_menu": "打开菜单",
"theme_mode_hint": "浅色和深色为内置。编辑下方颜色时将启用自定义。",
"switch_to_ux35": "切换到 UX 3.5",
"switch_to_classic": "切换到经典界面"
"switch_to_ux35": "切换到 UX 3.5(测试版)",
"switch_to_classic": "切换到经典界面",
"beta_badge": "测试版",
"beta_tooltip": "测试版控制台布局 — 可选;经典界面仍为默认。"
}
}
+20
View File
@@ -892,6 +892,26 @@ table {
color: var(--text-primary);
}
/* Compact Beta marker on classic → UX 3.5 shell switch (opt-in) */
.navbar-btn--shell-beta {
position: relative;
}
.ui-shell-beta-badge {
position: absolute;
top: -4px;
right: -8px;
font-size: 8px;
font-weight: 700;
letter-spacing: 0.5px;
padding: 1px 4px;
border-radius: 4px;
background: var(--accent-color, #f0883e);
color: #fff;
line-height: 1.2;
pointer-events: none;
}
/* Language selector */
.lang-selector {
position: relative;
+15
View File
@@ -45,6 +45,21 @@ body.app-page.ux35-page {
flex-shrink: 0;
}
.ux35-beta-chip {
flex-shrink: 0;
align-self: center;
margin-inline-start: 6px;
font-size: 9px;
font-weight: 700;
letter-spacing: 0.06em;
padding: 2px 6px;
border-radius: 4px;
background: var(--accent-color, #f0883e);
color: #fff;
line-height: 1.2;
user-select: none;
}
.ux35-topbar-logo {
display: flex;
align-items: center;
@@ -0,0 +1,154 @@
/**
* Patch ux35 Beta labeling into all locale files.
* Run: node web-nodejs/scripts/patch-ux35-beta-label-i18n.js
*/
'use strict';
const fs = require('fs');
const path = require('path');
const dir = path.join(__dirname, '..', 'lang');
const translations = {
en: {
switch_to_ux35: 'Switch to UX 3.5 (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Beta console layout — optional; classic UI remains the default.'
},
ar: {
switch_to_ux35: 'التبديل إلى UX 3.5 (تجريبي)',
beta_badge: 'تجريبي',
beta_tooltip: 'تخطيط لوحة تجريبي — اختياري؛ تبقى الواجهة الكلاسيكية الافتراضية.'
},
cs: {
switch_to_ux35: 'Přepnout na UX 3.5 (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Beta rozložení konzole — volitelné; výchozí zůstává klasické UI.'
},
da: {
switch_to_ux35: 'Skift til UX 3.5 (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Beta-konsollayout — valgfrit; klassisk UI forbliver standard.'
},
de: {
switch_to_ux35: 'Zu UX 3.5 wechseln (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Beta-Konsolenlayout — optional; die klassische Oberfläche bleibt Standard.'
},
es: {
switch_to_ux35: 'Cambiar a UX 3.5 (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Diseño de consola en beta — opcional; la interfaz clásica sigue siendo la predeterminada.'
},
fi: {
switch_to_ux35: 'Vaihda UX 3.5 -tilaan (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Beta-konsolin asettelu — valinnainen; klassinen käyttöliittymä pysyy oletuksena.'
},
fr: {
switch_to_ux35: 'Passer à UX 3.5 (Bêta)',
beta_badge: 'BÊTA',
beta_tooltip: 'Disposition console en bêta — optionnelle ; linterface classique reste la valeur par défaut.'
},
hi: {
switch_to_ux35: 'UX 3.5 पर स्विच करें (बीटा)',
beta_badge: 'बीटा',
beta_tooltip: 'बीटा कंसोल लेआउट — वैकल्पिक; क्लासिक UI डिफ़ॉल्ट रहता है।'
},
hu: {
switch_to_ux35: 'Váltás UX 3.5-re (Béta)',
beta_badge: 'BÉTA',
beta_tooltip: 'Béta konzol elrendezés — opcionális; az alapértelmezett a klasszikus felület marad.'
},
id: {
switch_to_ux35: 'Beralih ke UX 3.5 (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Tata letak konsol Beta — opsional; UI klasik tetap default.'
},
it: {
switch_to_ux35: 'Passa a UX 3.5 (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Layout console in beta — opzionale; linterfaccia classica resta predefinita.'
},
ja: {
switch_to_ux35: 'UX 3.5 に切り替え(ベータ)',
beta_badge: 'ベータ',
beta_tooltip: 'ベータ版コンソールレイアウト — 任意。既定はクラシック UI のままです。'
},
ko: {
switch_to_ux35: 'UX 3.5로 전환 (베타)',
beta_badge: '베타',
beta_tooltip: '베타 콘솔 레이아웃 — 선택 사항이며 기본값은 클래식 UI입니다.'
},
nb: {
switch_to_ux35: 'Bytt til UX 3.5 (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Beta-konsollayout — valgfritt; klassisk UI forblir standard.'
},
nl: {
switch_to_ux35: 'Overschakelen naar UX 3.5 (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Beta-consolelay-out — optioneel; de klassieke UI blijft de standaard.'
},
pl: {
switch_to_ux35: 'Przełącz na UX 3.5 (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Układ konsoli w wersji beta — opcjonalny; klasyczny UI pozostaje domyślny.'
},
pt: {
switch_to_ux35: 'Mudar para UX 3.5 (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Layout da consola em beta — opcional; a UI clássica continua a ser a predefinida.'
},
ro: {
switch_to_ux35: 'Comutați la UX 3.5 (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Aspect consolă beta — opțional; UI-ul clasic rămâne implicit.'
},
sv: {
switch_to_ux35: 'Växla till UX 3.5 (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Beta-konsollayout — valfritt; klassiskt UI förblir standard.'
},
th: {
switch_to_ux35: 'สลับไป UX 3.5 (เบต้า)',
beta_badge: 'เบต้า',
beta_tooltip: 'เลย์เอาต์คอนโซลเบต้า — ไม่บังคับ UI คลาสสิกยังเป็นค่าเริ่มต้น'
},
tr: {
switch_to_ux35: 'UX 3.5e geç (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Beta konsol düzeni — isteğe bağlı; klasik arayüz varsayılan kalır.'
},
uk: {
switch_to_ux35: 'Перемкнути на UX 3.5 (Бета)',
beta_badge: 'БЕТА',
beta_tooltip: 'Бета-макет консолі — необов’язково; класичний UI лишається типовим.'
},
vi: {
switch_to_ux35: 'Chuyển sang UX 3.5 (Beta)',
beta_badge: 'BETA',
beta_tooltip: 'Bố cục console Beta — tùy chọn; giao diện cổ điển vẫn là mặc định.'
},
zh: {
switch_to_ux35: '切换到 UX 3.5(测试版)',
beta_badge: '测试版',
beta_tooltip: '测试版控制台布局 — 可选;经典界面仍为默认。'
},
'zh-TW': {
switch_to_ux35: '切換至 UX 3.5(測試版)',
beta_badge: '測試版',
beta_tooltip: '測試版主控台版面 — 可選;經典介面仍為預設。'
}
};
for (const file of fs.readdirSync(dir).filter((f) => f.endsWith('.json'))) {
const code = file.replace('.json', '');
const p = path.join(dir, file);
const j = JSON.parse(fs.readFileSync(p, 'utf8'));
const t = translations[code] || translations.en;
if (!j.ux35) j.ux35 = {};
j.ux35.switch_to_ux35 = t.switch_to_ux35;
j.ux35.beta_badge = t.beta_badge;
j.ux35.beta_tooltip = t.beta_tooltip;
fs.writeFileSync(p, JSON.stringify(j, null, 4) + '\n');
console.log('updated', code);
}
@@ -8,107 +8,107 @@ const dir = path.join(__dirname, '..', 'lang');
const translations = {
en: {
switch_to_ux35: 'Switch to UX 3.5',
switch_to_ux35: 'Switch to UX 3.5 (Beta)',
switch_to_classic: 'Switch to classic UI'
},
ar: {
switch_to_ux35: 'التبديل إلى UX 3.5',
switch_to_ux35: 'التبديل إلى UX 3.5 (تجريبي)',
switch_to_classic: 'التبديل إلى الواجهة الكلاسيكية'
},
cs: {
switch_to_ux35: 'Přepnout na UX 3.5',
switch_to_ux35: 'Přepnout na UX 3.5 (Beta)',
switch_to_classic: 'Přepnout na klasické rozhraní'
},
da: {
switch_to_ux35: 'Skift til UX 3.5',
switch_to_ux35: 'Skift til UX 3.5 (Beta)',
switch_to_classic: 'Skift til klassisk UI'
},
de: {
switch_to_ux35: 'Zu UX 3.5 wechseln',
switch_to_ux35: 'Zu UX 3.5 wechseln (Beta)',
switch_to_classic: 'Zur klassischen Oberfläche wechseln'
},
es: {
switch_to_ux35: 'Cambiar a UX 3.5',
switch_to_ux35: 'Cambiar a UX 3.5 (Beta)',
switch_to_classic: 'Cambiar a la interfaz clásica'
},
fi: {
switch_to_ux35: 'Vaihda UX 3.5 -tilaan',
switch_to_ux35: 'Vaihda UX 3.5 -tilaan (Beta)',
switch_to_classic: 'Vaihda klassiseen käyttöliittymään'
},
fr: {
switch_to_ux35: 'Passer à UX 3.5',
switch_to_ux35: 'Passer à UX 3.5 (Bêta)',
switch_to_classic: 'Passer à linterface classique'
},
hi: {
switch_to_ux35: 'UX 3.5 पर स्विच करें',
switch_to_ux35: 'UX 3.5 पर स्विच करें (बीटा)',
switch_to_classic: 'क्लासिक UI पर स्विच करें'
},
hu: {
switch_to_ux35: 'Váltás UX 3.5-re',
switch_to_ux35: 'Váltás UX 3.5-re (Béta)',
switch_to_classic: 'Váltás klasszikus felületre'
},
id: {
switch_to_ux35: 'Beralih ke UX 3.5',
switch_to_ux35: 'Beralih ke UX 3.5 (Beta)',
switch_to_classic: 'Beralih ke UI klasik'
},
it: {
switch_to_ux35: 'Passa a UX 3.5',
switch_to_ux35: 'Passa a UX 3.5 (Beta)',
switch_to_classic: 'Passa allinterfaccia classica'
},
ja: {
switch_to_ux35: 'UX 3.5 に切り替え',
switch_to_ux35: 'UX 3.5 に切り替え(ベータ)',
switch_to_classic: 'クラシック UI に切り替え'
},
ko: {
switch_to_ux35: 'UX 3.5로 전환',
switch_to_ux35: 'UX 3.5로 전환 (베타)',
switch_to_classic: '클래식 UI로 전환'
},
nb: {
switch_to_ux35: 'Bytt til UX 3.5',
switch_to_ux35: 'Bytt til UX 3.5 (Beta)',
switch_to_classic: 'Bytt til klassisk UI'
},
nl: {
switch_to_ux35: 'Overschakelen naar UX 3.5',
switch_to_ux35: 'Overschakelen naar UX 3.5 (Beta)',
switch_to_classic: 'Overschakelen naar klassieke UI'
},
pl: {
switch_to_ux35: 'Przełącz na UX 3.5',
switch_to_ux35: 'Przełącz na UX 3.5 (Beta)',
switch_to_classic: 'Przełącz na klasyczny interfejs'
},
pt: {
switch_to_ux35: 'Mudar para UX 3.5',
switch_to_ux35: 'Mudar para UX 3.5 (Beta)',
switch_to_classic: 'Mudar para a interface clássica'
},
ro: {
switch_to_ux35: 'Comutați la UX 3.5',
switch_to_ux35: 'Comutați la UX 3.5 (Beta)',
switch_to_classic: 'Comutați la interfața clasică'
},
sv: {
switch_to_ux35: 'Växla till UX 3.5',
switch_to_ux35: 'Växla till UX 3.5 (Beta)',
switch_to_classic: 'Växla till klassiskt gränssnitt'
},
th: {
switch_to_ux35: 'สลับไป UX 3.5',
switch_to_ux35: 'สลับไป UX 3.5 (เบต้า)',
switch_to_classic: 'สลับไป UI คลาสสิก'
},
tr: {
switch_to_ux35: 'UX 3.5e geç',
switch_to_ux35: 'UX 3.5e geç (Beta)',
switch_to_classic: 'Klasik arayüze geç'
},
uk: {
switch_to_ux35: 'Перемкнути на UX 3.5',
switch_to_ux35: 'Перемкнути на UX 3.5 (Бета)',
switch_to_classic: 'Перемкнути на класичний інтерфейс'
},
vi: {
switch_to_ux35: 'Chuyển sang UX 3.5',
switch_to_ux35: 'Chuyển sang UX 3.5 (Beta)',
switch_to_classic: 'Chuyển sang giao diện cổ điển'
},
zh: {
switch_to_ux35: '切换到 UX 3.5',
switch_to_ux35: '切换到 UX 3.5(测试版)',
switch_to_classic: '切换到经典界面'
},
'zh-TW': {
switch_to_ux35: '切換至 UX 3.5',
switch_to_ux35: '切換至 UX 3.5(測試版)',
switch_to_classic: '切換至經典介面'
}
};
+5 -4
View File
@@ -31,11 +31,12 @@
</div>
<div class="navbar-right">
<!-- UI shell: switch to UX 3.5 -->
<button type="button" class="navbar-btn" id="ui-shell-switch-btn" data-ui-shell-switch="ux35"
title="<%= _('ux35.switch_to_ux35') || 'Switch to UX 3.5' %>"
aria-label="<%= _('ux35.switch_to_ux35') || 'Switch to UX 3.5' %>">
<!-- UI shell: optional UX 3.5 (Beta) — classic remains default -->
<button type="button" class="navbar-btn navbar-btn--shell-beta" id="ui-shell-switch-btn" data-ui-shell-switch="ux35"
title="<%= _('ux35.switch_to_ux35') || 'Switch to UX 3.5 (Beta)' %>"
aria-label="<%= _('ux35.switch_to_ux35') || 'Switch to UX 3.5 (Beta)' %>">
<span class="material-icons">view_sidebar</span>
<span class="ui-shell-beta-badge" title="<%= _('ux35.beta_tooltip') || 'Beta console layout — optional; classic UI remains the default.' %>"><%= _('ux35.beta_badge') || 'BETA' %></span>
</button>
<!-- Refresh button -->
@@ -21,6 +21,7 @@
<span><%= appName %></span>
<% } %>
</a>
<span class="ux35-beta-chip" title="<%= _('ux35.beta_tooltip') || 'Beta console layout — optional; classic UI remains the default.' %>"><%= _('ux35.beta_badge') || 'BETA' %></span>
<nav class="ux35-topbar-breadcrumb" aria-label="Breadcrumb">
<a href="/"><%= _('nav.dashboard') %></a>