Skip to content

Commit 515baf1

Browse files
committed
feat: add zh-TW locale
1 parent a6ae0e6 commit 515baf1

10 files changed

Lines changed: 447 additions & 4 deletions

File tree

scripts/i18n-check.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import path from "node:path";
1111

1212
const LOCALES_DIR = path.resolve("src/i18n/locales");
1313
const BASE_LOCALE = "en";
14-
const COMPARE_LOCALES = ["zh-CN", "es", "tr", "ko-KR"];
14+
const COMPARE_LOCALES = ["zh-CN", "zh-TW", "es", "tr", "ko-KR"];
1515

1616
function getKeys(obj, prefix = "") {
1717
const keys = [];

src/i18n/config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export const DEFAULT_LOCALE = "en" as const;
2-
export const SUPPORTED_LOCALES = ["en", "zh-CN", "es", "fr", "tr", "ko-KR"] as const;
2+
export const SUPPORTED_LOCALES = ["en", "zh-CN", "zh-TW", "es", "fr", "tr", "ko-KR"] as const;
33
export const I18N_NAMESPACES = [
44
"common",
55
"dialogs",

src/i18n/locales/zh-CN/common.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"exitFullscreen": "退出全屏"
2424
},
2525
"locale": {
26-
"name": "中文",
27-
"short": "中文"
26+
"name": "简体中文",
27+
"short": "简中"
2828
}
2929
}

src/i18n/locales/zh-TW/common.json

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"actions": {
3+
"cancel": "取消",
4+
"save": "儲存",
5+
"delete": "刪除",
6+
"close": "關閉",
7+
"share": "分享",
8+
"done": "完成",
9+
"open": "開啟",
10+
"upload": "上傳",
11+
"export": "匯出",
12+
"file": "檔案",
13+
"edit": "編輯",
14+
"view": "檢視",
15+
"window": "視窗",
16+
"quit": "退出",
17+
"stopRecording": "停止錄製"
18+
},
19+
"playback": {
20+
"play": "播放",
21+
"pause": "暫停",
22+
"fullscreen": "全螢幕",
23+
"exitFullscreen": "退出全螢幕"
24+
},
25+
"locale": {
26+
"name": "繁體中文",
27+
"short": "繁中"
28+
}
29+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
{
2+
"export": {
3+
"complete": "匯出完成",
4+
"yourFormatReady": "您的 {{format}} 已準備就緒",
5+
"showInFolder": "在資料夾中顯示",
6+
"finalizingVideo": "正在完成影片匯出...",
7+
"compilingGifProgress": "正在編譯 GIF... {{progress}}%",
8+
"compilingGifWait": "正在編譯 GIF... 這可能需要一些時間",
9+
"takeMoment": "這可能需要一點時間...",
10+
"failed": "匯出失敗",
11+
"tryAgain": "請重試",
12+
"finalizingVideoTitle": "正在完成影片",
13+
"compilingGif": "正在編譯 GIF",
14+
"exportingFormat": "正在匯出 {{format}}",
15+
"compiling": "編譯中",
16+
"renderingFrames": "渲染影格",
17+
"processing": "處理中...",
18+
"finalizing": "正在完成...",
19+
"compilingStatus": "編譯中...",
20+
"status": "狀態",
21+
"format": "格式",
22+
"frames": "影格",
23+
"cancelExport": "取消匯出",
24+
"savedSuccessfully": "{{format}} 儲存成功!"
25+
},
26+
"tutorial": {
27+
"triggerLabel": "剪輯功能說明",
28+
"title": "剪輯功能說明",
29+
"description": "了解如何剪掉影片中不需要的部分。",
30+
"explanationBefore": "剪輯工具透過定義您要",
31+
"remove": "移除",
32+
"explanationMiddle": "——任何被",
33+
"covered": "覆蓋",
34+
"explanationAfter": "的紅色剪輯區域部分將在匯出時被剪掉。",
35+
"visualExample": "示例演示",
36+
"removed": "已移除",
37+
"kept": "保留",
38+
"part1": "第 1 部分",
39+
"part2": "第 2 部分",
40+
"part3": "第 3 部分",
41+
"finalVideo": "最終影片",
42+
"step1Title": "1. 添加剪輯",
43+
"step1DescriptionBefore": "",
44+
"step1DescriptionAfter": "鍵或點擊剪刀圖示來標記要移除的片段。",
45+
"step2Title": "2. 調整",
46+
"step2Description": "拖動紅色區域的邊緣,精確覆蓋您要剪掉的部分。"
47+
},
48+
"unsavedChanges": {
49+
"title": "未儲存的變更",
50+
"message": "您有未儲存的變更。",
51+
"detail": "是否在關閉前儲存專案?",
52+
"saveAndClose": "儲存並關閉",
53+
"discardAndClose": "捨棄並關閉",
54+
"loadProject": "載入專案…",
55+
"saveProject": "儲存專案…",
56+
"saveProjectAs": "專案另存新檔…"
57+
},
58+
"fileDialogs": {
59+
"saveGif": "儲存匯出的 GIF",
60+
"saveVideo": "儲存匯出的影片",
61+
"selectVideo": "選擇影片檔案",
62+
"saveProject": "儲存 OpenScreen 專案",
63+
"openProject": "開啟 OpenScreen 專案",
64+
"gifImage": "GIF 圖片",
65+
"mp4Video": "MP4 影片",
66+
"videoFiles": "影片檔案",
67+
"openscreenProject": "OpenScreen 專案",
68+
"allFiles": "所有檔案"
69+
}
70+
}

