消息渠道的消息支持多语言
This commit is contained in:
91
src/components/settings/channel-other-tab.tsx
Normal file
91
src/components/settings/channel-other-tab.tsx
Normal file
@@ -0,0 +1,91 @@
|
||||
"use client"
|
||||
|
||||
import { useCallback, useEffect, useState } from "react"
|
||||
import { Loader2 } from "lucide-react"
|
||||
import { useTranslations } from "next-intl"
|
||||
import { toast } from "sonner"
|
||||
|
||||
import {
|
||||
Select,
|
||||
SelectContent,
|
||||
SelectItem,
|
||||
SelectTrigger,
|
||||
SelectValue,
|
||||
} from "@/components/ui/select"
|
||||
import { getChatMessageLanguage, setChatMessageLanguage } from "@/lib/api"
|
||||
|
||||
const SUPPORTED_LANGUAGES = [
|
||||
"en",
|
||||
"zh-cn",
|
||||
"zh-tw",
|
||||
"ja",
|
||||
"ko",
|
||||
"es",
|
||||
"de",
|
||||
"fr",
|
||||
"pt",
|
||||
"ar",
|
||||
] as const
|
||||
|
||||
export function ChannelOtherTab() {
|
||||
const t = useTranslations("ChatChannelSettings.language")
|
||||
const [language, setLanguage] = useState("en")
|
||||
const [loading, setLoading] = useState(true)
|
||||
const [saving, setSaving] = useState(false)
|
||||
|
||||
useEffect(() => {
|
||||
getChatMessageLanguage()
|
||||
.then((lang) => setLanguage(lang))
|
||||
.catch(() => {})
|
||||
.finally(() => setLoading(false))
|
||||
}, [])
|
||||
|
||||
const handleLanguageChange = useCallback(
|
||||
async (value: string) => {
|
||||
setSaving(true)
|
||||
try {
|
||||
await setChatMessageLanguage(value)
|
||||
setLanguage(value)
|
||||
toast.success(t("saved"))
|
||||
} catch {
|
||||
toast.error(t("saveFailed"))
|
||||
} finally {
|
||||
setSaving(false)
|
||||
}
|
||||
},
|
||||
[t]
|
||||
)
|
||||
|
||||
if (loading) {
|
||||
return (
|
||||
<div className="h-full flex items-center justify-center text-sm text-muted-foreground gap-2">
|
||||
<Loader2 className="h-4 w-4 animate-spin" />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="space-y-6">
|
||||
<section className="space-y-2">
|
||||
<h3 className="text-sm font-medium">{t("title")}</h3>
|
||||
<p className="text-xs text-muted-foreground">{t("description")}</p>
|
||||
<Select
|
||||
value={language}
|
||||
onValueChange={handleLanguageChange}
|
||||
disabled={saving}
|
||||
>
|
||||
<SelectTrigger className="w-56">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{SUPPORTED_LANGUAGES.map((lang) => (
|
||||
<SelectItem key={lang} value={lang}>
|
||||
{t(lang)}
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</section>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
|
||||
import { ChannelListTab } from "./channel-list-tab"
|
||||
import { ChannelCommandsTab } from "./channel-commands-tab"
|
||||
import { ChannelEventsTab } from "./channel-events-tab"
|
||||
import { ChannelOtherTab } from "./channel-other-tab"
|
||||
|
||||
export function ChatChannelSettings() {
|
||||
const t = useTranslations("ChatChannelSettings")
|
||||
@@ -24,6 +25,7 @@ export function ChatChannelSettings() {
|
||||
<TabsTrigger value="channels">{t("tabs.channels")}</TabsTrigger>
|
||||
<TabsTrigger value="commands">{t("tabs.commands")}</TabsTrigger>
|
||||
<TabsTrigger value="events">{t("tabs.events")}</TabsTrigger>
|
||||
<TabsTrigger value="other">{t("tabs.other")}</TabsTrigger>
|
||||
</TabsList>
|
||||
</section>
|
||||
|
||||
@@ -36,6 +38,9 @@ export function ChatChannelSettings() {
|
||||
<TabsContent value="events" className="mt-0">
|
||||
<ChannelEventsTab />
|
||||
</TabsContent>
|
||||
<TabsContent value="other" className="mt-0">
|
||||
<ChannelOtherTab />
|
||||
</TabsContent>
|
||||
</Tabs>
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -1713,7 +1713,8 @@
|
||||
"tabs": {
|
||||
"channels": "القنوات",
|
||||
"commands": "الأوامر",
|
||||
"events": "الأحداث"
|
||||
"events": "الأحداث",
|
||||
"other": "أخرى"
|
||||
},
|
||||
"commands": {
|
||||
"title": "الأوامر المدمجة",
|
||||
@@ -1740,6 +1741,22 @@
|
||||
"errorDesc": "عندما يواجه الوكيل خطأ",
|
||||
"saved": "تم تحديث فلتر الأحداث.",
|
||||
"saveFailed": "فشل حفظ فلتر الأحداث."
|
||||
},
|
||||
"language": {
|
||||
"title": "لغة الرسائل",
|
||||
"description": "اللغة المستخدمة لإشعارات الأحداث واستجابات الأوامر والتقارير اليومية المرسلة إلى قنوات الدردشة.",
|
||||
"saved": "تم حفظ لغة الرسائل.",
|
||||
"saveFailed": "فشل حفظ لغة الرسائل.",
|
||||
"en": "الإنجليزية",
|
||||
"zh-cn": "الصينية المبسطة",
|
||||
"zh-tw": "الصينية التقليدية",
|
||||
"ja": "اليابانية",
|
||||
"ko": "الكورية",
|
||||
"es": "الإسبانية",
|
||||
"de": "الألمانية",
|
||||
"fr": "الفرنسية",
|
||||
"pt": "البرتغالية",
|
||||
"ar": "العربية"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1713,7 +1713,8 @@
|
||||
"tabs": {
|
||||
"channels": "Kanäle",
|
||||
"commands": "Befehle",
|
||||
"events": "Ereignisse"
|
||||
"events": "Ereignisse",
|
||||
"other": "Sonstiges"
|
||||
},
|
||||
"commands": {
|
||||
"title": "Integrierte Befehle",
|
||||
@@ -1740,6 +1741,22 @@
|
||||
"errorDesc": "Wenn ein Agent einen Fehler feststellt",
|
||||
"saved": "Ereignisfilter aktualisiert.",
|
||||
"saveFailed": "Fehler beim Speichern des Ereignisfilters."
|
||||
},
|
||||
"language": {
|
||||
"title": "Nachrichtensprache",
|
||||
"description": "Sprache für Ereignisbenachrichtigungen, Befehlsantworten und tägliche Berichte, die an Chat-Kanäle gesendet werden.",
|
||||
"saved": "Nachrichtensprache gespeichert.",
|
||||
"saveFailed": "Fehler beim Speichern der Nachrichtensprache.",
|
||||
"en": "Englisch",
|
||||
"zh-cn": "Vereinfachtes Chinesisch",
|
||||
"zh-tw": "Traditionelles Chinesisch",
|
||||
"ja": "Japanisch",
|
||||
"ko": "Koreanisch",
|
||||
"es": "Spanisch",
|
||||
"de": "Deutsch",
|
||||
"fr": "Französisch",
|
||||
"pt": "Portugiesisch",
|
||||
"ar": "Arabisch"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1714,7 +1714,8 @@
|
||||
"tabs": {
|
||||
"channels": "Channels",
|
||||
"commands": "Commands",
|
||||
"events": "Events"
|
||||
"events": "Events",
|
||||
"other": "Other"
|
||||
},
|
||||
"commands": {
|
||||
"title": "Built-in Commands",
|
||||
@@ -1741,6 +1742,22 @@
|
||||
"errorDesc": "When an agent encounters an error",
|
||||
"saved": "Event filter updated.",
|
||||
"saveFailed": "Failed to save event filter."
|
||||
},
|
||||
"language": {
|
||||
"title": "Message Language",
|
||||
"description": "Language used for event notifications, command responses, and daily reports sent to chat channels.",
|
||||
"saved": "Message language saved.",
|
||||
"saveFailed": "Failed to save message language.",
|
||||
"en": "English",
|
||||
"zh-cn": "Simplified Chinese",
|
||||
"zh-tw": "Traditional Chinese",
|
||||
"ja": "Japanese",
|
||||
"ko": "Korean",
|
||||
"es": "Spanish",
|
||||
"de": "German",
|
||||
"fr": "French",
|
||||
"pt": "Portuguese",
|
||||
"ar": "Arabic"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1713,7 +1713,8 @@
|
||||
"tabs": {
|
||||
"channels": "Canales",
|
||||
"commands": "Comandos",
|
||||
"events": "Eventos"
|
||||
"events": "Eventos",
|
||||
"other": "Otros"
|
||||
},
|
||||
"commands": {
|
||||
"title": "Comandos integrados",
|
||||
@@ -1740,6 +1741,22 @@
|
||||
"errorDesc": "Cuando un agente encuentra un error",
|
||||
"saved": "Filtro de eventos actualizado.",
|
||||
"saveFailed": "Error al guardar el filtro de eventos."
|
||||
},
|
||||
"language": {
|
||||
"title": "Idioma de mensajes",
|
||||
"description": "Idioma utilizado para las notificaciones de eventos, respuestas de comandos e informes diarios enviados a los canales de chat.",
|
||||
"saved": "Idioma de mensajes guardado.",
|
||||
"saveFailed": "Error al guardar el idioma de mensajes.",
|
||||
"en": "Inglés",
|
||||
"zh-cn": "Chino simplificado",
|
||||
"zh-tw": "Chino tradicional",
|
||||
"ja": "Japonés",
|
||||
"ko": "Coreano",
|
||||
"es": "Español",
|
||||
"de": "Alemán",
|
||||
"fr": "Francés",
|
||||
"pt": "Portugués",
|
||||
"ar": "Árabe"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1713,7 +1713,8 @@
|
||||
"tabs": {
|
||||
"channels": "Canaux",
|
||||
"commands": "Commandes",
|
||||
"events": "Événements"
|
||||
"events": "Événements",
|
||||
"other": "Autres"
|
||||
},
|
||||
"commands": {
|
||||
"title": "Commandes intégrées",
|
||||
@@ -1740,6 +1741,22 @@
|
||||
"errorDesc": "Lorsqu'un agent rencontre une erreur",
|
||||
"saved": "Filtre d'événements mis à jour.",
|
||||
"saveFailed": "Échec de l'enregistrement du filtre d'événements."
|
||||
},
|
||||
"language": {
|
||||
"title": "Langue des messages",
|
||||
"description": "Langue utilisée pour les notifications d'événements, les réponses aux commandes et les rapports quotidiens envoyés aux canaux de chat.",
|
||||
"saved": "Langue des messages enregistrée.",
|
||||
"saveFailed": "Échec de l'enregistrement de la langue des messages.",
|
||||
"en": "Anglais",
|
||||
"zh-cn": "Chinois simplifié",
|
||||
"zh-tw": "Chinois traditionnel",
|
||||
"ja": "Japonais",
|
||||
"ko": "Coréen",
|
||||
"es": "Espagnol",
|
||||
"de": "Allemand",
|
||||
"fr": "Français",
|
||||
"pt": "Portugais",
|
||||
"ar": "Arabe"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1713,7 +1713,8 @@
|
||||
"tabs": {
|
||||
"channels": "チャンネル",
|
||||
"commands": "コマンド",
|
||||
"events": "イベント"
|
||||
"events": "イベント",
|
||||
"other": "その他"
|
||||
},
|
||||
"commands": {
|
||||
"title": "組み込みコマンド",
|
||||
@@ -1740,6 +1741,22 @@
|
||||
"errorDesc": "エージェントがエラーに遭遇した時",
|
||||
"saved": "イベントフィルターを更新しました。",
|
||||
"saveFailed": "イベントフィルターの保存に失敗しました。"
|
||||
},
|
||||
"language": {
|
||||
"title": "メッセージ言語",
|
||||
"description": "イベント通知、コマンド応答、日次レポートをチャットチャンネルに送信する際に使用する言語。",
|
||||
"saved": "メッセージ言語を保存しました。",
|
||||
"saveFailed": "メッセージ言語の保存に失敗しました。",
|
||||
"en": "英語",
|
||||
"zh-cn": "簡体字中国語",
|
||||
"zh-tw": "繁体字中国語",
|
||||
"ja": "日本語",
|
||||
"ko": "韓国語",
|
||||
"es": "スペイン語",
|
||||
"de": "ドイツ語",
|
||||
"fr": "フランス語",
|
||||
"pt": "ポルトガル語",
|
||||
"ar": "アラビア語"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1713,7 +1713,8 @@
|
||||
"tabs": {
|
||||
"channels": "채널",
|
||||
"commands": "명령어",
|
||||
"events": "이벤트"
|
||||
"events": "이벤트",
|
||||
"other": "기타"
|
||||
},
|
||||
"commands": {
|
||||
"title": "내장 명령어",
|
||||
@@ -1740,6 +1741,22 @@
|
||||
"errorDesc": "에이전트에 오류가 발생했을 때",
|
||||
"saved": "이벤트 필터가 업데이트되었습니다.",
|
||||
"saveFailed": "이벤트 필터 저장에 실패했습니다."
|
||||
},
|
||||
"language": {
|
||||
"title": "메시지 언어",
|
||||
"description": "이벤트 알림, 명령 응답, 일일 보고서를 채팅 채널로 전송할 때 사용하는 언어입니다.",
|
||||
"saved": "메시지 언어가 저장되었습니다.",
|
||||
"saveFailed": "메시지 언어 저장에 실패했습니다.",
|
||||
"en": "영어",
|
||||
"zh-cn": "중국어 간체",
|
||||
"zh-tw": "중국어 번체",
|
||||
"ja": "일본어",
|
||||
"ko": "한국어",
|
||||
"es": "스페인어",
|
||||
"de": "독일어",
|
||||
"fr": "프랑스어",
|
||||
"pt": "포르투갈어",
|
||||
"ar": "아랍어"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1713,7 +1713,8 @@
|
||||
"tabs": {
|
||||
"channels": "Canais",
|
||||
"commands": "Comandos",
|
||||
"events": "Eventos"
|
||||
"events": "Eventos",
|
||||
"other": "Outros"
|
||||
},
|
||||
"commands": {
|
||||
"title": "Comandos integrados",
|
||||
@@ -1740,6 +1741,22 @@
|
||||
"errorDesc": "Quando um agente encontra um erro",
|
||||
"saved": "Filtro de eventos atualizado.",
|
||||
"saveFailed": "Falha ao salvar o filtro de eventos."
|
||||
},
|
||||
"language": {
|
||||
"title": "Idioma das mensagens",
|
||||
"description": "Idioma utilizado para notificações de eventos, respostas de comandos e relatórios diários enviados aos canais de chat.",
|
||||
"saved": "Idioma das mensagens salvo.",
|
||||
"saveFailed": "Falha ao salvar o idioma das mensagens.",
|
||||
"en": "Inglês",
|
||||
"zh-cn": "Chinês simplificado",
|
||||
"zh-tw": "Chinês tradicional",
|
||||
"ja": "Japonês",
|
||||
"ko": "Coreano",
|
||||
"es": "Espanhol",
|
||||
"de": "Alemão",
|
||||
"fr": "Francês",
|
||||
"pt": "Português",
|
||||
"ar": "Árabe"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1714,7 +1714,8 @@
|
||||
"tabs": {
|
||||
"channels": "渠道",
|
||||
"commands": "指令",
|
||||
"events": "事件"
|
||||
"events": "事件",
|
||||
"other": "其他"
|
||||
},
|
||||
"commands": {
|
||||
"title": "内置指令",
|
||||
@@ -1741,6 +1742,22 @@
|
||||
"errorDesc": "代理遇到错误时",
|
||||
"saved": "事件过滤已更新。",
|
||||
"saveFailed": "保存事件过滤失败。"
|
||||
},
|
||||
"language": {
|
||||
"title": "消息语言",
|
||||
"description": "事件通知、指令响应和每日报告推送到消息渠道时使用的语言。",
|
||||
"saved": "消息语言已保存。",
|
||||
"saveFailed": "保存消息语言失败。",
|
||||
"en": "英语",
|
||||
"zh-cn": "简体中文",
|
||||
"zh-tw": "繁体中文",
|
||||
"ja": "日语",
|
||||
"ko": "韩语",
|
||||
"es": "西班牙语",
|
||||
"de": "德语",
|
||||
"fr": "法语",
|
||||
"pt": "葡萄牙语",
|
||||
"ar": "阿拉伯语"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1713,7 +1713,8 @@
|
||||
"tabs": {
|
||||
"channels": "頻道",
|
||||
"commands": "指令",
|
||||
"events": "事件"
|
||||
"events": "事件",
|
||||
"other": "其他"
|
||||
},
|
||||
"commands": {
|
||||
"title": "內建指令",
|
||||
@@ -1740,6 +1741,22 @@
|
||||
"errorDesc": "代理遇到錯誤時",
|
||||
"saved": "事件篩選已更新。",
|
||||
"saveFailed": "儲存事件篩選失敗。"
|
||||
},
|
||||
"language": {
|
||||
"title": "訊息語言",
|
||||
"description": "事件通知、指令回應和每日報告推送到訊息頻道時使用的語言。",
|
||||
"saved": "訊息語言已儲存。",
|
||||
"saveFailed": "儲存訊息語言失敗。",
|
||||
"en": "英語",
|
||||
"zh-cn": "簡體中文",
|
||||
"zh-tw": "繁體中文",
|
||||
"ja": "日語",
|
||||
"ko": "韓語",
|
||||
"es": "西班牙語",
|
||||
"de": "德語",
|
||||
"fr": "法語",
|
||||
"pt": "葡萄牙語",
|
||||
"ar": "阿拉伯語"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1418,3 +1418,11 @@ export async function setChatEventFilter(
|
||||
): Promise<void> {
|
||||
return getTransport().call("set_chat_event_filter", { filter })
|
||||
}
|
||||
|
||||
export async function getChatMessageLanguage(): Promise<string> {
|
||||
return getTransport().call("get_chat_message_language")
|
||||
}
|
||||
|
||||
export async function setChatMessageLanguage(language: string): Promise<void> {
|
||||
return getTransport().call("set_chat_message_language", { language })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user