Files
catonline_ai/vw-agentic-rag/web/src/utils/i18n.ts-demo
2025-09-26 17:15:54 +08:00

195 lines
5.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 多语言支持配置
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'));
}
}