diff --git a/CHANGELOG.md b/CHANGELOG.md index 418afefe..4246e9da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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)_ --- diff --git a/docs/wiki/UX-3.5.md b/docs/wiki/UX-3.5.md index e0cae136..e6d5e208 100644 --- a/docs/wiki/UX-3.5.md +++ b/docs/wiki/UX-3.5.md @@ -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`). diff --git a/web-nodejs/lang/ar.json b/web-nodejs/lang/ar.json index 20efd54c..0a46ca04 100644 --- a/web-nodejs/lang/ar.json +++ b/web-nodejs/lang/ar.json @@ -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": "تخطيط لوحة تجريبي — اختياري؛ تبقى الواجهة الكلاسيكية الافتراضية." } } diff --git a/web-nodejs/lang/cs.json b/web-nodejs/lang/cs.json index 09bc51f2..8731dd95 100644 --- a/web-nodejs/lang/cs.json +++ b/web-nodejs/lang/cs.json @@ -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." } } diff --git a/web-nodejs/lang/da.json b/web-nodejs/lang/da.json index e96fbabb..48a3dbd5 100644 --- a/web-nodejs/lang/da.json +++ b/web-nodejs/lang/da.json @@ -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." } } diff --git a/web-nodejs/lang/de.json b/web-nodejs/lang/de.json index d047d8fb..578daa09 100644 --- a/web-nodejs/lang/de.json +++ b/web-nodejs/lang/de.json @@ -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." } } diff --git a/web-nodejs/lang/en.json b/web-nodejs/lang/en.json index 80c953de..82a40965 100644 --- a/web-nodejs/lang/en.json +++ b/web-nodejs/lang/en.json @@ -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", diff --git a/web-nodejs/lang/es.json b/web-nodejs/lang/es.json index a8d0d2bf..5ae8e480 100644 --- a/web-nodejs/lang/es.json +++ b/web-nodejs/lang/es.json @@ -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." } } diff --git a/web-nodejs/lang/fi.json b/web-nodejs/lang/fi.json index d6c79e83..d3c51da8 100644 --- a/web-nodejs/lang/fi.json +++ b/web-nodejs/lang/fi.json @@ -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." } } diff --git a/web-nodejs/lang/fr.json b/web-nodejs/lang/fr.json index 714427cd..ca10c4a8 100644 --- a/web-nodejs/lang/fr.json +++ b/web-nodejs/lang/fr.json @@ -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é s’active lorsque vous modifiez les couleurs ci-dessous.", - "switch_to_ux35": "Passer à UX 3.5", - "switch_to_classic": "Passer à l’interface classique" + "switch_to_ux35": "Passer à UX 3.5 (Bêta)", + "switch_to_classic": "Passer à l’interface classique", + "beta_badge": "BÊTA", + "beta_tooltip": "Disposition console en bêta — optionnelle ; l’interface classique reste la valeur par défaut." } } diff --git a/web-nodejs/lang/hi.json b/web-nodejs/lang/hi.json index b5603a94..d887e304 100644 --- a/web-nodejs/lang/hi.json +++ b/web-nodejs/lang/hi.json @@ -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 डिफ़ॉल्ट रहता है।" } } diff --git a/web-nodejs/lang/hu.json b/web-nodejs/lang/hu.json index 27004023..765db43f 100644 --- a/web-nodejs/lang/hu.json +++ b/web-nodejs/lang/hu.json @@ -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." } } diff --git a/web-nodejs/lang/id.json b/web-nodejs/lang/id.json index 73527a6e..e30ddcbc 100644 --- a/web-nodejs/lang/id.json +++ b/web-nodejs/lang/id.json @@ -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." } } diff --git a/web-nodejs/lang/it.json b/web-nodejs/lang/it.json index 1f12c708..83e0cb85 100644 --- a/web-nodejs/lang/it.json +++ b/web-nodejs/lang/it.json @@ -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 all’interfaccia classica" + "switch_to_ux35": "Passa a UX 3.5 (Beta)", + "switch_to_classic": "Passa all’interfaccia classica", + "beta_badge": "BETA", + "beta_tooltip": "Layout console in beta — opzionale; l’interfaccia classica resta predefinita." } } diff --git a/web-nodejs/lang/ja.json b/web-nodejs/lang/ja.json index 4dc54c7d..4588a0f3 100644 --- a/web-nodejs/lang/ja.json +++ b/web-nodejs/lang/ja.json @@ -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 のままです。" } } diff --git a/web-nodejs/lang/ko.json b/web-nodejs/lang/ko.json index 443973e3..1884c658 100644 --- a/web-nodejs/lang/ko.json +++ b/web-nodejs/lang/ko.json @@ -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입니다." } } diff --git a/web-nodejs/lang/nb.json b/web-nodejs/lang/nb.json index 4c258be1..bf3170f8 100644 --- a/web-nodejs/lang/nb.json +++ b/web-nodejs/lang/nb.json @@ -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." } } diff --git a/web-nodejs/lang/nl.json b/web-nodejs/lang/nl.json index b9d96134..037809b0 100644 --- a/web-nodejs/lang/nl.json +++ b/web-nodejs/lang/nl.json @@ -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." } } diff --git a/web-nodejs/lang/pl.json b/web-nodejs/lang/pl.json index 4feb2e64..42cd442b 100644 --- a/web-nodejs/lang/pl.json +++ b/web-nodejs/lang/pl.json @@ -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." } } diff --git a/web-nodejs/lang/pt.json b/web-nodejs/lang/pt.json index bc59c7c2..be1aa971 100644 --- a/web-nodejs/lang/pt.json +++ b/web-nodejs/lang/pt.json @@ -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." } } diff --git a/web-nodejs/lang/ro.json b/web-nodejs/lang/ro.json index 1f07bdc5..817c5e96 100644 --- a/web-nodejs/lang/ro.json +++ b/web-nodejs/lang/ro.json @@ -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." } } diff --git a/web-nodejs/lang/sv.json b/web-nodejs/lang/sv.json index 2d1db7a8..983bc002 100644 --- a/web-nodejs/lang/sv.json +++ b/web-nodejs/lang/sv.json @@ -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." } } diff --git a/web-nodejs/lang/th.json b/web-nodejs/lang/th.json index ce6f44c5..0ac34ee3 100644 --- a/web-nodejs/lang/th.json +++ b/web-nodejs/lang/th.json @@ -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 คลาสสิกยังเป็นค่าเริ่มต้น" } } diff --git a/web-nodejs/lang/tr.json b/web-nodejs/lang/tr.json index 47d0741f..6651c1b3 100644 --- a/web-nodejs/lang/tr.json +++ b/web-nodejs/lang/tr.json @@ -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.5’e geç", - "switch_to_classic": "Klasik arayüze geç" + "switch_to_ux35": "UX 3.5’e 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." } } diff --git a/web-nodejs/lang/uk.json b/web-nodejs/lang/uk.json index 1071c766..f677e8c0 100644 --- a/web-nodejs/lang/uk.json +++ b/web-nodejs/lang/uk.json @@ -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 лишається типовим." } } diff --git a/web-nodejs/lang/vi.json b/web-nodejs/lang/vi.json index 3cefecdb..c4628b47 100644 --- a/web-nodejs/lang/vi.json +++ b/web-nodejs/lang/vi.json @@ -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." } } diff --git a/web-nodejs/lang/zh-TW.json b/web-nodejs/lang/zh-TW.json index 45608b24..b30471ba 100644 --- a/web-nodejs/lang/zh-TW.json +++ b/web-nodejs/lang/zh-TW.json @@ -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": "測試版主控台版面 — 可選;經典介面仍為預設。" } } diff --git a/web-nodejs/lang/zh.json b/web-nodejs/lang/zh.json index b247d897..24e51526 100644 --- a/web-nodejs/lang/zh.json +++ b/web-nodejs/lang/zh.json @@ -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": "测试版控制台布局 — 可选;经典界面仍为默认。" } } diff --git a/web-nodejs/public/css/main.css b/web-nodejs/public/css/main.css index e95579a8..82ba22c7 100644 --- a/web-nodejs/public/css/main.css +++ b/web-nodejs/public/css/main.css @@ -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; diff --git a/web-nodejs/public/css/ux35.css b/web-nodejs/public/css/ux35.css index fda0b201..2ea27344 100644 --- a/web-nodejs/public/css/ux35.css +++ b/web-nodejs/public/css/ux35.css @@ -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; diff --git a/web-nodejs/scripts/patch-ux35-beta-label-i18n.js b/web-nodejs/scripts/patch-ux35-beta-label-i18n.js new file mode 100644 index 00000000..358f5948 --- /dev/null +++ b/web-nodejs/scripts/patch-ux35-beta-label-i18n.js @@ -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 ; l’interface 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; l’interfaccia 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.5’e 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); +} diff --git a/web-nodejs/scripts/patch-ux35-shell-switch-i18n.js b/web-nodejs/scripts/patch-ux35-shell-switch-i18n.js index 7d35caef..f2e31f6f 100644 --- a/web-nodejs/scripts/patch-ux35-shell-switch-i18n.js +++ b/web-nodejs/scripts/patch-ux35-shell-switch-i18n.js @@ -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 à l’interface 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 all’interfaccia 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.5’e geç', + switch_to_ux35: 'UX 3.5’e 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: '切換至經典介面' } }; diff --git a/web-nodejs/views/partials/navbar.ejs b/web-nodejs/views/partials/navbar.ejs index 63936c23..361b5a6d 100644 --- a/web-nodejs/views/partials/navbar.ejs +++ b/web-nodejs/views/partials/navbar.ejs @@ -31,11 +31,12 @@