src/i18n/locales/zh-TW/editor.json

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
{
2+
"newRecording": {
3+
"title": "返回錄影",
4+
"description": "目前工作階段已儲存。",
5+
"cancel": "取消",
6+
"confirm": "確認"
7+
},
8+
"errors": {
9+
"noVideoLoaded": "未載入影片",
10+
"videoNotReady": "影片未就緒",
11+
"unableToDetermineSourcePath": "無法確定來源影片路徑",
12+
"failedToSaveGif": "儲存 GIF 失敗",
13+
"gifExportFailed": "GIF 匯出失敗",
14+
"failedToSaveVideo": "儲存影片失敗",
15+
"exportFailed": "匯出失敗",
16+
"exportFailedWithError": "匯出失敗:{{error}}",
17+
"failedToSaveExport": "儲存匯出檔案失敗",
18+
"failedToSaveExportedVideo": "儲存匯出的影片失敗",
19+
"failedToRevealInFolder": "在資料夾中顯示時出錯:{{error}}"
20+
},
21+
"export": {
22+
"canceled": "匯出已取消",
23+
"exportedSuccessfully": "{{format}} 匯出成功"
24+
},
25+
"project": {
26+
"saveCanceled": "專案儲存已取消",
27+
"failedToSave": "儲存專案失敗",
28+
"savedTo": "專案已儲存至 {{path}}",
29+
"failedToLoad": "載入專案失敗",
30+
"invalidFormat": "無效的專案檔案格式",
31+
"loadedFrom": "專案已從 {{path}} 載入"
32+
},
33+
"recording": {
34+
"failedCameraAccess": "請求攝影機權限失敗。",
35+
"cameraBlocked": "攝影機權限已被封鎖。請在系統設定中啟用以使用攝影機。",
36+
"systemAudioUnavailable": "系統音訊不可用。將在無系統音訊的情況下錄製。",
37+
"microphoneDenied": "麥克風權限被拒絕。錄製將繼續,但不包含音訊。",
38+
"cameraDenied": "攝影機權限被拒絕。錄製將繼續,但不包含攝影機畫面。",
39+
"permissionDenied": "錄影權限被拒絕。請允許螢幕錄製。"
40+
}
41+
}

