195 lines
5.2 KiB
Plaintext
195 lines
5.2 KiB
Plaintext
|
|
// 多语言支持配置
|
|||
|
|
export type Language = 'zh' | 'en';
|
|||
|
|
|
|||
|
|
export interface Translations {
|
|||
|
|
// 通用
|
|||
|
|
loading: string;
|
|||
|
|
error: string;
|
|||
|
|
expand: string;
|
|||
|
|
collapse: string;
|
|||
|
|
|
|||
|
|
// 页面标题和描述
|
|||
|
|
appTitle: string;
|
|||
|
|
appDescription: string;
|
|||
|
|
welcomeMessage: string;
|
|||
|
|
|
|||
|
|
// 工具相关
|
|||
|
|
toolSearching: string;
|
|||
|
|
toolProcessing: string;
|
|||
|
|
toolCompleted: string;
|
|||
|
|
toolFailed: string;
|
|||
|
|
toolStandardSearch: string;
|
|||
|
|
toolDocumentSearch: string;
|
|||
|
|
toolQuery: string;
|
|||
|
|
toolFound: string;
|
|||
|
|
toolRetrieved: string;
|
|||
|
|
toolResults: string;
|
|||
|
|
toolChunks: string;
|
|||
|
|
toolMoreResults: string;
|
|||
|
|
toolMoreChunks: string;
|
|||
|
|
toolDocumentChunk: string;
|
|||
|
|
|
|||
|
|
// 状态消息
|
|||
|
|
statusSearching: string;
|
|||
|
|
statusProcessing: string;
|
|||
|
|
statusCompleted: string;
|
|||
|
|
statusError: string;
|
|||
|
|
|
|||
|
|
// 新增:工具汇总相关
|
|||
|
|
toolExecutionSummary: string;
|
|||
|
|
resultsText: string;
|
|||
|
|
tooltip: string;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export const translations: Record<Language, Translations> = {
|
|||
|
|
zh: {
|
|||
|
|
// 通用
|
|||
|
|
loading: '加载中...',
|
|||
|
|
error: '错误',
|
|||
|
|
expand: '展开',
|
|||
|
|
collapse: '收起',
|
|||
|
|
|
|||
|
|
// 页面标题和描述
|
|||
|
|
appTitle: '代理式RAG',
|
|||
|
|
appDescription: '先进的AI代理,支持RAG检索和工具调用',
|
|||
|
|
welcomeMessage: '你好!我是你的 AI 助手。我可以解答有关标准和法规的问题,基于从知识库智能检索到的信息。',
|
|||
|
|
|
|||
|
|
// 工具相关
|
|||
|
|
toolSearching: '搜索中...',
|
|||
|
|
toolProcessing: '处理中...',
|
|||
|
|
toolCompleted: '已完成',
|
|||
|
|
toolFailed: '失败',
|
|||
|
|
toolStandardSearch: '标准/法规语义检索',
|
|||
|
|
toolDocumentSearch: '文档块语义检索',
|
|||
|
|
toolQuery: '查询',
|
|||
|
|
toolFound: '找到',
|
|||
|
|
toolRetrieved: '获取',
|
|||
|
|
toolResults: '条结果',
|
|||
|
|
toolChunks: '片段',
|
|||
|
|
toolMoreResults: '还有',
|
|||
|
|
toolMoreChunks: '还有',
|
|||
|
|
toolDocumentChunk: '文档块',
|
|||
|
|
|
|||
|
|
// 状态消息
|
|||
|
|
statusSearching: '搜索中...',
|
|||
|
|
statusProcessing: '处理中...',
|
|||
|
|
statusCompleted: '已完成',
|
|||
|
|
statusError: '发生错误',
|
|||
|
|
|
|||
|
|
// 工具汇总相关
|
|||
|
|
toolExecutionSummary: '工具执行汇总',
|
|||
|
|
resultsText: '个结果',
|
|||
|
|
tooltip: 'AI 可能会出错,请核对重要信息。'
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
en: {
|
|||
|
|
// 通用
|
|||
|
|
loading: 'Loading...',
|
|||
|
|
error: 'Error',
|
|||
|
|
expand: 'Expand',
|
|||
|
|
collapse: 'Collapse',
|
|||
|
|
|
|||
|
|
// 页面标题和描述
|
|||
|
|
appTitle: 'Agentic RAG',
|
|||
|
|
appDescription: 'Advanced AI Agent with RAG and Tool Support',
|
|||
|
|
welcomeMessage: 'Hello! I\'m AI agent that answer your questions about standards and regulations, grounded on information intelligently retrieved from the knowledge base.',
|
|||
|
|
|
|||
|
|
// 工具相关
|
|||
|
|
toolSearching: 'Searching...',
|
|||
|
|
toolProcessing: 'Processing...',
|
|||
|
|
toolCompleted: 'Completed',
|
|||
|
|
toolFailed: 'Failed',
|
|||
|
|
toolStandardSearch: 'Standard/Regulation Semantic Retrieval',
|
|||
|
|
toolDocumentSearch: 'Document Chunk Semantic Retrieval',
|
|||
|
|
toolQuery: 'Query',
|
|||
|
|
toolFound: 'Found',
|
|||
|
|
toolRetrieved: 'Retrieved',
|
|||
|
|
toolResults: 'results',
|
|||
|
|
toolChunks: 'Fragment',
|
|||
|
|
toolMoreResults: 'more results',
|
|||
|
|
toolMoreChunks: 'more chunks',
|
|||
|
|
toolDocumentChunk: 'Document Chunk',
|
|||
|
|
|
|||
|
|
// 状态消息
|
|||
|
|
statusSearching: 'Searching...',
|
|||
|
|
statusProcessing: 'Processing...',
|
|||
|
|
statusCompleted: 'Completed',
|
|||
|
|
statusError: 'Error occurred',
|
|||
|
|
|
|||
|
|
// 工具汇总相关
|
|||
|
|
toolExecutionSummary: 'Tool Execution Summary',
|
|||
|
|
resultsText: 'results',
|
|||
|
|
tooltip: 'AI can make mistakes. Please check important info'
|
|||
|
|
},
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 获取浏览器首选语言
|
|||
|
|
export function getBrowserLanguage(): Language {
|
|||
|
|
if (typeof window === 'undefined') return 'zh'; // SSR fallback
|
|||
|
|
|
|||
|
|
const browserLang = navigator.language.toLowerCase();
|
|||
|
|
|
|||
|
|
// 检查是否为中文
|
|||
|
|
if (browserLang.startsWith('zh')) {
|
|||
|
|
return 'zh';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 默认返回英文
|
|||
|
|
return 'en';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 从URL参数获取语言设置
|
|||
|
|
export function getLanguageFromURL(): Language | null {
|
|||
|
|
if (typeof window === 'undefined') return null; // SSR fallback
|
|||
|
|
|
|||
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|||
|
|
const langParam = urlParams.get('lang')?.toLowerCase();
|
|||
|
|
|
|||
|
|
if (langParam === 'zh' || langParam === 'en') {
|
|||
|
|
return langParam as Language;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取当前应该使用的语言
|
|||
|
|
export function getCurrentLanguage(): Language {
|
|||
|
|
// 优先使用URL参数
|
|||
|
|
const urlLang = getLanguageFromURL();
|
|||
|
|
if (urlLang) {
|
|||
|
|
return urlLang;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 其次使用localStorage保存的语言
|
|||
|
|
if (typeof window !== 'undefined') {
|
|||
|
|
const savedLang = localStorage.getItem('preferred-language') as Language;
|
|||
|
|
if (savedLang && (savedLang === 'zh' || savedLang === 'en')) {
|
|||
|
|
return savedLang;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 最后使用浏览器语言
|
|||
|
|
return getBrowserLanguage();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 保存语言设置到localStorage
|
|||
|
|
export function saveLanguagePreference(language: Language) {
|
|||
|
|
if (typeof window !== 'undefined') {
|
|||
|
|
localStorage.setItem('preferred-language', language);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 切换语言并更新URL
|
|||
|
|
export function switchLanguage(language: Language) {
|
|||
|
|
saveLanguagePreference(language);
|
|||
|
|
|
|||
|
|
if (typeof window !== 'undefined') {
|
|||
|
|
const url = new URL(window.location.href);
|
|||
|
|
url.searchParams.set('lang', language);
|
|||
|
|
window.history.replaceState({}, '', url.toString());
|
|||
|
|
|
|||
|
|
// 触发重新渲染
|
|||
|
|
window.dispatchEvent(new Event('languagechange'));
|
|||
|
|
}
|
|||
|
|
}
|