Spaces:
No application file
No application file
| export const settingsZhCN = { | |
| settings: { | |
| title: '设置', | |
| description: '配置应用程序设置', | |
| language: '语言', | |
| languageDesc: '选择界面语言', | |
| theme: '主题', | |
| themeDesc: '选择主题模式(浅色/深色/跟随系统)', | |
| themeOptions: { | |
| light: '浅色', | |
| dark: '深色', | |
| system: '跟随系统', | |
| }, | |
| apiKey: 'API密钥', | |
| apiKeyDesc: '配置你的API密钥', | |
| apiBaseUrl: 'API端点地址', | |
| apiBaseUrlDesc: '配置你的API端点地址', | |
| apiKeyRequired: 'API密钥不能为空', | |
| model: '模型配置', | |
| modelDesc: '配置AI模型', | |
| modelPlaceholder: '输入或选择模型名称', | |
| ttsModel: 'TTS模型', | |
| ttsModelDesc: '配置TTS模型', | |
| ttsModelPlaceholder: '输入或选择TTS模型名称', | |
| ttsModelOptions: { | |
| openaiTts: 'OpenAI TTS', | |
| azureTts: 'Azure TTS', | |
| }, | |
| testConnection: '测试连接', | |
| testConnectionDesc: '测试当前API配置是否可用', | |
| testing: '测试中...', | |
| agentSettings: '智能体设置', | |
| agentSettingsDesc: '选择参与对话的智能体。选择1个为单智能体模式,选择多个为多智能体协作模式。', | |
| agentMode: '智能体模式', | |
| agentModePreset: '预设模式', | |
| agentModeAuto: '自动生成', | |
| agentModeAutoDesc: 'AI 将根据课程内容自动生成适合的课堂角色', | |
| autoAgentCount: '生成数量', | |
| autoAgentCountDesc: '自动生成的角色数量(包含教师)', | |
| atLeastOneAgent: '请至少选择1个智能体', | |
| singleAgentMode: '单智能体模式', | |
| directAnswer: '直接回答', | |
| multiAgentMode: '多智能体模式', | |
| agentsCollaborating: '协作讨论', | |
| agentsCollaboratingCount: '已选择 {count} 个智能体协作讨论', | |
| maxTurns: '最大讨论轮数', | |
| maxTurnsDesc: '智能体之间最多讨论多少轮(每个智能体完成动作并回复算一轮)', | |
| priority: '优先级', | |
| actions: '动作', | |
| actionCount: '{count} 个动作', | |
| selectedAgent: '选中的智能体', | |
| selectedAgents: '选中的智能体', | |
| required: '必选', | |
| agentNames: { | |
| 'default-1': 'AI教师', | |
| 'default-2': 'AI助教', | |
| 'default-3': '显眼包', | |
| 'default-4': '好奇宝宝', | |
| 'default-5': '笔记员', | |
| 'default-6': '思考者', | |
| }, | |
| agentRoles: { | |
| teacher: '教师', | |
| assistant: '助教', | |
| student: '学生', | |
| }, | |
| agentDescriptions: { | |
| 'default-1': '主讲教师,清晰有条理地讲解知识', | |
| 'default-2': '辅助讲解,帮助同学理解重点', | |
| 'default-3': '活跃气氛,用幽默让课堂更有趣', | |
| 'default-4': '充满好奇心,总爱追问为什么', | |
| 'default-5': '认真记录,整理课堂重点笔记', | |
| 'default-6': '深入思考,喜欢探讨问题本质', | |
| }, | |
| close: '关闭', | |
| save: '保存', | |
| // Provider settings | |
| providers: '语言模型', | |
| addProviderDescription: '添加自定义模型提供方以扩展可用的AI模型', | |
| providerNames: { | |
| openai: 'OpenAI', | |
| anthropic: 'Claude', | |
| google: 'Gemini', | |
| deepseek: 'DeepSeek', | |
| qwen: '通义千问', | |
| kimi: 'Kimi', | |
| minimax: 'MiniMax', | |
| glm: 'GLM', | |
| siliconflow: '硅基流动', | |
| }, | |
| providerTypes: { | |
| openai: 'OpenAI 协议', | |
| anthropic: 'Claude 协议', | |
| google: 'Gemini 协议', | |
| }, | |
| modelCount: '个模型', | |
| modelSingular: '个模型', | |
| defaultModel: '默认模型', | |
| webSearch: '联网搜索', | |
| mcp: 'MCP', | |
| knowledgeBase: '知识库', | |
| documentParser: '文档解析器', | |
| conversationSettings: '对话设置', | |
| keyboardShortcuts: '键盘快捷键', | |
| generalSettings: '常规设置', | |
| systemSettings: '系统设置', | |
| addProvider: '添加', | |
| importFromClipboard: '从剪贴板导入', | |
| apiSecret: 'API 密钥', | |
| apiHost: 'Base URL', | |
| requestUrl: '请求地址', | |
| models: '模型', | |
| addModel: '新建', | |
| reset: '重置', | |
| fetch: '获取', | |
| connectionSuccess: '连接成功', | |
| connectionFailed: '连接失败', | |
| // Model capabilities | |
| capabilities: { | |
| vision: '视觉', | |
| tools: '工具', | |
| streaming: '流式', | |
| }, | |
| contextWindow: '上下文', | |
| contextShort: '上下文', | |
| outputWindow: '输出', | |
| // Provider management | |
| addProviderButton: '添加', | |
| addProviderDialog: '添加模型提供方', | |
| providerName: '名称', | |
| providerNamePlaceholder: '例如:我的OpenAI代理', | |
| providerNameRequired: '请输入提供方名称', | |
| providerApiMode: 'API 模式', | |
| apiModeOpenAI: 'OpenAI 协议', | |
| apiModeAnthropic: 'Claude 协议', | |
| apiModeGoogle: 'Gemini 协议', | |
| defaultBaseUrl: '默认 Base URL', | |
| providerIcon: 'Provider 图标 URL', | |
| requiresApiKey: '需要 API 密钥', | |
| deleteProvider: '删除提供方', | |
| deleteProviderConfirm: '确定要删除此提供方吗?', | |
| cannotDeleteBuiltIn: '无法删除内置提供方', | |
| resetToDefault: '重置为默认配置', | |
| resetToDefaultDescription: '将模型列表恢复到默认状态(保留 API 密钥和 Base URL)', | |
| resetConfirmDescription: | |
| '此操作将清除所有自定义模型,恢复到内置的默认模型列表。API 密钥和 Base URL 将被保留。', | |
| confirmReset: '确认重置', | |
| resetSuccess: '已成功重置为默认配置', | |
| saveSuccess: '配置已保存', | |
| saveFailed: '保存失败,请重试', | |
| cannotDeleteBuiltInModel: '无法删除内置模型', | |
| cannotEditBuiltInModel: '无法编辑内置模型', | |
| modelIdRequired: '请输入模型 ID', | |
| noModelsAvailable: '没有可用于测试的模型', | |
| providerMetadata: 'Provider 元数据', | |
| // Model editing | |
| editModel: '编辑模型', | |
| editModelDescription: '编辑模型配置和能力', | |
| addNewModel: '新建模型', | |
| addNewModelDescription: '添加新的模型配置', | |
| modelId: '模型ID', | |
| modelIdPlaceholder: '例如:gpt-4o', | |
| modelName: '显示名称', | |
| modelNamePlaceholder: '可选', | |
| modelCapabilities: '能力', | |
| advancedSettings: '高级设置', | |
| contextWindowLabel: '上下文窗口', | |
| contextWindowPlaceholder: '例如 128000', | |
| outputWindowLabel: '最大输出Token数', | |
| outputWindowPlaceholder: '例如 4096', | |
| testModel: '测试模型', | |
| deleteModel: '删除', | |
| cancelEdit: '取消', | |
| saveModel: '保存', | |
| modelsManagementDescription: | |
| '在此管理该提供方的模型列表。若需选择使用的模型,请前往"常规设置"。', | |
| // General settings | |
| howToUse: '使用说明', | |
| step1ConfigureProvider: | |
| '前往"模型提供方"页面,选择或添加一个提供方,配置连接信息(API 密钥、Base URL 等)', | |
| step2SelectModel: '在下方"使用模型"中选择要使用的模型', | |
| step3StartUsing: '保存设置后,系统将使用您选择的模型', | |
| activeModel: '使用模型', | |
| activeModelDescription: '选择当前用于 AI 对话和内容生成的模型', | |
| selectModel: '选择模型', | |
| searchModels: '搜索模型', | |
| noModelsFound: '未找到匹配的模型', | |
| noConfiguredProviders: '暂无已配置的提供方', | |
| configureProvidersFirst: '请先在左侧"模型提供方"中配置提供方连接信息', | |
| currentlyUsing: '当前使用', | |
| // TTS settings | |
| ttsSettings: '语音合成', | |
| // ASR settings | |
| asrSettings: '语音识别', | |
| // Audio settings (legacy) | |
| audioSettings: '音频设置', | |
| ttsSection: '文字转语音 (TTS)', | |
| asrSection: '语音识别 (ASR)', | |
| ttsDescription: 'TTS (Text-to-Speech) - 将文字转换为语音', | |
| asrDescription: 'ASR (Automatic Speech Recognition) - 将语音转换为文字', | |
| enableTTS: '启用语音合成', | |
| ttsEnabledDescription: '开启后,课程生成时将自动合成语音', | |
| enableASR: '启用语音识别', | |
| asrEnabledDescription: '开启后,学生可使用麦克风进行语音输入', | |
| ttsProvider: 'TTS 提供商', | |
| ttsLanguageFilter: '语言筛选', | |
| allLanguages: '全部语言', | |
| ttsVoice: '音色', | |
| ttsSpeed: '语速', | |
| ttsBaseUrl: 'Base URL', | |
| ttsApiKey: 'API 密钥', | |
| asrProvider: 'ASR 提供商', | |
| asrLanguage: '识别语言', | |
| asrBaseUrl: 'Base URL', | |
| asrApiKey: 'API 密钥', | |
| enterApiKey: '输入 API Key', | |
| enterCustomBaseUrl: '输入自定义 Base URL', | |
| browserNativeNote: '浏览器原生 ASR 无需配置,完全免费', | |
| // Audio provider names | |
| providerOpenAITTS: 'OpenAI TTS (gpt-4o-mini-tts)', | |
| providerAzureTTS: 'Azure TTS', | |
| providerGLMTTS: 'GLM TTS', | |
| providerQwenTTS: 'Qwen TTS(阿里云百炼)', | |
| providerBrowserNativeTTS: '浏览器原生 TTS', | |
| providerOpenAIWhisper: 'OpenAI ASR (gpt-4o-mini-transcribe)', | |
| providerBrowserNative: '浏览器原生 ASR', | |
| providerQwenASR: 'Qwen ASR(阿里云百炼)', | |
| providerUnpdf: 'unpdf(内置)', | |
| providerMinerU: 'MinerU', | |
| browserNativeTTSNote: '浏览器原生 TTS 无需配置,完全免费,使用系统内置语音', | |
| testTTS: '测试 TTS', | |
| testASR: '测试 ASR', | |
| testSuccess: '测试成功', | |
| testFailed: '测试失败', | |
| ttsTestText: 'TTS 测试文本', | |
| ttsTestSuccess: 'TTS 测试成功,音频已播放', | |
| ttsTestFailed: 'TTS 测试失败', | |
| asrTestSuccess: '语音识别成功', | |
| asrTestFailed: '语音识别失败', | |
| asrResult: '识别结果', | |
| asrNotSupported: '浏览器不支持语音识别 API', | |
| browserTTSNotSupported: '浏览器不支持语音合成 API', | |
| browserTTSNoVoices: '当前浏览器没有可用的 TTS voice', | |
| microphoneAccessDenied: '麦克风访问被拒绝', | |
| microphoneAccessFailed: '无法访问麦克风', | |
| asrResultPlaceholder: '录音后将显示识别结果', | |
| useThisProvider: '使用此提供商', | |
| fetchVoices: '获取音色列表', | |
| fetchingVoices: '获取中...', | |
| voicesFetched: '已获取音色', | |
| fetchVoicesFailed: '获取音色失败', | |
| voiceApiKeyRequired: '需要 API 密钥', | |
| voiceBaseUrlRequired: '需要 Base URL', | |
| ttsTestTextPlaceholder: '输入要转换的文本', | |
| ttsTestTextDefault: '你好,这是一段测试语音。', | |
| startRecording: '开始录音', | |
| stopRecording: '停止录音', | |
| recording: '录音中...', | |
| transcribing: '识别中...', | |
| transcriptionResult: '识别结果', | |
| noTranscriptionResult: '无识别结果', | |
| baseUrlOptional: 'Base URL(可选)', | |
| defaultValue: '默认', | |
| // TTS Voice descriptions (OpenAI) | |
| voiceMarin: '推荐 - 最佳质量', | |
| voiceCedar: '推荐 - 最佳质量', | |
| voiceAlloy: '中性、平衡', | |
| voiceAsh: '沉稳、专业', | |
| voiceBallad: '优雅、抒情', | |
| voiceCoral: '温暖、友好', | |
| voiceEcho: '男性、清晰', | |
| voiceFable: '叙事、生动', | |
| voiceNova: '女性、明亮', | |
| voiceOnyx: '男性、深沉', | |
| voiceSage: '智慧、沉着', | |
| voiceShimmer: '女性、柔和', | |
| voiceVerse: '自然、流畅', | |
| // TTS Voice descriptions (GLM) | |
| glmVoiceTongtong: '默认音色', | |
| glmVoiceChuichui: '锤锤音色', | |
| glmVoiceXiaochen: '小陈音色', | |
| glmVoiceJam: '动动动物圈jam音色', | |
| glmVoiceKazi: '动动动物圈kazi音色', | |
| glmVoiceDouji: '动动动物圈douji音色', | |
| glmVoiceLuodo: '动动动物圈luodo音色', | |
| // TTS Voice descriptions (Qwen) | |
| qwenVoiceCherry: '阳光积极、亲切自然小姐姐', | |
| qwenVoiceSerena: '温柔小姐姐', | |
| qwenVoiceEthan: '阳光、温暖、活力、朝气', | |
| qwenVoiceChelsie: '二次元虚拟女友', | |
| qwenVoiceMomo: '撒娇搞怪,逗你开心', | |
| qwenVoiceVivian: '拽拽的、可爱的小暴躁', | |
| qwenVoiceMoon: '率性帅气', | |
| qwenVoiceMaia: '知性与温柔的碰撞', | |
| qwenVoiceKai: '耳朵的一场SPA', | |
| qwenVoiceNofish: '不会翘舌音的设计师', | |
| qwenVoiceBella: '喝酒不打醉拳的小萝莉', | |
| qwenVoiceJennifer: '品牌级、电影质感般美语女声', | |
| qwenVoiceRyan: '节奏拉满,戏感炸裂,真实与张力共舞', | |
| qwenVoiceKaterina: '御姐音色,韵律回味十足', | |
| qwenVoiceAiden: '精通厨艺的美语大男孩', | |
| qwenVoiceEldricSage: '沉稳睿智的老者,沧桑如松却心明如镜', | |
| qwenVoiceMia: '温顺如春水,乖巧如初雪', | |
| qwenVoiceMochi: '聪明伶俐的小大人,童真未泯却早慧如禅', | |
| qwenVoiceBellona: '声音洪亮,吐字清晰,人物鲜活,听得人热血沸腾', | |
| qwenVoiceVincent: '一口独特的沙哑烟嗓,一开口便道尽了千军万马与江湖豪情', | |
| qwenVoiceBunny: '"萌属性"爆棚的小萝莉', | |
| qwenVoiceNeil: '专业新闻主持人', | |
| qwenVoiceElias: '专业讲师音色', | |
| qwenVoiceArthur: '被岁月和旱烟浸泡过的质朴嗓音', | |
| qwenVoiceNini: '糯米糍一样又软又黏的嗓音,那一声声拉长了的"哥哥"', | |
| qwenVoiceEbona: '她的低语像一把生锈的钥匙,缓慢转动你内心最深处的幽暗角落', | |
| qwenVoiceSeren: '温和舒缓的声线,助你更快地进入睡眠', | |
| qwenVoicePip: '调皮捣蛋却充满童真的他来了', | |
| qwenVoiceStella: | |
| '平时是甜到发腻的迷糊少女音,但在喊出"代表月亮消灭你"时,瞬间充满不容置疑的爱与正义', | |
| qwenVoiceBodega: '热情的西班牙大叔', | |
| qwenVoiceSonrisa: '热情开朗的拉美大姐', | |
| qwenVoiceAlek: '一开口,是战斗民族的冷,也是毛呢大衣下的暖', | |
| qwenVoiceDolce: '慵懒的意大利大叔', | |
| qwenVoiceSohee: '温柔开朗,情绪丰富的韩国欧尼', | |
| qwenVoiceOnoAnna: '鬼灵精怪的青梅竹马', | |
| qwenVoiceLenn: '理性是底色,叛逆藏在细节里——穿西装也听后朋克的德国青年', | |
| qwenVoiceEmilien: '浪漫的法国大哥哥', | |
| qwenVoiceAndre: '声音磁性,自然舒服、沉稳男生', | |
| qwenVoiceRadioGol: '足球诗人Rádio Gol!今天我要用名字为你们解说足球', | |
| qwenVoiceJada: '风风火火的沪上阿姐', | |
| qwenVoiceDylan: '北京胡同里长大的少年', | |
| qwenVoiceLi: '耐心的瑜伽老师', | |
| qwenVoiceMarcus: '面宽话短,心实声沉——老陕的味道', | |
| qwenVoiceRoy: '诙谐直爽、市井活泼的台湾哥仔形象', | |
| qwenVoicePeter: '天津相声,专业捧哏', | |
| qwenVoiceSunny: '甜到你心里的川妹子', | |
| qwenVoiceEric: '跳脱市井的成都男子', | |
| qwenVoiceRocky: '幽默风趣的阿强', | |
| qwenVoiceKiki: '甜美的港妹闺蜜', | |
| // ASR Language names (native forms - autoglossonyms) | |
| lang_auto: '自动检测', | |
| lang_zh: '中文', | |
| lang_yue: '粤語', | |
| lang_en: 'English', | |
| lang_ja: '日本語', | |
| lang_ko: '한국어', | |
| lang_es: 'Español', | |
| lang_fr: 'Français', | |
| lang_de: 'Deutsch', | |
| lang_ru: 'Русский', | |
| lang_ar: 'العربية', | |
| lang_pt: 'Português', | |
| lang_it: 'Italiano', | |
| lang_af: 'Afrikaans', | |
| lang_hy: 'Հայերեն', | |
| lang_az: 'Azərbaycan', | |
| lang_be: 'Беларуская', | |
| lang_bs: 'Bosanski', | |
| lang_bg: 'Български', | |
| lang_ca: 'Català', | |
| lang_hr: 'Hrvatski', | |
| lang_cs: 'Čeština', | |
| lang_da: 'Dansk', | |
| lang_nl: 'Nederlands', | |
| lang_et: 'Eesti', | |
| lang_fi: 'Suomi', | |
| lang_gl: 'Galego', | |
| lang_el: 'Ελληνικά', | |
| lang_he: 'עברית', | |
| lang_hi: 'हिन्दी', | |
| lang_hu: 'Magyar', | |
| lang_is: 'Íslenska', | |
| lang_id: 'Bahasa Indonesia', | |
| lang_kn: 'ಕನ್ನಡ', | |
| lang_kk: 'Қазақша', | |
| lang_lv: 'Latviešu', | |
| lang_lt: 'Lietuvių', | |
| lang_mk: 'Македонски', | |
| lang_ms: 'Bahasa Melayu', | |
| lang_mr: 'मराठी', | |
| lang_mi: 'Te Reo Māori', | |
| lang_ne: 'नेपाली', | |
| lang_no: 'Norsk', | |
| lang_fa: 'فارسی', | |
| lang_pl: 'Polski', | |
| lang_ro: 'Română', | |
| lang_sr: 'Српски', | |
| lang_sk: 'Slovenčina', | |
| lang_sl: 'Slovenščina', | |
| lang_sw: 'Kiswahili', | |
| lang_sv: 'Svenska', | |
| lang_tl: 'Tagalog', | |
| lang_fil: 'Filipino', | |
| lang_ta: 'தமிழ்', | |
| lang_th: 'ไทย', | |
| lang_tr: 'Türkçe', | |
| lang_uk: 'Українська', | |
| lang_ur: 'اردو', | |
| lang_vi: 'Tiếng Việt', | |
| lang_cy: 'Cymraeg', | |
| // BCP-47 format language codes (for Web Speech API) | |
| 'lang_zh-CN': '中文(简体,中国)', | |
| 'lang_zh-TW': '中文(繁體,台灣)', | |
| 'lang_zh-HK': '粵語(香港)', | |
| 'lang_yue-Hant-HK': '粵語(繁體)', | |
| 'lang_en-US': 'English (United States)', | |
| 'lang_en-GB': 'English (United Kingdom)', | |
| 'lang_en-AU': 'English (Australia)', | |
| 'lang_en-CA': 'English (Canada)', | |
| 'lang_en-IN': 'English (India)', | |
| 'lang_en-NZ': 'English (New Zealand)', | |
| 'lang_en-ZA': 'English (South Africa)', | |
| 'lang_ja-JP': '日本語(日本)', | |
| 'lang_ko-KR': '한국어(대한민국)', | |
| 'lang_de-DE': 'Deutsch (Deutschland)', | |
| 'lang_fr-FR': 'Français (France)', | |
| 'lang_es-ES': 'Español (España)', | |
| 'lang_es-MX': 'Español (México)', | |
| 'lang_es-AR': 'Español (Argentina)', | |
| 'lang_es-CO': 'Español (Colombia)', | |
| 'lang_it-IT': 'Italiano (Italia)', | |
| 'lang_pt-BR': 'Português (Brasil)', | |
| 'lang_pt-PT': 'Português (Portugal)', | |
| 'lang_ru-RU': 'Русский (Россия)', | |
| 'lang_nl-NL': 'Nederlands (Nederland)', | |
| 'lang_pl-PL': 'Polski (Polska)', | |
| 'lang_cs-CZ': 'Čeština (Česko)', | |
| 'lang_da-DK': 'Dansk (Danmark)', | |
| 'lang_fi-FI': 'Suomi (Suomi)', | |
| 'lang_sv-SE': 'Svenska (Sverige)', | |
| 'lang_no-NO': 'Norsk (Norge)', | |
| 'lang_tr-TR': 'Türkçe (Türkiye)', | |
| 'lang_el-GR': 'Ελληνικά (Ελλάδα)', | |
| 'lang_hu-HU': 'Magyar (Magyarország)', | |
| 'lang_ro-RO': 'Română (România)', | |
| 'lang_sk-SK': 'Slovenčina (Slovensko)', | |
| 'lang_bg-BG': 'Български (България)', | |
| 'lang_hr-HR': 'Hrvatski (Hrvatska)', | |
| 'lang_ca-ES': 'Català (Espanya)', | |
| 'lang_ar-SA': 'العربية (السعودية)', | |
| 'lang_ar-EG': 'العربية (مصر)', | |
| 'lang_he-IL': 'עברית (ישראל)', | |
| 'lang_hi-IN': 'हिन्दी (भारत)', | |
| 'lang_th-TH': 'ไทย (ประเทศไทย)', | |
| 'lang_vi-VN': 'Tiếng Việt (Việt Nam)', | |
| 'lang_id-ID': 'Bahasa Indonesia (Indonesia)', | |
| 'lang_ms-MY': 'Bahasa Melayu (Malaysia)', | |
| 'lang_fil-PH': 'Filipino (Pilipinas)', | |
| 'lang_af-ZA': 'Afrikaans (Suid-Afrika)', | |
| 'lang_uk-UA': 'Українська (Україна)', | |
| // PDF settings | |
| pdfSettings: 'PDF 解析', | |
| pdfParsingSettings: 'PDF 解析设置', | |
| pdfDescription: '选择 PDF 解析引擎,支持文本提取、图片处理和表格识别', | |
| pdfProvider: 'PDF 解析器', | |
| pdfFeatures: '支持功能', | |
| pdfApiKey: 'API Key', | |
| pdfBaseUrl: 'Base URL', | |
| mineruDescription: | |
| 'MinerU 是一个商用 PDF 解析服务,支持高级功能如表格提取、公式识别和布局分析。', | |
| mineruApiKeyRequired: '使用前需要在 MinerU 官网申请 API Key。', | |
| mineruWarning: '注意', | |
| mineruCostWarning: 'MinerU 为商用服务,使用可能产生费用。请查看 MinerU 官网了解定价详情。', | |
| enterMinerUApiKey: '输入 MinerU API Key', | |
| mineruLocalDescription: | |
| 'MinerU 支持本地部署,提供高级 PDF 解析功能(表格、公式、布局分析)。需要先部署 MinerU 服务。', | |
| mineruServerAddress: '本地 MinerU 服务器地址(如:http://localhost:8080)', | |
| mineruApiKeyOptional: '仅在服务器启用认证时需要', | |
| optionalApiKey: '可选的 API Key', | |
| featureText: '文本提取', | |
| featureImages: '图片提取', | |
| featureTables: '表格提取', | |
| featureFormulas: '公式识别', | |
| featureLayoutAnalysis: '布局分析', | |
| featureMetadata: '元数据', | |
| // Image Generation settings | |
| enableImageGeneration: '启用 AI 图片生成', | |
| imageGenerationDisabledHint: '启用后,课程生成时将自动生成配图', | |
| imageSettings: '图像生成', | |
| imageSection: '文生图', | |
| imageProvider: '图像生成提供商', | |
| imageModel: '图像生成模型', | |
| providerSeedream: 'Seedream(字节豆包)', | |
| providerQwenImage: 'Qwen Image(阿里通义)', | |
| providerNanoBanana: 'Nano Banana(Gemini)', | |
| testImageGeneration: '测试图像生成', | |
| testImageConnectivity: '测试连接', | |
| imageConnectivitySuccess: '图像服务连接成功', | |
| imageConnectivityFailed: '图像服务连接失败', | |
| imageTestSuccess: '图像生成测试成功', | |
| imageTestFailed: '图像生成测试失败', | |
| imageTestPromptPlaceholder: '输入图像描述进行测试', | |
| imageTestPromptDefault: '一只可爱的猫咪坐在书桌上', | |
| imageGenerating: '正在生成图像...', | |
| imageGenerationFailed: '图像生成失败', | |
| // Video Generation settings | |
| enableVideoGeneration: '启用 AI 视频生成', | |
| videoGenerationDisabledHint: '启用后,课程生成时将自动生成视频', | |
| videoSettings: '视频生成', | |
| videoSection: '文生视频', | |
| videoProvider: '视频生成提供商', | |
| videoModel: '视频生成模型', | |
| providerSeedance: 'Seedance(字节跳动)', | |
| providerKling: '可灵(快手)', | |
| providerVeo: 'Veo(Google)', | |
| providerSora: 'Sora(OpenAI)', | |
| testVideoGeneration: '测试视频生成', | |
| testVideoConnectivity: '测试连接', | |
| videoConnectivitySuccess: '视频服务连接成功', | |
| videoConnectivityFailed: '视频服务连接失败', | |
| testingConnection: '正在测试...', | |
| videoTestSuccess: '视频生成测试成功', | |
| videoTestFailed: '视频生成测试失败', | |
| videoTestPromptDefault: '一只可爱的猫咪在书桌上行走', | |
| videoGenerating: '正在生成视频(预计1-2分钟)...', | |
| videoGenerationWarning: '视频生成通常需要1-2分钟,请耐心等待', | |
| mediaRetry: '重试', | |
| mediaContentSensitive: '抱歉,该内容触发了安全检查', | |
| mediaGenerationDisabled: '已在设置中关闭生成', | |
| // Agent settings (kept with main settings block above) | |
| singleAgent: '单智能体模式', | |
| multiAgent: '多智能体模式', | |
| selectAgents: '选择智能体', | |
| noVisionWarning: | |
| '当前模型不支持视觉能力,图片仍可放入幻灯片,但模型无法理解图片内容来优化选择和布局', | |
| // Server provider configuration | |
| serverConfigured: '服务端', | |
| serverConfiguredNotice: | |
| '管理员已在服务端配置了此提供方的 API Key,可直接使用。也可输入自己的 Key 覆盖。', | |
| optionalOverride: '可选,留空则使用服务端配置', | |
| // Access code | |
| setupNeeded: '请先完成配置', | |
| modelNotConfigured: '请选择一个模型以开始使用', | |
| // Clear cache | |
| dangerZone: '危险区域', | |
| clearCache: '清空本地缓存', | |
| clearCacheDescription: | |
| '删除所有本地存储的数据,包括课堂记录、对话历史、音频缓存和应用配置。此操作不可撤销。', | |
| clearCacheConfirmTitle: '确定要清空所有缓存吗?', | |
| clearCacheConfirmDescription: '此操作将永久删除以下所有数据,且无法恢复:', | |
| clearCacheConfirmItems: '课堂和场景数据、对话历史记录、音频和图片缓存、应用设置和偏好', | |
| clearCacheConfirmInput: '请输入「确认删除」以继续', | |
| clearCacheConfirmPhrase: '确认删除', | |
| clearCacheButton: '永久删除所有数据', | |
| clearCacheSuccess: '缓存已清空,页面即将刷新', | |
| clearCacheFailed: '清空缓存失败,请重试', | |
| // Web Search settings | |
| webSearchSettings: '网络搜索', | |
| webSearchApiKey: 'Tavily API Key', | |
| webSearchApiKeyPlaceholder: '输入你的 Tavily API Key', | |
| webSearchApiKeyPlaceholderServer: '已配置服务端密钥,可选填覆盖', | |
| webSearchApiKeyHint: '从 tavily.com 获取 API Key,用于网络搜索', | |
| webSearchBaseUrl: 'Base URL', | |
| webSearchServerConfigured: '服务端已配置 Tavily API Key', | |
| optional: '可选', | |
| }, | |
| profile: { | |
| title: '个人资料', | |
| defaultNickname: '同学', | |
| chooseAvatar: '选择头像', | |
| uploadAvatar: '上传', | |
| bioPlaceholder: '介绍一下自己,AI老师会根据你的背景个性化教学...', | |
| avatarHint: '你的头像将显示在课堂讨论和对话中', | |
| fileTooLarge: '图片过大,请选择小于 5MB 的图片', | |
| invalidFileType: '请选择图片文件', | |
| editTooltip: '点击编辑个人资料', | |
| }, | |
| media: { | |
| imageCapability: '图像生成', | |
| imageHint: '课件中生成配图', | |
| videoCapability: '视频生成', | |
| videoHint: '课件中生成视频', | |
| ttsCapability: '语音合成', | |
| ttsHint: 'AI 老师语音讲解', | |
| asrCapability: '语音识别', | |
| asrHint: '语音输入参与讨论', | |
| provider: '服务商', | |
| model: '模型', | |
| voice: '音色', | |
| speed: '语速', | |
| language: '语言', | |
| }, | |
| } as const; | |
| export const settingsEnUS = { | |
| settings: { | |
| title: 'Settings', | |
| description: 'Configure application settings', | |
| language: 'Language', | |
| languageDesc: 'Select interface language', | |
| theme: 'Theme', | |
| themeDesc: 'Select theme mode (Light/Dark/System)', | |
| themeOptions: { | |
| light: 'Light', | |
| dark: 'Dark', | |
| system: 'System', | |
| }, | |
| apiKey: 'API Key', | |
| apiKeyDesc: 'Configure your API key', | |
| apiBaseUrl: 'API Endpoint URL', | |
| apiBaseUrlDesc: 'Configure your API endpoint URL', | |
| apiKeyRequired: 'API key cannot be empty', | |
| model: 'Model Configuration', | |
| modelDesc: 'Configure AI models', | |
| modelPlaceholder: 'Enter or select model name', | |
| ttsModel: 'TTS Model', | |
| ttsModelDesc: 'Configure TTS models', | |
| ttsModelPlaceholder: 'Enter or select TTS model name', | |
| ttsModelOptions: { | |
| openaiTts: 'OpenAI TTS', | |
| azureTts: 'Azure TTS', | |
| }, | |
| testConnection: 'Test Connection', | |
| testConnectionDesc: 'Test current API configuration is available', | |
| testing: 'Testing...', | |
| agentSettings: 'Agent Settings', | |
| agentSettingsDesc: | |
| 'Select the agents to participate in the conversation. Select 1 for single agent mode, select multiple for multi-agent collaborative mode.', | |
| agentMode: 'Agent Mode', | |
| agentModePreset: 'Preset', | |
| agentModeAuto: 'Auto-generate', | |
| agentModeAutoDesc: 'AI will automatically generate appropriate roles', | |
| autoAgentCount: 'Agent Count', | |
| autoAgentCountDesc: 'Number of agents to auto-generate (including teacher)', | |
| atLeastOneAgent: 'Please select at least 1 agent', | |
| singleAgentMode: 'Single Agent Mode', | |
| directAnswer: 'Direct Answer', | |
| multiAgentMode: 'Multi-Agent Mode', | |
| agentsCollaborating: 'Collaborative Discussion', | |
| agentsCollaboratingCount: '{count} agents selected for collaborative discussion', | |
| maxTurns: 'Max Discussion Turns', | |
| maxTurnsDesc: | |
| 'The maximum number of discussion turns between agents (each agent completes actions and reply counts as one turn)', | |
| priority: 'Priority', | |
| actions: 'Actions', | |
| actionCount: '{count} actions', | |
| selectedAgent: 'Selected Agent', | |
| selectedAgents: 'Selected Agents', | |
| required: 'Required', | |
| agentNames: { | |
| 'default-1': 'AI Teacher', | |
| 'default-2': 'AI Assistant', | |
| 'default-3': 'Class Clown', | |
| 'default-4': 'Curious Mind', | |
| 'default-5': 'Note Taker', | |
| 'default-6': 'Deep Thinker', | |
| }, | |
| agentRoles: { | |
| teacher: 'Teacher', | |
| assistant: 'Assistant', | |
| student: 'Student', | |
| }, | |
| agentDescriptions: { | |
| 'default-1': 'Lead teacher with clear and structured explanations', | |
| 'default-2': 'Supports learning and helps clarify key points', | |
| 'default-3': 'Brings humor and energy to the classroom', | |
| 'default-4': 'Always curious, loves asking why and how', | |
| 'default-5': 'Diligently records and organizes class notes', | |
| 'default-6': 'Thinks deeply and explores the essence of topics', | |
| }, | |
| close: 'Close', | |
| save: 'Save', | |
| // Provider settings | |
| providers: 'LLM', | |
| addProviderDescription: 'Add custom model providers to extend available AI models', | |
| providerNames: { | |
| openai: 'OpenAI', | |
| anthropic: 'Claude', | |
| google: 'Gemini', | |
| deepseek: 'DeepSeek', | |
| qwen: 'Qwen', | |
| kimi: 'Kimi', | |
| minimax: 'MiniMax', | |
| glm: 'GLM', | |
| siliconflow: 'SiliconFlow', | |
| }, | |
| providerTypes: { | |
| openai: 'OpenAI Protocol', | |
| anthropic: 'Claude Protocol', | |
| google: 'Gemini Protocol', | |
| }, | |
| modelCount: 'models', | |
| modelSingular: 'model', | |
| defaultModel: 'Default Model', | |
| webSearch: 'Web Search', | |
| mcp: 'MCP', | |
| knowledgeBase: 'Knowledge Base', | |
| documentParser: 'Document Parser', | |
| conversationSettings: 'Conversation', | |
| keyboardShortcuts: 'Shortcuts', | |
| generalSettings: 'General', | |
| systemSettings: 'System', | |
| addProvider: 'Add', | |
| importFromClipboard: 'Import from Clipboard', | |
| apiSecret: 'API Key', | |
| apiHost: 'Base URL', | |
| requestUrl: 'Request URL', | |
| models: 'Models', | |
| addModel: 'New', | |
| reset: 'Reset', | |
| fetch: 'Fetch', | |
| connectionSuccess: 'Connection successful', | |
| connectionFailed: 'Connection failed', | |
| // Model capabilities | |
| capabilities: { | |
| vision: 'Vision', | |
| tools: 'Tools', | |
| streaming: 'Streaming', | |
| }, | |
| contextWindow: 'Context', | |
| contextShort: 'ctx', | |
| outputWindow: 'Output', | |
| // Provider management | |
| addProviderButton: 'Add', | |
| addProviderDialog: 'Add Model Provider', | |
| providerName: 'Name', | |
| providerNamePlaceholder: 'e.g., My OpenAI Proxy', | |
| providerNameRequired: 'Please enter provider name', | |
| providerApiMode: 'API Mode', | |
| apiModeOpenAI: 'OpenAI Protocol', | |
| apiModeAnthropic: 'Claude Protocol', | |
| apiModeGoogle: 'Gemini Protocol', | |
| defaultBaseUrl: 'Default Base URL', | |
| providerIcon: 'Provider Icon URL', | |
| requiresApiKey: 'Requires API Key', | |
| deleteProvider: 'Delete Provider', | |
| deleteProviderConfirm: 'Are you sure you want to delete this provider?', | |
| cannotDeleteBuiltIn: 'Cannot delete built-in provider', | |
| resetToDefault: 'Reset to Default', | |
| resetToDefaultDescription: | |
| 'Restore model list to default configuration (API key and Base URL will be preserved)', | |
| resetConfirmDescription: | |
| 'This will remove all custom models and restore the built-in default model list. API key and Base URL will be preserved.', | |
| confirmReset: 'Confirm Reset', | |
| resetSuccess: 'Successfully reset to default configuration', | |
| saveSuccess: 'Settings saved', | |
| saveFailed: 'Failed to save settings, please try again', | |
| cannotDeleteBuiltInModel: 'Cannot delete built-in model', | |
| cannotEditBuiltInModel: 'Cannot edit built-in model', | |
| modelIdRequired: 'Please enter model ID', | |
| noModelsAvailable: 'No models available for testing', | |
| providerMetadata: 'Provider Metadata', | |
| // Model editing | |
| editModel: 'Edit Model', | |
| editModelDescription: 'Edit model configuration and capabilities', | |
| addNewModel: 'New Model', | |
| addNewModelDescription: 'Add a new model configuration', | |
| modelId: 'Model ID', | |
| modelIdPlaceholder: 'e.g., gpt-4o', | |
| modelName: 'Display Name', | |
| modelNamePlaceholder: 'Optional', | |
| modelCapabilities: 'Capabilities', | |
| advancedSettings: 'Advanced Settings', | |
| contextWindowLabel: 'Context Window', | |
| contextWindowPlaceholder: 'e.g., 128000', | |
| outputWindowLabel: 'Max Output Tokens', | |
| outputWindowPlaceholder: 'e.g., 4096', | |
| testModel: 'Test Model', | |
| deleteModel: 'Delete', | |
| cancelEdit: 'Cancel', | |
| saveModel: 'Save', | |
| modelsManagementDescription: | |
| 'Manage models for this provider. To select the active model, go to "General".', | |
| // General settings | |
| howToUse: 'How to Use', | |
| step1ConfigureProvider: | |
| 'Go to "Model Providers", select or add a provider, and configure connection settings (API key, Base URL, etc.)', | |
| step2SelectModel: 'Select the model you want to use in "Active Model" below', | |
| step3StartUsing: 'After saving, the system will use your selected model', | |
| activeModel: 'Active Model', | |
| activeModelDescription: 'Select the model for AI conversations and content generation', | |
| selectModel: 'Select Model', | |
| searchModels: 'Search models', | |
| noModelsFound: 'No matching models found', | |
| noConfiguredProviders: 'No configured providers', | |
| configureProvidersFirst: | |
| 'Please configure provider connection settings in "Model Providers" on the left', | |
| currentlyUsing: 'Currently using', | |
| // TTS settings | |
| ttsSettings: 'Text-to-Speech', | |
| // ASR settings | |
| asrSettings: 'Speech Recognition', | |
| // Audio settings (legacy) | |
| audioSettings: 'Audio Settings', | |
| ttsSection: 'Text-to-Speech (TTS)', | |
| asrSection: 'Automatic Speech Recognition (ASR)', | |
| ttsDescription: 'TTS (Text-to-Speech) - Convert text to speech', | |
| asrDescription: 'ASR (Automatic Speech Recognition) - Convert speech to text', | |
| enableTTS: 'Enable Text-to-Speech', | |
| ttsEnabledDescription: 'When enabled, speech audio will be generated during course creation', | |
| enableASR: 'Enable Speech Recognition', | |
| asrEnabledDescription: 'When enabled, students can use microphone for voice input', | |
| ttsProvider: 'TTS Provider', | |
| ttsLanguageFilter: 'Language Filter', | |
| allLanguages: 'All Languages', | |
| ttsVoice: 'Voice', | |
| ttsSpeed: 'Speed', | |
| ttsBaseUrl: 'Base URL', | |
| ttsApiKey: 'API Key', | |
| asrProvider: 'ASR Provider', | |
| asrLanguage: 'Recognition Language', | |
| asrBaseUrl: 'Base URL', | |
| asrApiKey: 'API Key', | |
| enterApiKey: 'Enter API Key', | |
| enterCustomBaseUrl: 'Enter custom Base URL', | |
| browserNativeNote: 'Browser Native ASR requires no configuration and is completely free', | |
| // Audio provider names | |
| providerOpenAITTS: 'OpenAI TTS (gpt-4o-mini-tts)', | |
| providerAzureTTS: 'Azure TTS', | |
| providerGLMTTS: 'GLM TTS', | |
| providerQwenTTS: 'Qwen TTS (Alibaba Cloud Bailian)', | |
| providerBrowserNativeTTS: 'Browser Native TTS', | |
| providerOpenAIWhisper: 'OpenAI ASR (gpt-4o-mini-transcribe)', | |
| providerBrowserNative: 'Browser Native ASR', | |
| providerQwenASR: 'Qwen ASR (Alibaba Cloud Bailian)', | |
| providerUnpdf: 'unpdf (Built-in)', | |
| providerMinerU: 'MinerU', | |
| browserNativeTTSNote: | |
| 'Browser Native TTS requires no configuration and is completely free, using system built-in voices', | |
| testTTS: 'Test TTS', | |
| testASR: 'Test ASR', | |
| testSuccess: 'Test Successful', | |
| testFailed: 'Test Failed', | |
| ttsTestText: 'TTS Test Text', | |
| ttsTestSuccess: 'TTS test successful, audio played', | |
| ttsTestFailed: 'TTS test failed', | |
| asrTestSuccess: 'Speech recognition successful', | |
| asrTestFailed: 'Speech recognition failed', | |
| asrResult: 'Recognition Result', | |
| asrNotSupported: 'Browser does not support Speech Recognition API', | |
| browserTTSNotSupported: 'Browser does not support Speech Synthesis API', | |
| browserTTSNoVoices: 'Current browser has no available TTS voices', | |
| microphoneAccessDenied: 'Microphone access denied', | |
| microphoneAccessFailed: 'Failed to access microphone', | |
| asrResultPlaceholder: 'Recognition result will be displayed after recording', | |
| useThisProvider: 'Use This Provider', | |
| fetchVoices: 'Fetch Voice List', | |
| fetchingVoices: 'Fetching...', | |
| voicesFetched: 'Voices fetched', | |
| fetchVoicesFailed: 'Failed to fetch voices', | |
| voiceApiKeyRequired: 'API Key required', | |
| voiceBaseUrlRequired: 'Base URL required', | |
| ttsTestTextPlaceholder: 'Enter text to convert', | |
| ttsTestTextDefault: 'Hello, this is a test speech.', | |
| startRecording: 'Start Recording', | |
| stopRecording: 'Stop Recording', | |
| recording: 'Recording...', | |
| transcribing: 'Transcribing...', | |
| transcriptionResult: 'Transcription Result', | |
| noTranscriptionResult: 'No transcription result', | |
| baseUrlOptional: 'Base URL (Optional)', | |
| defaultValue: 'Default', | |
| // TTS Voice descriptions (OpenAI) | |
| voiceMarin: 'Recommended - Best Quality', | |
| voiceCedar: 'Recommended - Best Quality', | |
| voiceAlloy: 'Neutral, Balanced', | |
| voiceAsh: 'Steady, Professional', | |
| voiceBallad: 'Elegant, Lyrical', | |
| voiceCoral: 'Warm, Friendly', | |
| voiceEcho: 'Male, Clear', | |
| voiceFable: 'Narrative, Vivid', | |
| voiceNova: 'Female, Bright', | |
| voiceOnyx: 'Male, Deep', | |
| voiceSage: 'Wise, Composed', | |
| voiceShimmer: 'Female, Soft', | |
| voiceVerse: 'Natural, Smooth', | |
| // TTS Voice descriptions (GLM) | |
| glmVoiceTongtong: 'Default voice', | |
| glmVoiceChuichui: 'Chuichui voice', | |
| glmVoiceXiaochen: 'Xiaochen voice', | |
| glmVoiceJam: 'Jam voice', | |
| glmVoiceKazi: 'Kazi voice', | |
| glmVoiceDouji: 'Douji voice', | |
| glmVoiceLuodo: 'Luodo voice', | |
| // TTS Voice descriptions (Qwen) | |
| qwenVoiceCherry: 'Sunny, warm and natural', | |
| qwenVoiceSerena: 'Gentle and soft', | |
| qwenVoiceEthan: 'Energetic and vibrant', | |
| qwenVoiceChelsie: 'Anime virtual girlfriend', | |
| qwenVoiceMomo: 'Playful and cheerful', | |
| qwenVoiceVivian: 'Cute and sassy', | |
| qwenVoiceMoon: 'Cool and handsome', | |
| qwenVoiceMaia: 'Intellectual and gentle', | |
| qwenVoiceKai: 'A SPA for your ears', | |
| qwenVoiceNofish: "Designer who can't pronounce retroflex sounds", | |
| qwenVoiceBella: "Little loli who doesn't get drunk", | |
| qwenVoiceJennifer: 'Brand-level, cinematic American female voice', | |
| qwenVoiceRyan: 'Fast-paced, dramatic performance', | |
| qwenVoiceKaterina: 'Mature lady with memorable rhythm', | |
| qwenVoiceAiden: 'American boy who masters cooking', | |
| qwenVoiceEldricSage: 'Steady and wise elder', | |
| qwenVoiceMia: 'Gentle as spring water, well-behaved as snow', | |
| qwenVoiceMochi: 'Smart little adult with childlike innocence', | |
| qwenVoiceBellona: 'Loud voice, clear pronunciation, vivid characters', | |
| qwenVoiceVincent: 'Unique hoarse voice telling tales of war and honor', | |
| qwenVoiceBunny: 'Super cute loli', | |
| qwenVoiceNeil: 'Professional news anchor', | |
| qwenVoiceElias: 'Professional instructor', | |
| qwenVoiceArthur: 'Simple voice soaked by years and dry tobacco', | |
| qwenVoiceNini: 'Soft and sticky voice like glutinous rice cake', | |
| qwenVoiceEbona: 'Her whisper is like a rusty key', | |
| qwenVoiceSeren: 'Gentle and soothing voice to help you sleep', | |
| qwenVoicePip: 'Naughty but full of childlike innocence', | |
| qwenVoiceStella: 'Sweet confused girl voice that becomes just when shouting', | |
| qwenVoiceBodega: 'Enthusiastic Spanish uncle', | |
| qwenVoiceSonrisa: 'Enthusiastic Latin American lady', | |
| qwenVoiceAlek: 'Cold of battle nation, warm under woolen coat', | |
| qwenVoiceDolce: 'Lazy Italian uncle', | |
| qwenVoiceSohee: 'Gentle, cheerful Korean unnie', | |
| qwenVoiceOnoAnna: 'Mischievous childhood friend', | |
| qwenVoiceLenn: 'Rational German youth who wears suit and listens to post-punk', | |
| qwenVoiceEmilien: 'Romantic French big brother', | |
| qwenVoiceAndre: 'Magnetic, natural and calm male voice', | |
| qwenVoiceRadioGol: 'Football poet Rádio Gol!', | |
| qwenVoiceJada: 'Lively Shanghai lady', | |
| qwenVoiceDylan: 'Beijing boy', | |
| qwenVoiceLi: 'Patient yoga teacher', | |
| qwenVoiceMarcus: 'Broad face, short words, solid heart - old Shaanxi taste', | |
| qwenVoiceRoy: 'Humorous and straightforward Taiwanese boy', | |
| qwenVoicePeter: 'Tianjin cross-talk professional supporter', | |
| qwenVoiceSunny: 'Sweet Sichuan girl', | |
| qwenVoiceEric: 'Chengdu gentleman', | |
| qwenVoiceRocky: 'Humorous Hong Kong guy', | |
| qwenVoiceKiki: 'Sweet Hong Kong girl', | |
| // ASR Language names (native forms - autoglossonyms) | |
| lang_auto: 'Auto Detect', | |
| lang_zh: '中文', | |
| lang_yue: '粤語', | |
| lang_en: 'English', | |
| lang_ja: '日本語', | |
| lang_ko: '한국어', | |
| lang_es: 'Español', | |
| lang_fr: 'Français', | |
| lang_de: 'Deutsch', | |
| lang_ru: 'Русский', | |
| lang_ar: 'العربية', | |
| lang_pt: 'Português', | |
| lang_it: 'Italiano', | |
| lang_af: 'Afrikaans', | |
| lang_hy: 'Հայերեն', | |
| lang_az: 'Azərbaycan', | |
| lang_be: 'Беларуская', | |
| lang_bs: 'Bosanski', | |
| lang_bg: 'Български', | |
| lang_ca: 'Català', | |
| lang_hr: 'Hrvatski', | |
| lang_cs: 'Čeština', | |
| lang_da: 'Dansk', | |
| lang_nl: 'Nederlands', | |
| lang_et: 'Eesti', | |
| lang_fi: 'Suomi', | |
| lang_gl: 'Galego', | |
| lang_el: 'Ελληνικά', | |
| lang_he: 'עברית', | |
| lang_hi: 'हिन्दी', | |
| lang_hu: 'Magyar', | |
| lang_is: 'Íslenska', | |
| lang_id: 'Bahasa Indonesia', | |
| lang_kn: 'ಕನ್ನಡ', | |
| lang_kk: 'Қазақша', | |
| lang_lv: 'Latviešu', | |
| lang_lt: 'Lietuvių', | |
| lang_mk: 'Македонски', | |
| lang_ms: 'Bahasa Melayu', | |
| lang_mr: 'मराठी', | |
| lang_mi: 'Te Reo Māori', | |
| lang_ne: 'नेपाली', | |
| lang_no: 'Norsk', | |
| lang_fa: 'فارسی', | |
| lang_pl: 'Polski', | |
| lang_ro: 'Română', | |
| lang_sr: 'Српски', | |
| lang_sk: 'Slovenčina', | |
| lang_sl: 'Slovenščina', | |
| lang_sw: 'Kiswahili', | |
| lang_sv: 'Svenska', | |
| lang_tl: 'Tagalog', | |
| lang_fil: 'Filipino', | |
| lang_ta: 'தமிழ்', | |
| lang_th: 'ไทย', | |
| lang_tr: 'Türkçe', | |
| lang_uk: 'Українська', | |
| lang_ur: 'اردو', | |
| lang_vi: 'Tiếng Việt', | |
| lang_cy: 'Cymraeg', | |
| // BCP-47 format language codes (for Web Speech API) | |
| 'lang_zh-CN': '中文(简体,中国)', | |
| 'lang_zh-TW': '中文(繁體,台灣)', | |
| 'lang_zh-HK': '粵語(香港)', | |
| 'lang_yue-Hant-HK': '粵語(繁體)', | |
| 'lang_en-US': 'English (United States)', | |
| 'lang_en-GB': 'English (United Kingdom)', | |
| 'lang_en-AU': 'English (Australia)', | |
| 'lang_en-CA': 'English (Canada)', | |
| 'lang_en-IN': 'English (India)', | |
| 'lang_en-NZ': 'English (New Zealand)', | |
| 'lang_en-ZA': 'English (South Africa)', | |
| 'lang_ja-JP': '日本語(日本)', | |
| 'lang_ko-KR': '한국어(대한민국)', | |
| 'lang_de-DE': 'Deutsch (Deutschland)', | |
| 'lang_fr-FR': 'Français (France)', | |
| 'lang_es-ES': 'Español (España)', | |
| 'lang_es-MX': 'Español (México)', | |
| 'lang_es-AR': 'Español (Argentina)', | |
| 'lang_es-CO': 'Español (Colombia)', | |
| 'lang_it-IT': 'Italiano (Italia)', | |
| 'lang_pt-BR': 'Português (Brasil)', | |
| 'lang_pt-PT': 'Português (Portugal)', | |
| 'lang_ru-RU': 'Русский (Россия)', | |
| 'lang_nl-NL': 'Nederlands (Nederland)', | |
| 'lang_pl-PL': 'Polski (Polska)', | |
| 'lang_cs-CZ': 'Čeština (Česko)', | |
| 'lang_da-DK': 'Dansk (Danmark)', | |
| 'lang_fi-FI': 'Suomi (Suomi)', | |
| 'lang_sv-SE': 'Svenska (Sverige)', | |
| 'lang_no-NO': 'Norsk (Norge)', | |
| 'lang_tr-TR': 'Türkçe (Türkiye)', | |
| 'lang_el-GR': 'Ελληνικά (Ελλάδα)', | |
| 'lang_hu-HU': 'Magyar (Magyarország)', | |
| 'lang_ro-RO': 'Română (România)', | |
| 'lang_sk-SK': 'Slovenčina (Slovensko)', | |
| 'lang_bg-BG': 'Български (България)', | |
| 'lang_hr-HR': 'Hrvatski (Hrvatska)', | |
| 'lang_ca-ES': 'Català (Espanya)', | |
| 'lang_ar-SA': 'العربية (السعودية)', | |
| 'lang_ar-EG': 'العربية (مصر)', | |
| 'lang_he-IL': 'עברית (ישראל)', | |
| 'lang_hi-IN': 'हिन्दी (भारत)', | |
| 'lang_th-TH': 'ไทย (ประเทศไทย)', | |
| 'lang_vi-VN': 'Tiếng Việt (Việt Nam)', | |
| 'lang_id-ID': 'Bahasa Indonesia (Indonesia)', | |
| 'lang_ms-MY': 'Bahasa Melayu (Malaysia)', | |
| 'lang_fil-PH': 'Filipino (Pilipinas)', | |
| 'lang_af-ZA': 'Afrikaans (Suid-Afrika)', | |
| 'lang_uk-UA': 'Українська (Україна)', | |
| // PDF settings | |
| pdfSettings: 'PDF Parsing', | |
| pdfParsingSettings: 'PDF Parsing Settings', | |
| pdfDescription: | |
| 'Choose PDF parsing engine with support for text extraction, image processing, and table recognition', | |
| pdfProvider: 'PDF Parser', | |
| pdfFeatures: 'Supported Features', | |
| pdfApiKey: 'API Key', | |
| pdfBaseUrl: 'Base URL', | |
| mineruDescription: | |
| 'MinerU is a commercial PDF parsing service that supports advanced features such as table extraction, formula recognition, and layout analysis.', | |
| mineruApiKeyRequired: 'You need to apply for an API Key on the MinerU website before use.', | |
| mineruWarning: 'Warning', | |
| mineruCostWarning: | |
| 'MinerU is a commercial service and may incur fees. Please check the MinerU website for pricing details.', | |
| enterMinerUApiKey: 'Enter MinerU API Key', | |
| mineruLocalDescription: | |
| 'MinerU supports local deployment with advanced PDF parsing (tables, formulas, layout analysis). Requires deploying MinerU service first.', | |
| mineruServerAddress: 'Local MinerU server address (e.g., http://localhost:8080)', | |
| mineruApiKeyOptional: 'Only required if server has authentication enabled', | |
| optionalApiKey: 'Optional API Key', | |
| featureText: 'Text Extraction', | |
| featureImages: 'Image Extraction', | |
| featureTables: 'Table Extraction', | |
| featureFormulas: 'Formula Recognition', | |
| featureLayoutAnalysis: 'Layout Analysis', | |
| featureMetadata: 'Metadata', | |
| // Image Generation settings | |
| enableImageGeneration: 'Enable AI Image Generation', | |
| imageGenerationDisabledHint: | |
| 'When enabled, images will be auto-generated during course creation', | |
| imageSettings: 'Image Generation', | |
| imageSection: 'Text to Image', | |
| imageProvider: 'Image Generation Provider', | |
| imageModel: 'Image Generation Model', | |
| providerSeedream: 'Seedream (ByteDance)', | |
| providerQwenImage: 'Qwen Image (Alibaba)', | |
| providerNanoBanana: 'Nano Banana (Gemini)', | |
| testImageGeneration: 'Test Image Generation', | |
| testImageConnectivity: 'Test Connection', | |
| imageConnectivitySuccess: 'Image service connected successfully', | |
| imageConnectivityFailed: 'Image service connection failed', | |
| imageTestSuccess: 'Image generation test succeeded', | |
| imageTestFailed: 'Image generation test failed', | |
| imageTestPromptPlaceholder: 'Enter image description to test', | |
| imageTestPromptDefault: 'A cute cat sitting on a desk', | |
| imageGenerating: 'Generating image...', | |
| imageGenerationFailed: 'Image generation failed', | |
| // Video Generation settings | |
| enableVideoGeneration: 'Enable AI Video Generation', | |
| videoGenerationDisabledHint: | |
| 'When enabled, videos will be auto-generated during course creation', | |
| videoSettings: 'Video Generation', | |
| videoSection: 'Text to Video', | |
| videoProvider: 'Video Generation Provider', | |
| videoModel: 'Video Generation Model', | |
| providerSeedance: 'Seedance (ByteDance)', | |
| providerKling: 'Kling (Kuaishou)', | |
| providerVeo: 'Veo (Google)', | |
| providerSora: 'Sora (OpenAI)', | |
| testVideoGeneration: 'Test Video Generation', | |
| testVideoConnectivity: 'Test Connection', | |
| videoConnectivitySuccess: 'Video service connected successfully', | |
| videoConnectivityFailed: 'Video service connection failed', | |
| testingConnection: 'Testing...', | |
| videoTestSuccess: 'Video generation test succeeded', | |
| videoTestFailed: 'Video generation test failed', | |
| videoTestPromptDefault: 'A cute cat walking on a desk', | |
| videoGenerating: 'Generating video (est. 1-2 min)...', | |
| videoGenerationWarning: 'Video generation usually takes 1-2 minutes, please be patient', | |
| mediaRetry: 'Retry', | |
| mediaContentSensitive: 'Sorry, this content triggered a safety check.', | |
| mediaGenerationDisabled: 'Generation disabled in settings', | |
| // Agent settings (kept with main settings block above) | |
| singleAgent: 'Single Agent', | |
| multiAgent: 'Multi-Agent', | |
| selectAgents: 'Select Agents', | |
| noVisionWarning: | |
| 'Current model does not support vision. Images can still be placed in slides, but the model cannot understand image content to optimize selection and layout', | |
| // Server provider configuration | |
| serverConfigured: 'Server', | |
| serverConfiguredNotice: | |
| 'Admin has configured an API key for this provider on the server. You can use it directly or enter your own key to override.', | |
| optionalOverride: 'Optional — leave empty to use server config', | |
| // Access code | |
| setupNeeded: 'Setup required', | |
| modelNotConfigured: 'Please select a model to get started', | |
| // Clear cache | |
| dangerZone: 'Danger Zone', | |
| clearCache: 'Clear Local Cache', | |
| clearCacheDescription: | |
| 'Delete all locally stored data, including classroom records, chat history, audio cache, and app settings. This action cannot be undone.', | |
| clearCacheConfirmTitle: 'Are you sure you want to clear all cache?', | |
| clearCacheConfirmDescription: | |
| 'This will permanently delete all of the following data and cannot be recovered:', | |
| clearCacheConfirmItems: | |
| 'Classrooms & scenes, Chat history, Audio & image cache, App settings & preferences', | |
| clearCacheConfirmInput: 'Type "DELETE" to continue', | |
| clearCacheConfirmPhrase: 'DELETE', | |
| clearCacheButton: 'Permanently Delete All Data', | |
| clearCacheSuccess: 'Cache cleared, page will refresh shortly', | |
| clearCacheFailed: 'Failed to clear cache, please try again', | |
| // Web Search settings | |
| webSearchSettings: 'Web Search', | |
| webSearchApiKey: 'Tavily API Key', | |
| webSearchApiKeyPlaceholder: 'Enter your Tavily API Key', | |
| webSearchApiKeyPlaceholderServer: 'Server key configured, optionally override', | |
| webSearchApiKeyHint: 'Get an API key from tavily.com for web search', | |
| webSearchBaseUrl: 'Base URL', | |
| webSearchServerConfigured: 'Server-side Tavily API key is configured', | |
| optional: 'Optional', | |
| }, | |
| profile: { | |
| title: 'Profile', | |
| defaultNickname: 'Student', | |
| chooseAvatar: 'Choose Avatar', | |
| uploadAvatar: 'Upload', | |
| bioPlaceholder: 'Tell us about yourself — the AI teacher will personalize lessons for you...', | |
| avatarHint: 'Your avatar will appear in classroom discussions and chats', | |
| fileTooLarge: 'Image too large — please choose one under 5 MB', | |
| invalidFileType: 'Please select an image file', | |
| editTooltip: 'Click to edit profile', | |
| }, | |
| media: { | |
| imageCapability: 'Image Generation', | |
| imageHint: 'Generate images in slides', | |
| videoCapability: 'Video Generation', | |
| videoHint: 'Generate videos in slides', | |
| ttsCapability: 'Text-to-Speech', | |
| ttsHint: 'AI teacher speaks aloud', | |
| asrCapability: 'Speech Recognition', | |
| asrHint: 'Voice input for discussion', | |
| provider: 'Provider', | |
| model: 'Model', | |
| voice: 'Voice', | |
| speed: 'Speed', | |
| language: 'Language', | |
| }, | |
| } as const; | |