mirror of
https://github.com/lobehub/lobehub.git
synced 2026-03-27 13:29:15 +07:00
feat: Highlight notification card (#11705)
* feat: highlight card * feat: highlight card * feat: highlight card * fix: add missing translation * fix: add missing translation * fix: action link
This commit is contained in:
@@ -324,6 +324,9 @@
|
||||
"pin": "تثبيت",
|
||||
"pinOff": "إلغاء التثبيت",
|
||||
"privacy": "سياسة الخصوصية",
|
||||
"productHunt.actionLabel": "ادعمنا",
|
||||
"productHunt.description": "ادعمنا على Product Hunt. دعمك يعني لنا الكثير!",
|
||||
"productHunt.title": "نحن على Product Hunt!",
|
||||
"regenerate": "إعادة التوليد",
|
||||
"releaseNotes": "تفاصيل الإصدار",
|
||||
"rename": "إعادة التسمية",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "تشغيل",
|
||||
"save": "حفظ",
|
||||
"send": "إرسال",
|
||||
"serverVersionOutdated.desc": "إصدار العميل الخاص بك (v{{version}}) يتطلب إصدار خادم أحدث.",
|
||||
"serverVersionOutdated.dismiss": "المتابعة على أي حال",
|
||||
"serverVersionOutdated.title": "إصدار الخادم قديم",
|
||||
"serverVersionOutdated.upgrade": "دليل التحديث",
|
||||
"serverVersionOutdated.warning": "قد لا تعمل بعض الميزات بشكل صحيح أو قد تتصرف بشكل غير متوقع. يُرجى تحديث الخادم للحصول على أفضل تجربة.",
|
||||
"setting": "الإعدادات",
|
||||
"share": "مشاركة",
|
||||
"stop": "إيقاف",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "ترقية",
|
||||
"upgradeVersion.hasNew": "تحديث متوفر",
|
||||
"upgradeVersion.newVersion": "تحديث متوفر: {{version}}",
|
||||
"upgradeVersion.serverVersion": "الخادم: {{version}}",
|
||||
"userPanel.anonymousNickName": "مستخدم مجهول",
|
||||
"userPanel.billing": "إدارة الفوترة",
|
||||
"userPanel.cloud": "تشغيل {{name}}",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "Закачи",
|
||||
"pinOff": "Откачи",
|
||||
"privacy": "Политика за поверителност",
|
||||
"productHunt.actionLabel": "Подкрепете ни",
|
||||
"productHunt.description": "Подкрепете ни в Product Hunt. Вашата подкрепа означава много за нас!",
|
||||
"productHunt.title": "Ние сме в Product Hunt!",
|
||||
"regenerate": "Генерирай отново",
|
||||
"releaseNotes": "Детайли за версията",
|
||||
"rename": "Преименувай",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "Стартирай",
|
||||
"save": "Запази",
|
||||
"send": "Изпрати",
|
||||
"serverVersionOutdated.desc": "Вашата клиентска версия (v{{version}}) изисква по-нова версия на сървъра.",
|
||||
"serverVersionOutdated.dismiss": "Продължи въпреки това",
|
||||
"serverVersionOutdated.title": "Остаряла версия на сървъра",
|
||||
"serverVersionOutdated.upgrade": "Ръководство за надграждане",
|
||||
"serverVersionOutdated.warning": "Някои функции може да не работят правилно или да се държат неочаквано. Моля, актуализирайте сървъра си за най-добро изживяване.",
|
||||
"setting": "Настройки",
|
||||
"share": "Сподели",
|
||||
"stop": "Спри",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "Актуализирай",
|
||||
"upgradeVersion.hasNew": "Налична е актуализация",
|
||||
"upgradeVersion.newVersion": "Налична е актуализация: {{version}}",
|
||||
"upgradeVersion.serverVersion": "Сървър: {{version}}",
|
||||
"userPanel.anonymousNickName": "Анонимен потребител",
|
||||
"userPanel.billing": "Управление на плащания",
|
||||
"userPanel.cloud": "Стартирай {{name}}",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "Anheften",
|
||||
"pinOff": "Lösen",
|
||||
"privacy": "Datenschutzrichtlinie",
|
||||
"productHunt.actionLabel": "Unterstütze uns",
|
||||
"productHunt.description": "Unterstütze uns auf Product Hunt. Deine Unterstützung bedeutet uns viel!",
|
||||
"productHunt.title": "Wir sind auf Product Hunt!",
|
||||
"regenerate": "Neu generieren",
|
||||
"releaseNotes": "Versionshinweise",
|
||||
"rename": "Umbenennen",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "Ausführen",
|
||||
"save": "Speichern",
|
||||
"send": "Senden",
|
||||
"serverVersionOutdated.desc": "Deine Client-Version (v{{version}}) erfordert eine neuere Server-Version.",
|
||||
"serverVersionOutdated.dismiss": "Trotzdem fortfahren",
|
||||
"serverVersionOutdated.title": "Server-Version veraltet",
|
||||
"serverVersionOutdated.upgrade": "Upgrade-Anleitung",
|
||||
"serverVersionOutdated.warning": "Einige Funktionen könnten nicht richtig funktionieren oder sich unerwartet verhalten. Bitte aktualisiere deinen Server für das beste Nutzungserlebnis.",
|
||||
"setting": "Einstellungen",
|
||||
"share": "Teilen",
|
||||
"stop": "Stopp",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "Aktualisieren",
|
||||
"upgradeVersion.hasNew": "Aktualisierung verfügbar",
|
||||
"upgradeVersion.newVersion": "Neue Version verfügbar: {{version}}",
|
||||
"upgradeVersion.serverVersion": "Server: {{version}}",
|
||||
"userPanel.anonymousNickName": "Anonymer Benutzer",
|
||||
"userPanel.billing": "Abrechnungsverwaltung",
|
||||
"userPanel.cloud": "{{name}} starten",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "Pin",
|
||||
"pinOff": "Unpin",
|
||||
"privacy": "Privacy Policy",
|
||||
"productHunt.actionLabel": "Support us",
|
||||
"productHunt.description": "Support us on Product Hunt. Your support means a lot to us!",
|
||||
"productHunt.title": "We're on Product Hunt!",
|
||||
"regenerate": "Regenerate",
|
||||
"releaseNotes": "Version Details",
|
||||
"rename": "Rename",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "Fijar",
|
||||
"pinOff": "Desfijar",
|
||||
"privacy": "Política de privacidad",
|
||||
"productHunt.actionLabel": "Apóyanos",
|
||||
"productHunt.description": "Apóyanos en Product Hunt. ¡Tu apoyo significa mucho para nosotros!",
|
||||
"productHunt.title": "¡Estamos en Product Hunt!",
|
||||
"regenerate": "Regenerar",
|
||||
"releaseNotes": "Detalles de la versión",
|
||||
"rename": "Renombrar",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "Ejecutar",
|
||||
"save": "Guardar",
|
||||
"send": "Enviar",
|
||||
"serverVersionOutdated.desc": "Tu versión del cliente (v{{version}}) requiere una versión del servidor más reciente.",
|
||||
"serverVersionOutdated.dismiss": "Continuar de todos modos",
|
||||
"serverVersionOutdated.title": "Versión del servidor desactualizada",
|
||||
"serverVersionOutdated.upgrade": "Guía de actualización",
|
||||
"serverVersionOutdated.warning": "Es posible que algunas funciones no funcionen correctamente o se comporten de forma inesperada. Por favor, actualiza tu servidor para una mejor experiencia.",
|
||||
"setting": "Configuración",
|
||||
"share": "Compartir",
|
||||
"stop": "Detener",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "Actualizar",
|
||||
"upgradeVersion.hasNew": "Actualización disponible",
|
||||
"upgradeVersion.newVersion": "Actualización disponible: {{version}}",
|
||||
"upgradeVersion.serverVersion": "Servidor: {{version}}",
|
||||
"userPanel.anonymousNickName": "Usuario anónimo",
|
||||
"userPanel.billing": "Gestión de facturación",
|
||||
"userPanel.cloud": "Lanzar {{name}}",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "سنجاق کردن",
|
||||
"pinOff": "برداشتن سنجاق",
|
||||
"privacy": "سیاست حفظ حریم خصوصی",
|
||||
"productHunt.actionLabel": "از ما حمایت کنید",
|
||||
"productHunt.description": "در Product Hunt از ما حمایت کنید. حمایت شما برای ما بسیار ارزشمند است!",
|
||||
"productHunt.title": "ما در Product Hunt هستیم!",
|
||||
"regenerate": "تولید مجدد",
|
||||
"releaseNotes": "جزئیات نسخه",
|
||||
"rename": "تغییر نام",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "اجرا",
|
||||
"save": "ذخیره",
|
||||
"send": "ارسال",
|
||||
"serverVersionOutdated.desc": "نسخه کلاینت شما (v{{version}}) به نسخه جدیدتری از سرور نیاز دارد.",
|
||||
"serverVersionOutdated.dismiss": "ادامه با همین وضعیت",
|
||||
"serverVersionOutdated.title": "نسخه سرور قدیمی است",
|
||||
"serverVersionOutdated.upgrade": "راهنمای ارتقاء",
|
||||
"serverVersionOutdated.warning": "برخی قابلیتها ممکن است به درستی کار نکنند یا رفتار غیرمنتظرهای داشته باشند. لطفاً برای بهترین تجربه، سرور خود را بهروزرسانی کنید.",
|
||||
"setting": "تنظیمات",
|
||||
"share": "اشتراکگذاری",
|
||||
"stop": "توقف",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "ارتقاء",
|
||||
"upgradeVersion.hasNew": "بهروزرسانی در دسترس است",
|
||||
"upgradeVersion.newVersion": "بهروزرسانی در دسترس: {{version}}",
|
||||
"upgradeVersion.serverVersion": "سرور: {{version}}",
|
||||
"userPanel.anonymousNickName": "کاربر ناشناس",
|
||||
"userPanel.billing": "مدیریت صورتحساب",
|
||||
"userPanel.cloud": "اجرای {{name}}",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "Épingler",
|
||||
"pinOff": "Désépingler",
|
||||
"privacy": "Politique de confidentialité",
|
||||
"productHunt.actionLabel": "Soutenez-nous",
|
||||
"productHunt.description": "Soutenez-nous sur Product Hunt. Votre soutien compte beaucoup pour nous !",
|
||||
"productHunt.title": "Nous sommes sur Product Hunt !",
|
||||
"regenerate": "Régénérer",
|
||||
"releaseNotes": "Détails de la version",
|
||||
"rename": "Renommer",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "Exécuter",
|
||||
"save": "Enregistrer",
|
||||
"send": "Envoyer",
|
||||
"serverVersionOutdated.desc": "Votre version du client (v{{version}}) nécessite une version plus récente du serveur.",
|
||||
"serverVersionOutdated.dismiss": "Continuer quand même",
|
||||
"serverVersionOutdated.title": "Version du serveur obsolète",
|
||||
"serverVersionOutdated.upgrade": "Guide de mise à jour",
|
||||
"serverVersionOutdated.warning": "Certaines fonctionnalités peuvent ne pas fonctionner correctement ou se comporter de manière inattendue. Veuillez mettre à jour votre serveur pour une expérience optimale.",
|
||||
"setting": "Paramètres",
|
||||
"share": "Partager",
|
||||
"stop": "Arrêter",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "Mettre à jour",
|
||||
"upgradeVersion.hasNew": "Mise à jour disponible",
|
||||
"upgradeVersion.newVersion": "Mise à jour disponible : {{version}}",
|
||||
"upgradeVersion.serverVersion": "Serveur : {{version}}",
|
||||
"userPanel.anonymousNickName": "Utilisateur anonyme",
|
||||
"userPanel.billing": "Gestion de la facturation",
|
||||
"userPanel.cloud": "Lancer {{name}}",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "Fissa",
|
||||
"pinOff": "Sblocca",
|
||||
"privacy": "Informativa sulla privacy",
|
||||
"productHunt.actionLabel": "Sostienici",
|
||||
"productHunt.description": "Sostienici su Product Hunt. Il tuo supporto è molto importante per noi!",
|
||||
"productHunt.title": "Siamo su Product Hunt!",
|
||||
"regenerate": "Rigenera",
|
||||
"releaseNotes": "Dettagli versione",
|
||||
"rename": "Rinomina",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "Esegui",
|
||||
"save": "Salva",
|
||||
"send": "Invia",
|
||||
"serverVersionOutdated.desc": "La tua versione del client (v{{version}}) richiede una versione del server più recente.",
|
||||
"serverVersionOutdated.dismiss": "Continua comunque",
|
||||
"serverVersionOutdated.title": "Versione del server obsoleta",
|
||||
"serverVersionOutdated.upgrade": "Guida all'aggiornamento",
|
||||
"serverVersionOutdated.warning": "Alcune funzionalità potrebbero non funzionare correttamente o comportarsi in modo imprevisto. Aggiorna il server per un'esperienza ottimale.",
|
||||
"setting": "Impostazioni",
|
||||
"share": "Condividi",
|
||||
"stop": "Ferma",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "Aggiorna",
|
||||
"upgradeVersion.hasNew": "Aggiornamento disponibile",
|
||||
"upgradeVersion.newVersion": "Aggiornamento disponibile: {{version}}",
|
||||
"upgradeVersion.serverVersion": "Server: {{version}}",
|
||||
"userPanel.anonymousNickName": "Utente anonimo",
|
||||
"userPanel.billing": "Gestione fatturazione",
|
||||
"userPanel.cloud": "Avvia {{name}}",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "ピン留め",
|
||||
"pinOff": "ピン留め解除",
|
||||
"privacy": "プライバシーポリシー",
|
||||
"productHunt.actionLabel": "応援する",
|
||||
"productHunt.description": "Product Huntで私たちを応援してください。皆さまのサポートが大きな力になります!",
|
||||
"productHunt.title": "Product Huntに掲載されました!",
|
||||
"regenerate": "再生成",
|
||||
"releaseNotes": "バージョン詳細",
|
||||
"rename": "名前を変更",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "実行",
|
||||
"save": "保存",
|
||||
"send": "送信",
|
||||
"serverVersionOutdated.desc": "ご利用のクライアントバージョン(v{{version}})は、より新しいサーバーバージョンが必要です。",
|
||||
"serverVersionOutdated.dismiss": "このまま続行",
|
||||
"serverVersionOutdated.title": "サーバーバージョンが古くなっています",
|
||||
"serverVersionOutdated.upgrade": "アップグレードガイド",
|
||||
"serverVersionOutdated.warning": "一部の機能が正しく動作しない、または予期しない動作をする可能性があります。最適な体験のためにサーバーを更新してください。",
|
||||
"setting": "設定",
|
||||
"share": "共有",
|
||||
"stop": "停止",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "アップグレード",
|
||||
"upgradeVersion.hasNew": "アップデートがあります",
|
||||
"upgradeVersion.newVersion": "利用可能なアップデート:{{version}}",
|
||||
"upgradeVersion.serverVersion": "サーバー:{{version}}",
|
||||
"userPanel.anonymousNickName": "匿名ユーザー",
|
||||
"userPanel.billing": "請求管理",
|
||||
"userPanel.cloud": "{{name}} を体験",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "상단 고정",
|
||||
"pinOff": "고정 해제",
|
||||
"privacy": "개인정보 보호정책",
|
||||
"productHunt.actionLabel": "응원하기",
|
||||
"productHunt.description": "Product Hunt에서 저희를 응원해 주세요. 여러분의 응원이 큰 힘이 됩니다!",
|
||||
"productHunt.title": "우리는 Product Hunt에 있어요!",
|
||||
"regenerate": "다시 생성",
|
||||
"releaseNotes": "버전 정보",
|
||||
"rename": "이름 변경",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "실행",
|
||||
"save": "저장",
|
||||
"send": "보내기",
|
||||
"serverVersionOutdated.desc": "현재 클라이언트 버전(v{{version}})은 더 최신의 서버 버전이 필요합니다.",
|
||||
"serverVersionOutdated.dismiss": "계속 진행하기",
|
||||
"serverVersionOutdated.title": "서버 버전이 오래되었습니다",
|
||||
"serverVersionOutdated.upgrade": "업그레이드 가이드",
|
||||
"serverVersionOutdated.warning": "일부 기능이 제대로 작동하지 않거나 예기치 않게 동작할 수 있습니다. 최상의 사용을 위해 서버를 업데이트해 주세요.",
|
||||
"setting": "설정",
|
||||
"share": "공유",
|
||||
"stop": "중지",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "업그레이드",
|
||||
"upgradeVersion.hasNew": "업데이트 가능",
|
||||
"upgradeVersion.newVersion": "사용 가능한 업데이트: {{version}}",
|
||||
"upgradeVersion.serverVersion": "서버: {{version}}",
|
||||
"userPanel.anonymousNickName": "익명 사용자",
|
||||
"userPanel.billing": "청구 관리",
|
||||
"userPanel.cloud": "{{name}} 체험하기",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "Vastmaken",
|
||||
"pinOff": "Losmaken",
|
||||
"privacy": "Privacybeleid",
|
||||
"productHunt.actionLabel": "Steun ons",
|
||||
"productHunt.description": "Steun ons op Product Hunt. Jouw steun betekent veel voor ons!",
|
||||
"productHunt.title": "We staan op Product Hunt!",
|
||||
"regenerate": "Opnieuw genereren",
|
||||
"releaseNotes": "Versiedetails",
|
||||
"rename": "Hernoemen",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "Uitvoeren",
|
||||
"save": "Opslaan",
|
||||
"send": "Verzenden",
|
||||
"serverVersionOutdated.desc": "Je clientversie (v{{version}}) vereist een nieuwere serverversie.",
|
||||
"serverVersionOutdated.dismiss": "Toch doorgaan",
|
||||
"serverVersionOutdated.title": "Verouderde serverversie",
|
||||
"serverVersionOutdated.upgrade": "Upgradehandleiding",
|
||||
"serverVersionOutdated.warning": "Sommige functies werken mogelijk niet goed of gedragen zich onverwacht. Werk je server bij voor de beste ervaring.",
|
||||
"setting": "Instellingen",
|
||||
"share": "Delen",
|
||||
"stop": "Stoppen",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "Upgraden",
|
||||
"upgradeVersion.hasNew": "Update beschikbaar",
|
||||
"upgradeVersion.newVersion": "Update beschikbaar: {{version}}",
|
||||
"upgradeVersion.serverVersion": "Server: {{version}}",
|
||||
"userPanel.anonymousNickName": "Anonieme gebruiker",
|
||||
"userPanel.billing": "Facturatiebeheer",
|
||||
"userPanel.cloud": "Start {{name}}",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "Przypnij",
|
||||
"pinOff": "Odepnij",
|
||||
"privacy": "Polityka prywatności",
|
||||
"productHunt.actionLabel": "Wesprzyj nas",
|
||||
"productHunt.description": "Wesprzyj nas na Product Hunt. Twoje wsparcie wiele dla nas znaczy!",
|
||||
"productHunt.title": "Jesteśmy na Product Hunt!",
|
||||
"regenerate": "Wygeneruj ponownie",
|
||||
"releaseNotes": "Szczegóły wersji",
|
||||
"rename": "Zmień nazwę",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "Uruchom",
|
||||
"save": "Zapisz",
|
||||
"send": "Wyślij",
|
||||
"serverVersionOutdated.desc": "Twoja wersja klienta (v{{version}}) wymaga nowszej wersji serwera.",
|
||||
"serverVersionOutdated.dismiss": "Kontynuuj mimo to",
|
||||
"serverVersionOutdated.title": "Nieaktualna wersja serwera",
|
||||
"serverVersionOutdated.upgrade": "Przewodnik aktualizacji",
|
||||
"serverVersionOutdated.warning": "Niektóre funkcje mogą nie działać poprawnie lub zachowywać się nieoczekiwanie. Zaktualizuj serwer, aby uzyskać najlepsze wrażenia.",
|
||||
"setting": "Ustawienia",
|
||||
"share": "Udostępnij",
|
||||
"stop": "Zatrzymaj",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "Zaktualizuj",
|
||||
"upgradeVersion.hasNew": "Dostępna aktualizacja",
|
||||
"upgradeVersion.newVersion": "Dostępna aktualizacja: {{version}}",
|
||||
"upgradeVersion.serverVersion": "Serwer: {{version}}",
|
||||
"userPanel.anonymousNickName": "Użytkownik anonimowy",
|
||||
"userPanel.billing": "Zarządzanie płatnościami",
|
||||
"userPanel.cloud": "Uruchom {{name}}",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "Fixar",
|
||||
"pinOff": "Desafixar",
|
||||
"privacy": "Política de Privacidade",
|
||||
"productHunt.actionLabel": "Apoie-nos",
|
||||
"productHunt.description": "Apoie-nos no Product Hunt. Seu apoio é muito importante para nós!",
|
||||
"productHunt.title": "Estamos no Product Hunt!",
|
||||
"regenerate": "Regenerar",
|
||||
"releaseNotes": "Detalhes da Versão",
|
||||
"rename": "Renomear",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "Executar",
|
||||
"save": "Salvar",
|
||||
"send": "Enviar",
|
||||
"serverVersionOutdated.desc": "Sua versão do cliente (v{{version}}) requer uma versão mais recente do servidor.",
|
||||
"serverVersionOutdated.dismiss": "Continuar mesmo assim",
|
||||
"serverVersionOutdated.title": "Versão do Servidor Desatualizada",
|
||||
"serverVersionOutdated.upgrade": "Guia de Atualização",
|
||||
"serverVersionOutdated.warning": "Alguns recursos podem não funcionar corretamente ou apresentar comportamentos inesperados. Atualize seu servidor para a melhor experiência.",
|
||||
"setting": "Configurações",
|
||||
"share": "Compartilhar",
|
||||
"stop": "Parar",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "Atualizar",
|
||||
"upgradeVersion.hasNew": "Atualização disponível",
|
||||
"upgradeVersion.newVersion": "Atualização disponível: {{version}}",
|
||||
"upgradeVersion.serverVersion": "Servidor: {{version}}",
|
||||
"userPanel.anonymousNickName": "Usuário Anônimo",
|
||||
"userPanel.billing": "Gerenciamento de Pagamentos",
|
||||
"userPanel.cloud": "Iniciar {{name}}",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "Закрепить",
|
||||
"pinOff": "Открепить",
|
||||
"privacy": "Политика конфиденциальности",
|
||||
"productHunt.actionLabel": "Поддержите нас",
|
||||
"productHunt.description": "Поддержите нас на Product Hunt. Ваша поддержка очень важна для нас!",
|
||||
"productHunt.title": "Мы на Product Hunt!",
|
||||
"regenerate": "Сгенерировать заново",
|
||||
"releaseNotes": "Информация о версии",
|
||||
"rename": "Переименовать",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "Запустить",
|
||||
"save": "Сохранить",
|
||||
"send": "Отправить",
|
||||
"serverVersionOutdated.desc": "Ваша версия клиента (v{{version}}) требует более новой версии сервера.",
|
||||
"serverVersionOutdated.dismiss": "Продолжить всё равно",
|
||||
"serverVersionOutdated.title": "Устаревшая версия сервера",
|
||||
"serverVersionOutdated.upgrade": "Руководство по обновлению",
|
||||
"serverVersionOutdated.warning": "Некоторые функции могут работать некорректно или вести себя непредсказуемо. Пожалуйста, обновите сервер для наилучшей работы.",
|
||||
"setting": "Настройки",
|
||||
"share": "Поделиться",
|
||||
"stop": "Остановить",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "Обновить",
|
||||
"upgradeVersion.hasNew": "Доступно обновление",
|
||||
"upgradeVersion.newVersion": "Доступно обновление: {{version}}",
|
||||
"upgradeVersion.serverVersion": "Сервер: {{version}}",
|
||||
"userPanel.anonymousNickName": "Анонимный пользователь",
|
||||
"userPanel.billing": "Управление оплатой",
|
||||
"userPanel.cloud": "Запустить {{name}}",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "Sabitle",
|
||||
"pinOff": "Sabitlemeyi Kaldır",
|
||||
"privacy": "Gizlilik Politikası",
|
||||
"productHunt.actionLabel": "Bizi destekleyin",
|
||||
"productHunt.description": "Product Hunt'ta bize destek olun. Desteğiniz bizim için çok değerli!",
|
||||
"productHunt.title": "Product Hunt'tayız!",
|
||||
"regenerate": "Yeniden Oluştur",
|
||||
"releaseNotes": "Sürüm Detayları",
|
||||
"rename": "Yeniden Adlandır",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "Çalıştır",
|
||||
"save": "Kaydet",
|
||||
"send": "Gönder",
|
||||
"serverVersionOutdated.desc": "İstemci sürümünüz (v{{version}}), daha yeni bir sunucu sürümü gerektiriyor.",
|
||||
"serverVersionOutdated.dismiss": "Yine de devam et",
|
||||
"serverVersionOutdated.title": "Sunucu Sürümü Eski",
|
||||
"serverVersionOutdated.upgrade": "Yükseltme Rehberi",
|
||||
"serverVersionOutdated.warning": "Bazı özellikler düzgün çalışmayabilir veya beklenmedik şekilde davranabilir. En iyi deneyim için lütfen sunucunuzu güncelleyin.",
|
||||
"setting": "Ayarlar",
|
||||
"share": "Paylaş",
|
||||
"stop": "Durdur",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "Yükselt",
|
||||
"upgradeVersion.hasNew": "Güncelleme mevcut",
|
||||
"upgradeVersion.newVersion": "Yeni sürüm mevcut: {{version}}",
|
||||
"upgradeVersion.serverVersion": "Sunucu: {{version}}",
|
||||
"userPanel.anonymousNickName": "Anonim Kullanıcı",
|
||||
"userPanel.billing": "Faturalandırma Yönetimi",
|
||||
"userPanel.cloud": "{{name}}'i Başlat",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "Ghim",
|
||||
"pinOff": "Bỏ ghim",
|
||||
"privacy": "Chính sách quyền riêng tư",
|
||||
"productHunt.actionLabel": "Ủng hộ chúng tôi",
|
||||
"productHunt.description": "Ủng hộ chúng tôi trên Product Hunt. Sự ủng hộ của bạn rất có ý nghĩa với chúng tôi!",
|
||||
"productHunt.title": "Chúng tôi đã có mặt trên Product Hunt!",
|
||||
"regenerate": "Tạo lại",
|
||||
"releaseNotes": "Chi tiết phiên bản",
|
||||
"rename": "Đổi tên",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "Chạy",
|
||||
"save": "Lưu",
|
||||
"send": "Gửi",
|
||||
"serverVersionOutdated.desc": "Phiên bản ứng dụng của bạn (v{{version}}) yêu cầu phiên bản máy chủ mới hơn.",
|
||||
"serverVersionOutdated.dismiss": "Vẫn tiếp tục",
|
||||
"serverVersionOutdated.title": "Phiên bản máy chủ đã lỗi thời",
|
||||
"serverVersionOutdated.upgrade": "Hướng dẫn nâng cấp",
|
||||
"serverVersionOutdated.warning": "Một số tính năng có thể không hoạt động đúng hoặc hoạt động không như mong đợi. Vui lòng cập nhật máy chủ để có trải nghiệm tốt nhất.",
|
||||
"setting": "Cài đặt",
|
||||
"share": "Chia sẻ",
|
||||
"stop": "Dừng",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "Nâng cấp",
|
||||
"upgradeVersion.hasNew": "Có bản cập nhật mới",
|
||||
"upgradeVersion.newVersion": "Có bản cập nhật mới: {{version}}",
|
||||
"upgradeVersion.serverVersion": "Máy chủ: {{version}}",
|
||||
"userPanel.anonymousNickName": "Người dùng ẩn danh",
|
||||
"userPanel.billing": "Quản lý thanh toán",
|
||||
"userPanel.cloud": "Khởi chạy {{name}}",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "置顶",
|
||||
"pinOff": "取消置顶",
|
||||
"privacy": "隐私政策",
|
||||
"productHunt.actionLabel": "支持我们",
|
||||
"productHunt.description": "在 Product Hunt 上支持我们,您的支持对我们意义重大!",
|
||||
"productHunt.title": "我们登上 Product Hunt 了!",
|
||||
"regenerate": "重新生成",
|
||||
"releaseNotes": "版本详情",
|
||||
"rename": "重命名",
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
"pin": "置頂",
|
||||
"pinOff": "取消置頂",
|
||||
"privacy": "隱私政策",
|
||||
"productHunt.actionLabel": "支持我們",
|
||||
"productHunt.description": "在 Product Hunt 上支持我們。您的支持對我們意義重大!",
|
||||
"productHunt.title": "我們上架 Product Hunt 了!",
|
||||
"regenerate": "重新生成",
|
||||
"releaseNotes": "版本詳細",
|
||||
"rename": "重新命名",
|
||||
@@ -332,6 +335,11 @@
|
||||
"run": "執行",
|
||||
"save": "儲存",
|
||||
"send": "發送",
|
||||
"serverVersionOutdated.desc": "您的用戶端版本(v{{version}})需要較新的伺服器版本。",
|
||||
"serverVersionOutdated.dismiss": "仍要繼續",
|
||||
"serverVersionOutdated.title": "伺服器版本過舊",
|
||||
"serverVersionOutdated.upgrade": "升級指南",
|
||||
"serverVersionOutdated.warning": "某些功能可能無法正常運作或出現異常行為。請更新您的伺服器以獲得最佳體驗。",
|
||||
"setting": "設定",
|
||||
"share": "分享",
|
||||
"stop": "停止",
|
||||
@@ -380,6 +388,7 @@
|
||||
"upgradeVersion.action": "升級",
|
||||
"upgradeVersion.hasNew": "有可用的更新",
|
||||
"upgradeVersion.newVersion": "有可用的更新:{{version}}",
|
||||
"upgradeVersion.serverVersion": "伺服器版本:{{version}}",
|
||||
"userPanel.anonymousNickName": "匿名使用者",
|
||||
"userPanel.billing": "帳單管理",
|
||||
"userPanel.cloud": "體驗 {{name}}",
|
||||
|
||||
@@ -4,23 +4,60 @@ import { BRANDING_EMAIL, SOCIAL_URL } from '@lobechat/business-const';
|
||||
import { ActionIcon, DropdownMenu, Icon, type MenuProps } from '@lobehub/ui';
|
||||
import { Flexbox } from '@lobehub/ui';
|
||||
import { DiscordIcon } from '@lobehub/ui/icons';
|
||||
import { Book, CircleHelp, Feather, FileClockIcon, FlaskConical, Github, Mail } from 'lucide-react';
|
||||
import { memo, useMemo, useState } from 'react';
|
||||
import {
|
||||
Book,
|
||||
CircleHelp,
|
||||
Feather,
|
||||
FileClockIcon,
|
||||
FlaskConical,
|
||||
Github,
|
||||
Mail,
|
||||
Rocket,
|
||||
} from 'lucide-react';
|
||||
import { memo, useEffect, useMemo, useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import ChangelogModal from '@/components/ChangelogModal';
|
||||
import HighlightNotification from '@/components/HighlightNotification';
|
||||
import LabsModal from '@/components/LabsModal';
|
||||
import { DOCUMENTS_REFER_URL, GITHUB, mailTo } from '@/const/url';
|
||||
import ThemeButton from '@/features/User/UserPanel/ThemeButton';
|
||||
import { useFeedbackModal } from '@/hooks/useFeedbackModal';
|
||||
import { useGlobalStore } from '@/store/global';
|
||||
import { systemStatusSelectors } from '@/store/global/selectors/systemStatus';
|
||||
import { featureFlagsSelectors, useServerConfigStore } from '@/store/serverConfig';
|
||||
|
||||
const PRODUCT_HUNT_NOTIFICATION = {
|
||||
actionHref: 'https://www.producthunt.com/products/lobehub?launch=lobehub',
|
||||
endTime: new Date('2026-02-01T00:00:00Z'),
|
||||
image: 'https://hub-apac-1.lobeobjects.space/og/lobehub-ph.png',
|
||||
slug: 'product-hunt-2026',
|
||||
startTime: new Date('2026-01-27T08:00:00Z'),
|
||||
};
|
||||
|
||||
const Footer = memo(() => {
|
||||
const { t } = useTranslation('common');
|
||||
const { hideGitHub } = useServerConfigStore(featureFlagsSelectors);
|
||||
const [isLabsModalOpen, setIsLabsModalOpen] = useState(false);
|
||||
const [shouldLoadChangelog, setShouldLoadChangelog] = useState(false);
|
||||
const [isChangelogModalOpen, setIsChangelogModalOpen] = useState(false);
|
||||
const [isProductHuntCardOpen, setIsProductHuntCardOpen] = useState(false);
|
||||
|
||||
const [isNotificationRead, updateSystemStatus] = useGlobalStore((s) => [
|
||||
systemStatusSelectors.isNotificationRead(PRODUCT_HUNT_NOTIFICATION.slug)(s),
|
||||
s.updateSystemStatus,
|
||||
]);
|
||||
|
||||
const isWithinTimeWindow = useMemo(() => {
|
||||
const now = new Date();
|
||||
return now >= PRODUCT_HUNT_NOTIFICATION.startTime && now <= PRODUCT_HUNT_NOTIFICATION.endTime;
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (isWithinTimeWindow && !isNotificationRead) {
|
||||
setIsProductHuntCardOpen(true);
|
||||
}
|
||||
}, [isWithinTimeWindow, isNotificationRead]);
|
||||
|
||||
const { open: openFeedbackModal } = useFeedbackModal();
|
||||
|
||||
@@ -45,6 +82,20 @@ const Footer = memo(() => {
|
||||
openFeedbackModal();
|
||||
};
|
||||
|
||||
const handleOpenProductHuntCard = () => {
|
||||
setIsProductHuntCardOpen(true);
|
||||
};
|
||||
|
||||
const handleCloseProductHuntCard = () => {
|
||||
setIsProductHuntCardOpen(false);
|
||||
if (!isNotificationRead) {
|
||||
const currentSlugs = useGlobalStore.getState().status.readNotificationSlugs || [];
|
||||
updateSystemStatus({
|
||||
readNotificationSlugs: [...currentSlugs, PRODUCT_HUNT_NOTIFICATION.slug],
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const helpMenuItems: MenuProps['items'] = useMemo(
|
||||
() => [
|
||||
{
|
||||
@@ -95,8 +146,18 @@ const Footer = memo(() => {
|
||||
label: t('labs'),
|
||||
onClick: handleOpenLabsModal,
|
||||
},
|
||||
...(isWithinTimeWindow
|
||||
? [
|
||||
{
|
||||
icon: <Icon icon={Rocket} />,
|
||||
key: 'productHunt',
|
||||
label: 'Product Hunt',
|
||||
onClick: handleOpenProductHuntCard,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
],
|
||||
[t],
|
||||
[t, isWithinTimeWindow],
|
||||
);
|
||||
|
||||
return (
|
||||
@@ -120,6 +181,15 @@ const Footer = memo(() => {
|
||||
open={isChangelogModalOpen}
|
||||
shouldLoad={shouldLoadChangelog}
|
||||
/>
|
||||
<HighlightNotification
|
||||
actionHref={PRODUCT_HUNT_NOTIFICATION.actionHref}
|
||||
actionLabel={t('productHunt.actionLabel')}
|
||||
description={t('productHunt.description')}
|
||||
image={PRODUCT_HUNT_NOTIFICATION.image}
|
||||
onClose={handleCloseProductHuntCard}
|
||||
open={isProductHuntCardOpen}
|
||||
title={t('productHunt.title')}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
});
|
||||
|
||||
98
src/components/HighlightNotification/index.tsx
Normal file
98
src/components/HighlightNotification/index.tsx
Normal file
@@ -0,0 +1,98 @@
|
||||
'use client';
|
||||
|
||||
import { HeartFilled } from '@ant-design/icons';
|
||||
import { ActionIcon, Button, Flexbox } from '@lobehub/ui';
|
||||
import { createStaticStyles, cssVar } from 'antd-style';
|
||||
import { X } from 'lucide-react';
|
||||
import Link from 'next/link';
|
||||
import { type ReactNode, memo } from 'react';
|
||||
|
||||
export interface HighlightNotificationProps {
|
||||
actionHref?: string;
|
||||
actionLabel?: ReactNode;
|
||||
description?: ReactNode;
|
||||
image?: string;
|
||||
onClose?: () => void;
|
||||
open?: boolean;
|
||||
title?: ReactNode;
|
||||
}
|
||||
|
||||
const styles = createStaticStyles(({ css }) => ({
|
||||
action: css`
|
||||
margin-top: 8px;
|
||||
display: block;
|
||||
width: 100%;
|
||||
`,
|
||||
card: css`
|
||||
position: fixed;
|
||||
bottom: 56px;
|
||||
left: 8px;
|
||||
z-index: 1000;
|
||||
|
||||
width: 300px;
|
||||
max-width: calc(100vw - 32px);
|
||||
padding: 0px;
|
||||
|
||||
background: ${cssVar.colorBgContainer};
|
||||
border: 1px solid ${cssVar.colorBorder};
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.12);
|
||||
|
||||
overflow: hidden;
|
||||
`,
|
||||
closeButton: css`
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: 8px;
|
||||
`,
|
||||
description: css`
|
||||
font-size: 14px;
|
||||
color: ${cssVar.colorTextSecondary};
|
||||
`,
|
||||
image: css`
|
||||
width: 100%;
|
||||
height: auto;
|
||||
|
||||
border-bottom: 1px solid ${cssVar.colorBorderSecondary};
|
||||
`,
|
||||
title: css`
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
color: ${cssVar.colorText};
|
||||
`,
|
||||
}));
|
||||
|
||||
const HighlightNotification = memo<HighlightNotificationProps>(
|
||||
({ open, onClose, image, title, description, actionLabel, actionHref }) => {
|
||||
if (!open) return null;
|
||||
|
||||
return (
|
||||
<Flexbox className={styles.card}>
|
||||
<ActionIcon className={styles.closeButton} icon={X} onClick={onClose} size={14} />
|
||||
<Flexbox gap={0}>
|
||||
{image && <img alt="" className={styles.image} src={image} />}
|
||||
<Flexbox gap={4} padding={12}>
|
||||
{title && <div className={styles.title}>{title}</div>}
|
||||
{description && <div className={styles.description}>{description}</div>}
|
||||
{actionLabel && (
|
||||
<Link
|
||||
className={styles.action}
|
||||
href={actionHref || '/'}
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
>
|
||||
<Button block icon={HeartFilled} size="small" type="primary">
|
||||
{actionLabel}
|
||||
</Button>
|
||||
</Link>
|
||||
)}
|
||||
</Flexbox>
|
||||
</Flexbox>
|
||||
</Flexbox>
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
HighlightNotification.displayName = 'HighlightNotification';
|
||||
|
||||
export default HighlightNotification;
|
||||
@@ -342,6 +342,9 @@ export default {
|
||||
'pin': 'Pin',
|
||||
'pinOff': 'Unpin',
|
||||
'privacy': 'Privacy Policy',
|
||||
'productHunt.actionLabel': 'Support us',
|
||||
'productHunt.description': 'Support us on Product Hunt. Your support means a lot to us!',
|
||||
'productHunt.title': "We're on Product Hunt!",
|
||||
'regenerate': 'Regenerate',
|
||||
'releaseNotes': 'Version Details',
|
||||
'rename': 'Rename',
|
||||
|
||||
@@ -120,6 +120,7 @@ export interface SystemStatus {
|
||||
lastSelectedImageProvider?: string;
|
||||
latestChangelogId?: string;
|
||||
leftPanelWidth: number;
|
||||
readNotificationSlugs?: string[];
|
||||
mobileShowPortal?: boolean;
|
||||
mobileShowTopic?: boolean;
|
||||
/**
|
||||
@@ -222,6 +223,7 @@ export const INITIAL_STATUS = {
|
||||
pageAgentPanelWidth: 360,
|
||||
pagePageSize: 20,
|
||||
portalWidth: 400,
|
||||
readNotificationSlugs: [],
|
||||
resourceManagerColumnWidths: {
|
||||
date: 160,
|
||||
name: 574,
|
||||
|
||||
@@ -57,6 +57,13 @@ const getAgentSystemRoleExpanded =
|
||||
const disabledModelProvidersSortType = (s: GlobalState) =>
|
||||
s.status.disabledModelProvidersSortType || 'default';
|
||||
const disabledModelsSortType = (s: GlobalState) => s.status.disabledModelsSortType || 'default';
|
||||
|
||||
const isNotificationRead =
|
||||
(slug: string) =>
|
||||
(s: GlobalState): boolean => {
|
||||
const slugs = s.status.readNotificationSlugs || [];
|
||||
return slugs.includes(slug);
|
||||
};
|
||||
const tokenDisplayFormatShort = (s: GlobalState) =>
|
||||
s.status.tokenDisplayFormatShort !== undefined ? s.status.tokenDisplayFormatShort : true;
|
||||
|
||||
@@ -74,6 +81,7 @@ export const systemStatusSelectors = {
|
||||
imagePanelWidth,
|
||||
imageTopicPanelWidth,
|
||||
inZenMode,
|
||||
isNotificationRead,
|
||||
isShowCredit,
|
||||
isStatusInit,
|
||||
language,
|
||||
|
||||
Reference in New Issue
Block a user