diff --git a/web/public/locales/zh-Hant/common.json b/web/public/locales/zh-Hant/common.json
new file mode 100644
index 000000000..acc7a0a08
--- /dev/null
+++ b/web/public/locales/zh-Hant/common.json
@@ -0,0 +1,251 @@
+{
+ "time": {
+ "untilForTime": "直到 {{time}}",
+ "untilForRestart": "直到 Frigate 重新啟動。",
+ "untilRestart": "直到重新啟動",
+ "ago": "{{timeAgo}} 前",
+ "last14": "過去 14 天",
+ "last30": "過去 30 天",
+ "thisWeek": "這週",
+ "lastWeek": "上週",
+ "thisMonth": "這個月",
+ "lastMonth": "上個月",
+ "justNow": "剛剛",
+ "today": "今天",
+ "yesterday": "昨天",
+ "last7": "過去 7 天",
+ "5minutes": "5 分鐘",
+ "10minutes": "10 分鐘",
+ "30minutes": "30 分鐘",
+ "1hour": "1 小時",
+ "12hours": "12 小時",
+ "24hours": "24 小時",
+ "pm": "下午",
+ "am": "上午",
+ "yr": "{{time}} 年",
+ "year_other": "{{time}} 年",
+ "mo": "{{time}} 月",
+ "month_other": "{{time}} 月",
+ "d": "{{time}} 日",
+ "day_other": "{{time}}天",
+ "h": "{{time}}時",
+ "hour_other": "{{time}}小時",
+ "m": "{{time}}分",
+ "minute_other": "{{time}}分鐘",
+ "s": "{{time}}秒",
+ "second_other": "{{time}}秒鐘",
+ "formattedTimestamp": {
+ "12hour": "M 月 d 日 ah:mm:ss",
+ "24hour": "M 月 d 日 HH:mm:ss"
+ },
+ "formattedTimestamp2": {
+ "12hour": "MM 月 dd 日 ah:mm:ss",
+ "24hour": "MM 月 dd 日 HH:mm:ss"
+ },
+ "formattedTimestampHourMinute": {
+ "12hour": "a h:mm",
+ "24hour": "HH:mm"
+ },
+ "formattedTimestampHourMinuteSecond": {
+ "12hour": "a h:mm:ss",
+ "24hour": "HH:mm:ss"
+ },
+ "formattedTimestampMonthDayHourMinute": {
+ "12hour": "M 月 d 日 ah:mm",
+ "24hour": "M 月 d 日 HH:mm"
+ },
+ "formattedTimestampMonthDayYear": {
+ "12hour": "yy 年 MM 月 dd 日",
+ "24hour": "yy 年 MM 月 dd 日"
+ },
+ "formattedTimestampMonthDayYearHourMinute": {
+ "12hour": "yyyy 年 M 月 d 日 ah:mm",
+ "24hour": "yyyy 年 M 月 d 日 HH:mm"
+ },
+ "formattedTimestampMonthDay": "M 月 d 日",
+ "formattedTimestampFilename": {
+ "12hour": "yy年MM月dd日 ah時mm分ss秒",
+ "24hour": "yy年MM月dd日 HH時mm分ss秒"
+ }
+ },
+ "unit": {
+ "speed": {
+ "mph": "英里/小時",
+ "kph": "公里/小時"
+ },
+ "length": {
+ "feet": "英尺",
+ "meters": "公尺"
+ }
+ },
+ "label": {
+ "back": "返回"
+ },
+ "button": {
+ "apply": "套用",
+ "reset": "重置",
+ "done": "完成",
+ "enabled": "已啟用",
+ "enable": "啟用",
+ "disabled": "已停用",
+ "disable": "停用",
+ "save": "保存",
+ "saving": "保存中…",
+ "cancel": "取消",
+ "close": "關閉",
+ "copy": "複製",
+ "back": "返回",
+ "history": "歷史紀錄",
+ "fullscreen": "全螢幕",
+ "exitFullscreen": "退出全螢幕",
+ "pictureInPicture": "子母畫面",
+ "twoWayTalk": "雙向通話",
+ "cameraAudio": "鏡頭音訊",
+ "on": "開",
+ "off": "關",
+ "edit": "編輯",
+ "copyCoordinates": "複製座標",
+ "delete": "刪除",
+ "yes": "是",
+ "no": "否",
+ "download": "下載",
+ "info": "資訊",
+ "suspended": "已暫停",
+ "unsuspended": "取消暫停",
+ "play": "播放",
+ "unselect": "取消選取",
+ "export": "匯出",
+ "deleteNow": "立即刪除",
+ "next": "繼續"
+ },
+ "menu": {
+ "system": "系統",
+ "systemMetrics": "系統訊息",
+ "configuration": "設定",
+ "systemLogs": "系統日誌",
+ "settings": "設定",
+ "configurationEditor": "設定編輯器",
+ "languages": "語言",
+ "language": {
+ "en": "English (英文)",
+ "es": "Español (西班牙文)",
+ "zhCN": "简体中文 (簡體中文)",
+ "hi": "हिन्दी (印地文)",
+ "fr": "Français (法文)",
+ "ar": "العربية (阿拉伯文)",
+ "pt": "Português (葡萄牙文)",
+ "ru": "Русский (俄文)",
+ "de": "Deutsch (德文)",
+ "ja": "日本語 (日文)",
+ "tr": "Türkçe (土耳其文)",
+ "it": "Italiano (義大利文)",
+ "nl": "Nederlands (荷蘭文)",
+ "sv": "Svenska (瑞典文)",
+ "cs": "Čeština (捷克文)",
+ "nb": "Norsk Bokmål (挪威文)",
+ "ko": "한국어 (韓文)",
+ "vi": "Tiếng Việt (越南文)",
+ "fa": "فارسی (波斯文)",
+ "pl": "Polski (波蘭文)",
+ "uk": "Українська (烏克蘭文)",
+ "he": "עברית (希伯來文)",
+ "el": "Ελληνικά (希臘文)",
+ "ro": "Română (羅馬尼亞文)",
+ "hu": "Magyar (匈牙利文)",
+ "fi": "Suomi (芬蘭文)",
+ "da": "Dansk (丹麥文)",
+ "sk": "Slovenčina (斯洛伐克文)",
+ "yue": "粵語 (粵語)",
+ "th": "ไทย (泰文)",
+ "ca": "Català (加泰隆尼亞文)",
+ "withSystem": {
+ "label": "使用系統語言設定"
+ }
+ },
+ "appearance": "外觀",
+ "darkMode": {
+ "label": "深色模式",
+ "light": "淺色",
+ "dark": "深色",
+ "withSystem": {
+ "label": "使用系統外觀模式設定"
+ }
+ },
+ "withSystem": "系統",
+ "theme": {
+ "label": "主題",
+ "blue": "藍色",
+ "green": "綠色",
+ "nord": "北歐風",
+ "red": "紅色",
+ "highcontrast": "高對比",
+ "default": "預設"
+ },
+ "help": "幫助",
+ "documentation": {
+ "title": "文件",
+ "label": "Frigate 文件"
+ },
+ "restart": "重新啟動 Frigate",
+ "live": {
+ "title": "即時影像",
+ "allCameras": "所有鏡頭",
+ "cameras": {
+ "title": "鏡頭",
+ "count_other": "{{count}} 個鏡頭"
+ }
+ },
+ "review": "審核",
+ "explore": "瀏覽",
+ "export": "匯出",
+ "uiPlayground": "UI 測試區",
+ "faceLibrary": "人臉資料庫",
+ "user": {
+ "title": "使用者",
+ "account": "帳號",
+ "current": "當前使用者:{{user}}",
+ "anonymous": "匿名",
+ "logout": "登出",
+ "setPassword": "設定密碼"
+ }
+ },
+ "toast": {
+ "copyUrlToClipboard": "已複製連結至剪貼簿。",
+ "save": {
+ "title": "保存",
+ "error": {
+ "title": "保存設定變更失敗:{{errorMessage}}",
+ "noMessage": "保存設定變更失敗"
+ }
+ }
+ },
+ "role": {
+ "title": "角色",
+ "admin": "管理員",
+ "viewer": "檢視者",
+ "desc": "管理員可以存取 Frigate UI 的全部功能。檢視者僅能查看鏡頭影像、審核物件及歷史紀錄。"
+ },
+ "pagination": {
+ "label": "分頁",
+ "previous": {
+ "title": "上一頁",
+ "label": "前往上一頁"
+ },
+ "next": {
+ "title": "下一頁",
+ "label": "前往下一頁"
+ },
+ "more": "更多頁面"
+ },
+ "accessDenied": {
+ "documentTitle": "拒絕存取 - Frigate",
+ "title": "拒絕存取",
+ "desc": "你沒有瀏覽此頁面的權限。"
+ },
+ "notFound": {
+ "documentTitle": "找不到頁面 - Frigate",
+ "title": "404",
+ "desc": "找不到頁面"
+ },
+ "selectItem": "選擇 {{item}}"
+}
diff --git a/web/public/locales/zh-Hant/components/camera.json b/web/public/locales/zh-Hant/components/camera.json
new file mode 100644
index 000000000..d07662c7e
--- /dev/null
+++ b/web/public/locales/zh-Hant/components/camera.json
@@ -0,0 +1,86 @@
+{
+ "group": {
+ "label": "鏡頭群組",
+ "add": "新增鏡頭群組",
+ "edit": "編輯鏡頭群組",
+ "delete": {
+ "label": "刪除鏡頭群組",
+ "confirm": {
+ "title": "確認刪除",
+ "desc": "你確定要刪除鏡頭群組 {{name}} 嗎?"
+ }
+ },
+ "name": {
+ "errorMessage": {
+ "mustLeastCharacters": "鏡頭群組名稱需至少包含兩個字元。",
+ "exists": "鏡頭群組名稱已存在。",
+ "nameMustNotPeriod": "鏡頭群組名稱不可包含點(.)。",
+ "invalid": "無效的鏡頭群組名稱。"
+ },
+ "label": "名稱",
+ "placeholder": "請輸入名稱…"
+ },
+ "cameras": {
+ "label": "鏡頭",
+ "desc": "選擇欲添加至群組的鏡頭。"
+ },
+ "icon": "圖標",
+ "success": "鏡頭群組({{name}})已儲存。",
+ "camera": {
+ "setting": {
+ "label": "鏡頭串流設定",
+ "title": "{{cameraName}} 串流設定",
+ "desc": "更改此鏡頭群組控制台的串流選項。這些設定是裝置/瀏覽器專屬的。",
+ "audioIsAvailable": "此串流有提供音訊",
+ "audioIsUnavailable": "此串流不提供音訊",
+ "audio": {
+ "tips": {
+ "title": "此串流必須從你的鏡頭輸出音訊並在 go2rtc 中設定。",
+ "document": "請參照文件 "
+ }
+ },
+ "stream": "串流",
+ "placeholder": "選擇串流",
+ "streamMethod": {
+ "label": "串流方式",
+ "placeholder": "選擇串流方式",
+ "method": {
+ "noStreaming": {
+ "label": "沒有串流",
+ "desc": "鏡頭影像每分鐘只會更新一次,並且不會進行串流。"
+ },
+ "smartStreaming": {
+ "label": "智慧串流(建議)",
+ "desc": "智慧串流在沒有偵測到活動時會每分鐘只更新一次鏡頭影像以節約頻寬及資源。並在偵測到活動時切換為即時串流。"
+ },
+ "continuousStreaming": {
+ "label": "持續串流",
+ "desc": {
+ "title": "即使為偵測到任何活動,鏡頭影像在處於畫面中時會保持即時串流。",
+ "warning": "持續串流可能會佔用較高的頻寬並且可能會對效能造成影響,請謹慎使用。"
+ }
+ }
+ }
+ },
+ "compatibilityMode": {
+ "label": "相容模式",
+ "desc": "只有在鏡頭的串流影像中出現色彩異常及右側有斜線時才啟用此選項。"
+ }
+ }
+ }
+ },
+ "debug": {
+ "options": {
+ "label": "設定",
+ "title": "選項",
+ "showOptions": "顯示選項",
+ "hideOptions": "隱藏選項"
+ },
+ "boundingBox": "定界框",
+ "timestamp": "時間戳",
+ "zones": "區域",
+ "mask": "遮罩",
+ "motion": "移動",
+ "regions": "區塊"
+ }
+}
diff --git a/web/public/locales/zh-Hant/components/dialog.json b/web/public/locales/zh-Hant/components/dialog.json
new file mode 100644
index 000000000..a29b487e1
--- /dev/null
+++ b/web/public/locales/zh-Hant/components/dialog.json
@@ -0,0 +1,112 @@
+{
+ "restart": {
+ "title": "你確定要重新啟動 Frigate 嗎?",
+ "button": "重新啟動",
+ "restarting": {
+ "title": "Frigate 正在重新啟動",
+ "content": "此頁面將在 {{countdown}} 秒後重新載入。",
+ "button": "立即重新載入"
+ }
+ },
+ "explore": {
+ "plus": {
+ "review": {
+ "question": {
+ "label": "確認此 Frigate Plus 標籤",
+ "ask_a": "此物件是 {{label}}
嗎?",
+ "ask_an": "此物件是 {{label}}
嗎?",
+ "ask_full": "此物件是 {{untranslatedLabel}}
({{translatedLabel}}) 嗎?"
+ },
+ "state": {
+ "submitted": "已提交"
+ }
+ },
+ "submitToPlus": {
+ "label": "提交到 Frigate+",
+ "desc": "在你欲遮蓋範圍內的物件並不是誤判。將他們標示為誤判並提交會使模型混淆。"
+ }
+ },
+ "video": {
+ "viewInHistory": "在歷史記錄中查看"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "從時間線選擇",
+ "lastHour_other": "過去 {{count}} 個小時",
+ "custom": "自定義",
+ "start": {
+ "title": "開始時間",
+ "label": "選擇開始時間"
+ },
+ "end": {
+ "title": "結束時間",
+ "label": "選擇結束時間"
+ }
+ },
+ "name": {
+ "placeholder": "替匯出資料命名"
+ },
+ "select": "選擇",
+ "export": "匯出",
+ "selectOrExport": "選擇或匯出",
+ "toast": {
+ "success": "成功開始匯出。請至 /exports 資料夾查看匯出資料。",
+ "error": {
+ "failed": "匯出失敗:{{error}}",
+ "endTimeMustAfterStartTime": "結束時間必須要在開始時間之後",
+ "noVaildTimeSelected": "沒有選取有效的時間範圍"
+ }
+ },
+ "fromTimeline": {
+ "saveExport": "保存匯出資料",
+ "previewExport": "預覽匯出資料"
+ }
+ },
+ "streaming": {
+ "label": "串流",
+ "restreaming": {
+ "disabled": "此鏡頭並未啟用串流重導向。",
+ "desc": {
+ "title": "設定 go2rtc 以啟用更多此鏡頭的預覽選項及音訊。",
+ "readTheDocumentation": "閱讀文件"
+ }
+ },
+ "showStats": {
+ "label": "顯示串流統計資料",
+ "desc": "啟用此選項以在鏡頭畫面上顯示串流統計資料。"
+ },
+ "debugView": "除錯檢視"
+ },
+ "search": {
+ "saveSearch": {
+ "label": "保存搜尋",
+ "desc": "替此保存的搜尋命名。",
+ "placeholder": "請輸入搜尋的名稱",
+ "overwrite": "{{searchName}} 已存在。保存將會覆蓋現有資料。",
+ "success": "搜尋 {{searchName}} 已保存。",
+ "button": {
+ "save": {
+ "label": "保存此次搜尋"
+ }
+ }
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "確認刪除",
+ "desc": {
+ "selected": "你確定要刪除所有與此查核項目有關的錄影檔案嗎?
按住Shift以在未來跳過此確認步驟。"
+ },
+ "toast": {
+ "success": "已成功刪除與選擇的審核物件有關的影片片段。",
+ "error": "刪除失敗:{{error}}"
+ }
+ },
+ "button": {
+ "export": "匯出",
+ "markAsReviewed": "標記為已審核",
+ "deleteNow": "立即刪除"
+ }
+ }
+}
diff --git a/web/public/locales/zh-Hant/components/filter.json b/web/public/locales/zh-Hant/components/filter.json
new file mode 100644
index 000000000..a1192ac59
--- /dev/null
+++ b/web/public/locales/zh-Hant/components/filter.json
@@ -0,0 +1,126 @@
+{
+ "filter": "過濾",
+ "labels": {
+ "label": "標籤",
+ "all": {
+ "title": "所有標籤",
+ "short": "標籤"
+ },
+ "count_one": "{{count}} 個標籤",
+ "count_other": "{{count}} 個標籤"
+ },
+ "zones": {
+ "all": {
+ "title": "所有區域",
+ "short": "區域"
+ },
+ "label": "區域"
+ },
+ "dates": {
+ "selectPreset": "選擇預設設定…",
+ "all": {
+ "title": "所有日期",
+ "short": "日期"
+ }
+ },
+ "more": "更多過濾條件",
+ "reset": {
+ "label": "重設過濾條件為預設值"
+ },
+ "timeRange": "時間範圍",
+ "subLabels": {
+ "label": "子標籤",
+ "all": "所有子標籤"
+ },
+ "score": "分數",
+ "estimatedSpeed": "估計速度({{unit}})",
+ "features": {
+ "label": "特徵",
+ "hasSnapshot": "包含截圖",
+ "hasVideoClip": "包含影片片段",
+ "submittedToFrigatePlus": {
+ "label": "已提交至 Frigate+",
+ "tips": "你必須先過濾出包含截圖的追蹤物件。
無法提交不包含截圖的追蹤物件至 Frigate+。"
+ }
+ },
+ "sort": {
+ "label": "排序",
+ "dateAsc": "日期(由舊到新)",
+ "dateDesc": "日期(由新到舊)",
+ "scoreAsc": "物件分數(由小到大)",
+ "scoreDesc": "物件分數(由大到小)",
+ "speedAsc": "估計速度(由慢到快)",
+ "speedDesc": "估計速度(由快到慢)",
+ "relevance": "相關性"
+ },
+ "cameras": {
+ "label": "鏡頭過濾",
+ "all": {
+ "title": "所有鏡頭",
+ "short": "鏡頭"
+ }
+ },
+ "review": {
+ "showReviewed": "顯示已審核的內容"
+ },
+ "motion": {
+ "showMotionOnly": "僅顯示有移動的內容"
+ },
+ "explore": {
+ "settings": {
+ "title": "設定",
+ "defaultView": {
+ "title": "預設檢視",
+ "desc": "當未選擇過濾條件時,顯示每個標籤最近追蹤物件的摘要,或顯示未過濾的網格。",
+ "summary": "摘要",
+ "unfilteredGrid": "未過濾的網格"
+ },
+ "gridColumns": {
+ "title": "網格欄位數",
+ "desc": "選擇檢視網格的欄位數量。"
+ },
+ "searchSource": {
+ "label": "搜尋來源",
+ "desc": "選擇搜尋追蹤物件的截圖或是說明。",
+ "options": {
+ "thumbnailImage": "截圖",
+ "description": "說明"
+ }
+ }
+ },
+ "date": {
+ "selectDateBy": {
+ "label": "選擇要過濾的日期"
+ }
+ }
+ },
+ "logSettings": {
+ "label": "過濾日誌等級",
+ "filterBySeverity": "依嚴重程度過濾日誌",
+ "loading": {
+ "title": "讀取中",
+ "desc": "當日誌頁面捲動到底部時,新日誌將自動更新顯示。"
+ },
+ "disableLogStreaming": "停用日誌串流",
+ "allLogs": "所有日誌"
+ },
+ "trackedObjectDelete": {
+ "title": "確認刪除",
+ "desc": "刪除這 {{objectLength}} 個追蹤物件將會刪除截圖、儲存的嵌入資料,以及相關的物件生命週期紀錄。歷史記錄中的錄影檔案不會被刪除。
你確定要繼續嗎?
按住 Shift 可在未來跳過這個確認內容。",
+ "toast": {
+ "success": "成功刪除追蹤物件。",
+ "error": "刪除追蹤物件失敗:{{errorMessage}}"
+ }
+ },
+ "zoneMask": {
+ "filterBy": "按區域遮罩過濾"
+ },
+ "recognizedLicensePlates": {
+ "title": "已辨識車牌",
+ "loadFailed": "讀取已辨識車牌失敗。",
+ "loading": "讀取已辨識車牌中…",
+ "placeholder": "輸入以搜尋車牌…",
+ "noLicensePlatesFound": "未找到車牌。",
+ "selectPlatesFromList": "從列表中選擇一個或多個車牌。"
+ }
+}
diff --git a/web/public/locales/zh-Hant/components/player.json b/web/public/locales/zh-Hant/components/player.json
new file mode 100644
index 000000000..dbecdb2be
--- /dev/null
+++ b/web/public/locales/zh-Hant/components/player.json
@@ -0,0 +1,51 @@
+{
+ "noRecordingsFoundForThisTime": "此時間段內沒有錄影",
+ "noPreviewFound": "找不到預覽",
+ "noPreviewFoundFor": "找不到 {{cameraName}} 的預覽",
+ "submitFrigatePlus": {
+ "title": "提交此畫面至 Frigate+?",
+ "submit": "提交"
+ },
+ "streamOffline": {
+ "desc": "{{cameraName}} 的 detect
串流未接收到任何畫面,請檢查錯誤日誌",
+ "title": "串流離線"
+ },
+ "cameraDisabled": "鏡頭已關閉",
+ "stats": {
+ "streamType": {
+ "title": "串流類型:",
+ "short": "類型"
+ },
+ "bandwidth": {
+ "title": "頻寬:",
+ "short": "頻寬"
+ },
+ "latency": {
+ "title": "延遲:",
+ "value": "{{seconds}} 秒",
+ "short": {
+ "title": "延遲",
+ "value": "{{seconds}} 秒"
+ }
+ },
+ "totalFrames": "總幀數:",
+ "droppedFrames": {
+ "title": "掉幀數:",
+ "short": {
+ "title": "掉幀",
+ "value": "{{droppedFrames}} 幀"
+ }
+ },
+ "decodedFrames": "已解碼幀數:",
+ "droppedFrameRate": "掉幀率:"
+ },
+ "livePlayerRequiredIOSVersion": "此串流類型需要 IOS 17.1 或以上版本。",
+ "toast": {
+ "success": {
+ "submittedFrigatePlus": "成功提交畫面至 Frigate+"
+ },
+ "error": {
+ "submitFrigatePlusFailed": "提交畫面至 Frigate+ 失敗"
+ }
+ }
+}
diff --git a/web/public/locales/zh-Hant/views/explore.json b/web/public/locales/zh-Hant/views/explore.json
new file mode 100644
index 000000000..6997b08dd
--- /dev/null
+++ b/web/public/locales/zh-Hant/views/explore.json
@@ -0,0 +1,205 @@
+{
+ "documentTitle": "瀏覽 - Frigate",
+ "generativeAI": "生成式 AI",
+ "exploreMore": "瀏覽更多 {{label}} 物件",
+ "exploreIsUnavailable": {
+ "title": "無法使用瀏覽功能",
+ "embeddingsReindexing": {
+ "finishingShortly": "即將完成",
+ "step": {
+ "thumbnailsEmbedded": "已嵌入縮圖: ",
+ "descriptionsEmbedded": "已嵌入說明: ",
+ "trackedObjectsProcessed": "已處理的追蹤物件: "
+ },
+ "context": "在重新建立完追蹤物件的嵌入索引後可以使用瀏覽功能。",
+ "startingUp": "啟動中…",
+ "estimatedTime": "預計剩餘時間:"
+ },
+ "downloadingModels": {
+ "context": "Frigate 正在下載所需的嵌入式模型以支援語意搜尋功能。根據你的網路連接速度,這可能會需要幾分鐘。",
+ "setup": {
+ "visionModel": "視覺模型",
+ "visionModelFeatureExtractor": "視覺模型特徵提取器",
+ "textModel": "文字模型",
+ "textTokenizer": "文字分詞器"
+ },
+ "tips": {
+ "context": "在模型下載完成後,你可能會需要重新建立追蹤物件的特徵索引。",
+ "documentation": "閱讀文件"
+ },
+ "error": "發生錯誤。請檢查 Frigate 日誌。"
+ }
+ },
+ "details": {
+ "timestamp": "時間戳",
+ "item": {
+ "title": "審核項目詳情",
+ "desc": "審核項目詳情",
+ "button": {
+ "share": "分享此審核項目",
+ "viewInExplore": "在瀏覽中查看"
+ },
+ "tips": {
+ "mismatch_other": "在此審核項目中偵測到 {{count}} 個不可用物件。這些物件可能不符合警示或偵測標準,或者已被清除/刪除。",
+ "hasMissingObjects": "如果你想要 Frigate 儲存以下標籤的追蹤物件:{{objects}},請調整設定"
+ },
+ "toast": {
+ "success": {
+ "regenerate": "已從 {{provider}} 請求新的說明。根據提供者的速度,生成新的說明可能會需要一段時間。",
+ "updatedSublabel": "成功更新子標籤。",
+ "updatedLPR": "成功更新車牌。"
+ },
+ "error": {
+ "regenerate": "請求 {{provider}} 生成新的說明失敗:{{errorMessage}}",
+ "updatedSublabelFailed": "更新子標籤失敗:{{errorMessage}}",
+ "updatedLPRFailed": "更新車牌失敗:{{errorMessage}}"
+ }
+ }
+ },
+ "label": "標籤",
+ "editSubLabel": {
+ "title": "編輯子標籤",
+ "desc": "輸入 {{label}} 的新子標籤",
+ "descNoLabel": "輸入此追蹤物件的新子標籤"
+ },
+ "editLPR": {
+ "title": "編輯車牌",
+ "desc": "輸入此 {{label}} 的新車牌號碼",
+ "descNoLabel": "輸入此追蹤物件的新車牌號碼"
+ },
+ "snapshotScore": {
+ "label": "截圖分數"
+ },
+ "topScore": {
+ "label": "最高分數",
+ "info": "最高分數是追蹤物件的最高中位數,因此可能會與搜尋結果的截圖顯示的分數有所不同。"
+ },
+ "recognizedLicensePlate": "已辨識車牌",
+ "estimatedSpeed": "估計速度",
+ "objects": "物件",
+ "camera": "鏡頭",
+ "zones": "區域",
+ "button": {
+ "findSimilar": "尋找相似項目",
+ "regenerate": {
+ "title": "重新生成",
+ "label": "重新生成追蹤物件的說明"
+ }
+ },
+ "description": {
+ "label": "說明",
+ "placeholder": "追蹤物件的說明",
+ "aiTips": "在追蹤物件的生命週期結束前,Frigate 不會向你設定的生成式 AI 提供者請求說明。"
+ },
+ "expandRegenerationMenu": "展開重新生成選單",
+ "regenerateFromSnapshot": "從截圖重新生成",
+ "regenerateFromThumbnails": "從縮圖重新生成",
+ "tips": {
+ "descriptionSaved": "成功保存說明",
+ "saveDescriptionFailed": "更新說明失敗:{{errorMessage}}"
+ }
+ },
+ "trackedObjectDetails": "追蹤物件詳情",
+ "type": {
+ "details": "詳情",
+ "snapshot": "截圖",
+ "video": "影片",
+ "object_lifecycle": "物件生命週期"
+ },
+ "objectLifecycle": {
+ "title": "物件生命週期",
+ "noImageFound": "此時間點找不到圖片。",
+ "createObjectMask": "建立物件遮罩",
+ "adjustAnnotationSettings": "調整標注設定",
+ "scrollViewTips": "滾動以查看此物件生命週期中的重要時刻。",
+ "autoTrackingTips": "自動追蹤鏡頭的定界框位置可能不準確。",
+ "count": "第 {{first}} 個,共 {{second}} 個",
+ "trackedPoint": "追蹤點",
+ "lifecycleItemDesc": {
+ "visible": "偵測到 {{label}}",
+ "entered_zone": "{{label}} 進入了 {{zones}}",
+ "active": "{{label}} 開始活動",
+ "stationary": "{{label}} 停止活動",
+ "attribute": {
+ "faceOrLicense_plate": "偵測到 {{label}} 的 {{attribute}}",
+ "other": "{{label}} 被辨識為 {{attribute}}"
+ },
+ "gone": "{{label}} 離開了",
+ "heard": "聽到 {{label}}",
+ "external": "偵測到 {{label}}",
+ "header": {
+ "zones": "區域",
+ "ratio": "比例",
+ "area": "範圍"
+ }
+ },
+ "annotationSettings": {
+ "title": "標注設定",
+ "showAllZones": {
+ "title": "顯示所有區域",
+ "desc": "總是在畫面上顯示有物件進入的區域。"
+ },
+ "offset": {
+ "label": "標注偏移量",
+ "desc": "此資料是來自鏡頭的偵測串流,但被覆蓋在錄影串流上。通常兩個串流沒辦法完美的同步,因此,影片片段中的定界框可能無法完全對齊。不過,這可以透過 annotation_offset
進行調整。",
+ "documentation": "閱讀文件 ",
+ "millisecondsToOffset": "偵測註解偏移的毫秒數。預設:0",
+ "tips": "提示:試想在一個片段中有個人從畫面左邊走到右邊。如果事件時間線上的定界框一直出現在人物的左邊,則應該減少數值。在同樣的畫面中,如果定界框持續出現在人的前方,則應該增加數值。",
+ "toast": {
+ "success": "{{camera}} 的標注偏移量已保存到設定檔。重新啟動 Frigate 以套用更改。"
+ }
+ }
+ },
+ "carousel": {
+ "previous": "上一張",
+ "next": "下一張"
+ }
+ },
+ "itemMenu": {
+ "downloadVideo": {
+ "label": "下載影片",
+ "aria": "下載影片"
+ },
+ "downloadSnapshot": {
+ "label": "下載截圖",
+ "aria": "下載截圖"
+ },
+ "viewObjectLifecycle": {
+ "label": "查看物件生命週期",
+ "aria": "顯示物件生命週期"
+ },
+ "findSimilar": {
+ "label": "尋找相似項目",
+ "aria": "尋找相似的追蹤物件"
+ },
+ "submitToPlus": {
+ "label": "提交到 Frigate+",
+ "aria": "提交到 Frigate Plus"
+ },
+ "viewInHistory": {
+ "label": "於歷史記錄中查看",
+ "aria": "於歷史記錄中查看"
+ },
+ "deleteTrackedObject": {
+ "label": "刪除此追蹤物件"
+ }
+ },
+ "dialog": {
+ "confirmDelete": {
+ "title": "確認刪除",
+ "desc": "刪除此追蹤物件將移除截圖、所有已保存的嵌入,以及所有相關的物件生命週期紀錄。歷史記錄中的錄影不會被刪除。
你確定要刪除嗎?"
+ }
+ },
+ "noTrackedObjects": "找不到追蹤物件",
+ "fetchingTrackedObjectsFailed": "取得追蹤物件時錯誤:{{errorMessage}}",
+ "trackedObjectsCount_other": "{{count}} 個追蹤物件 ",
+ "searchResult": {
+ "tooltip": "與 {{type}} 相似的程度為 {{confidence}}%",
+ "deleteTrackedObject": {
+ "toast": {
+ "success": "成功刪除蹤物件。",
+ "error": "刪除追蹤物件失敗:{{errorMessage}}"
+ }
+ }
+ }
+}
diff --git a/web/public/locales/zh-Hant/views/exports.json b/web/public/locales/zh-Hant/views/exports.json
new file mode 100644
index 000000000..159e66e17
--- /dev/null
+++ b/web/public/locales/zh-Hant/views/exports.json
@@ -0,0 +1,17 @@
+{
+ "search": "搜尋",
+ "documentTitle": "匯出 - Frigate",
+ "noExports": "找不到匯出內容",
+ "deleteExport": "刪除匯出內容",
+ "editExport": {
+ "saveExport": "儲存匯出內容",
+ "title": "重新命名匯出內容",
+ "desc": "請輸入此匯出內容的新名稱。"
+ },
+ "toast": {
+ "error": {
+ "renameExportFailed": "重新命名匯出內容失敗:{{errorMessage}}"
+ }
+ },
+ "deleteExport.desc": "你確定要刪除 {{exportName}} 嗎?"
+}
diff --git a/web/public/locales/zh-Hant/views/faceLibrary.json b/web/public/locales/zh-Hant/views/faceLibrary.json
new file mode 100644
index 000000000..52675a51b
--- /dev/null
+++ b/web/public/locales/zh-Hant/views/faceLibrary.json
@@ -0,0 +1,96 @@
+{
+ "description": {
+ "addFace": "了解如何新增圖片集合至人臉資料庫。",
+ "placeholder": "輸入此集合的名稱",
+ "invalidName": "無效的名稱。名稱只能包涵英數字、空格、撇(')、底線(_)及連字號(-)。"
+ },
+ "details": {
+ "person": "人",
+ "timestamp": "時間戳",
+ "unknown": "未知",
+ "subLabelScore": "子標籤分數",
+ "scoreInfo": "子標籤分數是所有已辨識的人臉信心值的加權平均,因此可能與截圖上顯示的分數不同。",
+ "face": "人臉詳細資料",
+ "faceDesc": "組成此人臉的追蹤物件的詳細資料"
+ },
+ "documentTitle": "人臉資料庫 - Frigate",
+ "uploadFaceImage": {
+ "title": "上傳人臉圖片",
+ "desc": "上傳圖片以掃描人臉並將其加入 {{pageToggle}}"
+ },
+ "collections": "集合",
+ "selectItem": "選擇 {{item}}",
+ "createFaceLibrary": {
+ "title": "建立集合",
+ "desc": "建立新集合",
+ "new": "建立新人臉",
+ "nextSteps": "為了建立可靠的模型基底:
{{effectiveRetainMode}} 模式
,因此此應需錄影僅會保留 {{effectiveRetainModeName}} 片段。"
+ },
+ "editLayout": {
+ "label": "編輯版面配置",
+ "group": {
+ "label": "編輯鏡頭群組"
+ },
+ "exitEdit": "結束編輯"
+ }
+}
diff --git a/web/public/locales/zh-Hant/views/search.json b/web/public/locales/zh-Hant/views/search.json
new file mode 100644
index 000000000..0b56209c2
--- /dev/null
+++ b/web/public/locales/zh-Hant/views/search.json
@@ -0,0 +1,72 @@
+{
+ "search": "搜尋",
+ "savedSearches": "已儲存的搜尋",
+ "searchFor": "搜尋 {{inputValue}}",
+ "button": {
+ "clear": "清空搜尋",
+ "filterActive": "過濾中",
+ "save": "保存搜尋",
+ "delete": "刪除保存的搜尋",
+ "filterInformation": "過濾資訊"
+ },
+ "trackedObjectId": "追蹤物件編號",
+ "filter": {
+ "label": {
+ "cameras": "鏡頭",
+ "labels": "標籤",
+ "zones": "區域",
+ "sub_labels": "子標籤",
+ "search_type": "搜尋類型",
+ "before": "結束時間",
+ "after": "開始時間",
+ "min_score": "最低分數",
+ "max_score": "最高分數",
+ "min_speed": "最低速度",
+ "max_speed": "最高速度",
+ "recognized_license_plate": "已辨識的車牌",
+ "has_clip": "包含片段",
+ "has_snapshot": "包含截圖",
+ "time_range": "時間範圍"
+ },
+ "searchType": {
+ "thumbnail": "截圖",
+ "description": "說明"
+ },
+ "toast": {
+ "error": {
+ "beforeDateBeLaterAfter": "「結束」日期必須要在「開始」日期之後。",
+ "afterDatebeEarlierBefore": "「開始」日期需要在「結束」日期之前。",
+ "minScoreMustBeLessOrEqualMaxScore": "「最低分數」必須小於或等於「最高分數」。",
+ "maxScoreMustBeGreaterOrEqualMinScore": "「最高分數」必須要大於或等於「最低分數」。",
+ "minSpeedMustBeLessOrEqualMaxSpeed": "「最低速度」必須要小於或等於「最高速度」。",
+ "maxSpeedMustBeGreaterOrEqualMinSpeed": "「最高速度」必須要大於或等於「最低速度」。"
+ }
+ },
+ "tips": {
+ "title": "如何使用文字過濾",
+ "desc": {
+ "text": "過濾功能可以幫助你縮小搜尋範圍。以下是使用方法:",
+ "step1": "輸入過濾標的名稱後加上冒號(例如:\"cameras:\")。",
+ "step2": "從建議中選擇一個值,或者自行輸入。",
+ "step3": "若有多個過濾條件可以使用空格隔開。",
+ "step4": "過濾日期(before: 以及 after:)需使用 {{DateFormat}} 格式。",
+ "step5": "過濾時間範圍時需使用 {{exampleTime}} 格式。",
+ "step6": "點擊旁邊的「x」可以移除對應的過濾條件。",
+ "exampleLabel": "範例:"
+ }
+ },
+ "header": {
+ "currentFilterType": "過濾內容",
+ "noFilters": "過濾條件",
+ "activeFilters": "已套用的過濾條件"
+ }
+ },
+ "similaritySearch": {
+ "title": "相似搜尋",
+ "active": "已啟用相似搜尋",
+ "clear": "清空相似搜尋"
+ },
+ "placeholder": {
+ "search": "搜尋…"
+ }
+}
diff --git a/web/public/locales/zh-Hant/views/settings.json b/web/public/locales/zh-Hant/views/settings.json
new file mode 100644
index 000000000..d252250e9
--- /dev/null
+++ b/web/public/locales/zh-Hant/views/settings.json
@@ -0,0 +1,45 @@
+{
+ "documentTitle": {
+ "default": "設定 - Frigate",
+ "authentication": "認證設定 - Frigate",
+ "camera": "鏡頭設定 - Frigate",
+ "enrichments": "進階設定 - Frigate",
+ "general": "一般設定 - Frigate",
+ "frigatePlus": "Frigate+ 設定 - Frigate",
+ "notifications": "通知設定 - Frigate",
+ "masksAndZones": "遮罩與區域編輯器 - Frigate",
+ "motionTuner": "移動偵測調教器 - Frigate",
+ "object": "除錯 - Frigate"
+ },
+ "menu": {
+ "ui": "使用者介面",
+ "enrichments": "進階功能",
+ "cameras": "鏡頭設定",
+ "masksAndZones": "遮罩 / 區域",
+ "motionTuner": "移動偵測調教器",
+ "debug": "除錯",
+ "users": "使用者",
+ "notifications": "通知",
+ "frigateplus": "Frigate+"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "你有未保存的變更。",
+ "desc": "再繼續之前,你想先儲存你的變更嗎?"
+ }
+ },
+ "cameraSetting": {
+ "camera": "鏡頭",
+ "noCamera": "沒有鏡頭"
+ },
+ "general": {
+ "title": "一般設定",
+ "liveDashboard": {
+ "title": "即時監控面板",
+ "automaticLiveView": {
+ "label": "自動即時檢視",
+ "desc": "在偵測到移動時自動切換至即時影像。停用此設定將使得在即時監控面板上的靜態畫面每分鐘更新一次。"
+ }
+ }
+ }
+}
diff --git a/web/public/locales/zh-Hant/views/system.json b/web/public/locales/zh-Hant/views/system.json
new file mode 100644
index 000000000..b3d761047
--- /dev/null
+++ b/web/public/locales/zh-Hant/views/system.json
@@ -0,0 +1,180 @@
+{
+ "documentTitle": {
+ "cameras": "鏡頭統計 - Frigate",
+ "storage": "儲存裝置統計 - Frigate",
+ "general": "統計總覽 - Frigate",
+ "enrichments": "進階統計 - Frigate",
+ "logs": {
+ "frigate": "Frigate 日誌 - Frigate",
+ "go2rtc": "Go2RTC 日誌 - Frigate",
+ "nginx": "Nginx 日誌 - Frigate"
+ }
+ },
+ "title": "系統",
+ "metrics": "系統指標",
+ "logs": {
+ "download": {
+ "label": "下載日誌"
+ },
+ "copy": {
+ "label": "複製到剪貼簿",
+ "success": "已將日誌複製到剪貼簿",
+ "error": "無法將日誌複製到剪貼簿"
+ },
+ "type": {
+ "label": "類型",
+ "timestamp": "時間戳",
+ "tag": "標籤",
+ "message": "訊息"
+ },
+ "tips": "正在從伺服器串流日誌",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "擷取日誌時出錯:{{errorMessage}}",
+ "whileStreamingLogs": "串流日誌時出錯:{{errorMessage}}"
+ }
+ }
+ },
+ "general": {
+ "title": "一般",
+ "detector": {
+ "title": "偵測器",
+ "inferenceSpeed": "偵測器推理速度",
+ "temperature": "偵測器溫度",
+ "cpuUsage": "偵測器 CPU 使用率",
+ "memoryUsage": "偵測器記憶體使用量"
+ },
+ "hardwareInfo": {
+ "title": "硬體資訊",
+ "gpuUsage": "GPU 使用率",
+ "gpuMemory": "GPU 記憶體",
+ "gpuEncoder": "GPU 編碼器",
+ "gpuDecoder": "GPU 解碼器",
+ "gpuInfo": {
+ "vainfoOutput": {
+ "title": "Vainfo 輸出",
+ "returnCode": "返回代碼:{{code}}",
+ "processOutput": "行程輸出:",
+ "processError": "行程錯誤:"
+ },
+ "nvidiaSMIOutput": {
+ "title": "Nvidia SMI 輸出",
+ "name": "名稱:{{name}}",
+ "driver": "驅動程式:{{driver}}",
+ "cudaComputerCapability": "CUDA 計算能力:{{cuda_compute}}",
+ "vbios": "VBios 資訊:{{vbios}}"
+ },
+ "closeInfo": {
+ "label": "關閉 GPU 資訊"
+ },
+ "copyInfo": {
+ "label": "複製 GPU 訊息"
+ },
+ "toast": {
+ "success": "已複製 GPU 訊息至剪貼簿"
+ }
+ },
+ "npuUsage": "NPU 使用率",
+ "npuMemory": "NPU 記憶體"
+ },
+ "otherProcesses": {
+ "title": "其他行程",
+ "processCpuUsage": "行程 CPU 使用率",
+ "processMemoryUsage": "行程記憶體使用量"
+ }
+ },
+ "storage": {
+ "title": "儲存裝置",
+ "overview": "總覽",
+ "recordings": {
+ "title": "錄影檔案",
+ "tips": "此數值僅代表 Frigate 資料庫中錄影資料的儲存空間用量。Frigate 不會追蹤硬碟上所有檔案的使用量。",
+ "earliestRecording": "最早的錄影檔案:"
+ },
+ "cameraStorage": {
+ "title": "鏡頭儲存",
+ "camera": "鏡頭",
+ "unusedStorageInformation": "未使用的儲存空間資訊",
+ "storageUsed": "已使用的儲存空間",
+ "percentageOfTotalUsed": "佔總量百分比",
+ "bandwidth": "頻寬",
+ "unused": {
+ "title": "未使用",
+ "tips": "在磁碟中有除了 Frigate 錄影內容以外的檔案時,此數值可能無法正確反應可用的空間。Frigate 不會追蹤錄影資料以外的檔案的儲存空間用量。"
+ }
+ }
+ },
+ "cameras": {
+ "title": "鏡頭",
+ "overview": "總覽",
+ "info": {
+ "aspectRatio": "長寬比",
+ "cameraProbeInfo": "{{camera}} 的詳細資訊",
+ "streamDataFromFFPROBE": "串流資料是透過 ffprobe
取得。",
+ "fetching": "正在讀取鏡頭資訊",
+ "stream": "串流 {{idx}}",
+ "video": "影片:",
+ "codec": "編解碼器:",
+ "resolution": "解析度:",
+ "fps": "幀率:",
+ "unknown": "未知",
+ "audio": "音訊:",
+ "error": "錯誤:{{error}}",
+ "tips": {
+ "title": "鏡頭詳細資訊"
+ }
+ },
+ "framesAndDetections": "幀數 / 偵測數",
+ "label": {
+ "camera": "鏡頭",
+ "detect": "偵測",
+ "skipped": "跳過",
+ "ffmpeg": "FFmpeg",
+ "capture": "抓取",
+ "overallFramesPerSecond": "總體幀率",
+ "overallDetectionsPerSecond": "總體每秒偵測幀數",
+ "overallSkippedDetectionsPerSecond": "總體每秒跳過偵測幀率",
+ "cameraFfmpeg": "{{camName}} FFmpeg",
+ "cameraCapture": "{{camName}} 抓取",
+ "cameraDetect": "{{camName}} 偵測",
+ "cameraFramesPerSecond": "{{camName}} 幀率",
+ "cameraDetectionsPerSecond": "{{camName}} 每秒偵測幀率",
+ "cameraSkippedDetectionsPerSecond": "{{camName}} 每秒跳過偵測幀率"
+ },
+ "toast": {
+ "success": {
+ "copyToClipboard": "已複製檢測資料至剪貼簿。"
+ },
+ "error": {
+ "unableToProbeCamera": "無法檢測鏡頭:{{errorMessage}}"
+ }
+ }
+ },
+ "lastRefreshed": "最後更新: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} 的 FFmpeg CPU 使用率較高 ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} 的偵測 CPU 使用率較高 ({{detectAvg}}%)",
+ "healthy": "系統運作正常",
+ "reindexingEmbeddings": "正在重新替嵌入資料建立索引(已完成 {{processed}}%)",
+ "cameraIsOffline": "{{camera}} 已離線",
+ "detectIsSlow": "{{detect}} 偵測速度較慢({{speed}} 毫秒)",
+ "detectIsVerySlow": "{{detect}} 偵測速度緩慢({{speed}} 毫秒)"
+ },
+ "enrichments": {
+ "title": "進階功能",
+ "infPerSecond": "每秒推理次數",
+ "embeddings": {
+ "image_embedding": "圖片特徵提取",
+ "text_embedding": "文字提取",
+ "face_recognition": "人臉辨識",
+ "plate_recognition": "車牌辨識",
+ "image_embedding_speed": "圖片特徵提取速度",
+ "face_embedding_speed": "人臉特徵提取速度",
+ "face_recognition_speed": "人臉辨識速度",
+ "plate_recognition_speed": "車牌辨識速度",
+ "text_embedding_speed": "文字提取速度",
+ "yolov9_plate_detection_speed": "YOLOv9 車牌偵測速度",
+ "yolov9_plate_detection": "YOLOv9 車牌辨識"
+ }
+ }
+}
diff --git a/web/public/locales/zh_Hant/audio.json b/web/public/locales/zh_Hant/audio.json
new file mode 100644
index 000000000..43a7cb246
--- /dev/null
+++ b/web/public/locales/zh_Hant/audio.json
@@ -0,0 +1,17 @@
+{
+ "speech": "說話聲",
+ "babbling": "牙牙學語",
+ "bicycle": "腳踏車",
+ "yell": "大叫",
+ "car": "車",
+ "bellow": "吼叫",
+ "boat": "船",
+ "crying": "哭聲",
+ "sigh": "嘆氣",
+ "singing": "歌聲",
+ "choir": "合唱",
+ "yodeling": "山歌",
+ "chant": "誦經",
+ "mantra": "咒語",
+ "camera": "鏡頭"
+}
diff --git a/web/public/locales/zh_Hant/components/auth.json b/web/public/locales/zh_Hant/components/auth.json
new file mode 100644
index 000000000..34b97ef78
--- /dev/null
+++ b/web/public/locales/zh_Hant/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "使用者名稱",
+ "password": "密碼",
+ "login": "登入",
+ "errors": {
+ "usernameRequired": "使用者名稱不可為空",
+ "webUnknownError": "未知的錯誤,請檢查控制台日誌。",
+ "passwordRequired": "密碼不可為空",
+ "rateLimit": "超過次數限制,請稍後再試。",
+ "loginFailed": "登入失敗",
+ "unknownError": "未知錯誤,請檢查日誌。"
+ }
+ }
+}
diff --git a/web/public/locales/zh_Hant/components/icons.json b/web/public/locales/zh_Hant/components/icons.json
new file mode 100644
index 000000000..467858b8d
--- /dev/null
+++ b/web/public/locales/zh_Hant/components/icons.json
@@ -0,0 +1,8 @@
+{
+ "iconPicker": {
+ "selectIcon": "選擇圖示",
+ "search": {
+ "placeholder": "搜尋圖示…"
+ }
+ }
+}
diff --git a/web/public/locales/zh_Hant/components/input.json b/web/public/locales/zh_Hant/components/input.json
new file mode 100644
index 000000000..df3ed93c0
--- /dev/null
+++ b/web/public/locales/zh_Hant/components/input.json
@@ -0,0 +1,10 @@
+{
+ "button": {
+ "downloadVideo": {
+ "label": "下載影片",
+ "toast": {
+ "success": "你的審查影片已開始下載。"
+ }
+ }
+ }
+}
diff --git a/web/public/locales/zh_Hant/objects.json b/web/public/locales/zh_Hant/objects.json
new file mode 100644
index 000000000..2365f082e
--- /dev/null
+++ b/web/public/locales/zh_Hant/objects.json
@@ -0,0 +1,12 @@
+{
+ "person": "人",
+ "bicycle": "腳踏車",
+ "car": "車",
+ "boat": "船",
+ "traffic_light": "紅綠燈",
+ "fire_hydrant": "消防栓",
+ "street_sign": "道路標示",
+ "stop_sign": "停止標示",
+ "parking_meter": "停車柱",
+ "bench": "長椅"
+}
diff --git a/web/public/locales/zh_Hant/views/configEditor.json b/web/public/locales/zh_Hant/views/configEditor.json
new file mode 100644
index 000000000..3788bace0
--- /dev/null
+++ b/web/public/locales/zh_Hant/views/configEditor.json
@@ -0,0 +1,16 @@
+{
+ "documentTitle": "設定編輯器 - Frigate",
+ "configEditor": "設定編輯器",
+ "copyConfig": "複製設定",
+ "saveAndRestart": "保存並重新啟動",
+ "toast": {
+ "error": {
+ "savingError": "保存設定時出錯"
+ },
+ "success": {
+ "copyToClipboard": "已複製設定製剪貼簿。"
+ }
+ },
+ "saveOnly": "僅保存",
+ "confirm": "是否不保存就離開?"
+}
diff --git a/web/public/locales/zh_Hant/views/events.json b/web/public/locales/zh_Hant/views/events.json
new file mode 100644
index 000000000..8f840aab1
--- /dev/null
+++ b/web/public/locales/zh_Hant/views/events.json
@@ -0,0 +1,38 @@
+{
+ "alerts": "警報",
+ "detections": "偵測",
+ "motion": {
+ "label": "移動",
+ "only": "只顯示移動"
+ },
+ "empty": {
+ "motion": "未找到移動資料",
+ "alert": "沒有警告需要審核",
+ "detection": "沒有偵測到的內容需要審核"
+ },
+ "timeline": "時間線",
+ "timeline.aria": "選擇時間線",
+ "events": {
+ "label": "事件",
+ "aria": "選擇事件",
+ "noFoundForTimePeriod": "此時間段內沒有找到事件。"
+ },
+ "documentTitle": "審核 - Frigate",
+ "allCameras": "所有鏡頭",
+ "recordings": {
+ "documentTitle": "錄影 - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "過去 24 小時"
+ },
+ "markAsReviewed": "標示為已審核",
+ "markTheseItemsAsReviewed": "將這些內容標記為已審核",
+ "newReviewItems": {
+ "label": "查看新的審核項目",
+ "button": "有新的審核項目"
+ },
+ "selected_one": "已選擇 {{count}} 個",
+ "selected_other": "已選擇 {{count}} 個",
+ "camera": "鏡頭",
+ "detected": "已偵測"
+}
diff --git a/web/public/locales/zh_Hant/views/recording.json b/web/public/locales/zh_Hant/views/recording.json
new file mode 100644
index 000000000..1b10c058e
--- /dev/null
+++ b/web/public/locales/zh_Hant/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "filter": "過濾",
+ "export": "匯出",
+ "calendar": "日曆",
+ "filters": "過濾條件",
+ "toast": {
+ "error": {
+ "noValidTimeSelected": "未選擇有效的時間範圍",
+ "endTimeMustAfterStartTime": "結束時間需晚於開始時間"
+ }
+ }
+}