src/i18n/locales/zh-TW/launch.json

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"tooltips": {
3+
"hideHUD": "隱藏控制面板",
4+
"closeApp": "關閉應用程式",
5+
"restartRecording": "重新開始錄製",
6+
"cancelRecording": "取消錄製",
7+
"pauseRecording": "暫停錄製",
8+
"resumeRecording": "繼續錄製",
9+
"openVideoFile": "開啟影片檔案",
10+
"openProject": "開啟專案"
11+
},
12+
"audio": {
13+
"enableSystemAudio": "啟用系統音訊",
14+
"disableSystemAudio": "停用系統音訊",
15+
"enableMicrophone": "啟用麥克風",
16+
"disableMicrophone": "停用麥克風",
17+
"defaultMicrophone": "預設麥克風"
18+
},
19+
"webcam": {
20+
"enableWebcam": "啟用攝影機",
21+
"disableWebcam": "停用攝影機",
22+
"defaultCamera": "預設攝影機",
23+
"searching": "正在搜尋...",
24+
"noneFound": "未找到攝影機",
25+
"unavailable": "攝影機不可用"
26+
},
27+
"sourceSelector": {
28+
"loading": "正在載入來源...",
29+
"screens": "螢幕 ({{count}})",
30+
"windows": "視窗 ({{count}})",
31+
"defaultSourceName": "螢幕"
32+
},
33+
"recording": {
34+
"selectSource": "請選擇要錄製的來源"
35+
},
36+
"language": "語言"
37+
}
Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
{
2+
"zoom": {
3+
"level": "縮放級別",
4+
"selectRegion": "選擇要調整的縮放區域",
5+
"deleteZoom": "刪除縮放",
6+
"focusMode": {
7+
"title": "對焦模式",
8+
"manual": "手動",
9+
"auto": "自動",
10+
"autoDescription": "攝影機跟隨錄製時的游標位置"
11+
},
12+
"speed": {
13+
"title": "縮放速度",
14+
"instant": "即時",
15+
"fast": "快速",
16+
"smooth": "平滑",
17+
"lazy": "緩慢"
18+
}
19+
},
20+
"speed": {
21+
"playbackSpeed": "播放速度",
22+
"selectRegion": "選擇要調整的速度區域",
23+
"deleteRegion": "刪除速度區域",
24+
"customPlaybackSpeed": "自訂播放速度",
25+
"maxSpeedError": "速度不能超過 16×"
26+
},
27+
"trim": {
28+
"deleteRegion": "刪除剪輯區域"
29+
},
30+
"layout": {
31+
"title": "版面配置",
32+
"preset": "預設",
33+
"selectPreset": "選擇預設",
34+
"pictureInPicture": "子母畫面",
35+
"verticalStack": "垂直堆疊",
36+
"dualFrame": "雙畫框",
37+
"webcamShape": "攝影機形狀",
38+
"webcamSize": "攝影機大小"
39+
},
40+
"effects": {
41+
"title": "影片效果",
42+
"blurBg": "模糊背景",
43+
"motionBlur": "動態模糊",
44+
"off": "",
45+
"shadow": "陰影",
46+
"roundness": "圓角",
47+
"padding": "內邊距"
48+
},
49+
"background": {
50+
"title": "背景",
51+
"image": "圖片",
52+
"color": "顏色",
53+
"gradient": "漸層",
54+
"uploadCustom": "上傳自訂",
55+
"gradientLabel": "漸層 {{index}}"
56+
},
57+
"crop": {
58+
"title": "裁剪",
59+
"cropVideo": "裁剪影片",
60+
"dragInstruction": "拖動每一側來調整裁剪區域",
61+
"ratio": "比例",
62+
"free": "自由",
63+
"done": "完成",
64+
"lockAspectRatio": "鎖定長寬比",
65+
"unlockAspectRatio": "解鎖長寬比"
66+
},
67+
"exportFormat": {
68+
"mp4": "MP4",
69+
"gif": "GIF",
70+
"mp4Video": "MP4 影片",
71+
"mp4Description": "高品質影片檔案",
72+
"gifAnimation": "GIF 動畫",
73+
"gifDescription": "可分享的動態圖片"
74+
},
75+
"exportQuality": {
76+
"title": "匯出品質",
77+
"low": "",
78+
"medium": "",
79+
"high": ""
80+
},
81+
"gifSettings": {
82+
"frameRate": "GIF 影格率",
83+
"size": "GIF 尺寸",
84+
"loop": "循環 GIF"
85+
},
86+
"project": {
87+
"save": "儲存專案",
88+
"load": "載入專案"
89+
},
90+
"export": {
91+
"videoButton": "匯出影片",
92+
"gifButton": "匯出 GIF",
93+
"chooseSaveLocation": "選擇儲存位置"
94+
},
95+
"links": {
96+
"reportBug": "回報錯誤",
97+
"starOnGithub": "在 GitHub 上加星"
98+
},
99+
"imageUpload": {
100+
"invalidFileType": "無效的檔案類型",
101+
"jpgOnly": "請上傳 JPG 或 JPEG 格式的圖片檔案。",
102+
"uploadSuccess": "自訂圖片上傳成功!",
103+
"failedToUpload": "上傳圖片失敗",
104+
"errorReading": "讀取檔案時出錯。"
105+
},
106+
"annotation": {
107+
"title": "標註設定",
108+
"active": "啟用",
109+
"typeText": "文字",
110+
"typeImage": "圖片",
111+
"typeArrow": "箭頭",
112+
"typeBlur": "模糊",
113+
"textContent": "文字內容",
114+
"textPlaceholder": "輸入您的文字...",
115+
"fontStyle": "字體樣式",
116+
"selectStyle": "選擇樣式",
117+
"size": "大小",
118+
"customFonts": "自訂字體",
119+
"textColor": "文字顏色",
120+
"background": "背景",
121+
"none": "",
122+
"color": "顏色",
123+
"clearBackground": "清除背景",
124+
"uploadImage": "上傳圖片",
125+
"supportedFormats": "支援的格式:JPG、PNG、GIF、WebP",
126+
"arrowDirection": "箭頭方向",
127+
"strokeWidth": "描邊寬度:{{width}}px",
128+
"arrowColor": "箭頭顏色",
129+
"blurShape": "模糊形狀",
130+
"blurIntensity": "模糊強度",
131+
"blurShapeRectangle": "矩形",
132+
"blurShapeOval": "橢圓",
133+
"blurShapeFreehand": "自由手繪",
134+
"deleteAnnotation": "刪除標註",
135+
"shortcutsAndTips": "快捷鍵與提示",
136+
"tipMovePlayhead": "將播放頭移動到重疊的標註區域並選擇一個項目。",
137+
"tipTabCycle": "使用 Tab 鍵在重疊項目之間循環切換。",
138+
"tipShiftTabCycle": "使用 Shift+Tab 反向循環切換。",
139+
"invalidImageType": "無效的檔案類型",
140+
"imageFormatsOnly": "請上傳 JPG、PNG、GIF 或 WebP 格式的圖片檔案。",
141+
"imageUploadSuccess": "圖片上傳成功!",
142+
"failedImageUpload": "上傳圖片失敗"
143+
},
144+
"fontStyles": {
145+
"classic": "經典",
146+
"editor": "編輯器",
147+
"strong": "粗體",
148+
"typewriter": "打字機",
149+
"deco": "裝飾",
150+
"simple": "簡約",
151+
"modern": "現代",
152+
"clean": "簡潔"
153+
},
154+
"customFont": {
155+
"dialogTitle": "新增 Google 字體",
156+
"urlLabel": "Google Fonts 匯入 URL",
157+
"urlPlaceholder": "https://fonts.googleapis.com/css2?family=Roboto&display=swap",
158+
"urlHelp": "從 Google Fonts 取得:選擇字體 → 點擊 \"Get font\" → 複製 @import URL",
159+
"nameLabel": "顯示名稱",
160+
"namePlaceholder": "我的自訂字體",
161+
"nameHelp": "這是字體在字體選擇器中顯示的名稱",
162+
"addButton": "新增字體",
163+
"addingButton": "新增中...",
164+
"errorEmptyUrl": "請輸入 Google Fonts 匯入 URL",
165+
"errorInvalidUrl": "請輸入有效的 Google Fonts URL",
166+
"errorEmptyName": "請輸入字體名稱",
167+
"errorExtractFailed": "無法從 URL 中提取字體系列",
168+
"successMessage": "字體 \"{{fontName}}\" 新增成功",
169+
"failedToAdd": "新增字體失敗",
170+
"errorTimeout": "字體載入時間過長。請檢查 URL 並重試。",
171+
"errorLoadFailed": "無法載入該字體。請確認 Google Fonts URL 是否正確。"
172+
},
173+
"language": {
174+
"title": "語言"
175+
}
176+
}

0 commit comments

Comments
 (0)