diff --git a/locales/ar/common.json b/locales/ar/common.json index 9061736f7270..edb4119c0724 100644 --- a/locales/ar/common.json +++ b/locales/ar/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) جارٍ تحميل صفحة الدردشة...", - "initAuth": "(2/4) جاري تهيئة خدمة المصادقة...", - "initUser": "(3/4) جاري تهيئة حالة المستخدم...", - "initializing": "(1/4) جارٍ تشغيل التطبيق..." + "appInitializing": "جارٍ تشغيل التطبيق...", + "finished": "تم الانتهاء من تهيئة قاعدة البيانات", + "goToChat": "جارٍ تحميل صفحة الدردشة...", + "initAuth": "جارٍ تهيئة خدمة المصادقة...", + "initUser": "جارٍ تهيئة حالة المستخدم...", + "initializing": "جارٍ تهيئة قاعدة بيانات PGlite...", + "loadingDependencies": "جارٍ تهيئة الاعتمادات...", + "loadingWasm": "جارٍ تحميل وحدة WASM...", + "migrating": "جارٍ تنفيذ ترحيل الجداول...", + "ready": "قاعدة البيانات جاهزة" }, "autoGenerate": "توليد تلقائي", "autoGenerateTooltip": "إكمال تلقائي بناءً على الكلمات المقترحة لوصف المساعد", @@ -38,14 +44,28 @@ "error": "حدث خطأ، يرجى إعادة المحاولة", "idle": "في انتظار التهيئة...", "initializing": "جارٍ التهيئة...", - "loadingDependencies": "جارٍ تحميل التبعيات ({{progress}}%)...", - "loadingWasmModule": "جارٍ تحميل وحدة WASM ({{progress}}%)...", - "migrating": "جارٍ ترحيل البيانات...", + "loadingDependencies": "جارٍ تحميل الاعتماديات...", + "loadingWasmModule": "جارٍ تحميل وحدة WASM...", + "migrating": "جارٍ تنفيذ ترحيل البيانات...", "ready": "قاعدة البيانات جاهزة" }, "modal": { "desc": "قم بتمكين قاعدة بيانات عميل PGlite، لتخزين بيانات الدردشة بشكل دائم في متصفحك، واستخدام ميزات متقدمة مثل مكتبة المعرفة", "enable": "تمكين الآن", + "features": { + "knowledgeBase": { + "desc": "قم بتخزين قاعدة معرفتك الشخصية وابدأ محادثة مع مساعدك بسهولة (قريبًا)", + "title": "دعم محادثة قاعدة المعرفة، افتح دماغك الثاني" + }, + "localFirst": { + "desc": "تُخزن بيانات الدردشة بالكامل في المتصفح، بياناتك دائمًا تحت سيطرتك.", + "title": "الأولوية محلية، الخصوصية أولاً" + }, + "pglite": { + "desc": "مبني على PGlite، يدعم بشكل أصلي ميزات AI Native المتقدمة (استرجاع المتجهات)", + "title": "بنية تخزين عميل من الجيل الجديد" + } + }, "init": { "desc": "جارٍ تهيئة قاعدة البيانات، قد يستغرق الأمر من 5 إلى 30 ثانية حسب اختلاف الشبكة", "title": "جارٍ تهيئة قاعدة بيانات PGlite" diff --git a/locales/bg-BG/common.json b/locales/bg-BG/common.json index 361d7ceb3ae1..ed6c580873ac 100644 --- a/locales/bg-BG/common.json +++ b/locales/bg-BG/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) Зареждане на страницата за разговори...", - "initAuth": "(2/4) Инициализиране на услугата за удостоверяване...", - "initUser": "(3/4) Инициализиране на състоянието на потребителя...", - "initializing": "(1/4) Стартиране на приложението..." + "appInitializing": "Приложението се стартира...", + "finished": "Инициализацията на базата данни е завършена", + "goToChat": "Зареждане на страницата за разговори...", + "initAuth": "Инициализиране на услугата за удостоверяване...", + "initUser": "Инициализиране на състоянието на потребителя...", + "initializing": "Инициализиране на PGlite базата данни...", + "loadingDependencies": "Инициализиране на зависимостите...", + "loadingWasm": "Зареждане на WASM модула...", + "migrating": "Извършване на миграция на таблиците...", + "ready": "Базата данни е готова" }, "autoGenerate": "Автоматично генериране", "autoGenerateTooltip": "Автоматично генериране на описание на агент въз основа на подкани", @@ -38,14 +44,28 @@ "error": "Възникна грешка, моля опитайте отново", "idle": "Изчакване на инициализация...", "initializing": "Инициализиране...", - "loadingDependencies": "Зареждане на зависимости ({{progress}}%)...", - "loadingWasmModule": "Зареждане на WASM модула ({{progress}}%)...", - "migrating": "Мигриране на данни...", + "loadingDependencies": "Зареждане на зависимости...", + "loadingWasmModule": "Зареждане на WASM модула...", + "migrating": "Извършване на миграция на данни...", "ready": "Базата данни е готова" }, "modal": { "desc": "Активирайте PGlite клиентската база данни, за да съхранявате данни за чата в браузъра си и да използвате разширени функции като база знания.", "enable": "Активирайте сега", + "features": { + "knowledgeBase": { + "desc": "Създайте своя лична база знания и лесно започнете разговори с вашия асистент (скоро налично)", + "title": "Поддръжка на разговори в базата знания, активирайте втория си мозък" + }, + "localFirst": { + "desc": "Данните от чата се съхраняват изцяло в браузъра, вашите данни винаги са под ваш контрол.", + "title": "Локален приоритет, конфиденциалността е на първо място" + }, + "pglite": { + "desc": "Изграден на базата на PGlite, нативна поддръжка на AI Native висши функции (векторно търсене)", + "title": "Новото поколение архитектура за съхранение на клиенти" + } + }, "init": { "desc": "Инициализиране на базата данни, времето за което може да варира от 5 до 30 секунди в зависимост от мрежата.", "title": "Инициализиране на PGlite базата данни" diff --git a/locales/de-DE/common.json b/locales/de-DE/common.json index b0de9f1ccdd3..d736e55f1af4 100644 --- a/locales/de-DE/common.json +++ b/locales/de-DE/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) Lade die Chat-Seite...", - "initAuth": "(2/4) Authentifizierungsdienst wird initialisiert...", - "initUser": "(3/4) Benutzerstatus wird initialisiert...", - "initializing": "(1/4) Anwendung wird gestartet..." + "appInitializing": "Anwendung wird gestartet...", + "finished": "Datenbankinitialisierung abgeschlossen", + "goToChat": "Lade die Chat-Seite...", + "initAuth": "Initialisiere den Authentifizierungsdienst...", + "initUser": "Initialisiere den Benutzerstatus...", + "initializing": "Initialisiere die PGlite-Datenbank...", + "loadingDependencies": "Abhängigkeiten werden initialisiert...", + "loadingWasm": "WASM-Module werden geladen...", + "migrating": "Datenbankmigration wird durchgeführt...", + "ready": "Datenbank ist bereit" }, "autoGenerate": "Automatisch generieren", "autoGenerateTooltip": "Assistentenbeschreibung automatisch auf Basis von Vorschlägen vervollständigen", @@ -38,14 +44,28 @@ "error": "Ein Fehler ist aufgetreten, bitte versuchen Sie es erneut", "idle": "Warte auf die Initialisierung...", "initializing": "Wird initialisiert...", - "loadingDependencies": "Lade Abhängigkeiten ({ {progress}}%)...", - "loadingWasmModule": "Lade WASM-Modul ({ {progress}}%)...", - "migrating": "Daten werden migriert...", + "loadingDependencies": "Abhängigkeiten werden geladen...", + "loadingWasmModule": "WASM-Modul wird geladen...", + "migrating": "Datenbankmigration wird durchgeführt...", "ready": "Datenbank ist bereit" }, "modal": { "desc": "Aktivieren Sie die PGlite-Clientdatenbank, um Chatdaten in Ihrem Browser dauerhaft zu speichern und erweiterte Funktionen wie Wissensdatenbanken zu nutzen.", "enable": "Jetzt aktivieren", + "features": { + "knowledgeBase": { + "desc": "Bauen Sie Ihre persönliche Wissensdatenbank auf und führen Sie mühelos Gespräche mit Ihrem Assistenten (demnächst verfügbar)", + "title": "Unterstützung für Wissensdatenbankgespräche, aktivieren Sie Ihr zweites Gehirn" + }, + "localFirst": { + "desc": "Chat-Daten werden vollständig im Browser gespeichert, Ihre Daten sind immer in Ihrer Kontrolle.", + "title": "Lokale Priorität, Datenschutz an erster Stelle" + }, + "pglite": { + "desc": "Basierend auf PGlite, unterstützt nativ AI Native fortgeschrittene Funktionen (Vektorsuche)", + "title": "Neue Generation der Client-Speicherarchitektur" + } + }, "init": { "desc": "Die Datenbank wird initialisiert, je nach Netzwerkbedingungen kann dies 5 bis 30 Sekunden dauern.", "title": "Initialisiere PGlite-Datenbank" diff --git a/locales/en-US/common.json b/locales/en-US/common.json index d7520f4c0d48..b00e99e3dfe6 100644 --- a/locales/en-US/common.json +++ b/locales/en-US/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) Loading chat page...", - "initAuth": "(2/4) Initializing authentication service...", - "initUser": "(3/4) Initializing user status...", - "initializing": "(1/4) Starting up application..." + "appInitializing": "Application is starting...", + "finished": "Database initialization completed", + "goToChat": "Loading chat page...", + "initAuth": "Initializing authentication service...", + "initUser": "Initializing user status...", + "initializing": "Initializing PGlite database...", + "loadingDependencies": "Initializing dependencies...", + "loadingWasm": "Loading WASM module...", + "migrating": "Performing database migration...", + "ready": "Database is ready" }, "autoGenerate": "Auto Generate", "autoGenerateTooltip": "Auto-generate assistant description based on prompts", @@ -38,14 +44,28 @@ "error": "An error occurred, please try again", "idle": "Waiting for initialization...", "initializing": "Initializing...", - "loadingDependencies": "Loading dependencies ({{progress}}%)...", - "loadingWasmModule": "Loading WASM module ({{progress}}%)...", - "migrating": "Migrating data...", + "loadingDependencies": "Loading dependencies...", + "loadingWasmModule": "Loading WASM module...", + "migrating": "Performing database migration...", "ready": "Database is ready" }, "modal": { "desc": "Enable the PGlite client database to persistently store chat data in your browser and use advanced features like knowledge base.", "enable": "Enable Now", + "features": { + "knowledgeBase": { + "desc": "Build your personal knowledge base and easily start conversations with your assistant (coming soon)", + "title": "Support for knowledge base conversations, unlock your second brain" + }, + "localFirst": { + "desc": "Chat data is stored entirely in the browser, keeping your data always under your control.", + "title": "Local first, privacy first" + }, + "pglite": { + "desc": "Built on PGlite, natively supports AI Native advanced features (vector retrieval)", + "title": "Next-generation client storage architecture" + } + }, "init": { "desc": "Initializing the database, which may take 5 to 30 seconds depending on network conditions.", "title": "Initializing PGlite Database" diff --git a/locales/es-ES/common.json b/locales/es-ES/common.json index db99cda4ff43..9e42ba25a912 100644 --- a/locales/es-ES/common.json +++ b/locales/es-ES/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) Cargando la página de chat...", - "initAuth": "(2/4) Inicializando el servicio de autenticación...", - "initUser": "(3/4) Inicializando el estado del usuario...", - "initializing": "(1/4) Iniciando la aplicación..." + "appInitializing": "Iniciando la aplicación...", + "finished": "Inicialización de la base de datos completada", + "goToChat": "Cargando la página de chat...", + "initAuth": "Inicializando el servicio de autenticación...", + "initUser": "Inicializando el estado del usuario...", + "initializing": "Inicializando la base de datos PGlite...", + "loadingDependencies": "Inicializando dependencias...", + "loadingWasm": "Cargando módulo WASM...", + "migrating": "Ejecutando migración de tablas de datos...", + "ready": "Base de datos lista" }, "autoGenerate": "Generación automática", "autoGenerateTooltip": "Completar automáticamente la descripción del asistente basándose en las sugerencias", @@ -38,14 +44,28 @@ "error": "Ha ocurrido un error, por favor reintente", "idle": "Esperando la inicialización...", "initializing": "Inicializando...", - "loadingDependencies": "Cargando dependencias ({{progress}}%)...", - "loadingWasmModule": "Cargando módulo WASM ({{progress}}%)...", - "migrating": "Migrando datos...", + "loadingDependencies": "Cargando dependencias...", + "loadingWasmModule": "Cargando módulo WASM...", + "migrating": "Ejecutando migración de tablas de datos...", "ready": "La base de datos está lista" }, "modal": { "desc": "Habilite la base de datos del cliente PGlite para almacenar de forma persistente los datos del chat en su navegador y utilizar características avanzadas como la base de conocimientos.", "enable": "Habilitar ahora", + "features": { + "knowledgeBase": { + "desc": "Consolida tu base de conocimientos personal y comienza conversaciones sobre ella con tu asistente fácilmente (próximamente)", + "title": "Soporte para conversaciones de base de conocimientos, activa tu segundo cerebro" + }, + "localFirst": { + "desc": "Los datos de chat se almacenan completamente en el navegador, tus datos siempre están bajo tu control.", + "title": "Prioridad local, privacidad ante todo" + }, + "pglite": { + "desc": "Construido sobre PGlite, soporte nativo para características avanzadas de AI Native (búsqueda vectorial)", + "title": "Nueva arquitectura de almacenamiento de cliente de próxima generación" + } + }, "init": { "desc": "Inicializando la base de datos, el tiempo puede variar de 5 a 30 segundos dependiendo de la red.", "title": "Inicializando la base de datos PGlite" diff --git a/locales/fa-IR/common.json b/locales/fa-IR/common.json index 4eff9772ccf9..0ce2bbe9a49a 100644 --- a/locales/fa-IR/common.json +++ b/locales/fa-IR/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) در حال بارگذاری صفحه گفتگو...", - "initAuth": "(2/4) در حال راه‌اندازی سرویس احراز هویت...", - "initUser": "(3/4) در حال راه‌اندازی وضعیت کاربر...", - "initializing": "(1/4) در حال راه‌اندازی برنامه..." + "appInitializing": "در حال راه‌اندازی برنامه...", + "finished": "راه‌اندازی پایگاه داده کامل شد", + "goToChat": "در حال بارگذاری صفحه گفتگو...", + "initAuth": "در حال راه‌اندازی سرویس احراز هویت...", + "initUser": "در حال راه‌اندازی وضعیت کاربر...", + "initializing": "در حال راه‌اندازی پایگاه داده PGlite...", + "loadingDependencies": "در حال بارگذاری وابستگی‌ها...", + "loadingWasm": "در حال بارگذاری ماژول WASM...", + "migrating": "در حال اجرای مهاجرت جداول داده...", + "ready": "پایگاه داده آماده است" }, "autoGenerate": "تکمیل خودکار", "autoGenerateTooltip": "تکمیل خودکار توضیحات دستیار بر اساس کلمات راهنما", @@ -38,14 +44,28 @@ "error": "خطایی رخ داده است، لطفاً دوباره تلاش کنید", "idle": "در حال انتظار برای راه‌اندازی...", "initializing": "در حال راه‌اندازی...", - "loadingDependencies": "در حال بارگذاری وابستگی‌ها ({{progress}}%)...", - "loadingWasmModule": "در حال بارگذاری ماژول WASM ({{progress}}%)...", - "migrating": "در حال انتقال داده‌ها...", + "loadingDependencies": "در حال بارگذاری وابستگی‌ها...", + "loadingWasmModule": "در حال بارگذاری ماژول WASM...", + "migrating": "در حال انجام مهاجرت جدول داده‌ها...", "ready": "پایگاه داده آماده است" }, "modal": { "desc": "فعال‌سازی پایگاه داده کلاینت PGlite، برای ذخیره‌سازی دائمی داده‌های گفتگو در مرورگر شما و استفاده از ویژگی‌های پیشرفته مانند دانش‌نامه", "enable": "همین حالا فعال‌سازی کنید", + "features": { + "knowledgeBase": { + "desc": "دانشنامه شخصی خود را بسازید و به راحتی با دستیار خود گفتگو کنید (به زودی منتشر می‌شود)", + "title": "پشتیبانی از گفتگو در دانشنامه، آغاز مغز دوم" + }, + "localFirst": { + "desc": "تمام داده‌های چت در مرورگر ذخیره می‌شوند و داده‌های شما همیشه در کنترل شماست.", + "title": "اولویت محلی، حریم خصوصی در اولویت" + }, + "pglite": { + "desc": "بر اساس PGlite ساخته شده، پشتیبانی بومی از ویژگی‌های پیشرفته AI Native (جستجوی برداری)", + "title": "معماری ذخیره‌سازی کلاینت نسل جدید" + } + }, "init": { "desc": "در حال راه‌اندازی پایگاه داده، بسته به تفاوت‌های شبکه ممکن است ۵ تا ۳۰ ثانیه طول بکشد", "title": "در حال راه‌اندازی پایگاه داده PGlite" diff --git a/locales/fr-FR/common.json b/locales/fr-FR/common.json index f44bbadbb90f..a226eafb0cb0 100644 --- a/locales/fr-FR/common.json +++ b/locales/fr-FR/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) Chargement de la page de conversation...", - "initAuth": "(2/4) Initialisation du service d'authentification...", - "initUser": "(3/4) Initialisation de l'état de l'utilisateur...", - "initializing": "(1/4) L'application se lance..." + "appInitializing": "L'application se charge...", + "finished": "Initialisation de la base de données terminée", + "goToChat": "Chargement de la page de chat...", + "initAuth": "Initialisation du service d'authentification...", + "initUser": "Initialisation de l'état de l'utilisateur...", + "initializing": "Initialisation de la base de données PGlite...", + "loadingDependencies": "Chargement des dépendances...", + "loadingWasm": "Chargement du module WASM...", + "migrating": "Exécution de la migration des tables de données...", + "ready": "La base de données est prête" }, "autoGenerate": "Générer automatiquement", "autoGenerateTooltip": "Générer automatiquement la description de l'agent basée sur les suggestions", @@ -38,14 +44,28 @@ "error": "Une erreur s'est produite, veuillez réessayer", "idle": "En attente d'initialisation...", "initializing": "Initialisation en cours...", - "loadingDependencies": "Chargement des dépendances ({{progress}}%)...", - "loadingWasmModule": "Chargement du module WASM ({{progress}}%)...", - "migrating": "Migration des données en cours...", + "loadingDependencies": "Chargement des dépendances...", + "loadingWasmModule": "Chargement du module WASM...", + "migrating": "Exécution de la migration des tables de données...", "ready": "Base de données prête" }, "modal": { "desc": "Activez la base de données client PGlite pour stocker de manière persistante les données de discussion dans votre navigateur et utiliser des fonctionnalités avancées telles que la base de connaissances.", "enable": "Activer maintenant", + "features": { + "knowledgeBase": { + "desc": "Consolidez votre base de connaissances personnelle et engagez facilement des conversations avec votre assistant (bientôt disponible)", + "title": "Support des conversations de base de connaissances, activez votre deuxième cerveau" + }, + "localFirst": { + "desc": "Les données de chat sont entièrement stockées dans le navigateur, vos données sont toujours sous votre contrôle.", + "title": "Priorité locale, confidentialité avant tout" + }, + "pglite": { + "desc": "Construit sur PGlite, prend en charge nativement les fonctionnalités avancées AI Native (recherche vectorielle)", + "title": "Nouvelle architecture de stockage client de nouvelle génération" + } + }, "init": { "desc": "Initialisation de la base de données en cours, cela peut prendre de 5 à 30 secondes selon la connexion réseau.", "title": "Initialisation de la base de données PGlite en cours" diff --git a/locales/it-IT/common.json b/locales/it-IT/common.json index 1233cd6a31a9..a1add16da2f6 100644 --- a/locales/it-IT/common.json +++ b/locales/it-IT/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) Caricamento della pagina della chat in corso...", - "initAuth": "(2/4) Inizializzazione del servizio di autenticazione...", - "initUser": "(3/4) Inizializzazione dello stato utente...", - "initializing": "(1/4) Avvio dell'app in corso..." + "appInitializing": "Avvio dell'app in corso...", + "finished": "Inizializzazione del database completata", + "goToChat": "Caricamento della pagina di chat in corso...", + "initAuth": "Inizializzazione del servizio di autenticazione...", + "initUser": "Inizializzazione dello stato utente...", + "initializing": "Inizializzazione del database PGlite...", + "loadingDependencies": "Inizializzazione delle dipendenze...", + "loadingWasm": "Caricamento del modulo WASM...", + "migrating": "Esecuzione della migrazione delle tabelle dati...", + "ready": "Database pronto" }, "autoGenerate": "Generazione automatica", "autoGenerateTooltip": "Completamento automatico basato su suggerimenti", @@ -38,14 +44,28 @@ "error": "Si è verificato un errore, si prega di riprovare", "idle": "In attesa di inizializzazione...", "initializing": "In fase di inizializzazione...", - "loadingDependencies": "Caricamento delle dipendenze ({ {progress}}%)...", - "loadingWasmModule": "Caricamento del modulo WASM ({ {progress}}%)...", - "migrating": "In fase di migrazione dei dati...", + "loadingDependencies": "Caricamento delle dipendenze in corso...", + "loadingWasmModule": "Caricamento del modulo WASM in corso...", + "migrating": "Esecuzione della migrazione della tabella dati...", "ready": "Database pronto" }, "modal": { "desc": "Abilita il database client PGlite per memorizzare in modo persistente i dati della chat nel tuo browser e utilizzare funzionalità avanzate come la knowledge base", "enable": "Abilita ora", + "features": { + "knowledgeBase": { + "desc": "Conserva il tuo archivio personale di conoscenze e avvia facilmente conversazioni con il tuo assistente (in arrivo)", + "title": "Supporto per conversazioni sull'archivio di conoscenze, attiva il tuo secondo cervello" + }, + "localFirst": { + "desc": "I dati delle chat sono completamente memorizzati nel browser, i tuoi dati sono sempre sotto il tuo controllo.", + "title": "Locale prima, privacy al primo posto" + }, + "pglite": { + "desc": "Costruito su PGlite, supporta nativamente le funzionalità avanzate AI Native (ricerca vettoriale)", + "title": "Nuova generazione di architettura di archiviazione client" + } + }, "init": { "desc": "In fase di inizializzazione del database, il tempo necessario può variare da 5 a 30 secondi a seconda della rete", "title": "Inizializzazione del database PGlite in corso" diff --git a/locales/ja-JP/common.json b/locales/ja-JP/common.json index 5b82d11414c7..ffc1090eaf5e 100644 --- a/locales/ja-JP/common.json +++ b/locales/ja-JP/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) チャットページを読み込んでいます...", - "initAuth": "(2/4) 認証サービスの初期化...", - "initUser": "(3/4) ユーザー状態の初期化...", - "initializing": "(1/4) アプリを起動しています..." + "appInitializing": "アプリケーションを起動しています...", + "finished": "データベースの初期化が完了しました", + "goToChat": "チャットページを読み込んでいます...", + "initAuth": "認証サービスを初期化しています...", + "initUser": "ユーザー状態を初期化しています...", + "initializing": "PGliteデータベースを初期化しています...", + "loadingDependencies": "依存関係を初期化しています...", + "loadingWasm": "WASM モジュールを読み込んでいます...", + "migrating": "データテーブルの移行を実行しています...", + "ready": "データベースは準備完了です" }, "autoGenerate": "自動生成", "autoGenerateTooltip": "ヒントに基づいてエージェントの説明を自動生成します", @@ -38,14 +44,28 @@ "error": "エラーが発生しました。再試行してください。", "idle": "初期化を待っています...", "initializing": "初期化中...", - "loadingDependencies": "依存関係を読み込んでいます({{progress}}%)...", - "loadingWasmModule": "WASM モジュールを読み込んでいます({{progress}}%)...", - "migrating": "データを移行中...", + "loadingDependencies": "依存関係を読み込んでいます...", + "loadingWasmModule": "WASM モジュールを読み込んでいます...", + "migrating": "データテーブルの移行を実行しています...", "ready": "データベースは準備完了です" }, "modal": { "desc": "PGlite クライアントデータベースを有効にし、ブラウザにチャットデータを永続的に保存し、ナレッジベースなどの高度な機能を使用します。", "enable": "今すぐ有効にする", + "features": { + "knowledgeBase": { + "desc": "あなたの個人的な知識ベースを蓄積し、アシスタントと簡単に知識ベースの対話を開始できます(近日公開)", + "title": "知識ベースの対話をサポートし、第二の脳を開放する" + }, + "localFirst": { + "desc": "チャットデータは完全にブラウザに保存され、あなたのデータは常にあなたの手の中にあります。", + "title": "ローカルファースト、プライバシー最優先" + }, + "pglite": { + "desc": "PGliteに基づいて構築され、AIネイティブの高度な機能(ベクトル検索)をネイティブにサポートします。", + "title": "次世代クライアントストレージアーキテクチャ" + } + }, "init": { "desc": "データベースを初期化中です。ネットワークの状況により、5〜30秒かかる場合があります。", "title": "PGlite データベースを初期化中" diff --git a/locales/ko-KR/common.json b/locales/ko-KR/common.json index e36c7aa5dbe5..5f44588679fe 100644 --- a/locales/ko-KR/common.json +++ b/locales/ko-KR/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) 대화 페이지 로딩 중...", - "initAuth": "(2/4) 인증 서비스 초기화 중...", - "initUser": "(3/4) 사용자 상태 초기화 중...", - "initializing": "(1/4) 애플리케이션 시작 중..." + "appInitializing": "앱을 초기화하는 중...", + "finished": "데이터베이스 초기화 완료", + "goToChat": "대화 페이지 로딩 중...", + "initAuth": "인증 서비스 초기화 중...", + "initUser": "사용자 상태 초기화 중...", + "initializing": "PGlite 데이터베이스 초기화 중...", + "loadingDependencies": "의존성 초기화 중...", + "loadingWasm": "WASM 모듈 로드 중...", + "migrating": "데이터베이스 테이블 마이그레이션 중...", + "ready": "데이터베이스 준비 완료" }, "autoGenerate": "자동 생성", "autoGenerateTooltip": "힌트 단어를 기반으로 에이전트 설명을 자동으로 완성합니다", @@ -38,14 +44,28 @@ "error": "오류가 발생했습니다. 재시도해 주세요.", "idle": "초기화 대기 중...", "initializing": "초기화 중...", - "loadingDependencies": "의존성 로딩 중({{progress}}%)...", - "loadingWasmModule": "WASM 모듈 로딩 중({{progress}}%)...", - "migrating": "데이터 마이그레이션 중...", + "loadingDependencies": "의존성 로드 중...", + "loadingWasmModule": "WASM 모듈 로드 중...", + "migrating": "데이터베이스 마이그레이션 실행 중...", "ready": "데이터베이스 준비 완료" }, "modal": { "desc": "PGlite 클라이언트 데이터베이스를 활성화하여 브라우저에서 채팅 데이터를 영구 저장하고 지식베이스 등 고급 기능을 사용하세요.", "enable": "즉시 활성화", + "features": { + "knowledgeBase": { + "desc": "개인 지식 기반을 구축하고, 당신의 도우미와 쉽게 지식 기반 대화를 시작하세요(곧 출시 예정)", + "title": "지식 기반 대화 지원, 두 번째 뇌를 열다" + }, + "localFirst": { + "desc": "채팅 데이터는 완전히 브라우저에 저장되며, 당신의 데이터는 항상 당신의 손에 있습니다.", + "title": "로컬 우선, 프라이버시 최우선" + }, + "pglite": { + "desc": "PGlite를 기반으로 구축되어, AI 네이티브 고급 기능(벡터 검색)을 원활하게 지원합니다.", + "title": "차세대 클라이언트 저장 아키텍처" + } + }, "init": { "desc": "데이터베이스를 초기화 중입니다. 네트워크 차이에 따라 5~30초가 소요될 수 있습니다.", "title": "PGlite 데이터베이스 초기화 중" diff --git a/locales/nl-NL/common.json b/locales/nl-NL/common.json index 2a3bd1d66f62..cf080337c8af 100644 --- a/locales/nl-NL/common.json +++ b/locales/nl-NL/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) De chatpagina wordt geladen...", - "initAuth": "(2/4) Initialisatie van de autorisatiedienst...", - "initUser": "(3/4) Initialisatie van de gebruikersstatus...", - "initializing": "(1/4) De applicatie wordt opgestart..." + "appInitializing": "Applicatie wordt gestart...", + "finished": "Database-initialisatie voltooid", + "goToChat": "De chatpagina wordt geladen...", + "initAuth": "Authenticatiedienst wordt geïnitialiseerd...", + "initUser": "Gebruikersstatus wordt geïnitialiseerd...", + "initializing": "PGlite-database wordt geïnitialiseerd...", + "loadingDependencies": "Afhankelijkheden worden geïnitialiseerd...", + "loadingWasm": "WASM-modules worden geladen...", + "migrating": "Gegevens migreren...", + "ready": "Database is gereed" }, "autoGenerate": "Automatisch genereren", "autoGenerateTooltip": "Automatisch assistentbeschrijving genereren op basis van suggesties", @@ -38,14 +44,28 @@ "error": "Er is een fout opgetreden, probeer het opnieuw", "idle": "Wachten op initialisatie...", "initializing": "Bezig met initialiseren...", - "loadingDependencies": "Afhankelijkheden laden ({{progress}}%)...", - "loadingWasmModule": "WASM-module laden ({{progress}}%)...", - "migrating": "Bezig met gegevens migreren...", + "loadingDependencies": "Afhankelijkheden laden...", + "loadingWasmModule": "WASM-module laden...", + "migrating": "Gegevens migreren...", "ready": "Database is gereed" }, "modal": { "desc": "Schakel de PGlite-clientdatabase in om chatgegevens permanent op te slaan in je browser en gebruik geavanceerde functies zoals de kennisbank.", "enable": "Nu inschakelen", + "features": { + "knowledgeBase": { + "desc": "Bouw je persoonlijke kennisbasis op en start eenvoudig een gesprek met je assistent (binnenkort beschikbaar)", + "title": "Ondersteuning voor kennisbasisgesprekken, activeer je tweede brein" + }, + "localFirst": { + "desc": "Chatgegevens worden volledig in de browser opgeslagen, jouw gegevens zijn altijd in jouw beheer.", + "title": "Lokaal eerst, privacy voorop" + }, + "pglite": { + "desc": "Gebaseerd op PGlite, native ondersteuning voor AI Native geavanceerde functies (vectorzoekopdrachten)", + "title": "Nieuwe generatie clientopslagarchitectuur" + } + }, "init": { "desc": "Bezig met het initialiseren van de database, afhankelijk van de netwerksnelheid kan dit 5 tot 30 seconden duren.", "title": "Bezig met het initialiseren van de PGlite-database" diff --git a/locales/pl-PL/common.json b/locales/pl-PL/common.json index ad08b65bf3cd..4119f6c706cd 100644 --- a/locales/pl-PL/common.json +++ b/locales/pl-PL/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) Ładowanie strony czatu...", - "initAuth": "(2/4) Inicjalizacja usługi autoryzacji...", - "initUser": "(3/4) Inicjalizacja stanu użytkownika...", - "initializing": "(1/4) Uruchamianie aplikacji..." + "appInitializing": "Aplikacja się uruchamia...", + "finished": "Inicjalizacja bazy danych zakończona", + "goToChat": "Ładowanie strony czatu...", + "initAuth": "Inicjalizacja usługi autoryzacji...", + "initUser": "Inicjalizacja stanu użytkownika...", + "initializing": "Inicjalizacja bazy danych PGlite...", + "loadingDependencies": "Inicjalizacja zależności...", + "loadingWasm": "Ładowanie modułu WASM...", + "migrating": "Wykonywanie migracji tabeli danych...", + "ready": "Baza danych jest gotowa" }, "autoGenerate": "Automatyczne generowanie", "autoGenerateTooltip": "Automatyczne uzupełnianie opisu asystenta na podstawie sugestii", @@ -38,14 +44,28 @@ "error": "Wystąpił błąd, proszę spróbować ponownie", "idle": "Oczekiwanie na inicjalizację...", "initializing": "Inicjalizowanie...", - "loadingDependencies": "Ładowanie zależności ({{progress}}%)...", - "loadingWasmModule": "Ładowanie modułu WASM ({{progress}}%)...", - "migrating": "Migracja danych...", + "loadingDependencies": "Ładowanie zależności...", + "loadingWasmModule": "Ładowanie modułu WASM...", + "migrating": "Wykonywanie migracji tabeli danych...", "ready": "Baza danych gotowa" }, "modal": { "desc": "Włącz klienta bazy danych PGlite, aby trwale przechowywać dane czatu w przeglądarce i korzystać z zaawansowanych funkcji, takich jak baza wiedzy", "enable": "Włącz teraz", + "features": { + "knowledgeBase": { + "desc": "Zgromadź swoją osobistą bazę wiedzy i łatwo rozpocznij rozmowę z asystentem (wkrótce dostępne)", + "title": "Wsparcie dla rozmów w bazie wiedzy, uruchomienie drugiego mózgu" + }, + "localFirst": { + "desc": "Dane czatu są całkowicie przechowywane w przeglądarce, twoje dane są zawsze pod twoją kontrolą.", + "title": "Lokalnie najpierw, prywatność przede wszystkim" + }, + "pglite": { + "desc": "Zbudowane na PGlite, natywne wsparcie dla zaawansowanych funkcji AI Native (wyszukiwanie wektorowe)", + "title": "Nowa generacja architektury przechowywania klienta" + } + }, "init": { "desc": "Inicjalizacja bazy danych trwa, w zależności od jakości sieci może zająć od 5 do 30 sekund", "title": "Inicjalizacja bazy danych PGlite" diff --git a/locales/pt-BR/common.json b/locales/pt-BR/common.json index a73e404015ba..f42c22fff4ef 100644 --- a/locales/pt-BR/common.json +++ b/locales/pt-BR/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) Carregando página de conversa...", - "initAuth": "(2/4) Inicializando o serviço de autenticação...", - "initUser": "(3/4) Inicializando o estado do usuário...", - "initializing": "(1/4) Iniciando aplicativo..." + "appInitializing": "Iniciando o aplicativo...", + "finished": "Inicialização do banco de dados concluída", + "goToChat": "Carregando página de conversa...", + "initAuth": "Inicializando serviço de autenticação...", + "initUser": "Inicializando estado do usuário...", + "initializing": "Inicializando banco de dados PGlite...", + "loadingDependencies": "Inicializando dependências...", + "loadingWasm": "Carregando módulo WASM...", + "migrating": "Executando migração de tabelas de dados...", + "ready": "Banco de dados pronto" }, "autoGenerate": "Auto completar", "autoGenerateTooltip": "Auto completar descrição do assistente com base em sugestões", @@ -38,14 +44,28 @@ "error": "Ocorreu um erro, por favor tente novamente", "idle": "Aguardando inicialização...", "initializing": "Inicializando...", - "loadingDependencies": "Carregando dependências({{progress}}%)...", - "loadingWasmModule": "Carregando módulo WASM({{progress}}%)...", - "migrating": "Migrando dados...", + "loadingDependencies": "Carregando dependências...", + "loadingWasmModule": "Carregando módulo WASM...", + "migrating": "Executando migração de tabela de dados...", "ready": "Banco de dados pronto" }, "modal": { "desc": "Ative o banco de dados cliente PGlite para armazenar dados de chat de forma persistente no seu navegador e usar recursos avançados como a base de conhecimento", "enable": "Ativar agora", + "features": { + "knowledgeBase": { + "desc": "Consolide seu repositório de conhecimento pessoal e inicie conversas sobre ele com seu assistente de forma fácil (em breve)", + "title": "Suporte a conversas sobre o repositório de conhecimento, ative seu segundo cérebro" + }, + "localFirst": { + "desc": "Os dados do chat são armazenados completamente no navegador, seus dados estão sempre sob seu controle.", + "title": "Prioridade local, privacidade em primeiro lugar" + }, + "pglite": { + "desc": "Construído com base no PGlite, suporte nativo para recursos avançados de IA (busca vetorial)", + "title": "Nova geração de arquitetura de armazenamento de cliente" + } + }, "init": { "desc": "Inicializando o banco de dados, pode levar de 5 a 30 segundos dependendo da rede", "title": "Inicializando o banco de dados PGlite" diff --git a/locales/ru-RU/common.json b/locales/ru-RU/common.json index 922d55de3bec..8a47c1dcfbd8 100644 --- a/locales/ru-RU/common.json +++ b/locales/ru-RU/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) Загрузка страницы чата...", - "initAuth": "(2/4) Инициализация службы аутентификации...", - "initUser": "(3/4) Инициализация состояния пользователя...", - "initializing": "(1/4) Запуск приложения..." + "appInitializing": "Инициализация приложения...", + "finished": "Инициализация базы данных завершена", + "goToChat": "Загрузка страницы чата...", + "initAuth": "Инициализация службы аутентификации...", + "initUser": "Инициализация состояния пользователя...", + "initializing": "Инициализация базы данных PGlite...", + "loadingDependencies": "Инициализация зависимостей...", + "loadingWasm": "Загрузка модуля WASM...", + "migrating": "Выполнение миграции таблиц данных...", + "ready": "База данных готова" }, "autoGenerate": "Автозаполнение", "autoGenerateTooltip": "Автоматическое дополнение описания агента на основе подсказок", @@ -38,14 +44,28 @@ "error": "Произошла ошибка, пожалуйста, повторите попытку", "idle": "Ожидание инициализации...", "initializing": "Инициализация...", - "loadingDependencies": "Загрузка зависимостей ({{progress}}%)...", - "loadingWasmModule": "Загрузка модуля WASM ({{progress}}%)...", - "migrating": "Миграция данных...", + "loadingDependencies": "Загрузка зависимостей...", + "loadingWasmModule": "Загрузка модуля WASM...", + "migrating": "Выполнение миграции таблицы данных...", "ready": "База данных готова" }, "modal": { "desc": "Включите клиентскую базу данных PGlite для постоянного хранения данных чата в вашем браузере и использования таких расширенных функций, как база знаний.", "enable": "Включить сейчас", + "features": { + "knowledgeBase": { + "desc": "Создайте свою личную базу знаний и легко начните диалог с вашим помощником (скоро будет доступно)", + "title": "Поддержка диалога с базой знаний, откройте второй мозг" + }, + "localFirst": { + "desc": "Данные чата полностью хранятся в браузере, ваши данные всегда под вашим контролем.", + "title": "Локальный приоритет, конфиденциальность превыше всего" + }, + "pglite": { + "desc": "Построено на основе PGlite, нативная поддержка высокоуровневых функций AI Native (векторный поиск)", + "title": "Новая архитектура клиентского хранения" + } + }, "init": { "desc": "Идет инициализация базы данных, в зависимости от сети это может занять от 5 до 30 секунд.", "title": "Инициализация базы данных PGlite" diff --git a/locales/tr-TR/common.json b/locales/tr-TR/common.json index 0e6ab2da8086..c222e19dbe65 100644 --- a/locales/tr-TR/common.json +++ b/locales/tr-TR/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) Sohbet sayfası yükleniyor...", - "initAuth": "(2/4) Kimlik doğrulama hizmeti başlatılıyor...", - "initUser": "(3/4) Kullanıcı durumu başlatılıyor...", - "initializing": "(1/4) Uygulama başlatılıyor..." + "appInitializing": "Uygulama başlatılıyor...", + "finished": "Veritabanı başlatma tamamlandı", + "goToChat": "Sohbet sayfası yükleniyor...", + "initAuth": "Kimlik doğrulama servisi başlatılıyor...", + "initUser": "Kullanıcı durumu başlatılıyor...", + "initializing": "PGlite veritabanı başlatılıyor...", + "loadingDependencies": "Bağımlılıklar yükleniyor...", + "loadingWasm": "WASM modülü yükleniyor...", + "migrating": "Veri tablosu taşınıyor...", + "ready": "Veritabanı hazır" }, "autoGenerate": "Otomatik Oluştur", "autoGenerateTooltip": "Auto-generate agent description based on prompts", @@ -38,14 +44,28 @@ "error": "Hata oluştu, lütfen tekrar deneyin", "idle": "Başlatma bekleniyor...", "initializing": "Başlatılıyor...", - "loadingDependencies": "Bağımlılıklar yükleniyor ({{progress}}%)...", - "loadingWasmModule": "WASM modülü yükleniyor ({{progress}}%)...", - "migrating": "Veri taşınıyor...", + "loadingDependencies": "Bağlantılar yükleniyor...", + "loadingWasmModule": "WASM modülü yükleniyor...", + "migrating": "Veri tablosu taşınıyor...", "ready": "Veritabanı hazır" }, "modal": { "desc": "PGlite istemci veritabanını etkinleştirerek, tarayıcınızda sohbet verilerini kalıcı olarak depolayın ve bilgi bankası gibi gelişmiş özellikleri kullanın.", "enable": "Hemen Etkinleştir", + "features": { + "knowledgeBase": { + "desc": "Kişisel bilgi havuzunuzu oluşturun ve asistanınızla kolayca bilgi havuzu sohbetine başlayın (yakında gelecek)", + "title": "Bilgi havuzu sohbetini destekleyin, ikinci beyninizi açın" + }, + "localFirst": { + "desc": "Sohbet verileri tamamen tarayıcıda saklanır, verileriniz her zaman sizin kontrolünüzde.", + "title": "Yerel öncelik, gizlilik öncelikli" + }, + "pglite": { + "desc": "PGlite tabanlı, AI Native yüksek düzey özellikleri (vektör arama) yerel olarak destekler", + "title": "Yeni nesil istemci depolama mimarisi" + } + }, "init": { "desc": "Veritabanı başlatılıyor, ağ farklılıklarına bağlı olarak 5-30 saniye sürebilir.", "title": "PGlite veritabanı başlatılıyor" diff --git a/locales/vi-VN/common.json b/locales/vi-VN/common.json index 3fc81321578e..94a30fcdb59f 100644 --- a/locales/vi-VN/common.json +++ b/locales/vi-VN/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) Đang tải trang trò chuyện...", - "initAuth": "(2/4) Đang khởi tạo dịch vụ xác thực...", - "initUser": "(3/4) Đang khởi tạo trạng thái người dùng...", - "initializing": "(1/4) Đang khởi động ứng dụng..." + "appInitializing": "Đang khởi động ứng dụng...", + "finished": "Khởi tạo cơ sở dữ liệu hoàn tất", + "goToChat": "Đang tải trang trò chuyện...", + "initAuth": "Đang khởi tạo dịch vụ xác thực...", + "initUser": "Đang khởi tạo trạng thái người dùng...", + "initializing": "Đang khởi tạo cơ sở dữ liệu PGlite...", + "loadingDependencies": "Đang khởi tạo phụ thuộc...", + "loadingWasm": "Đang tải mô-đun WASM...", + "migrating": "Đang thực hiện di chuyển bảng dữ liệu...", + "ready": "Cơ sở dữ liệu đã sẵn sàng" }, "autoGenerate": "Tự động tạo", "autoGenerateTooltip": "Tự động hoàn thành mô tả trợ lý dựa trên từ gợi ý", @@ -38,14 +44,28 @@ "error": "Đã xảy ra lỗi, vui lòng thử lại", "idle": "Đang chờ khởi tạo...", "initializing": "Đang khởi tạo...", - "loadingDependencies": "Đang tải phụ thuộc({{progress}}%)...", - "loadingWasmModule": "Đang tải mô-đun WASM({{progress}}%)...", - "migrating": "Đang di chuyển dữ liệu...", + "loadingDependencies": "Đang tải phụ thuộc...", + "loadingWasmModule": "Đang tải mô-đun WASM...", + "migrating": "Đang thực hiện di chuyển bảng dữ liệu...", "ready": "Cơ sở dữ liệu đã sẵn sàng" }, "modal": { "desc": "Kích hoạt cơ sở dữ liệu khách hàng PGlite, lưu trữ dữ liệu trò chuyện của bạn trong trình duyệt và sử dụng các tính năng nâng cao như kho kiến thức", "enable": "Kích hoạt ngay", + "features": { + "knowledgeBase": { + "desc": "Xây dựng kho kiến thức cá nhân của bạn và dễ dàng bắt đầu cuộc trò chuyện với trợ lý của bạn (sắp ra mắt)", + "title": "Hỗ trợ trò chuyện kho kiến thức, mở ra bộ não thứ hai" + }, + "localFirst": { + "desc": "Dữ liệu trò chuyện hoàn toàn được lưu trữ trên trình duyệt, dữ liệu của bạn luôn nằm trong tầm kiểm soát của bạn.", + "title": "Ưu tiên địa phương, bảo mật hàng đầu" + }, + "pglite": { + "desc": "Xây dựng trên nền tảng PGlite, hỗ trợ nguyên bản các tính năng cao cấp AI Native (tìm kiếm vector)", + "title": "Kiến trúc lưu trữ khách hàng thế hệ mới" + } + }, "init": { "desc": "Đang khởi tạo cơ sở dữ liệu, thời gian có thể từ 5~30 giây tùy thuộc vào mạng", "title": "Đang khởi tạo cơ sở dữ liệu PGlite" diff --git a/locales/zh-CN/common.json b/locales/zh-CN/common.json index 2bb3ae7a11dc..50733b8a6609 100644 --- a/locales/zh-CN/common.json +++ b/locales/zh-CN/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) 对话页面加载中...", - "initAuth": "(2/4) 鉴权服务初始化...", - "initUser": "(3/4) 用户状态初始化...", - "initializing": "(1/4) 应用启动中..." + "appInitializing": "应用启动中...", + "finished": "数据库初始化完成", + "goToChat": "对话页面加载中...", + "initAuth": "鉴权服务初始化...", + "initUser": "用户状态初始化...", + "initializing": "PGlite 数据库初始化...", + "loadingDependencies": "初始化依赖...", + "loadingWasm": "加载 WASM 模块...", + "migrating": "执行数据表迁移...", + "ready": "数据库已就绪" }, "autoGenerate": "自动补全", "autoGenerateTooltip": "基于提示词自动补全助手描述", @@ -38,14 +44,28 @@ "error": "发生错误,请重试", "idle": "等待初始化...", "initializing": "正在初始化...", - "loadingDependencies": "加载依赖中({{progress}}%)...", - "loadingWasmModule": "加载 WASM 模块中({{progress}}%)...", - "migrating": "正在迁移数据...", + "loadingDependencies": "加载依赖中...", + "loadingWasmModule": "加载 WASM 模块中...", + "migrating": "执行数据表迁移...", "ready": "数据库已就绪" }, "modal": { - "desc": "启用 PGlite 客户端数据库,在你的浏览器中持久存储聊天数据,并使用知识库等进阶特性", + "desc": "立即启用下一代客户端数据库。在你的浏览器中持久存储聊天数据,并使用知识库等进阶特性。", "enable": "立即启用", + "features": { + "knowledgeBase": { + "desc": "沉淀你的个人知识库,并与你的助手轻松开启知识库对话(即将上线)", + "title": "支持知识库对话,开启第二大脑" + }, + "localFirst": { + "desc": "聊天数据完全存储在浏览器中,你的数据始终在你的掌握。", + "title": "本地优先,隐私至上" + }, + "pglite": { + "desc": "基于 PGlite 构建,原生支持 AI Native 高阶特性(向量检索)", + "title": "新一代客户端存储架构" + } + }, "init": { "desc": "正在初始化数据库,视网络差异可能会用时 5~30 秒不等", "title": "正在初始化 PGlite 数据库" diff --git a/locales/zh-TW/common.json b/locales/zh-TW/common.json index 60bf44a00455..34fb1e3cafb1 100644 --- a/locales/zh-TW/common.json +++ b/locales/zh-TW/common.json @@ -10,10 +10,16 @@ } }, "appLoading": { - "goToChat": "(4/4) 對話頁面加載中...", - "initAuth": "(2/4) 鑑權服務初始化...", - "initUser": "(3/4) 使用者狀態初始化...", - "initializing": "(1/4) 應用啟動中..." + "appInitializing": "應用啟動中...", + "finished": "資料庫初始化完成", + "goToChat": "對話頁面加載中...", + "initAuth": "鑑權服務初始化...", + "initUser": "用戶狀態初始化...", + "initializing": "PGlite 資料庫初始化...", + "loadingDependencies": "初始化依賴...", + "loadingWasm": "加載 WASM 模組...", + "migrating": "執行資料表遷移...", + "ready": "資料庫已就緒" }, "autoGenerate": "自動生成", "autoGenerateTooltip": "基於提示詞自動生成助手描述", @@ -38,14 +44,28 @@ "error": "發生錯誤,請重試", "idle": "等待初始化...", "initializing": "正在初始化...", - "loadingDependencies": "加載依賴中({{progress}}%)...", - "loadingWasmModule": "加載 WASM 模塊中({{progress}}%)...", - "migrating": "正在遷移數據...", + "loadingDependencies": "載入依賴中...", + "loadingWasmModule": "載入 WASM 模組中...", + "migrating": "執行資料表遷移...", "ready": "數據庫已就緒" }, "modal": { "desc": "啟用 PGlite 客戶端數據庫,在你的瀏覽器中持久存儲聊天數據,並使用知識庫等進階特性", "enable": "立即啟用", + "features": { + "knowledgeBase": { + "desc": "沉澱你的個人知識庫,並與你的助手輕鬆開啟知識庫對話(即將上線)", + "title": "支持知識庫對話,開啟第二大腦" + }, + "localFirst": { + "desc": "聊天數據完全存儲在瀏覽器中,你的數據始終在你的掌握。", + "title": "本地優先,隱私至上" + }, + "pglite": { + "desc": "基於 PGlite 構建,原生支持 AI Native 高階特性(向量檢索)", + "title": "新一代客戶端存儲架構" + } + }, "init": { "desc": "正在初始化數據庫,視網絡差異可能會用時 5~30 秒不等", "title": "正在初始化 PGlite 數據庫" diff --git a/src/app/loading/Client/Content.tsx b/src/app/loading/Client/Content.tsx new file mode 100644 index 000000000000..90c8859694a2 --- /dev/null +++ b/src/app/loading/Client/Content.tsx @@ -0,0 +1,38 @@ +import React, { memo } from 'react'; +import { useTranslation } from 'react-i18next'; + +import FullscreenLoading from '@/components/FullscreenLoading'; +import { useGlobalStore } from '@/store/global'; +import { systemStatusSelectors } from '@/store/global/selectors'; + +import { CLIENT_LOADING_STAGES } from '../stage'; + +interface InitProps { + setActiveStage: (value: string) => void; +} + +const Init = memo(() => { + return null; +}); + +interface ContentProps { + loadingStage: string; + setActiveStage: (value: string) => void; +} + +const Content = memo(({ loadingStage, setActiveStage }) => { + const { t } = useTranslation('common'); + const isPgliteNotInited = useGlobalStore(systemStatusSelectors.isPgliteNotInited); + + return ( + <> + {isPgliteNotInited && } + t(`appLoading.${key}` as any))} + /> + + ); +}); + +export default Content; diff --git a/src/app/loading/Client/Redirect.tsx b/src/app/loading/Client/Redirect.tsx new file mode 100644 index 000000000000..69fcf09e9cc6 --- /dev/null +++ b/src/app/loading/Client/Redirect.tsx @@ -0,0 +1,47 @@ +'use client'; + +import { useRouter } from 'next/navigation'; +import { memo, useEffect } from 'react'; + +import { useGlobalStore } from '@/store/global'; +import { systemStatusSelectors } from '@/store/global/selectors'; +import { useUserStore } from '@/store/user'; + +import { AppLoadingStage } from '../stage'; + +interface RedirectProps { + setActiveStage: (value: AppLoadingStage) => void; +} + +const Redirect = memo(({ setActiveStage }) => { + const router = useRouter(); + const isUserStateInit = useUserStore((s) => s.isUserStateInit); + + const isPgliteNotEnabled = useGlobalStore(systemStatusSelectors.isPgliteNotEnabled); + + const navToChat = () => { + setActiveStage(AppLoadingStage.GoToChat); + router.replace('/chat'); + }; + + useEffect(() => { + // if pglite is not enabled, redirect to chat + if (isPgliteNotEnabled) { + navToChat(); + return; + } + + // if user state not init, wait for loading + if (!isUserStateInit) { + setActiveStage(AppLoadingStage.InitUser); + return; + } + + // finally check the conversation status + navToChat(); + }, [isUserStateInit, isPgliteNotEnabled]); + + return null; +}); + +export default Redirect; diff --git a/src/app/loading/Client/index.tsx b/src/app/loading/Client/index.tsx new file mode 100644 index 000000000000..544ac88bae95 --- /dev/null +++ b/src/app/loading/Client/index.tsx @@ -0,0 +1,22 @@ +'use client'; + +import { useState } from 'react'; + +import { AppLoadingStage } from '../stage'; +import Content from './Content'; +import Redirect from './Redirect'; + +const ClientMode = () => { + const [activeStage, setActiveStage] = useState(AppLoadingStage.Initializing); + + return ( + <> + + + + ); +}; + +ClientMode.displayName = 'ClientMode'; + +export default ClientMode; diff --git a/src/app/loading/Content.tsx b/src/app/loading/Server/Content.tsx similarity index 54% rename from src/app/loading/Content.tsx rename to src/app/loading/Server/Content.tsx index 63a9775e8b1f..48df787de997 100644 --- a/src/app/loading/Content.tsx +++ b/src/app/loading/Server/Content.tsx @@ -3,15 +3,19 @@ import { useTranslation } from 'react-i18next'; import FullscreenLoading from '@/components/FullscreenLoading'; -import { AppLoadingStage } from './type'; +import { AppLoadingStage, SERVER_LOADING_STAGES } from '../stage'; interface ContentProps { loadingStage: AppLoadingStage; } + const Content = memo(({ loadingStage }) => { const { t } = useTranslation('common'); + const activeStage = SERVER_LOADING_STAGES.indexOf(loadingStage); + + const stages = SERVER_LOADING_STAGES.map((key) => t(`appLoading.${key}`)); - return ; + return ; }); export default Content; diff --git a/src/app/loading/Redirect.tsx b/src/app/loading/Server/Redirect.tsx similarity index 72% rename from src/app/loading/Redirect.tsx rename to src/app/loading/Server/Redirect.tsx index e7f120a5d81d..4d270737a6ee 100644 --- a/src/app/loading/Redirect.tsx +++ b/src/app/loading/Server/Redirect.tsx @@ -3,12 +3,10 @@ import { useRouter } from 'next/navigation'; import { memo, useEffect } from 'react'; -import { useGlobalStore } from '@/store/global'; -import { systemStatusSelectors } from '@/store/global/selectors'; import { useUserStore } from '@/store/user'; import { authSelectors } from '@/store/user/selectors'; -import { AppLoadingStage } from './type'; +import { AppLoadingStage } from '../stage'; interface RedirectProps { setLoadingStage: (value: AppLoadingStage) => void; @@ -22,7 +20,6 @@ const Redirect = memo(({ setLoadingStage }) => { s.isUserStateInit, s.isOnboard, ]); - const isPgliteNotEnabled = useGlobalStore(systemStatusSelectors.isPgliteNotEnabled); const navToChat = () => { setLoadingStage(AppLoadingStage.GoToChat); @@ -30,12 +27,6 @@ const Redirect = memo(({ setLoadingStage }) => { }; useEffect(() => { - // if pglite is not enabled, redirect to chat - if (isPgliteNotEnabled) { - navToChat(); - return; - } - // if user auth state is not ready, wait for loading if (!isLoaded) { setLoadingStage(AppLoadingStage.InitAuth); @@ -60,9 +51,9 @@ const Redirect = memo(({ setLoadingStage }) => { return; } - // finally check the conversation status + // finally go to chat navToChat(); - }, [isUserStateInit, isLoaded, isOnboard, isLogin, isPgliteNotEnabled]); + }, [isUserStateInit, isLoaded, isOnboard, isLogin]); return null; }); diff --git a/src/app/loading/Server/index.tsx b/src/app/loading/Server/index.tsx new file mode 100644 index 000000000000..77fb6b6976f5 --- /dev/null +++ b/src/app/loading/Server/index.tsx @@ -0,0 +1,22 @@ +'use client'; + +import { useState } from 'react'; + +import { AppLoadingStage } from '../stage'; +import Content from './Content'; +import Redirect from './Redirect'; + +const ServerMode = () => { + const [loadingStage, setLoadingStage] = useState(AppLoadingStage.Initializing); + + return ( + <> + + + + ); +}; + +ServerMode.displayName = 'ServerMode'; + +export default ServerMode; diff --git a/src/app/loading/index.tsx b/src/app/loading/index.tsx index 27d7376f9816..d66fd36b7917 100644 --- a/src/app/loading/index.tsx +++ b/src/app/loading/index.tsx @@ -1,21 +1,9 @@ -'use client'; +import { isServerMode } from '@/const/version'; -import { useState } from 'react'; +import Client from './Client'; +import Server from './Server'; -import { AppLoadingStage } from '@/app/loading/type'; - -import Client from './Content'; -import Redirect from './Redirect'; - -const ScreenLoading = () => { - const [loadingStage, setLoadingStage] = useState(AppLoadingStage.Initializing); - return ( - <> - - - - ); -}; +const ScreenLoading = () => (isServerMode ? : ); ScreenLoading.displayName = 'ScreenLoading'; diff --git a/src/app/loading/stage.ts b/src/app/loading/stage.ts new file mode 100644 index 000000000000..0897dff3afd6 --- /dev/null +++ b/src/app/loading/stage.ts @@ -0,0 +1,22 @@ +export enum AppLoadingStage { + GoToChat = 'goToChat', + Idle = 'appIdle', + InitAuth = 'initAuth', + InitUser = 'initUser', + Initializing = 'appInitializing', +} + +export const SERVER_LOADING_STAGES = [ + AppLoadingStage.Idle, + AppLoadingStage.Initializing, + AppLoadingStage.InitAuth, + AppLoadingStage.InitUser, + AppLoadingStage.GoToChat, +]; + +export const CLIENT_LOADING_STAGES = [ + AppLoadingStage.Idle, + AppLoadingStage.Initializing, + AppLoadingStage.InitUser, + AppLoadingStage.GoToChat, +] as string[]; diff --git a/src/app/loading/type.ts b/src/app/loading/type.ts deleted file mode 100644 index 28e401e5abac..000000000000 --- a/src/app/loading/type.ts +++ /dev/null @@ -1,6 +0,0 @@ -export enum AppLoadingStage { - GoToChat = 'goToChat', - InitAuth = 'initAuth', - InitUser = 'initUser', - Initializing = 'initializing', -} diff --git a/src/components/FullscreenLoading/index.tsx b/src/components/FullscreenLoading/index.tsx index b5868ddafac8..be0dab226e44 100644 --- a/src/components/FullscreenLoading/index.tsx +++ b/src/components/FullscreenLoading/index.tsx @@ -1,19 +1,20 @@ -import { Icon } from '@lobehub/ui'; -import { Loader2 } from 'lucide-react'; -import { ReactNode, memo } from 'react'; +import React, { memo } from 'react'; import { Center, Flexbox } from 'react-layout-kit'; import { ProductLogo } from '@/components/Branding'; +import InitProgress, { StageItem } from '@/components/InitProgress'; -const FullscreenLoading = memo<{ title?: ReactNode }>(({ title }) => { +interface FullscreenLoadingProps { + activeStage: number; + stages: StageItem[]; +} + +const FullscreenLoading = memo(({ activeStage, stages }) => { return (
-
- - {title} -
+
); diff --git a/src/components/InitProgress/index.tsx b/src/components/InitProgress/index.tsx new file mode 100644 index 000000000000..a5ce012748f7 --- /dev/null +++ b/src/components/InitProgress/index.tsx @@ -0,0 +1,42 @@ +import { Icon } from '@lobehub/ui'; +import { Progress, Typography } from 'antd'; +import { useTheme } from 'antd-style'; +import { Loader2 } from 'lucide-react'; +import { ReactNode, memo } from 'react'; +import { Center, Flexbox } from 'react-layout-kit'; + +export interface StageObjectItem { + icon?: ReactNode; + text: string; +} +export type StageItem = string | StageObjectItem; + +interface InitingProps { + activeStage: number; + stages: StageItem[]; +} + +const InitProgress = memo(({ activeStage, stages }) => { + const theme = useTheme(); + + const outStage = stages[activeStage]; + const percent = (activeStage / (stages.length - 1)) * 100; + + const stage = typeof outStage === 'string' ? { text: outStage } : outStage; + + return ( +
+ + + {stage?.icon ? stage?.icon : } + {stage?.text} + +
+ ); +}); + +export default InitProgress; diff --git a/src/features/MobileSwitchLoading/index.tsx b/src/features/MobileSwitchLoading/index.tsx index a8f3303dca44..a25069d097e0 100644 --- a/src/features/MobileSwitchLoading/index.tsx +++ b/src/features/MobileSwitchLoading/index.tsx @@ -1,13 +1,26 @@ -'use client'; - +import { Icon } from '@lobehub/ui'; +import { Loader2 } from 'lucide-react'; +import { DynamicOptions } from 'next/dist/shared/lib/dynamic'; +import { memo } from 'react'; import { useTranslation } from 'react-i18next'; +import { Center, Flexbox } from 'react-layout-kit'; -import FullscreenLoading from '@/components/FullscreenLoading'; +import { ProductLogo } from '@/components/Branding'; -const MobileSwitchLoading = () => { +// @ts-expect-error +const MobileSwitchLoading: DynamicOptions['loading'] = memo(() => { const { t } = useTranslation('common'); - - return ; -}; + return ( + +
+ +
+ + {t('layoutInitializing')} +
+
+
+ ); +}); export default MobileSwitchLoading; diff --git a/src/layout/AuthProvider/NextAuth/UserUpdater.tsx b/src/layout/AuthProvider/NextAuth/UserUpdater.tsx index 9f7f8ed8024c..8627f3c428bc 100644 --- a/src/layout/AuthProvider/NextAuth/UserUpdater.tsx +++ b/src/layout/AuthProvider/NextAuth/UserUpdater.tsx @@ -10,6 +10,8 @@ import { LobeUser } from '@/types/user'; // update the user data into the context const UserUpdater = memo(() => { const { data: session, status } = useSession(); + const isLoaded = status !== 'loading'; + const isSignedIn = (status === 'authenticated' && session && !!session.user) || false; const nextUser = session?.user; @@ -22,7 +24,7 @@ const UserUpdater = memo(() => { id: nextUser?.id, } as LobeUser; - useStoreUpdater('isLoaded', true); + useStoreUpdater('isLoaded', isLoaded); useStoreUpdater('user', lobeUser); useStoreUpdater('isSignedIn', isSignedIn); diff --git a/src/locales/default/common.ts b/src/locales/default/common.ts index 3da2c7630e58..c74582438e42 100644 --- a/src/locales/default/common.ts +++ b/src/locales/default/common.ts @@ -11,10 +11,17 @@ export default { }, }, appLoading: { - goToChat: '(4/4) 对话页面加载中...', - initAuth: '(2/4) 鉴权服务初始化...', - initUser: '(3/4) 用户状态初始化...', - initializing: '(1/4) 应用启动中...', + appIdle: '准备启动', + appInitializing: '应用启动中...', + finished: '数据库初始化完成', + goToChat: '对话页面加载中...', + initAuth: '鉴权服务初始化...', + initUser: '用户状态初始化...', + initializing: 'PGlite 数据库初始化...', + loadingDependencies: '初始化依赖...', + loadingWasm: '加载 WASM 模块...', + migrating: '执行数据表迁移...', + ready: '数据库已就绪', }, autoGenerate: '自动补全', autoGenerateTooltip: '基于提示词自动补全助手描述', @@ -40,14 +47,28 @@ export default { error: '发生错误,请重试', idle: '等待初始化...', initializing: '正在初始化...', - loadingDependencies: `加载依赖中({{progress}}%)...`, - loadingWasmModule: '加载 WASM 模块中({{progress}}%)...', - migrating: '正在迁移数据...', + loadingDependencies: '加载依赖中...', + loadingWasmModule: '加载 WASM 模块中...', + migrating: '执行数据表迁移...', ready: '数据库已就绪', }, modal: { - desc: '启用 PGlite 客户端数据库,在你的浏览器中持久存储聊天数据,并使用知识库等进阶特性', + desc: '立即启用下一代客户端数据库。在你的浏览器中持久存储聊天数据,并使用知识库等进阶特性。', enable: '立即启用', + features: { + knowledgeBase: { + desc: '沉淀你的个人知识库,并与你的助手轻松开启知识库对话(即将上线)', + title: '支持知识库对话,开启第二大脑', + }, + localFirst: { + desc: '聊天数据完全存储在浏览器中,你的数据始终在你的掌握。', + title: '本地优先,隐私至上', + }, + pglite: { + desc: '基于 PGlite 构建,原生支持 AI Native 高阶特性(向量检索)', + title: '新一代客户端存储架构', + }, + }, init: { desc: '正在初始化数据库,视网络差异可能会用时 5~30 秒不等', title: '正在初始化 PGlite 数据库',