Merge pull request #436 from Dopiz/feat/i18n-zh-TW
feat(i18n): add zh-TW locale
This commit is contained in:
@@ -11,7 +11,7 @@ import path from "node:path";
|
||||
|
||||
const LOCALES_DIR = path.resolve("src/i18n/locales");
|
||||
const BASE_LOCALE = "en";
|
||||
const COMPARE_LOCALES = ["zh-CN", "es", "tr", "ko-KR"];
|
||||
const COMPARE_LOCALES = ["zh-CN", "zh-TW", "es", "tr", "ko-KR"];
|
||||
|
||||
function getKeys(obj, prefix = "") {
|
||||
const keys = [];
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
export const DEFAULT_LOCALE = "en" as const;
|
||||
export const SUPPORTED_LOCALES = ["en", "zh-CN", "es", "fr", "tr", "ko-KR"] as const;
|
||||
export const SUPPORTED_LOCALES = ["en", "zh-CN", "zh-TW", "es", "fr", "tr", "ko-KR"] as const;
|
||||
export const I18N_NAMESPACES = [
|
||||
"common",
|
||||
"dialogs",
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"exitFullscreen": "退出全屏"
|
||||
},
|
||||
"locale": {
|
||||
"name": "中文",
|
||||
"short": "中文"
|
||||
"name": "简体中文",
|
||||
"short": "简中"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"actions": {
|
||||
"cancel": "取消",
|
||||
"save": "儲存",
|
||||
"delete": "刪除",
|
||||
"close": "關閉",
|
||||
"share": "分享",
|
||||
"done": "完成",
|
||||
"open": "開啟",
|
||||
"upload": "上傳",
|
||||
"export": "匯出",
|
||||
"file": "檔案",
|
||||
"edit": "編輯",
|
||||
"view": "檢視",
|
||||
"window": "視窗",
|
||||
"quit": "退出",
|
||||
"stopRecording": "停止錄製"
|
||||
},
|
||||
"playback": {
|
||||
"play": "播放",
|
||||
"pause": "暫停",
|
||||
"fullscreen": "全螢幕",
|
||||
"exitFullscreen": "退出全螢幕"
|
||||
},
|
||||
"locale": {
|
||||
"name": "繁體中文",
|
||||
"short": "繁中"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"export": {
|
||||
"complete": "匯出完成",
|
||||
"yourFormatReady": "您的 {{format}} 已準備就緒",
|
||||
"showInFolder": "在資料夾中顯示",
|
||||
"finalizingVideo": "正在完成影片匯出...",
|
||||
"compilingGifProgress": "正在編譯 GIF... {{progress}}%",
|
||||
"compilingGifWait": "正在編譯 GIF... 這可能需要一些時間",
|
||||
"takeMoment": "這可能需要一點時間...",
|
||||
"failed": "匯出失敗",
|
||||
"tryAgain": "請重試",
|
||||
"finalizingVideoTitle": "正在完成影片",
|
||||
"compilingGif": "正在編譯 GIF",
|
||||
"exportingFormat": "正在匯出 {{format}}",
|
||||
"compiling": "編譯中",
|
||||
"renderingFrames": "渲染影格",
|
||||
"processing": "處理中...",
|
||||
"finalizing": "正在完成...",
|
||||
"compilingStatus": "編譯中...",
|
||||
"status": "狀態",
|
||||
"format": "格式",
|
||||
"frames": "影格",
|
||||
"cancelExport": "取消匯出",
|
||||
"savedSuccessfully": "{{format}} 儲存成功!"
|
||||
},
|
||||
"tutorial": {
|
||||
"triggerLabel": "剪輯功能說明",
|
||||
"title": "剪輯功能說明",
|
||||
"description": "了解如何剪掉影片中不需要的部分。",
|
||||
"explanationBefore": "剪輯工具透過定義您要",
|
||||
"remove": "移除",
|
||||
"explanationMiddle": "——任何被",
|
||||
"covered": "覆蓋",
|
||||
"explanationAfter": "的紅色剪輯區域部分將在匯出時被剪掉。",
|
||||
"visualExample": "示例演示",
|
||||
"removed": "已移除",
|
||||
"kept": "保留",
|
||||
"part1": "第 1 部分",
|
||||
"part2": "第 2 部分",
|
||||
"part3": "第 3 部分",
|
||||
"finalVideo": "最終影片",
|
||||
"step1Title": "1. 添加剪輯",
|
||||
"step1DescriptionBefore": "按",
|
||||
"step1DescriptionAfter": "鍵或點擊剪刀圖示來標記要移除的片段。",
|
||||
"step2Title": "2. 調整",
|
||||
"step2Description": "拖動紅色區域的邊緣,精確覆蓋您要剪掉的部分。"
|
||||
},
|
||||
"unsavedChanges": {
|
||||
"title": "未儲存的變更",
|
||||
"message": "您有未儲存的變更。",
|
||||
"detail": "是否在關閉前儲存專案?",
|
||||
"saveAndClose": "儲存並關閉",
|
||||
"discardAndClose": "捨棄並關閉",
|
||||
"loadProject": "載入專案…",
|
||||
"saveProject": "儲存專案…",
|
||||
"saveProjectAs": "專案另存新檔…"
|
||||
},
|
||||
"fileDialogs": {
|
||||
"saveGif": "儲存匯出的 GIF",
|
||||
"saveVideo": "儲存匯出的影片",
|
||||
"selectVideo": "選擇影片檔案",
|
||||
"saveProject": "儲存 OpenScreen 專案",
|
||||
"openProject": "開啟 OpenScreen 專案",
|
||||
"gifImage": "GIF 圖片",
|
||||
"mp4Video": "MP4 影片",
|
||||
"videoFiles": "影片檔案",
|
||||
"openscreenProject": "OpenScreen 專案",
|
||||
"allFiles": "所有檔案"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"newRecording": {
|
||||
"title": "返回錄影",
|
||||
"description": "目前工作階段已儲存。",
|
||||
"cancel": "取消",
|
||||
"confirm": "確認"
|
||||
},
|
||||
"errors": {
|
||||
"noVideoLoaded": "未載入影片",
|
||||
"videoNotReady": "影片未就緒",
|
||||
"unableToDetermineSourcePath": "無法確定來源影片路徑",
|
||||
"failedToSaveGif": "儲存 GIF 失敗",
|
||||
"gifExportFailed": "GIF 匯出失敗",
|
||||
"failedToSaveVideo": "儲存影片失敗",
|
||||
"exportFailed": "匯出失敗",
|
||||
"exportFailedWithError": "匯出失敗:{{error}}",
|
||||
"failedToSaveExport": "儲存匯出檔案失敗",
|
||||
"failedToSaveExportedVideo": "儲存匯出的影片失敗",
|
||||
"failedToRevealInFolder": "在資料夾中顯示時出錯:{{error}}"
|
||||
},
|
||||
"export": {
|
||||
"canceled": "匯出已取消",
|
||||
"exportedSuccessfully": "{{format}} 匯出成功"
|
||||
},
|
||||
"project": {
|
||||
"saveCanceled": "專案儲存已取消",
|
||||
"failedToSave": "儲存專案失敗",
|
||||
"savedTo": "專案已儲存至 {{path}}",
|
||||
"failedToLoad": "載入專案失敗",
|
||||
"invalidFormat": "無效的專案檔案格式",
|
||||
"loadedFrom": "專案已從 {{path}} 載入"
|
||||
},
|
||||
"recording": {
|
||||
"failedCameraAccess": "請求攝影機權限失敗。",
|
||||
"cameraBlocked": "攝影機權限已被封鎖。請在系統設定中啟用以使用攝影機。",
|
||||
"systemAudioUnavailable": "系統音訊不可用。將在無系統音訊的情況下錄製。",
|
||||
"microphoneDenied": "麥克風權限被拒絕。錄製將繼續,但不包含音訊。",
|
||||
"cameraDenied": "攝影機權限被拒絕。錄製將繼續,但不包含攝影機畫面。",
|
||||
"permissionDenied": "錄影權限被拒絕。請允許螢幕錄製。"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"tooltips": {
|
||||
"hideHUD": "隱藏控制面板",
|
||||
"closeApp": "關閉應用程式",
|
||||
"restartRecording": "重新開始錄製",
|
||||
"cancelRecording": "取消錄製",
|
||||
"pauseRecording": "暫停錄製",
|
||||
"resumeRecording": "繼續錄製",
|
||||
"openVideoFile": "開啟影片檔案",
|
||||
"openProject": "開啟專案"
|
||||
},
|
||||
"audio": {
|
||||
"enableSystemAudio": "啟用系統音訊",
|
||||
"disableSystemAudio": "停用系統音訊",
|
||||
"enableMicrophone": "啟用麥克風",
|
||||
"disableMicrophone": "停用麥克風",
|
||||
"defaultMicrophone": "預設麥克風"
|
||||
},
|
||||
"webcam": {
|
||||
"enableWebcam": "啟用攝影機",
|
||||
"disableWebcam": "停用攝影機",
|
||||
"defaultCamera": "預設攝影機",
|
||||
"searching": "正在搜尋...",
|
||||
"noneFound": "未找到攝影機",
|
||||
"unavailable": "攝影機不可用"
|
||||
},
|
||||
"sourceSelector": {
|
||||
"loading": "正在載入來源...",
|
||||
"screens": "螢幕 ({{count}})",
|
||||
"windows": "視窗 ({{count}})",
|
||||
"defaultSourceName": "螢幕"
|
||||
},
|
||||
"recording": {
|
||||
"selectSource": "請選擇要錄製的來源"
|
||||
},
|
||||
"language": "語言"
|
||||
}
|
||||
@@ -0,0 +1,176 @@
|
||||
{
|
||||
"zoom": {
|
||||
"level": "縮放級別",
|
||||
"selectRegion": "選擇要調整的縮放區域",
|
||||
"deleteZoom": "刪除縮放",
|
||||
"focusMode": {
|
||||
"title": "對焦模式",
|
||||
"manual": "手動",
|
||||
"auto": "自動",
|
||||
"autoDescription": "攝影機跟隨錄製時的游標位置"
|
||||
},
|
||||
"speed": {
|
||||
"title": "縮放速度",
|
||||
"instant": "即時",
|
||||
"fast": "快速",
|
||||
"smooth": "平滑",
|
||||
"lazy": "緩慢"
|
||||
}
|
||||
},
|
||||
"speed": {
|
||||
"playbackSpeed": "播放速度",
|
||||
"selectRegion": "選擇要調整的速度區域",
|
||||
"deleteRegion": "刪除速度區域",
|
||||
"customPlaybackSpeed": "自訂播放速度",
|
||||
"maxSpeedError": "速度不能超過 16×"
|
||||
},
|
||||
"trim": {
|
||||
"deleteRegion": "刪除剪輯區域"
|
||||
},
|
||||
"layout": {
|
||||
"title": "版面配置",
|
||||
"preset": "預設",
|
||||
"selectPreset": "選擇預設",
|
||||
"pictureInPicture": "子母畫面",
|
||||
"verticalStack": "垂直堆疊",
|
||||
"dualFrame": "雙畫框",
|
||||
"webcamShape": "攝影機形狀",
|
||||
"webcamSize": "攝影機大小"
|
||||
},
|
||||
"effects": {
|
||||
"title": "影片效果",
|
||||
"blurBg": "模糊背景",
|
||||
"motionBlur": "動態模糊",
|
||||
"off": "關",
|
||||
"shadow": "陰影",
|
||||
"roundness": "圓角",
|
||||
"padding": "內邊距"
|
||||
},
|
||||
"background": {
|
||||
"title": "背景",
|
||||
"image": "圖片",
|
||||
"color": "顏色",
|
||||
"gradient": "漸層",
|
||||
"uploadCustom": "上傳自訂",
|
||||
"gradientLabel": "漸層 {{index}}"
|
||||
},
|
||||
"crop": {
|
||||
"title": "裁剪",
|
||||
"cropVideo": "裁剪影片",
|
||||
"dragInstruction": "拖動每一側來調整裁剪區域",
|
||||
"ratio": "比例",
|
||||
"free": "自由",
|
||||
"done": "完成",
|
||||
"lockAspectRatio": "鎖定長寬比",
|
||||
"unlockAspectRatio": "解鎖長寬比"
|
||||
},
|
||||
"exportFormat": {
|
||||
"mp4": "MP4",
|
||||
"gif": "GIF",
|
||||
"mp4Video": "MP4 影片",
|
||||
"mp4Description": "高品質影片檔案",
|
||||
"gifAnimation": "GIF 動畫",
|
||||
"gifDescription": "可分享的動態圖片"
|
||||
},
|
||||
"exportQuality": {
|
||||
"title": "匯出品質",
|
||||
"low": "低",
|
||||
"medium": "中",
|
||||
"high": "高"
|
||||
},
|
||||
"gifSettings": {
|
||||
"frameRate": "GIF 影格率",
|
||||
"size": "GIF 尺寸",
|
||||
"loop": "循環 GIF"
|
||||
},
|
||||
"project": {
|
||||
"save": "儲存專案",
|
||||
"load": "載入專案"
|
||||
},
|
||||
"export": {
|
||||
"videoButton": "匯出影片",
|
||||
"gifButton": "匯出 GIF",
|
||||
"chooseSaveLocation": "選擇儲存位置"
|
||||
},
|
||||
"links": {
|
||||
"reportBug": "回報錯誤",
|
||||
"starOnGithub": "在 GitHub 上加星"
|
||||
},
|
||||
"imageUpload": {
|
||||
"invalidFileType": "無效的檔案類型",
|
||||
"jpgOnly": "請上傳 JPG 或 JPEG 格式的圖片檔案。",
|
||||
"uploadSuccess": "自訂圖片上傳成功!",
|
||||
"failedToUpload": "上傳圖片失敗",
|
||||
"errorReading": "讀取檔案時出錯。"
|
||||
},
|
||||
"annotation": {
|
||||
"title": "標註設定",
|
||||
"active": "啟用",
|
||||
"typeText": "文字",
|
||||
"typeImage": "圖片",
|
||||
"typeArrow": "箭頭",
|
||||
"typeBlur": "模糊",
|
||||
"textContent": "文字內容",
|
||||
"textPlaceholder": "輸入您的文字...",
|
||||
"fontStyle": "字體樣式",
|
||||
"selectStyle": "選擇樣式",
|
||||
"size": "大小",
|
||||
"customFonts": "自訂字體",
|
||||
"textColor": "文字顏色",
|
||||
"background": "背景",
|
||||
"none": "無",
|
||||
"color": "顏色",
|
||||
"clearBackground": "清除背景",
|
||||
"uploadImage": "上傳圖片",
|
||||
"supportedFormats": "支援的格式:JPG、PNG、GIF、WebP",
|
||||
"arrowDirection": "箭頭方向",
|
||||
"strokeWidth": "描邊寬度:{{width}}px",
|
||||
"arrowColor": "箭頭顏色",
|
||||
"blurShape": "模糊形狀",
|
||||
"blurIntensity": "模糊強度",
|
||||
"blurShapeRectangle": "矩形",
|
||||
"blurShapeOval": "橢圓",
|
||||
"blurShapeFreehand": "自由手繪",
|
||||
"deleteAnnotation": "刪除標註",
|
||||
"shortcutsAndTips": "快捷鍵與提示",
|
||||
"tipMovePlayhead": "將播放頭移動到重疊的標註區域並選擇一個項目。",
|
||||
"tipTabCycle": "使用 Tab 鍵在重疊項目之間循環切換。",
|
||||
"tipShiftTabCycle": "使用 Shift+Tab 反向循環切換。",
|
||||
"invalidImageType": "無效的檔案類型",
|
||||
"imageFormatsOnly": "請上傳 JPG、PNG、GIF 或 WebP 格式的圖片檔案。",
|
||||
"imageUploadSuccess": "圖片上傳成功!",
|
||||
"failedImageUpload": "上傳圖片失敗"
|
||||
},
|
||||
"fontStyles": {
|
||||
"classic": "經典",
|
||||
"editor": "編輯器",
|
||||
"strong": "粗體",
|
||||
"typewriter": "打字機",
|
||||
"deco": "裝飾",
|
||||
"simple": "簡約",
|
||||
"modern": "現代",
|
||||
"clean": "簡潔"
|
||||
},
|
||||
"customFont": {
|
||||
"dialogTitle": "新增 Google 字體",
|
||||
"urlLabel": "Google Fonts 匯入 URL",
|
||||
"urlPlaceholder": "https://fonts.googleapis.com/css2?family=Roboto&display=swap",
|
||||
"urlHelp": "從 Google Fonts 取得:選擇字體 → 點擊 \"Get font\" → 複製 @import URL",
|
||||
"nameLabel": "顯示名稱",
|
||||
"namePlaceholder": "我的自訂字體",
|
||||
"nameHelp": "這是字體在字體選擇器中顯示的名稱",
|
||||
"addButton": "新增字體",
|
||||
"addingButton": "新增中...",
|
||||
"errorEmptyUrl": "請輸入 Google Fonts 匯入 URL",
|
||||
"errorInvalidUrl": "請輸入有效的 Google Fonts URL",
|
||||
"errorEmptyName": "請輸入字體名稱",
|
||||
"errorExtractFailed": "無法從 URL 中提取字體系列",
|
||||
"successMessage": "字體 \"{{fontName}}\" 新增成功",
|
||||
"failedToAdd": "新增字體失敗",
|
||||
"errorTimeout": "字體載入時間過長。請檢查 URL 並重試。",
|
||||
"errorLoadFailed": "無法載入該字體。請確認 Google Fonts URL 是否正確。"
|
||||
},
|
||||
"language": {
|
||||
"title": "語言"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"title": "鍵盤快捷鍵",
|
||||
"customize": "自訂",
|
||||
"configurable": "可設定",
|
||||
"fixed": "固定",
|
||||
"pressKey": "請按下按鍵…",
|
||||
"clickToChange": "點擊以變更",
|
||||
"pressEscToCancel": "按 Esc 取消",
|
||||
"helpText": "點擊一個快捷鍵,然後按下新的組合鍵。按 Esc 取消。",
|
||||
"resetToDefaults": "還原預設設定",
|
||||
"alreadyUsedBy": "已被 \"{{action}}\" 使用",
|
||||
"swap": "交換",
|
||||
"reservedShortcut": "此快捷鍵已保留給 \"{{label}}\",無法重新指定。",
|
||||
"savedToast": "鍵盤快捷鍵已儲存",
|
||||
"resetToast": "已還原預設快捷鍵 — 點擊儲存以套用",
|
||||
"actions": {
|
||||
"addZoom": "新增縮放",
|
||||
"addTrim": "新增剪輯",
|
||||
"addSpeed": "新增速度",
|
||||
"addAnnotation": "新增標註",
|
||||
"addBlur": "新增模糊",
|
||||
"addKeyframe": "新增關鍵影格",
|
||||
"deleteSelected": "刪除所選",
|
||||
"playPause": "播放 / 暫停"
|
||||
},
|
||||
"fixedActions": {
|
||||
"undo": "復原",
|
||||
"redo": "重做",
|
||||
"cycleAnnotationsForward": "向前切換標註",
|
||||
"cycleAnnotationsBackward": "向後切換標註",
|
||||
"deleteSelectedAlt": "刪除所選(替代)",
|
||||
"panTimeline": "平移時間軸",
|
||||
"zoomTimeline": "縮放時間軸",
|
||||
"frameBack": "上一影格",
|
||||
"frameForward": "下一影格"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"buttons": {
|
||||
"addZoom": "新增縮放 (Z)",
|
||||
"suggestZooms": "根據游標建議縮放",
|
||||
"addTrim": "新增剪輯 (T)",
|
||||
"addAnnotation": "新增標註 (A)",
|
||||
"addSpeed": "新增速度 (S)",
|
||||
"addBlur": "新增模糊 (B)"
|
||||
},
|
||||
"hints": {
|
||||
"pressZoom": "按 Z 新增縮放",
|
||||
"pressTrim": "按 T 新增剪輯",
|
||||
"pressAnnotation": "按 A 新增標註",
|
||||
"pressSpeed": "按 S 新增速度",
|
||||
"pressBlur": "按 B 新增模糊區域"
|
||||
},
|
||||
"labels": {
|
||||
"pan": "平移",
|
||||
"zoom": "縮放",
|
||||
"zoomItem": "縮放 {{index}}",
|
||||
"trimItem": "剪輯 {{index}}",
|
||||
"speedItem": "速度 {{index}}",
|
||||
"annotationItem": "標註",
|
||||
"imageItem": "圖片",
|
||||
"emptyText": "空文字",
|
||||
"blurItem": "模糊 {{index}}"
|
||||
},
|
||||
"emptyState": {
|
||||
"noVideo": "未載入影片",
|
||||
"dragAndDrop": "拖放影片以開始編輯"
|
||||
},
|
||||
"errors": {
|
||||
"cannotPlaceZoom": "無法在此處放置縮放",
|
||||
"zoomExistsAtLocation": "此位置已存在縮放或沒有足夠的空間。",
|
||||
"zoomSuggestionUnavailable": "縮放建議處理器不可用",
|
||||
"noCursorTelemetry": "無可用的游標遙測資料",
|
||||
"noCursorTelemetryDescription": "請先錄製一段螢幕錄影以產生基於游標的建議。",
|
||||
"noUsableTelemetry": "無可用的游標遙測資料",
|
||||
"noUsableTelemetryDescription": "錄製內容沒有包含足夠的游標移動資料。",
|
||||
"noDwellMoments": "未找到明確的游標停留時刻",
|
||||
"noDwellMomentsDescription": "請嘗試在重要操作上進行較慢游標停留的錄製。",
|
||||
"noAutoZoomSlots": "無可用的自動縮放位置",
|
||||
"noAutoZoomSlotsDescription": "偵測到的停留點與現有縮放區域重疊。",
|
||||
"cannotPlaceTrim": "無法在此處放置剪輯",
|
||||
"trimExistsAtLocation": "此位置已存在剪輯或沒有足夠的空間。",
|
||||
"cannotPlaceSpeed": "無法在此處放置速度",
|
||||
"speedExistsAtLocation": "此位置已存在速度區域或沒有足夠的空間。"
|
||||
},
|
||||
"success": {
|
||||
"addedZoomSuggestions": "已新增 {{count}} 個基於游標的縮放建議",
|
||||
"addedZoomSuggestionsPlural": "已新增 {{count}} 個基於游標的縮放建議"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user