diff --git a/core/http/react-ui/public/locales/de/chat.json b/core/http/react-ui/public/locales/de/chat.json index c549403e53..38137a9cdf 100644 --- a/core/http/react-ui/public/locales/de/chat.json +++ b/core/http/react-ui/public/locales/de/chat.json @@ -102,7 +102,17 @@ "untitled": "Neuer Chat", "origin": { "trigger": "Von einem Auslöser gestartet", - "connector": "Über einen Connector" + "connector": "Über einen Connector", + "job": "Von einem Job gestartet", + "page": "Von einer Seite gestartet", + "other": "Von etwas anderem gestartet" + }, + "originBadge": { + "trigger": "Trigger", + "connector": "Connector", + "job": "Job", + "page": "Seite", + "other": "Automatisch" } }, "message": { @@ -386,7 +396,38 @@ "loadFailed": "Deine Chats konnten nicht geladen werden.", "emptyTitle": "Noch keine Chats", "emptyBody": "Ein Chat beginnt auf der Startseite: Nachricht eingeben und senden. Danach stehen deine Chats hier.", - "start": "Chat beginnen" + "start": "Chat beginnen", + "tabsLabel": "Chat-Listen", + "tab": { + "mine": "Meine Chats", + "automated": "Von Add-ons und Automatisierungen" + }, + "automated": { + "intro": "Unterhaltungen, die nicht du gestartet hast, sondern etwa ein Connector, ein Trigger oder ein Job. Sie erscheinen nicht in deinen Chat-Listen.", + "empty": "Bisher hat nichts von selbst einen Chat gestartet.", + "kind": { + "trigger": "Trigger", + "connector": "Connectors", + "job": "Jobs", + "page": "Seiten", + "other": "Sonstige" + }, + "badge": { + "trigger": "Trigger", + "connector": "Connector", + "job": "Job", + "page": "Seite", + "other": "Automatisch" + }, + "chats": "Chats: {{count}}", + "lastActive": "Zuletzt aktiv {{when}}", + "running": "Läuft", + "waiting": "Wartet auf dich", + "waitingCount": "Chats, die auf dich warten: {{count}}", + "open": "{{title}} öffnen", + "showAll": "Alle {{count}} anzeigen", + "showLess": "Weniger anzeigen" + } }, "foot": { "state": { @@ -600,5 +641,16 @@ "missing": "Der Ordner dieses Agenten existiert nicht mehr. Wähle im Agenten einen anderen Ordner.", "startError": "Der Ordner dieses Agenten fehlt, daher kann der Chat nicht starten. Wähle einen anderen Ordner für den Agenten.", "editAgent": "Agent bearbeiten" + }, + "origin": { + "banner": "Diese Unterhaltung wurde von {{title}} gestartet.", + "open": "{{title}} öffnen", + "kindFallback": { + "trigger": "einem Trigger", + "connector": "einem Connector", + "job": "einem Job", + "page": "einer Seite", + "other": "etwas anderem" + } } } diff --git a/core/http/react-ui/public/locales/de/nav.json b/core/http/react-ui/public/locales/de/nav.json index 168461d986..f4a04cca10 100644 --- a/core/http/react-ui/public/locales/de/nav.json +++ b/core/http/react-ui/public/locales/de/nav.json @@ -117,5 +117,7 @@ "recentChats": "Letzte Chats", "newChat": "Neuer Chat", "untitledChat": "Chat ohne Titel", - "chatRunning": "Läuft" + "chatRunning": "Läuft", + "automatedWaiting": "Automatische Chats, die auf dich warten: {{count}}", + "automatedRunning": "Automatische Chats, die laufen: {{count}}" } diff --git a/core/http/react-ui/public/locales/en/chat.json b/core/http/react-ui/public/locales/en/chat.json index 55c4b16738..b84ef170b5 100644 --- a/core/http/react-ui/public/locales/en/chat.json +++ b/core/http/react-ui/public/locales/en/chat.json @@ -174,10 +174,20 @@ "untitled": "New chat", "origin": { "trigger": "Started by a trigger", - "connector": "From a connector" + "connector": "From a connector", + "job": "Started by a job", + "page": "Started by a page", + "other": "Started by something else" }, "exportJson": "Export as JSON", - "importChat": "Import a chat" + "importChat": "Import a chat", + "originBadge": { + "trigger": "Trigger", + "connector": "Connector", + "job": "Job", + "page": "Page", + "other": "Automated" + } }, "message": { "you": "You", @@ -541,7 +551,38 @@ "loadFailed": "Could not load your chats.", "emptyTitle": "No chats yet", "emptyBody": "A chat starts on Home: type a message and send it. Your chats are listed here after that.", - "start": "Start a chat" + "start": "Start a chat", + "tabsLabel": "Chat lists", + "tab": { + "mine": "My chats", + "automated": "From add-ons and automations" + }, + "automated": { + "intro": "Conversations that something other than you started, such as a connector, a trigger or a job. They stay out of your chat lists.", + "empty": "Nothing has started a chat by itself yet.", + "kind": { + "trigger": "Triggers", + "connector": "Connectors", + "job": "Jobs", + "page": "Pages", + "other": "Other" + }, + "badge": { + "trigger": "Trigger", + "connector": "Connector", + "job": "Job", + "page": "Page", + "other": "Automated" + }, + "chats": "Chats: {{count}}", + "lastActive": "Last active {{when}}", + "running": "Running", + "waiting": "Waiting for you", + "waitingCount": "Chats waiting for you: {{count}}", + "open": "Open {{title}}", + "showAll": "Show all {{count}}", + "showLess": "Show fewer" + } }, "foot": { "state": { @@ -747,5 +788,16 @@ "missing": "The folder of this agent is gone. Choose another folder in the agent.", "startError": "This agent's folder is missing, so the chat cannot start. Choose another folder for the agent.", "editAgent": "Edit agent" + }, + "origin": { + "banner": "This conversation was started by {{title}}.", + "open": "Open {{title}}", + "kindFallback": { + "trigger": "a trigger", + "connector": "a connector", + "job": "a job", + "page": "a page", + "other": "something else" + } } } diff --git a/core/http/react-ui/public/locales/en/nav.json b/core/http/react-ui/public/locales/en/nav.json index e15869fed9..ad90660ac7 100644 --- a/core/http/react-ui/public/locales/en/nav.json +++ b/core/http/react-ui/public/locales/en/nav.json @@ -116,5 +116,7 @@ "recentChats": "Recent chats", "newChat": "New chat", "untitledChat": "Untitled chat", - "chatRunning": "Working" + "chatRunning": "Working", + "automatedWaiting": "Automated chats waiting for you: {{count}}", + "automatedRunning": "Automated chats running: {{count}}" } diff --git a/core/http/react-ui/public/locales/es/chat.json b/core/http/react-ui/public/locales/es/chat.json index 15b1057382..edc8e7b0eb 100644 --- a/core/http/react-ui/public/locales/es/chat.json +++ b/core/http/react-ui/public/locales/es/chat.json @@ -102,7 +102,17 @@ "untitled": "Nuevo chat", "origin": { "trigger": "Iniciado por un disparador", - "connector": "Desde un conector" + "connector": "Desde un conector", + "job": "Iniciado por un trabajo", + "page": "Iniciado por una página", + "other": "Iniciado por otra cosa" + }, + "originBadge": { + "trigger": "Disparador", + "connector": "Conector", + "job": "Trabajo", + "page": "Página", + "other": "Automático" } }, "message": { @@ -386,7 +396,38 @@ "loadFailed": "No se pudieron cargar tus chats.", "emptyTitle": "Aún no hay chats", "emptyBody": "Un chat empieza en Inicio: escribe un mensaje y envíalo. Después, tus chats aparecen aquí.", - "start": "Empezar un chat" + "start": "Empezar un chat", + "tabsLabel": "Listas de chats", + "tab": { + "mine": "Mis chats", + "automated": "De complementos y automatizaciones" + }, + "automated": { + "intro": "Conversaciones que inició algo distinto de ti, como un conector, un disparador o un trabajo. No aparecen en tus listas de chats.", + "empty": "Nada ha iniciado un chat por sí solo todavía.", + "kind": { + "trigger": "Disparadores", + "connector": "Conectores", + "job": "Trabajos", + "page": "Páginas", + "other": "Otros" + }, + "badge": { + "trigger": "Disparador", + "connector": "Conector", + "job": "Trabajo", + "page": "Página", + "other": "Automático" + }, + "chats": "Chats: {{count}}", + "lastActive": "Última actividad {{when}}", + "running": "En curso", + "waiting": "Esperando por ti", + "waitingCount": "Chats que te esperan: {{count}}", + "open": "Abrir {{title}}", + "showAll": "Mostrar los {{count}}", + "showLess": "Mostrar menos" + } }, "foot": { "state": { @@ -600,5 +641,16 @@ "missing": "La carpeta de este agente ya no existe. Elige otra carpeta en el agente.", "startError": "Falta la carpeta de este agente, así que el chat no puede empezar. Elige otra carpeta para el agente.", "editAgent": "Editar agente" + }, + "origin": { + "banner": "Esta conversación la inició {{title}}.", + "open": "Abrir {{title}}", + "kindFallback": { + "trigger": "un disparador", + "connector": "un conector", + "job": "un trabajo", + "page": "una página", + "other": "otra cosa" + } } } diff --git a/core/http/react-ui/public/locales/es/nav.json b/core/http/react-ui/public/locales/es/nav.json index 4fd6572246..cba50ab46e 100644 --- a/core/http/react-ui/public/locales/es/nav.json +++ b/core/http/react-ui/public/locales/es/nav.json @@ -117,5 +117,7 @@ "recentChats": "Chats recientes", "newChat": "Nuevo chat", "untitledChat": "Chat sin título", - "chatRunning": "En curso" + "chatRunning": "En curso", + "automatedWaiting": "Chats automáticos que te esperan: {{count}}", + "automatedRunning": "Chats automáticos en curso: {{count}}" } diff --git a/core/http/react-ui/public/locales/fr/chat.json b/core/http/react-ui/public/locales/fr/chat.json index 7cd7dca3c8..68bc5bbc72 100644 --- a/core/http/react-ui/public/locales/fr/chat.json +++ b/core/http/react-ui/public/locales/fr/chat.json @@ -100,7 +100,17 @@ "untitled": "Nouveau chat", "origin": { "trigger": "Lancé par un déclencheur", - "connector": "Depuis un connecteur" + "connector": "Depuis un connecteur", + "job": "Démarré par une tâche", + "page": "Démarré par une page", + "other": "Démarré par autre chose" + }, + "originBadge": { + "trigger": "Déclencheur", + "connector": "Connecteur", + "job": "Tâche", + "page": "Page", + "other": "Automatique" } }, "message": { @@ -384,7 +394,38 @@ "loadFailed": "Impossible de charger vos conversations.", "emptyTitle": "Aucune conversation", "emptyBody": "Une conversation commence sur l'accueil : écrivez un message et envoyez-le. Vos conversations s'affichent ensuite ici.", - "start": "Commencer une conversation" + "start": "Commencer une conversation", + "tabsLabel": "Listes de chats", + "tab": { + "mine": "Mes chats", + "automated": "Des modules et automatisations" + }, + "automated": { + "intro": "Des conversations démarrées par autre chose que vous, comme un connecteur, un déclencheur ou une tâche. Elles restent hors de vos listes de chats.", + "empty": "Rien n’a encore démarré de chat tout seul.", + "kind": { + "trigger": "Déclencheurs", + "connector": "Connecteurs", + "job": "Tâches", + "page": "Pages", + "other": "Autres" + }, + "badge": { + "trigger": "Déclencheur", + "connector": "Connecteur", + "job": "Tâche", + "page": "Page", + "other": "Automatique" + }, + "chats": "Chats : {{count}}", + "lastActive": "Dernière activité {{when}}", + "running": "En cours", + "waiting": "Vous attend", + "waitingCount": "Chats qui vous attendent : {{count}}", + "open": "Ouvrir {{title}}", + "showAll": "Tout afficher ({{count}})", + "showLess": "Afficher moins" + } }, "foot": { "state": { @@ -598,5 +639,16 @@ "missing": "Le dossier de cet agent n'existe plus. Choisissez un autre dossier dans l'agent.", "startError": "Le dossier de cet agent est manquant, le chat ne peut donc pas démarrer. Choisissez un autre dossier pour l'agent.", "editAgent": "Modifier l'agent" + }, + "origin": { + "banner": "Cette conversation a été démarrée par {{title}}.", + "open": "Ouvrir {{title}}", + "kindFallback": { + "trigger": "un déclencheur", + "connector": "un connecteur", + "job": "une tâche", + "page": "une page", + "other": "autre chose" + } } } diff --git a/core/http/react-ui/public/locales/fr/nav.json b/core/http/react-ui/public/locales/fr/nav.json index c60221ff1d..ff8add5914 100644 --- a/core/http/react-ui/public/locales/fr/nav.json +++ b/core/http/react-ui/public/locales/fr/nav.json @@ -120,5 +120,7 @@ "recentChats": "Conversations récentes", "newChat": "Nouvelle conversation", "untitledChat": "Conversation sans titre", - "chatRunning": "En cours" + "chatRunning": "En cours", + "automatedWaiting": "Chats automatiques qui vous attendent : {{count}}", + "automatedRunning": "Chats automatiques en cours : {{count}}" } diff --git a/core/http/react-ui/public/locales/id/chat.json b/core/http/react-ui/public/locales/id/chat.json index fe642b71d9..4e1803e4e7 100644 --- a/core/http/react-ui/public/locales/id/chat.json +++ b/core/http/react-ui/public/locales/id/chat.json @@ -102,7 +102,17 @@ "untitled": "Obrolan baru", "origin": { "trigger": "Dimulai oleh pemicu", - "connector": "Dari konektor" + "connector": "Dari konektor", + "job": "Dimulai oleh job", + "page": "Dimulai oleh halaman", + "other": "Dimulai oleh hal lain" + }, + "originBadge": { + "trigger": "Pemicu", + "connector": "Konektor", + "job": "Job", + "page": "Halaman", + "other": "Otomatis" } }, "message": { @@ -386,7 +396,38 @@ "loadFailed": "Tidak dapat memuat obrolan Anda.", "emptyTitle": "Belum ada obrolan", "emptyBody": "Obrolan dimulai di Beranda: ketik pesan lalu kirim. Setelah itu obrolan Anda tercantum di sini.", - "start": "Mulai obrolan" + "start": "Mulai obrolan", + "tabsLabel": "Daftar obrolan", + "tab": { + "mine": "Obrolan saya", + "automated": "Dari add-on dan otomatisasi" + }, + "automated": { + "intro": "Percakapan yang dimulai oleh sesuatu selain Anda, seperti konektor, pemicu, atau job. Percakapan ini tidak muncul di daftar obrolan Anda.", + "empty": "Belum ada yang memulai obrolan sendiri.", + "kind": { + "trigger": "Pemicu", + "connector": "Konektor", + "job": "Job", + "page": "Halaman", + "other": "Lainnya" + }, + "badge": { + "trigger": "Pemicu", + "connector": "Konektor", + "job": "Job", + "page": "Halaman", + "other": "Otomatis" + }, + "chats": "Obrolan: {{count}}", + "lastActive": "Terakhir aktif {{when}}", + "running": "Berjalan", + "waiting": "Menunggu Anda", + "waitingCount": "Obrolan yang menunggu Anda: {{count}}", + "open": "Buka {{title}}", + "showAll": "Tampilkan semua ({{count}})", + "showLess": "Tampilkan lebih sedikit" + } }, "foot": { "state": { @@ -600,5 +641,16 @@ "missing": "Folder agen ini sudah tidak ada. Pilih folder lain di agen.", "startError": "Folder agen ini hilang, jadi chat tidak bisa dimulai. Pilih folder lain untuk agen.", "editAgent": "Edit agen" + }, + "origin": { + "banner": "Percakapan ini dimulai oleh {{title}}.", + "open": "Buka {{title}}", + "kindFallback": { + "trigger": "sebuah pemicu", + "connector": "sebuah konektor", + "job": "sebuah job", + "page": "sebuah halaman", + "other": "hal lain" + } } } diff --git a/core/http/react-ui/public/locales/id/nav.json b/core/http/react-ui/public/locales/id/nav.json index ce37bd4d3d..95b0d5a9d5 100644 --- a/core/http/react-ui/public/locales/id/nav.json +++ b/core/http/react-ui/public/locales/id/nav.json @@ -117,5 +117,7 @@ "recentChats": "Obrolan terbaru", "newChat": "Obrolan baru", "untitledChat": "Obrolan tanpa judul", - "chatRunning": "Berjalan" + "chatRunning": "Berjalan", + "automatedWaiting": "Obrolan otomatis yang menunggu Anda: {{count}}", + "automatedRunning": "Obrolan otomatis yang berjalan: {{count}}" } diff --git a/core/http/react-ui/public/locales/it/chat.json b/core/http/react-ui/public/locales/it/chat.json index 0726d981df..86dafebc26 100644 --- a/core/http/react-ui/public/locales/it/chat.json +++ b/core/http/react-ui/public/locales/it/chat.json @@ -102,7 +102,17 @@ "untitled": "Nuova chat", "origin": { "trigger": "Avviata da un trigger", - "connector": "Da un connettore" + "connector": "Da un connettore", + "job": "Avviato da un job", + "page": "Avviato da una pagina", + "other": "Avviato da qualcos’altro" + }, + "originBadge": { + "trigger": "Trigger", + "connector": "Connettore", + "job": "Job", + "page": "Pagina", + "other": "Automatico" } }, "message": { @@ -386,7 +396,38 @@ "loadFailed": "Impossibile caricare le tue chat.", "emptyTitle": "Ancora nessuna chat", "emptyBody": "Una chat inizia dalla Home: scrivi un messaggio e invialo. Poi le tue chat sono elencate qui.", - "start": "Inizia una chat" + "start": "Inizia una chat", + "tabsLabel": "Elenchi delle chat", + "tab": { + "mine": "Le mie chat", + "automated": "Da componenti aggiuntivi e automazioni" + }, + "automated": { + "intro": "Conversazioni avviate da qualcosa che non sei tu, come un connettore, un trigger o un job. Restano fuori dai tuoi elenchi di chat.", + "empty": "Nulla ha ancora avviato una chat da solo.", + "kind": { + "trigger": "Trigger", + "connector": "Connettori", + "job": "Job", + "page": "Pagine", + "other": "Altro" + }, + "badge": { + "trigger": "Trigger", + "connector": "Connettore", + "job": "Job", + "page": "Pagina", + "other": "Automatico" + }, + "chats": "Chat: {{count}}", + "lastActive": "Ultima attività {{when}}", + "running": "In corso", + "waiting": "Ti aspetta", + "waitingCount": "Chat che ti aspettano: {{count}}", + "open": "Apri {{title}}", + "showAll": "Mostra tutte ({{count}})", + "showLess": "Mostra meno" + } }, "foot": { "state": { @@ -600,5 +641,16 @@ "missing": "La cartella di questo agente non esiste più. Scegli un'altra cartella nell'agente.", "startError": "La cartella di questo agente manca, quindi la chat non può partire. Scegli un'altra cartella per l'agente.", "editAgent": "Modifica agente" + }, + "origin": { + "banner": "Questa conversazione è stata avviata da {{title}}.", + "open": "Apri {{title}}", + "kindFallback": { + "trigger": "un trigger", + "connector": "un connettore", + "job": "un job", + "page": "una pagina", + "other": "qualcos’altro" + } } } diff --git a/core/http/react-ui/public/locales/it/nav.json b/core/http/react-ui/public/locales/it/nav.json index 58160af809..95884f0f31 100644 --- a/core/http/react-ui/public/locales/it/nav.json +++ b/core/http/react-ui/public/locales/it/nav.json @@ -117,5 +117,7 @@ "recentChats": "Chat recenti", "newChat": "Nuova chat", "untitledChat": "Chat senza titolo", - "chatRunning": "In corso" + "chatRunning": "In corso", + "automatedWaiting": "Chat automatiche che ti aspettano: {{count}}", + "automatedRunning": "Chat automatiche in corso: {{count}}" } diff --git a/core/http/react-ui/public/locales/ko/chat.json b/core/http/react-ui/public/locales/ko/chat.json index 3b43b6fea0..7758e0dc7d 100644 --- a/core/http/react-ui/public/locales/ko/chat.json +++ b/core/http/react-ui/public/locales/ko/chat.json @@ -102,7 +102,17 @@ "untitled": "새 채팅", "origin": { "trigger": "트리거로 시작됨", - "connector": "커넥터에서" + "connector": "커넥터에서", + "job": "작업이 시작함", + "page": "페이지가 시작함", + "other": "다른 것이 시작함" + }, + "originBadge": { + "trigger": "트리거", + "connector": "커넥터", + "job": "작업", + "page": "페이지", + "other": "자동" } }, "message": { @@ -386,7 +396,38 @@ "loadFailed": "채팅을 불러오지 못했습니다.", "emptyTitle": "아직 채팅이 없습니다", "emptyBody": "채팅은 홈에서 시작합니다. 메시지를 입력하고 보내세요. 그 후 채팅이 여기에 표시됩니다.", - "start": "채팅 시작" + "start": "채팅 시작", + "tabsLabel": "채팅 목록", + "tab": { + "mine": "내 채팅", + "automated": "애드온 및 자동화" + }, + "automated": { + "intro": "커넥터, 트리거, 작업처럼 사용자가 아닌 것이 시작한 대화입니다. 내 채팅 목록에는 표시되지 않습니다.", + "empty": "아직 스스로 채팅을 시작한 것이 없습니다.", + "kind": { + "trigger": "트리거", + "connector": "커넥터", + "job": "작업", + "page": "페이지", + "other": "기타" + }, + "badge": { + "trigger": "트리거", + "connector": "커넥터", + "job": "작업", + "page": "페이지", + "other": "자동" + }, + "chats": "채팅: {{count}}", + "lastActive": "마지막 활동 {{when}}", + "running": "실행 중", + "waiting": "확인 대기 중", + "waitingCount": "확인을 기다리는 채팅: {{count}}", + "open": "{{title}} 열기", + "showAll": "{{count}}개 모두 보기", + "showLess": "간단히 보기" + } }, "foot": { "state": { @@ -600,5 +641,16 @@ "missing": "이 에이전트의 폴더가 더 이상 없습니다. 에이전트에서 다른 폴더를 선택하세요.", "startError": "이 에이전트의 폴더가 없어 채팅을 시작할 수 없습니다. 에이전트에 다른 폴더를 선택하세요.", "editAgent": "에이전트 편집" + }, + "origin": { + "banner": "이 대화는 {{title}}에서 시작되었습니다.", + "open": "{{title}} 열기", + "kindFallback": { + "trigger": "트리거", + "connector": "커넥터", + "job": "작업", + "page": "페이지", + "other": "다른 요소" + } } } diff --git a/core/http/react-ui/public/locales/ko/nav.json b/core/http/react-ui/public/locales/ko/nav.json index 278f22b7d0..37982d34fe 100644 --- a/core/http/react-ui/public/locales/ko/nav.json +++ b/core/http/react-ui/public/locales/ko/nav.json @@ -117,5 +117,7 @@ "recentChats": "최근 채팅", "newChat": "새 채팅", "untitledChat": "제목 없는 채팅", - "chatRunning": "진행 중" + "chatRunning": "진행 중", + "automatedWaiting": "확인을 기다리는 자동 채팅: {{count}}", + "automatedRunning": "실행 중인 자동 채팅: {{count}}" } diff --git a/core/http/react-ui/public/locales/pt-BR/chat.json b/core/http/react-ui/public/locales/pt-BR/chat.json index 94fed32ee4..1cae7146d0 100644 --- a/core/http/react-ui/public/locales/pt-BR/chat.json +++ b/core/http/react-ui/public/locales/pt-BR/chat.json @@ -105,7 +105,17 @@ "untitled": "Novo chat", "origin": { "trigger": "Iniciado por um gatilho", - "connector": "De um conector" + "connector": "De um conector", + "job": "Iniciado por um job", + "page": "Iniciado por uma página", + "other": "Iniciado por outra coisa" + }, + "originBadge": { + "trigger": "Gatilho", + "connector": "Conector", + "job": "Job", + "page": "Página", + "other": "Automático" } }, "message": { @@ -389,7 +399,38 @@ "loadFailed": "Não foi possível carregar seus chats.", "emptyTitle": "Nenhum chat ainda", "emptyBody": "Um chat começa no Início: digite uma mensagem e envie. Depois disso, seus chats aparecem aqui.", - "start": "Começar um chat" + "start": "Começar um chat", + "tabsLabel": "Listas de chats", + "tab": { + "mine": "Meus chats", + "automated": "De complementos e automações" + }, + "automated": { + "intro": "Conversas iniciadas por algo que não é você, como um conector, um gatilho ou um job. Elas ficam fora das suas listas de chats.", + "empty": "Nada iniciou um chat sozinho até agora.", + "kind": { + "trigger": "Gatilhos", + "connector": "Conectores", + "job": "Jobs", + "page": "Páginas", + "other": "Outros" + }, + "badge": { + "trigger": "Gatilho", + "connector": "Conector", + "job": "Job", + "page": "Página", + "other": "Automático" + }, + "chats": "Chats: {{count}}", + "lastActive": "Última atividade {{when}}", + "running": "Em execução", + "waiting": "Aguardando você", + "waitingCount": "Chats aguardando você: {{count}}", + "open": "Abrir {{title}}", + "showAll": "Mostrar todos ({{count}})", + "showLess": "Mostrar menos" + } }, "foot": { "state": { @@ -603,5 +644,16 @@ "missing": "A pasta deste agente não existe mais. Escolha outra pasta no agente.", "startError": "A pasta deste agente está ausente, então o chat não pode começar. Escolha outra pasta para o agente.", "editAgent": "Editar agente" + }, + "origin": { + "banner": "Esta conversa foi iniciada por {{title}}.", + "open": "Abrir {{title}}", + "kindFallback": { + "trigger": "um gatilho", + "connector": "um conector", + "job": "um job", + "page": "uma página", + "other": "outra coisa" + } } } diff --git a/core/http/react-ui/public/locales/pt-BR/nav.json b/core/http/react-ui/public/locales/pt-BR/nav.json index ddb6c3ba7b..365447835f 100644 --- a/core/http/react-ui/public/locales/pt-BR/nav.json +++ b/core/http/react-ui/public/locales/pt-BR/nav.json @@ -117,5 +117,7 @@ "recentChats": "Chats recentes", "newChat": "Novo chat", "untitledChat": "Chat sem título", - "chatRunning": "Em andamento" + "chatRunning": "Em andamento", + "automatedWaiting": "Chats automáticos aguardando você: {{count}}", + "automatedRunning": "Chats automáticos em execução: {{count}}" } diff --git a/core/http/react-ui/public/locales/zh-CN/chat.json b/core/http/react-ui/public/locales/zh-CN/chat.json index fc521dbf20..11b361ae75 100644 --- a/core/http/react-ui/public/locales/zh-CN/chat.json +++ b/core/http/react-ui/public/locales/zh-CN/chat.json @@ -102,7 +102,17 @@ "untitled": "新对话", "origin": { "trigger": "由触发器启动", - "connector": "来自连接器" + "connector": "来自连接器", + "job": "由作业发起", + "page": "由页面发起", + "other": "由其他来源发起" + }, + "originBadge": { + "trigger": "触发器", + "connector": "连接器", + "job": "作业", + "page": "页面", + "other": "自动" } }, "message": { @@ -386,7 +396,38 @@ "loadFailed": "无法加载你的对话。", "emptyTitle": "还没有对话", "emptyBody": "对话从首页开始:输入消息并发送。之后你的对话会列在这里。", - "start": "开始对话" + "start": "开始对话", + "tabsLabel": "聊天列表", + "tab": { + "mine": "我的聊天", + "automated": "来自附加组件和自动化" + }, + "automated": { + "intro": "不是你发起的对话,例如由连接器、触发器或作业发起。它们不会出现在你的聊天列表中。", + "empty": "还没有任何内容自行发起聊天。", + "kind": { + "trigger": "触发器", + "connector": "连接器", + "job": "作业", + "page": "页面", + "other": "其他" + }, + "badge": { + "trigger": "触发器", + "connector": "连接器", + "job": "作业", + "page": "页面", + "other": "自动" + }, + "chats": "聊天:{{count}}", + "lastActive": "最近活动 {{when}}", + "running": "运行中", + "waiting": "等待你处理", + "waitingCount": "等待你处理的聊天:{{count}}", + "open": "打开{{title}}", + "showAll": "显示全部 {{count}} 个", + "showLess": "收起" + } }, "foot": { "state": { @@ -600,5 +641,16 @@ "missing": "此智能体的文件夹已不存在。请在智能体中选择其他文件夹。", "startError": "此智能体的文件夹缺失,因此无法开始对话。请为智能体选择其他文件夹。", "editAgent": "编辑智能体" + }, + "origin": { + "banner": "此对话由{{title}}发起。", + "open": "打开{{title}}", + "kindFallback": { + "trigger": "触发器", + "connector": "连接器", + "job": "作业", + "page": "页面", + "other": "其他来源" + } } } diff --git a/core/http/react-ui/public/locales/zh-CN/nav.json b/core/http/react-ui/public/locales/zh-CN/nav.json index e45dbfaab2..feb4991def 100644 --- a/core/http/react-ui/public/locales/zh-CN/nav.json +++ b/core/http/react-ui/public/locales/zh-CN/nav.json @@ -117,5 +117,7 @@ "recentChats": "最近对话", "newChat": "新对话", "untitledChat": "未命名对话", - "chatRunning": "进行中" + "chatRunning": "进行中", + "automatedWaiting": "等待你处理的自动聊天:{{count}}", + "automatedRunning": "运行中的自动聊天:{{count}}" } diff --git a/core/http/react-ui/src/components/AutomatedChats.jsx b/core/http/react-ui/src/components/AutomatedChats.jsx new file mode 100644 index 0000000000..ad7b37f807 --- /dev/null +++ b/core/http/react-ui/src/components/AutomatedChats.jsx @@ -0,0 +1,95 @@ +/* eslint-disable no-unused-vars -- components used only inside JSX look unused to this config, which has no eslint-plugin-react */ +import { useMemo, useState } from 'react' +import { Link } from 'react-router-dom' +import { useTranslation } from 'react-i18next' +import Icon from './Icon' +import { StatusChip } from './ui' +import { chatStatus, groupByOrigin, knownKind } from '../utils/originChats' + +// How many chats a group lists before "Show all". +const SHOWN = 5 + +// The chats that something other than a person started, for the second tab of +// All chats. One block per origin kind (triggers, connectors, jobs, pages and +// whatever a later release adds), and inside it one group per origin: the +// binding of a connector, a trigger, a job, a page. A group says how many +// chats it has, when it was last active, whether a turn runs and whether a +// chat waits for the person, and links to the page of its origin. +export default function AutomatedChats({ chats, ctx, needsYou, onOpen, onDelete }) { + const { t, i18n } = useTranslation('chat') + const [open, setOpen] = useState({}) + const kinds = useMemo(() => groupByOrigin(chats, ctx, needsYou), [chats, ctx, needsYou]) + const fmt = useMemo(() => new Intl.DateTimeFormat(i18n.language, { day: 'numeric', month: 'short', hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }), [i18n.language]) + + if (kinds.length === 0) { + return
{t('allChats.automated.empty')}
+ } + + return ( +
+

{t('allChats.automated.intro')}

+ {kinds.map((k) => { + const kind = knownKind(k.kind) + return ( +
+

+ {t(`allChats.automated.kind.${kind}`)} + {k.count} +

+ {k.groups.map((g) => { + const expanded = Boolean(open[g.key]) + const shown = expanded ? g.chats : g.chats.slice(0, SHOWN) + const title = g.title || t(`allChats.automated.badge.${kind}`) + return ( +
+
+
+ {t(`allChats.automated.badge.${kind}`)} +

{title}

+
+
+ {t('allChats.automated.chats', { count: g.count })} + {t('allChats.automated.lastActive', { when: fmt.format(g.lastActive) })} + {g.running > 0 && } + {g.waiting > 0 && } + {g.href && {t('allChats.automated.open', { title })}} +
+
+
    + {shown.map((c) => { + const status = chatStatus(c, needsYou) + return ( +
  • + + {status === 'running' && } + {status === 'waiting' && } + +
  • + ) + })} +
+ {g.chats.length > SHOWN && ( + + )} +
+ ) + })} +
+ ) + })} +
+ ) +} diff --git a/core/http/react-ui/src/components/ChatsList.jsx b/core/http/react-ui/src/components/ChatsList.jsx index 5c46093249..28a25dba8f 100644 --- a/core/http/react-ui/src/components/ChatsList.jsx +++ b/core/http/react-ui/src/components/ChatsList.jsx @@ -2,6 +2,7 @@ import { useState, useEffect, useRef, useCallback, useMemo } from 'react' import { useTranslation } from 'react-i18next' import { groupConversations } from '../utils/homeConversations' import Icon from './Icon' +import { knownKind } from '../utils/originChats' // The chats come from the server list (see menuChats in utils/chatThread.js): // a name, the model and the times. The names are matched here at once; with @@ -14,7 +15,9 @@ function matches(chat, query) { const SEARCH_DELAY_MS = 250 // The chat history: a search box, one block per day, the model that answered -// and the time, with rename, copy, export and delete on each row. It reads +// and the time, with rename, copy, export and delete on each row. A chat that +// no person started (a trigger, a connector, a job or a page) carries a badge +// with the name of what started it (originTitle) or the name of its kind. It reads // like the Home "Jump back in" list. Two frames show it: the Ctrl or Cmd K // dialog of a transcript (ChatsMenu) and the All chats page. // @@ -32,6 +35,7 @@ export default function ChatsList({ onExport, onCopyChat, onSearch, + originTitle, onEscape, autoFocus = false, idPrefix = 'chats', @@ -188,7 +192,8 @@ export default function ChatsList({ const idx = n++ const selected = idx === activeIdx const editing = editingId === chat.id - const preview = snippets[chat.id] || (chat.origin ? t(`menu.origin.${chat.origin}`, chat.origin) : '') + const preview = snippets[chat.id] || '' + const originKind = chat.origin ? (knownKind(chat.origin)) : '' return (
)} + {originKind && ( + + {originTitle?.(chat) || t(`menu.originBadge.${originKind}`)} + + )}
{preview &&
{preview}
} {chat.model || t('menu.noModel')} diff --git a/core/http/react-ui/src/components/ChatsMenu.jsx b/core/http/react-ui/src/components/ChatsMenu.jsx index e7c3464cab..c153b05815 100644 --- a/core/http/react-ui/src/components/ChatsMenu.jsx +++ b/core/http/react-ui/src/components/ChatsMenu.jsx @@ -22,6 +22,7 @@ const ChatsMenu = forwardRef(function ChatsMenu({ onExport, onCopyChat, onSearch, + originTitle, }, ref) { const { t } = useTranslation('chat') const [open, setOpen] = useState(false) @@ -109,6 +110,7 @@ const ChatsMenu = forwardRef(function ChatsMenu({ onExport={onExport} onCopyChat={onCopyChat} onSearch={onSearch} + originTitle={originTitle} onEscape={close} autoFocus /> diff --git a/core/http/react-ui/src/components/SidebarChats.jsx b/core/http/react-ui/src/components/SidebarChats.jsx index 26522bdd19..a82e5302ec 100644 --- a/core/http/react-ui/src/components/SidebarChats.jsx +++ b/core/http/react-ui/src/components/SidebarChats.jsx @@ -2,7 +2,8 @@ import { NavLink, useLocation, useNavigate } from 'react-router-dom' import { useTranslation } from 'react-i18next' import Icon from './Icon' -import { useRecentChats } from '../hooks/useRecentChats' +import { useAutomatedChats, useRecentChats } from '../hooks/useRecentChats' +import { attention } from '../utils/originChats' import { allChatsDestination } from '../utils/navigationModel' import { preloadRoute } from '../router' @@ -21,7 +22,14 @@ export default function SidebarChats({ onClose, collapsed }) { const navigate = useNavigate() const { pathname } = useLocation() const chats = useRecentChats(true, RECENT_CHATS, pathname) + // The chats that no person started are not listed here (All chats has them + // on a tab of their own); the entry only says when one needs the person. + const automated = useAutomatedChats(true, pathname) + const { waiting, running } = attention(automated.chats, automated.needsYou) const allLabel = t(allChatsDestination.labelKey) + const badge = waiting > 0 + ? t('automatedWaiting', { count: waiting }) + : running > 0 ? t('automatedRunning', { count: running }) : '' const preload = () => preloadRoute('/app/chats') return ( @@ -64,6 +72,8 @@ export default function SidebarChats({ onClose, collapsed }) { >