From a72809c59a07de31c6bb71780ef61d0680b66a84 Mon Sep 17 00:00:00 2001 From: iLuJack Date: Thu, 10 Apr 2025 20:58:46 +0800 Subject: [PATCH] docs(locales): add traditional chinese support --- lightrag_webui/src/components/AppSettings.tsx | 3 +- lightrag_webui/src/i18n.ts | 4 +- lightrag_webui/src/locales/zh_TW.json | 348 ++++++++++++++++++ lightrag_webui/src/stores/settings.ts | 2 +- 4 files changed, 354 insertions(+), 3 deletions(-) create mode 100644 lightrag_webui/src/locales/zh_TW.json diff --git a/lightrag_webui/src/components/AppSettings.tsx b/lightrag_webui/src/components/AppSettings.tsx index 6e312e0e..09312794 100644 --- a/lightrag_webui/src/components/AppSettings.tsx +++ b/lightrag_webui/src/components/AppSettings.tsx @@ -22,7 +22,7 @@ export default function AppSettings({ className }: AppSettingsProps) { const setTheme = useSettingsStore.use.setTheme() const handleLanguageChange = useCallback((value: string) => { - setLanguage(value as 'en' | 'zh' | 'fr' | 'ar') + setLanguage(value as 'en' | 'zh' | 'fr' | 'ar' | 'zh_TW') }, [setLanguage]) const handleThemeChange = useCallback((value: string) => { @@ -49,6 +49,7 @@ export default function AppSettings({ className }: AppSettingsProps) { 中文 Français العربية + 繁體中文 diff --git a/lightrag_webui/src/i18n.ts b/lightrag_webui/src/i18n.ts index 15978ebe..dbee5d10 100644 --- a/lightrag_webui/src/i18n.ts +++ b/lightrag_webui/src/i18n.ts @@ -6,6 +6,7 @@ import en from './locales/en.json' import zh from './locales/zh.json' import fr from './locales/fr.json' import ar from './locales/ar.json' +import zh_TW from './locales/zh_TW.json' const getStoredLanguage = () => { try { @@ -27,7 +28,8 @@ i18n en: { translation: en }, zh: { translation: zh }, fr: { translation: fr }, - ar: { translation: ar } + ar: { translation: ar }, + zh_TW: { translation: zh_TW } }, lng: getStoredLanguage(), // Use stored language settings fallbackLng: 'en', diff --git a/lightrag_webui/src/locales/zh_TW.json b/lightrag_webui/src/locales/zh_TW.json new file mode 100644 index 00000000..7deb8157 --- /dev/null +++ b/lightrag_webui/src/locales/zh_TW.json @@ -0,0 +1,348 @@ +{ + "settings": { + "language": "語言", + "theme": "主題", + "light": "淺色", + "dark": "深色", + "system": "系統" + }, + "header": { + "documents": "文件", + "knowledgeGraph": "知識圖譜", + "retrieval": "檢索", + "api": "API", + "projectRepository": "專案庫", + "logout": "登出", + "themeToggle": { + "switchToLight": "切換至淺色主題", + "switchToDark": "切換至深色主題" + } + }, + "login": { + "description": "請輸入您的帳號和密碼登入系統", + "username": "帳號", + "usernamePlaceholder": "請輸入帳號", + "password": "密碼", + "passwordPlaceholder": "請輸入密碼", + "loginButton": "登入", + "loggingIn": "登入中...", + "successMessage": "登入成功", + "errorEmptyFields": "請輸入您的帳號和密碼", + "errorInvalidCredentials": "登入失敗,請檢查帳號和密碼", + "authDisabled": "認證已停用,使用免登入模式", + "guestMode": "免登入" + }, + "common": { + "cancel": "取消" + }, + "documentPanel": { + "clearDocuments": { + "button": "清空", + "tooltip": "清空文件", + "title": "清空文件", + "description": "此操作將從系統中移除所有文件", + "warning": "警告:此操作將永久刪除所有文件,無法復原!", + "confirm": "確定要清空所有文件嗎?", + "confirmPrompt": "請輸入 yes 確認操作", + "confirmPlaceholder": "輸入 yes 以確認", + "clearCache": "清空 LLM 快取", + "confirmButton": "確定", + "success": "文件清空成功", + "cacheCleared": "快取清空成功", + "cacheClearFailed": "清空快取失敗:\n{{error}}", + "failed": "清空文件失敗:\n{{message}}", + "error": "清空文件失敗:\n{{error}}" + }, + "uploadDocuments": { + "button": "上傳", + "tooltip": "上傳文件", + "title": "上傳文件", + "description": "拖曳檔案至此處或點擊瀏覽", + "single": { + "uploading": "正在上傳 {{name}}:{{percent}}%", + "success": "上傳成功:\n{{name}} 上傳完成", + "failed": "上傳失敗:\n{{name}}\n{{message}}", + "error": "上傳失敗:\n{{name}}\n{{error}}" + }, + "batch": { + "uploading": "正在上傳檔案...", + "success": "檔案上傳完成", + "error": "部分檔案上傳失敗" + }, + "generalError": "上傳失敗\n{{error}}", + "fileTypes": "支援的檔案類型:TXT, MD, DOCX, PDF, PPTX, RTF, ODT, EPUB, HTML, HTM, TEX, JSON, XML, YAML, YML, CSV, LOG, CONF, INI, PROPERTIES, SQL, BAT, SH, C, CPP, PY, JAVA, JS, TS, SWIFT, GO, RB, PHP, CSS, SCSS, LESS", + "fileUploader": { + "singleFileLimit": "一次只能上傳一個檔案", + "maxFilesLimit": "最多只能上傳 {{count}} 個檔案", + "fileRejected": "檔案 {{name}} 被拒絕", + "unsupportedType": "不支援的檔案類型", + "fileTooLarge": "檔案過大,最大允許 {{maxSize}}", + "dropHere": "將檔案拖放至此處", + "dragAndDrop": "拖放檔案至此處,或點擊選擇檔案", + "removeFile": "移除檔案", + "uploadDescription": "您可以上傳{{isMultiple ? '多個' : count}}個檔案(每個檔案最大{{maxSize}})", + "duplicateFile": "檔案名稱與伺服器上的快取重複" + } + }, + "documentManager": { + "title": "文件管理", + "scanButton": "掃描", + "scanTooltip": "掃描輸入目錄中的文件", + "pipelineStatusButton": "pipeline 狀態", + "pipelineStatusTooltip": "查看pipeline 狀態", + "uploadedTitle": "已上傳文件", + "uploadedDescription": "已上傳文件清單及其狀態", + "emptyTitle": "無文件", + "emptyDescription": "尚未上傳任何文件", + "columns": { + "id": "ID", + "summary": "摘要", + "status": "狀態", + "length": "長度", + "chunks": "分塊", + "created": "建立時間", + "updated": "更新時間", + "metadata": "元資料" + }, + "status": { + "all": "全部", + "completed": "已完成", + "processing": "處理中", + "pending": "等待中", + "failed": "失敗" + }, + "errors": { + "loadFailed": "載入文件失敗\n{{error}}", + "scanFailed": "掃描文件失敗\n{{error}}", + "scanProgressFailed": "取得掃描進度失敗\n{{error}}" + }, + "fileNameLabel": "檔案名稱", + "showButton": "顯示", + "hideButton": "隱藏", + "showFileNameTooltip": "顯示檔案名稱", + "hideFileNameTooltip": "隱藏檔案名稱" + }, + "pipelineStatus": { + "title": "pipeline 狀態", + "busy": "pipeline 忙碌中", + "requestPending": "待處理請求", + "jobName": "工作名稱", + "startTime": "開始時間", + "progress": "進度", + "unit": "梯次", + "latestMessage": "最新訊息", + "historyMessages": "歷史訊息", + "errors": { + "fetchFailed": "取得pipeline 狀態失敗\n{{error}}" + } + } + }, + "graphPanel": { + "dataIsTruncated": "圖資料已截斷至最大回傳節點數", + "statusDialog": { + "title": "LightRAG 伺服器設定", + "description": "查看目前系統狀態和連線資訊" + }, + "legend": "圖例", + "nodeTypes": { + "person": "人物角色", + "category": "分類", + "geo": "地理名稱", + "location": "位置", + "organization": "組織機構", + "event": "事件", + "equipment": "設備", + "weapon": "武器", + "animal": "動物", + "unknown": "未知", + "object": "物品", + "group": "群組", + "technology": "技術" + }, + "sideBar": { + "settings": { + "settings": "設定", + "healthCheck": "健康檢查", + "showPropertyPanel": "顯示屬性面板", + "showSearchBar": "顯示搜尋列", + "showNodeLabel": "顯示節點標籤", + "nodeDraggable": "節點可拖曳", + "showEdgeLabel": "顯示 Edge 標籤", + "hideUnselectedEdges": "隱藏未選取的 Edge", + "edgeEvents": "Edge 事件", + "maxQueryDepth": "最大查詢深度", + "maxNodes": "最大回傳節點數", + "maxLayoutIterations": "最大版面配置迭代次數", + "resetToDefault": "重設為預設值", + "edgeSizeRange": "Edge 粗細範圍", + "depth": "深度", + "max": "最大值", + "degree": "鄰邊", + "apiKey": "API key", + "enterYourAPIkey": "輸入您的 API key", + "save": "儲存", + "refreshLayout": "重新整理版面配置" + }, + "zoomControl": { + "zoomIn": "放大", + "zoomOut": "縮小", + "resetZoom": "重設縮放", + "rotateCamera": "順時針旋轉圖形", + "rotateCameraCounterClockwise": "逆時針旋轉圖形" + }, + "layoutsControl": { + "startAnimation": "繼續版面配置動畫", + "stopAnimation": "停止版面配置動畫", + "layoutGraph": "圖形版面配置", + "layouts": { + "Circular": "環形", + "Circlepack": "圓形打包", + "Random": "隨機", + "Noverlaps": "無重疊", + "Force Directed": "力導向", + "Force Atlas": "力圖" + } + }, + "fullScreenControl": { + "fullScreen": "全螢幕", + "windowed": "視窗" + }, + "legendControl": { + "toggleLegend": "切換圖例顯示" + } + }, + "statusIndicator": { + "connected": "已連線", + "disconnected": "未連線" + }, + "statusCard": { + "unavailable": "狀態資訊不可用", + "storageInfo": "儲存資訊", + "workingDirectory": "工作目錄", + "inputDirectory": "輸入目錄", + "llmConfig": "LLM 設定", + "llmBinding": "LLM 綁定", + "llmBindingHost": "LLM 綁定主機", + "llmModel": "LLM 模型", + "maxTokens": "最大權杖數", + "embeddingConfig": "嵌入設定", + "embeddingBinding": "嵌入綁定", + "embeddingBindingHost": "嵌入綁定主機", + "embeddingModel": "嵌入模型", + "storageConfig": "儲存設定", + "kvStorage": "KV 儲存", + "docStatusStorage": "文件狀態儲存", + "graphStorage": "圖形儲存", + "vectorStorage": "向量儲存" + }, + "propertiesView": { + "node": { + "title": "節點", + "id": "ID", + "labels": "標籤", + "degree": "度數", + "properties": "屬性", + "relationships": "關係(子圖內)", + "expandNode": "展開節點", + "pruneNode": "修剪節點", + "deleteAllNodesError": "拒絕刪除圖中的所有節點", + "nodesRemoved": "已刪除 {{count}} 個節點,包括孤立節點", + "noNewNodes": "沒有發現可以展開的節點", + "propertyNames": { + "description": "描述", + "entity_id": "名稱", + "entity_type": "類型", + "source_id": "來源ID", + "Neighbour": "鄰接", + "file_path": "來源" + } + }, + "edge": { + "title": "關係", + "id": "ID", + "type": "類型", + "source": "來源節點", + "target": "目標節點", + "properties": "屬性" + } + }, + "search": { + "placeholder": "搜尋節點...", + "message": "還有 {count} 個" + }, + "graphLabels": { + "selectTooltip": "選擇查詢標籤", + "noLabels": "未找到標籤", + "label": "標籤", + "placeholder": "搜尋標籤...", + "andOthers": "還有 {count} 個", + "refreshTooltip": "重新載入圖形資料" + }, + "emptyGraph": "圖譜資料為空" + }, + "retrievePanel": { + "chatMessage": { + "copyTooltip": "複製到剪貼簿", + "copyError": "複製文字到剪貼簿失敗" + }, + "retrieval": { + "startPrompt": "輸入查詢開始檢索", + "clear": "清空", + "send": "送出", + "placeholder": "輸入查詢...", + "error": "錯誤:取得回應失敗" + }, + "querySettings": { + "parametersTitle": "參數", + "parametersDescription": "設定查詢參數", + "queryMode": "查詢模式", + "queryModeTooltip": "選擇檢索策略:\n• Naive:基礎搜尋,無進階技術\n• Local:上下文相關資訊檢索\n• Global:利用全域知識庫\n• Hybrid:結合本地和全域檢索\n• Mix:整合知識圖譜和向量檢索", + "queryModeOptions": { + "naive": "Naive", + "local": "Local", + "global": "Global", + "hybrid": "Hybrid", + "mix": "Mix" + }, + "responseFormat": "回應格式", + "responseFormatTooltip": "定義回應格式。例如:\n• 多段落\n• 單段落\n• 重點", + "responseFormatOptions": { + "multipleParagraphs": "多段落", + "singleParagraph": "單段落", + "bulletPoints": "重點" + }, + "topK": "Top K結果", + "topKTooltip": "檢索的前幾項結果數。在'local'模式下表示實體,在'global'模式下表示關係", + "topKPlaceholder": "結果數量", + "maxTokensTextUnit": "文字單元最大權杖數", + "maxTokensTextUnitTooltip": "每個檢索文字區塊允許的最大權杖數", + "maxTokensGlobalContext": "全域上下文最大權杖數", + "maxTokensGlobalContextTooltip": "全域檢索中關係描述的最大權杖數", + "maxTokensLocalContext": "本地上下文最大權杖數", + "maxTokensLocalContextTooltip": "本地檢索中實體描述的最大權杖數", + "historyTurns": "歷史輪次", + "historyTurnsTooltip": "回應上下文中考慮的完整對話輪次(使用者-助手對)數量", + "historyTurnsPlaceholder": "歷史輪次數", + "hlKeywords": "進階關鍵字", + "hlKeywordsTooltip": "檢索中優先考慮的進階關鍵字清單。用逗號分隔", + "hlkeywordsPlaceHolder": "輸入關鍵字", + "llKeywords": "基礎關鍵字", + "llKeywordsTooltip": "用於細化檢索重點的基礎關鍵字清單。用逗號分隔", + "onlyNeedContext": "僅需上下文", + "onlyNeedContextTooltip": "如果為True,僅回傳檢索到的上下文而不產生回應", + "onlyNeedPrompt": "僅需提示", + "onlyNeedPromptTooltip": "如果為True,僅回傳產生的提示而不產生回應", + "streamResponse": "串流回應", + "streamResponseTooltip": "如果為True,啟用即時串流輸出回應" + } + }, + "apiSite": { + "loading": "正在載入 API 文件..." + }, + "apiKeyAlert": { + "title": "需要 API key", + "description": "請輸入您的 API key 以存取服務", + "placeholder": "請輸入 API key", + "save": "儲存" + } +} diff --git a/lightrag_webui/src/stores/settings.ts b/lightrag_webui/src/stores/settings.ts index 2c314e06..5da8107e 100644 --- a/lightrag_webui/src/stores/settings.ts +++ b/lightrag_webui/src/stores/settings.ts @@ -5,7 +5,7 @@ import { defaultQueryLabel } from '@/lib/constants' import { Message, QueryRequest } from '@/api/lightrag' type Theme = 'dark' | 'light' | 'system' -type Language = 'en' | 'zh' | 'fr' | 'ar' +type Language = 'en' | 'zh' | 'fr' | 'ar' | 'zh_TW' type Tab = 'documents' | 'knowledge-graph' | 'retrieval' | 'api' interface SettingsState {