feat(theme): ship exactly 2 themes (SRC default + VNClagoon); rebrand user-facing VNCmail+
Product decision 2026-08-05: exactly SRC (default) and VNClagoon ship as selectable themes. Everything else (Qui, Nord, Catppuccin, Solarized, Roundcube Elastic, Aurora Glass) is hidden via ThemePolicy.disabledBuiltinThemes rather than deleted - cheap to re-enable later, zero code lost. Also removed the hardcoded "Default/Bulwark" theme card from the Settings > Themes grid (product wants exactly 2 theme choices, not 3). Separately, found and fixed real "still says Bulwark" branding gaps: - All 24 locale files: "Bulwark"/"Bulwark Mail"/"Bulwark Webmail" -> "VNCmail+" in every user-facing string (verified via the translations test, which only checks structural key parity across locales, not content - a straight string swap is safe against it. 48/48 still pass). - PWA manifest fallback app name, package.json description/author. - Demo mode fixtures: the "Welcome to Bulwark Mail!" email and identity signature a first-time demo user actually sees. - The demo empty-state's logo was hardcoded to a literal Bulwark SVG file regardless of active theme - a real bug, not just stale text, since lib/theme-logo.ts's resolveThemeLogo() already exists and is already used correctly by the login page and nav rail for exactly this (theme-aware SRC mark / VNClagoon wordmark). Wired the same helper in here instead of a hardcoded path. NOT touched: internal code comments referencing "Bulwark" as historical/ attribution context (e.g. design-rationale comments explaining why a value differs from Bulwark's original) - those are harmless and a full-repo sweep of every comment wasn't the ask. Verified: typecheck clean, lint clean, translations test 48/48 passing.
This commit is contained in:
+15
-15
@@ -146,18 +146,18 @@
|
||||
},
|
||||
"protocol_handlers": {
|
||||
"title": "التطبيقات الافتراضية",
|
||||
"description": "اختر ما إذا كانت روابط البريد والتقويم تُفتح في Bulwark. من الناحية التقنية، يسجّل Bulwark نفسه كمعالج بروتوكول لروابط mailto: وwebcal:.",
|
||||
"description": "اختر ما إذا كانت روابط البريد والتقويم تُفتح في VNCmail+. من الناحية التقنية، يسجّل VNCmail+ نفسه كمعالج بروتوكول لروابط mailto: وwebcal:.",
|
||||
"unsupported": "هذا المتصفح أو الاتصال لا يدعم التسجيل اليدوي لمعالج البروتوكول. قد يمكنك مع ذلك استخدام تطبيق PWA المثبّت عبر إعدادات المتصفح أو النظام.",
|
||||
"mailto_label": "روابط البريد الإلكتروني",
|
||||
"mailto_description": "فتح روابط mailto: في Bulwark مع نافذة إنشاء رسالة معبأة مسبقًا.",
|
||||
"mailto_description": "فتح روابط mailto: في VNCmail+ مع نافذة إنشاء رسالة معبأة مسبقًا.",
|
||||
"protocol_open_mode_label": "عند فتح روابط البروتوكول",
|
||||
"protocol_open_mode_description": "اختر ما إذا كان Bulwark يفتح روابط mailto: وwebcal: في علامة تبويب جديدة أو يعيد استخدام جلسة مفتوحة. يتطلب خيار الجلسة النشطة إذن الإشعارات حتى تتمكن من النقر على إشعار احتياطي لإحضار Bulwark إلى المقدمة إذا منع المتصفح التركيز.",
|
||||
"protocol_open_mode_description": "اختر ما إذا كان VNCmail+ يفتح روابط mailto: وwebcal: في علامة تبويب جديدة أو يعيد استخدام جلسة مفتوحة. يتطلب خيار الجلسة النشطة إذن الإشعارات حتى تتمكن من النقر على إشعار احتياطي لإحضار VNCmail+ إلى المقدمة إذا منع المتصفح التركيز.",
|
||||
"protocol_open_mode_active_session": "الفتح في الجلسة النشطة إن أمكن",
|
||||
"protocol_open_mode_new_tab": "فتح علامة تبويب جديدة دائمًا",
|
||||
"focus_notification_title": "فتح Bulwark",
|
||||
"focus_notification_body": "تم فتح الرابط في Bulwark. انقر لإحضار النافذة إلى المقدمة.",
|
||||
"focus_notification_title": "فتح VNCmail+",
|
||||
"focus_notification_body": "تم فتح الرابط في VNCmail+. انقر لإحضار النافذة إلى المقدمة.",
|
||||
"webcal_label": "روابط التقويم",
|
||||
"webcal_description": "فتح روابط webcal: في Bulwark مع نافذة اشتراك تقويم معبأة مسبقًا.",
|
||||
"webcal_description": "فتح روابط webcal: في VNCmail+ مع نافذة اشتراك تقويم معبأة مسبقًا.",
|
||||
"register_mailto": "تسجيل تطبيق البريد",
|
||||
"register_webcal": "تسجيل تطبيق التقويم",
|
||||
"mailto_registered": "تم طلب تسجيل معالج البريد الإلكتروني",
|
||||
@@ -165,7 +165,7 @@
|
||||
"registration_failed": "فشل تسجيل معالج البروتوكول",
|
||||
"opening_mailto": "جارٍ فتح نافذة الإنشاء...",
|
||||
"opening_webcal": "جارٍ فتح التقويم...",
|
||||
"browser_note": "قد يطلب منك المتصفح أو نظام التشغيل تأكيد ذلك، وقد يتطلب تثبيت Bulwark أولًا قبل إمكانية اختياره كتطبيق افتراضي.",
|
||||
"browser_note": "قد يطلب منك المتصفح أو نظام التشغيل تأكيد ذلك، وقد يتطلب تثبيت VNCmail+ أولًا قبل إمكانية اختياره كتطبيق افتراضي.",
|
||||
"select_account_title": "اختر الحساب",
|
||||
"select_mailto_account": "اختر الحساب الذي سيفتح رابط البريد هذا.",
|
||||
"select_webcal_account": "اختر الحساب الذي سيفتح رابط التقويم هذا.",
|
||||
@@ -738,9 +738,9 @@
|
||||
"app_title": "البريد الإلكتروني",
|
||||
"reconnecting": "انقطع الاتصال. جارٍ محاولة إعادة الاتصال…",
|
||||
"rate_limited_title": "مصادقة الخادم مقيّدة مؤقتًا بحد المعدل.",
|
||||
"rate_limited_detail": "أوقف Bulwark الطلبات في الخلفية مؤقتًا لتجنب الحظر. ستتم إعادة المحاولة خلال {seconds} ثانية.",
|
||||
"rate_limited_detail": "أوقف VNCmail+ الطلبات في الخلفية مؤقتًا لتجنب الحظر. ستتم إعادة المحاولة خلال {seconds} ثانية.",
|
||||
"rate_limited_action_title": "تم إيقاف الطلب مؤقتًا لتجنب الحظر.",
|
||||
"rate_limited_action_detail": "ينتظر Bulwark انتهاء فترة تهدئة الخادم قبل إرسال المزيد من الطلبات الموثّقة. حاول مرة أخرى خلال {seconds} ثانية."
|
||||
"rate_limited_action_detail": "ينتظر VNCmail+ انتهاء فترة تهدئة الخادم قبل إرسال المزيد من الطلبات الموثّقة. حاول مرة أخرى خلال {seconds} ثانية."
|
||||
},
|
||||
"notifications": {
|
||||
"email_sent": "تم إرسال الرسالة بنجاح",
|
||||
@@ -1052,9 +1052,9 @@
|
||||
},
|
||||
"push": {
|
||||
"title": "الإشعارات في الخلفية",
|
||||
"description": "تلقّي إشعارات النظام للبريد الجديد عند إغلاق هذا الموقع. تُسلَّم عبر خادم ترحيل Bulwark؛ ولا يطّلع الترحيل على محتوى البريد أبدًا.",
|
||||
"description": "تلقّي إشعارات النظام للبريد الجديد عند إغلاق هذا الموقع. تُسلَّم عبر خادم ترحيل VNCmail+؛ ولا يطّلع الترحيل على محتوى البريد أبدًا.",
|
||||
"relay_label": "خادم ترحيل الإشعارات",
|
||||
"relay_desc": "يستخدم افتراضيًا خادم ترحيل Bulwark المستضاف. غيّره فقط إذا كنت تستضيف بنفسك.",
|
||||
"relay_desc": "يستخدم افتراضيًا خادم ترحيل VNCmail+ المستضاف. غيّره فقط إذا كنت تستضيف بنفسك.",
|
||||
"relay_locked": "تم تعيينه بواسطة المسؤول",
|
||||
"relay_locked_desc": "تم تعيين رابط خادم الترحيل بواسطة المسؤول ولا يمكن تغييره.",
|
||||
"relay_placeholder": "https://notifications.relay.example.com",
|
||||
@@ -1535,10 +1535,10 @@
|
||||
},
|
||||
"link_device": {
|
||||
"title": "ربط تطبيق الجوال",
|
||||
"description": "سجّل الدخول إلى تطبيق Bulwark Mail للجوال دون كتابة أي شيء. أنشئ رمز QR هنا وامسحه ضوئيًا من شاشة تسجيل الدخول في التطبيق.",
|
||||
"description": "سجّل الدخول إلى تطبيق VNCmail+ للجوال دون كتابة أي شيء. أنشئ رمز QR هنا وامسحه ضوئيًا من شاشة تسجيل الدخول في التطبيق.",
|
||||
"generate": "إظهار رمز QR",
|
||||
"regenerate": "إظهار رمز جديد",
|
||||
"instructions": "افتح تطبيق Bulwark Mail، اضغط على \"مسح رمز QR\" في شاشة تسجيل الدخول، ووجّه الكاميرا هنا.",
|
||||
"instructions": "افتح تطبيق VNCmail+، اضغط على \"مسح رمز QR\" في شاشة تسجيل الدخول، ووجّه الكاميرا هنا.",
|
||||
"expires_in": "تنتهي صلاحية هذا الرمز خلال {seconds} ثانية. يمكن استخدامه مرة واحدة فقط.",
|
||||
"expired": "انتهت صلاحية هذا الرمز.",
|
||||
"generating": "جارٍ التوليد…",
|
||||
@@ -1713,7 +1713,7 @@
|
||||
"button": "استيراد"
|
||||
},
|
||||
"about": {
|
||||
"title": "بريد Bulwark الإلكتروني"
|
||||
"title": "بريد VNCmail+ الإلكتروني"
|
||||
}
|
||||
},
|
||||
"sidebar_apps": {
|
||||
@@ -3055,7 +3055,7 @@
|
||||
"start_tour": "بدء الجولة"
|
||||
},
|
||||
"demo_welcome": {
|
||||
"title": "مرحبًا بك في بريد Bulwark",
|
||||
"title": "مرحبًا بك في بريد VNCmail+",
|
||||
"description": "استكشف عميل بريد ويب متكامل الميزات - مباشرة في متصفحك. تبقى جميع البيانات على جهازك، فلا تتردد في تجربة كل شيء.",
|
||||
"feature_email": "قراءة الرسائل وكتابتها",
|
||||
"feature_organize": "الوسوم والنجوم والمجلدات",
|
||||
|
||||
Reference in New Issue
Block a user