feat(i18n): desktop tts namespace + STT form keys

Add tts namespace to desktop i18n (en/vi/zh). Extend tools.json with STT form keys including WhatsApp privacy banner. Mirrors web ui/web locale structure.
This commit is contained in:
viettranx committed 2026-04-15 11:24:57 +07:00
1 parent 033638533d
commit 8d9a7c127a
7 files changed
+304 -4

No files matched your search

+7 -4
View File
@@ -17,6 +17,7 @@ import enSessions from './locales/en/sessions.json'
import enDesktop from './locales/en/desktop.json'
import enTeams from './locales/en/teams.json'
import enChannels from './locales/en/channels.json'
import enTts from './locales/en/tts.json'
// --- VI namespaces ---
import viCommon from './locales/vi/common.json'
@@ -34,6 +35,7 @@ import viSessions from './locales/vi/sessions.json'
import viDesktop from './locales/vi/desktop.json'
import viTeams from './locales/vi/teams.json'
import viChannels from './locales/vi/channels.json'
import viTts from './locales/vi/tts.json'
// --- ZH namespaces ---
import zhCommon from './locales/zh/common.json'
@@ -51,6 +53,7 @@ import zhSessions from './locales/zh/sessions.json'
import zhDesktop from './locales/zh/desktop.json'
import zhTeams from './locales/zh/teams.json'
import zhChannels from './locales/zh/channels.json'
import zhTts from './locales/zh/tts.json'
const STORAGE_KEY = 'goclaw:language'
@@ -69,22 +72,22 @@ i18n.use(initReactI18next).init({
common: enCommon, chat: enChat, agents: enAgents, providers: enProviders,
skills: enSkills, cron: enCron, mcp: enMcp, tools: enTools,
traces: enTraces, memory: enMemory, storage: enStorage, sessions: enSessions,
desktop: enDesktop, teams: enTeams, channels: enChannels,
desktop: enDesktop, teams: enTeams, channels: enChannels, tts: enTts,
},
vi: {
common: viCommon, chat: viChat, agents: viAgents, providers: viProviders,
skills: viSkills, cron: viCron, mcp: viMcp, tools: viTools,
traces: viTraces, memory: viMemory, storage: viStorage, sessions: viSessions,
desktop: viDesktop, teams: viTeams, channels: viChannels,
desktop: viDesktop, teams: viTeams, channels: viChannels, tts: viTts,
},
zh: {
common: zhCommon, chat: zhChat, agents: zhAgents, providers: zhProviders,
skills: zhSkills, cron: zhCron, mcp: zhMcp, tools: zhTools,
traces: zhTraces, memory: zhMemory, storage: zhStorage, sessions: zhSessions,
desktop: zhDesktop, teams: zhTeams, channels: zhChannels,
desktop: zhDesktop, teams: zhTeams, channels: zhChannels, tts: zhTts,
},
},
ns: ['common', 'chat', 'agents', 'providers', 'skills', 'cron', 'mcp', 'tools', 'traces', 'memory', 'storage', 'sessions', 'desktop', 'teams', 'channels'],
ns: ['common', 'chat', 'agents', 'providers', 'skills', 'cron', 'mcp', 'tools', 'traces', 'memory', 'storage', 'sessions', 'desktop', 'teams', 'channels', 'tts'],
defaultNS: 'common',
lng: getInitialLanguage(),
fallbackLng: 'en',
@@ -206,6 +206,24 @@
"skill_search": "Search for available skills by keyword or description to find relevant capabilities",
"use_skill": "Activate a skill to use its specialized capabilities (tracing marker)",
"team_tasks": "View, create, update, and complete tasks on the team task board"
},
"sttForm": {
"title": "STT Settings",
"description": "Configure speech-to-text providers for transcribing voice messages.",
"providersLabel": "Providers",
"elevenlabsSectionTitle": "ElevenLabs",
"elevenlabsApiKeyLabel": "API Key",
"elevenlabsDefaultLanguageLabel": "Default Language",
"proxySectionTitle": "Proxy",
"proxyUrlLabel": "Proxy URL",
"proxyApiKeyLabel": "Proxy API Key",
"proxyTenantIdLabel": "Proxy Tenant ID",
"whatsappEnabledLabel": "Enable STT for WhatsApp",
"whatsappPrivacyWarning": "Enabling STT for WhatsApp breaks end-to-end encryption for voice messages sent to this agent.",
"providersRequiredError": "At least one provider must be selected.",
"cancel": "Cancel",
"save": "Save",
"saving": "Saving..."
}
}
}
@@ -0,0 +1,81 @@
{
"title": "Text-to-Speech",
"description": "Configure TTS providers and auto-apply settings",
"save": "Save",
"saving": "Saving...",
"saveChanges": "Save Changes",
"status": {
"title": "Status",
"configured": "Configured",
"disabled": "Disabled",
"noProvider": "No TTS provider configured",
"activeProvider": "Primary provider: {{provider}}, Auto: {{auto}}"
},
"general": {
"title": "General Settings",
"primaryProvider": "Primary Provider",
"autoApplyMode": "Auto-Apply Mode",
"replyMode": "Reply Mode",
"maxTextLength": "Max Text Length",
"timeout": "Timeout (ms)"
},
"providers": {
"none": "None (Disabled)",
"openai": "OpenAI",
"elevenlabs": "ElevenLabs",
"edge": "Edge (Free)",
"minimax": "MiniMax"
},
"autoModes": {
"off": "Off",
"offDesc": "Agent can use TTS tool manually",
"always": "Always",
"alwaysDesc": "All replies get audio",
"inbound": "Inbound",
"inboundDesc": "Only when user sends voice/audio",
"tagged": "Tagged",
"taggedDesc": "Only when reply contains [[tts]] tag"
},
"replyModes": {
"final": "Final only",
"finalDesc": "Only final replies",
"all": "All",
"allDesc": "All replies including tool/block"
},
"providerSettings": "{{provider}} Settings",
"openai": {
"apiKey": "API Key",
"apiBase": "API Base URL",
"model": "Model",
"voice": "Voice"
},
"elevenlabs": {
"apiKey": "API Key",
"baseUrl": "Base URL",
"voiceId": "Voice ID",
"modelId": "Model ID"
},
"edge": {
"voice": "Voice",
"speechRate": "Speech Rate",
"hint": "Edge TTS is free and requires no API key. Install with: pip install edge-tts"
},
"minimax": {
"apiKey": "API Key",
"groupId": "Group ID *",
"groupIdPlaceholder": "Required for MiniMax",
"apiBase": "API Base",
"model": "Model",
"voiceId": "Voice ID"
},
"voice_label": "Voice",
"voice_placeholder": "Select a voice…",
"voice_refresh": "Refresh",
"voice_preview": "Preview",
"voice_stop_preview": "Stop",
"voice_no_voices": "No voices available",
"voice_loading": "Loading voices…",
"voice_preview_error": "Preview failed — refreshing list",
"model_label": "Model",
"model_placeholder": "Default (tenant/system)"
}
@@ -206,6 +206,24 @@
"skill_search": "Tìm kiếm skill khả dụng theo từ khóa hoặc mô tả để tìm khả năng phù hợp",
"use_skill": "Kích hoạt skill để sử dụng khả năng chuyên biệt (đánh dấu tracing)",
"team_tasks": "Xem, tạo, cập nhật và hoàn thành tác vụ trên bảng tác vụ nhóm"
},
"sttForm": {
"title": "Cài đặt STT",
"description": "Cấu hình provider chuyển giọng nói thành văn bản.",
"providersLabel": "Provider",
"elevenlabsSectionTitle": "ElevenLabs",
"elevenlabsApiKeyLabel": "API Key",
"elevenlabsDefaultLanguageLabel": "Ngôn ngữ mặc định",
"proxySectionTitle": "Proxy",
"proxyUrlLabel": "URL Proxy",
"proxyApiKeyLabel": "API Key Proxy",
"proxyTenantIdLabel": "Tenant ID Proxy",
"whatsappEnabledLabel": "Bật STT cho WhatsApp",
"whatsappPrivacyWarning": "Bật STT cho WhatsApp sẽ phá vỡ mã hóa đầu cuối cho tin nhắn thoại gửi đến agent này.",
"providersRequiredError": "Phải chọn ít nhất một provider.",
"cancel": "Hủy",
"save": "Lưu",
"saving": "Đang lưu..."
}
}
}
@@ -0,0 +1,81 @@
{
"title": "Chuyển văn bản thành giọng nói",
"description": "Cấu hình provider TTS và cài đặt tự động",
"save": "Lưu",
"saving": "Đang lưu...",
"saveChanges": "Lưu thay đổi",
"status": {
"title": "Trạng thái",
"configured": "Đã cấu hình",
"disabled": "Đã tắt",
"noProvider": "Chưa cấu hình provider TTS",
"activeProvider": "Provider đang hoạt động: {{provider}}, Tự động: {{auto}}"
},
"general": {
"title": "Cài đặt chung",
"primaryProvider": "Provider chính",
"autoApplyMode": "Chế độ tự động phát",
"replyMode": "Chế độ trả lời",
"maxTextLength": "Độ dài text tối đa",
"timeout": "Thời gian chờ (ms)"
},
"providers": {
"none": "Không có (Tắt)",
"openai": "OpenAI",
"elevenlabs": "ElevenLabs",
"edge": "Edge (Miễn phí)",
"minimax": "MiniMax"
},
"autoModes": {
"off": "Tắt",
"offDesc": "Agent có thể dùng công cụ TTS thủ công",
"always": "Luôn luôn",
"alwaysDesc": "Tất cả phản hồi đều có âm thanh",
"inbound": "Đầu vào",
"inboundDesc": "Chỉ khi người dùng gửi giọng nói/âm thanh",
"tagged": "Đánh dấu",
"taggedDesc": "Chỉ khi phản hồi chứa thẻ [[tts]]"
},
"replyModes": {
"final": "Chỉ phản hồi cuối",
"finalDesc": "Chỉ phản hồi cuối cùng",
"all": "Tất cả",
"allDesc": "Tất cả phản hồi bao gồm công cụ/khối"
},
"providerSettings": "Cài đặt {{provider}}",
"openai": {
"apiKey": "API Key",
"apiBase": "API Base URL",
"model": "Model",
"voice": "Giọng nói"
},
"elevenlabs": {
"apiKey": "API Key",
"baseUrl": "Base URL",
"voiceId": "Voice ID",
"modelId": "Model ID"
},
"edge": {
"voice": "Giọng nói",
"speechRate": "Tốc độ nói",
"hint": "Edge TTS miễn phí, không cần API key. Cài đặt: pip install edge-tts"
},
"minimax": {
"apiKey": "API Key",
"groupId": "Group ID *",
"groupIdPlaceholder": "Bắt buộc cho MiniMax",
"apiBase": "API Base",
"model": "Model",
"voiceId": "Voice ID"
},
"voice_label": "Giọng đọc",
"voice_placeholder": "Chọn giọng đọc…",
"voice_refresh": "Làm mới",
"voice_preview": "Nghe thử",
"voice_stop_preview": "Dừng",
"voice_no_voices": "Chưa có giọng đọc",
"voice_loading": "Đang tải giọng đọc…",
"voice_preview_error": "Không nghe thử được — đang làm mới",
"model_label": "Mô hình",
"model_placeholder": "Mặc định (tenant/hệ thống)"
}
@@ -142,6 +142,24 @@
"skill_search": "按关键字或描述搜索可用Skill以找到相关能力",
"use_skill": "激活Skill以使用其专业能力(追踪标记)",
"team_tasks": "查看、创建、更新和完成团队任务板上的任务"
},
"sttForm": {
"title": "STT 设置",
"description": "配置语音转文字 Provider 以转录语音消息。",
"providersLabel": "Provider",
"elevenlabsSectionTitle": "ElevenLabs",
"elevenlabsApiKeyLabel": "API Key",
"elevenlabsDefaultLanguageLabel": "默认语言",
"proxySectionTitle": "代理",
"proxyUrlLabel": "代理 URL",
"proxyApiKeyLabel": "代理 API Key",
"proxyTenantIdLabel": "代理 Tenant ID",
"whatsappEnabledLabel": "为 WhatsApp 启用 STT",
"whatsappPrivacyWarning": "为 WhatsApp 启用 STT 将破坏发送给此 Agent 的语音消息的端对端加密。",
"providersRequiredError": "必须至少选择一个 Provider。",
"cancel": "取消",
"save": "保存",
"saving": "保存中..."
}
},
"custom": {
@@ -0,0 +1,81 @@
{
"title": "语音合成",
"description": "配置 TTS Provider和自动应用设置",
"save": "保存",
"saving": "保存中...",
"saveChanges": "保存更改",
"status": {
"title": "状态",
"configured": "已配置",
"disabled": "已禁用",
"noProvider": "未配置 TTS Provider",
"activeProvider": "主要Provider:{{provider}},自动:{{auto}}"
},
"general": {
"title": "常规设置",
"primaryProvider": "主要Provider",
"autoApplyMode": "自动应用模式",
"replyMode": "回复模式",
"maxTextLength": "最大文本长度",
"timeout": "超时(毫秒)"
},
"providers": {
"none": "无(已禁用)",
"openai": "OpenAI",
"elevenlabs": "ElevenLabs",
"edge": "Edge(免费)",
"minimax": "MiniMax"
},
"autoModes": {
"off": "关闭",
"offDesc": "Agent可手动使用 TTS 工具",
"always": "始终",
"alwaysDesc": "所有回复均生成音频",
"inbound": "入站",
"inboundDesc": "仅当用户发送语音/音频时",
"tagged": "标记",
"taggedDesc": "仅当回复包含 [[tts]] 标签时"
},
"replyModes": {
"final": "仅最终回复",
"finalDesc": "仅最终回复",
"all": "全部",
"allDesc": "包括工具/块在内的所有回复"
},
"providerSettings": "{{provider}} 设置",
"openai": {
"apiKey": "API Key",
"apiBase": "API Base URL",
"model": "模型",
"voice": "语音"
},
"elevenlabs": {
"apiKey": "API Key",
"baseUrl": "Base URL",
"voiceId": "Voice ID",
"modelId": "Model ID"
},
"edge": {
"voice": "语音",
"speechRate": "语速",
"hint": "Edge TTS 免费且无需 API Key。安装方式:pip install edge-tts"
},
"minimax": {
"apiKey": "API Key",
"groupId": "Group ID *",
"groupIdPlaceholder": "MiniMax 必填",
"apiBase": "API Base",
"model": "模型",
"voiceId": "Voice ID"
},
"voice_label": "声音",
"voice_placeholder": "选择声音…",
"voice_refresh": "刷新",
"voice_preview": "试听",
"voice_stop_preview": "停止",
"voice_no_voices": "暂无声音",
"voice_loading": "加载声音中…",
"voice_preview_error": "试听失败 — 正在刷新",
"model_label": "模型",
"model_placeholder": "默认(租户/系统)"
}