Skip to content

Commit 6f79cf2

Browse files
feat(i18n): add zh-TW Traditional Chinese locale support
1 parent 159f3ec commit 6f79cf2

40 files changed

Lines changed: 3992 additions & 48 deletions
Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
"Moltis" = "Moltis";
2+
"Settings" = "設定";
3+
"Settings..." = "設定⋯";
4+
5+
"General" = "一般";
6+
"Security" = "安全性";
7+
"Integrations" = "整合";
8+
"Systems" = "系統";
9+
10+
"Identity" = "身分";
11+
"Environment" = "環境";
12+
"Memory" = "記憶";
13+
"Notifications" = "通知";
14+
"Crons" = "排程任務";
15+
"Heartbeat" = "心跳檢測";
16+
"Tailscale" = "Tailscale";
17+
"Channels" = "頻道";
18+
"Hooks" = "Hooks";
19+
"LLMs" = "LLMs";
20+
"MCP" = "MCP";
21+
"Skills" = "技能";
22+
"Voice" = "語音";
23+
"Sandboxes" = "沙盒";
24+
"Network Audit" = "網路稽核";
25+
"Monitoring" = "監控";
26+
"Logs" = "日誌";
27+
"GraphQL" = "GraphQL";
28+
"HTTP Server" = "HTTP 伺服器";
29+
"Configuration" = "組態";
30+
31+
"Search" = "搜尋";
32+
"Select a setting" = "請選擇設定項目";
33+
34+
"LLM" = "LLM";
35+
"Summary" = "摘要";
36+
"Language Model" = "語言模型";
37+
"Assistant Identity" = "助理身分";
38+
"Ready to Go" = "準備就緒";
39+
"Choose your preferred model and provider." = "選擇偏好的模型與供應商。";
40+
"Optionally enable voice interaction." = "選擇是否啟用語音互動。";
41+
"Configure channel routing and sender policies." = "設定頻道路由與寄件者原則。";
42+
"Give your assistant a name and personality." = "為助理取名並設定個性。";
43+
"Everything looks good. You're all set." = "一切就緒,可以開始使用了。";
44+
45+
"Setup" = "設定";
46+
"Provider" = "供應商";
47+
"Model" = "模型";
48+
"Enabled" = "已啟用";
49+
"Disabled" = "已停用";
50+
"Default" = "預設";
51+
"Name" = "名稱";
52+
"Detected providers:" = "偵測到的供應商:";
53+
"Step %d of %d" = "第 %d 步,共 %d 步";
54+
"Back" = "返回";
55+
"Next" = "下一步";
56+
"Get Started" = "開始使用";
57+
58+
"Sessions" = "工作階段";
59+
"Create a new session" = "建立新的工作階段";
60+
"No Session Selected" = "未選取工作階段";
61+
"Debug" = "除錯";
62+
"No assistant messages yet" = "尚無助理訊息";
63+
"0 in / 0 out" = "0 輸入 / 0 輸出";
64+
"0 tokens" = "0 token";
65+
"Activity" = "活動";
66+
"Idle" = "閒置";
67+
"Peek at activity" = "查看活動";
68+
"Sandbox" = "沙盒";
69+
"Session Context" = "工作階段上下文";
70+
"Input Tokens" = "輸入 Token";
71+
"Output Tokens" = "輸出 Token";
72+
"Image" = "映像檔";
73+
"Active (thinking…)" = "執行中(思考中⋯)";
74+
"Active (thinking...)" = "執行中(思考中⋯)";
75+
76+
"You" = "您";
77+
"Assistant" = "助理";
78+
"System" = "系統";
79+
"Error" = "錯誤";
80+
"No messages yet" = "尚無訊息";
81+
82+
"Agent" = "代理";
83+
"User" = "使用者";
84+
"Emoji" = "表情符號";
85+
"Theme" = "佈景主題";
86+
"Your name" = "您的名稱";
87+
"e.g. Rex" = "例如 Rex";
88+
"e.g. wise owl, chill fox" = "例如 wise owl, chill fox";
89+
"e.g. Alice" = "例如 Alice";
90+
"Soul" = "靈魂";
91+
"Enable memory" = "啟用記憶";
92+
"Memory mode" = "記憶模式";
93+
"Enable notifications" = "啟用通知";
94+
"Play sounds" = "播放音效";
95+
"No Cron Jobs" = "沒有排程任務";
96+
"Scheduled tasks require the gateway to be running" = "排程任務需要閘道正在執行";
97+
"Add Cron Job" = "新增排程任務";
98+
"Require password login" = "要求密碼登入";
99+
"Enable passkeys" = "啟用通行金鑰";
100+
"Tailscale mode" = "Tailscale 模式";
101+
"No Channels" = "沒有頻道";
102+
"Connect messaging platforms like Telegram or Slack" = "連接 Telegram 或 Slack 等通訊平台";
103+
"Add Channel" = "新增頻道";
104+
"No Hooks" = "沒有 Hooks";
105+
"Run commands in response to events" = "在事件發生時執行指令";
106+
"Add Hook" = "新增 Hook";
107+
"No MCP Servers" = "沒有 MCP 伺服器";
108+
"Connect external tools via Model Context Protocol" = "透過 Model Context Protocol 連接外部工具";
109+
"Add MCP Server" = "新增 MCP 伺服器";
110+
"No Skill Packs" = "沒有技能包";
111+
"Install skill packs to extend capabilities" = "安裝技能包以擴充功能";
112+
"Add Skill Pack" = "新增技能包";
113+
"Backend" = "後端";
114+
"Default image" = "預設映像檔";
115+
"Select this section to view the full network audit log" = "選取此區塊以檢視完整的網路稽核日誌";
116+
"Enable metrics collection" = "啟用指標收集";
117+
"Enable Prometheus endpoint" = "啟用 Prometheus 端點";
118+
"Logs Unavailable" = "日誌無法使用";
119+
"Log store not connected" = "日誌儲存庫未連線";
120+
"Enable GraphQL" = "啟用 GraphQL";
121+
122+
"No environment variables set." = "尚未設定環境變數。";
123+
"Environment Variables" = "環境變數";
124+
"Key" = "鍵";
125+
"Value" = "值";
126+
"Save" = "儲存";
127+
"Cancel" = "取消";
128+
"Update" = "更新";
129+
"Delete" = "刪除";
130+
"Saving..." = "儲存中⋯";
131+
"Add" = "新增";
132+
"Paths" = "路徑";
133+
"Config directory" = "組態目錄";
134+
"Data directory" = "資料目錄";
135+
"Encrypted" = "已加密";
136+
"Plaintext" = "純文字";
137+
"New value" = "新的值";
138+
139+
"env.overview.default" = "環境變數會注入至沙盒指令執行中。值為僅寫入模式,不會顯示。";
140+
"env.overview.unsealed" = "環境變數會注入至沙盒指令執行中。值為僅寫入模式,不會顯示。保管庫已解鎖,金鑰以加密方式儲存。";
141+
"env.overview.sealed" = "環境變數會注入至沙盒指令執行中。值為僅寫入模式,不會顯示。保管庫已鎖定,在安全性設定中解鎖加密之前,無法讀取已加密的金鑰。";
142+
"env.overview.uninitialized" = "環境變數會注入至沙盒指令執行中。值為僅寫入模式,不會顯示。保管庫尚未設定,請在安全性設定中啟用加密以保護已儲存的金鑰。";
143+
144+
"Untitled Channel" = "未命名的頻道";
145+
"Type" = "類型";
146+
"Bot Token" = "Bot Token";
147+
"Untitled Hook" = "未命名的 Hook";
148+
"Event" = "事件";
149+
"Command" = "指令";
150+
"Untitled Server" = "未命名的伺服器";
151+
"Transport" = "傳輸方式";
152+
"URL" = "URL";
153+
"Source (URL or path)" = "來源(URL 或路徑)";
154+
"Repository name" = "儲存庫名稱";
155+
"Trusted" = "已信任";
156+
"Untitled Job" = "未命名的任務";
157+
"Schedule type" = "排程類型";
158+
"Interval: %d min" = "間隔:%d 分鐘";
159+
"Every %d min" = "每 %d 分鐘";
160+
"every %dm" = "每 %d 分鐘";
161+
"Cron expression" = "Cron 運算式";
162+
"Message" = "訊息";
163+
164+
"Select a provider to configure" = "請選擇要設定的供應商";
165+
"API Key" = "API 金鑰";
166+
"Base URL" = "基底 URL";
167+
"Loading models..." = "載入模型中⋯";
168+
"key optional" = "金鑰(選填)";
169+
"API key" = "API 金鑰";
170+
"Local" = "本機";
171+
"Enable voice" = "啟用語音";
172+
173+
"The HTTP server runs the full Moltis gateway — web UI, REST API, and WebSocket — on your local machine. Open the address in a browser to use the web interface." = "HTTP 伺服器在本機上執行完整的 Moltis 閘道 — Web UI、REST API 和 WebSocket。請在瀏覽器中開啟此位址以使用網頁介面。";
174+
"Enable HTTP server" = "啟用 HTTP 伺服器";
175+
"Bind address" = "繫結位址";
176+
"Loopback (127.0.0.1)" = "本機迴路(127.0.0.1)";
177+
"All interfaces (0.0.0.0)" = "所有介面(0.0.0.0)";
178+
"Port" = "連接埠";
179+
"Starting gateway…" = "啟動閘道中⋯";
180+
"Listening on" = "監聽於";
181+
"Open in Browser" = "在瀏覽器中開啟";
182+
183+
"Config directory not set" = "未設定組態目錄";
184+
"Reveal in Finder" = "在 Finder 中顯示";
185+
"Reload" = "重新載入";
186+
"Saved" = "已儲存";
187+
"Modified" = "已修改";
188+
"No config directory" = "沒有組態目錄";
189+
"Read failed: %@" = "讀取失敗:%@";
190+
191+
"Level" = "等級";
192+
"Target" = "目標";
193+
"Search..." = "搜尋⋯";
194+
"Resume" = "繼續";
195+
"Pause" = "暫停";
196+
"Clear" = "清除";
197+
"Copy All" = "全部複製";
198+
"Download JSONL" = "下載 JSONL";
199+
"No log entries" = "沒有日誌項目";
200+
"Logs appear here as you use the app" = "使用應用程式時,日誌會顯示在此處";
201+
"Adjust filters to see entries" = "請調整篩選條件以檢視項目";
202+
203+
"Action" = "動作";
204+
"Search domain..." = "搜尋網域⋯";
205+
"No network audit entries" = "沒有網路稽核項目";
206+
"Network requests appear here when the proxy is active" = "代理伺服器啟用時,網路請求會顯示在此處";
207+
"ALLOW" = "允許";
208+
"DENY" = "拒絕";

crates/web/src/assets/js/i18n.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,22 @@ import i18next from "i18next";
1616

1717
var STORAGE_KEY = "moltis-locale";
1818
var initPromise = null;
19-
var SUPPORTED_LOCALES = new Set(["en", "fr", "zh"]);
20-
export var supportedLocales = Object.freeze(["en", "fr", "zh"]);
19+
var SUPPORTED_LOCALES = new Set(["en", "fr", "zh", "zh-TW"]);
20+
export var supportedLocales = Object.freeze(["en", "fr", "zh", "zh-TW"]);
2121

2222
function normalizeLocaleTag(value) {
2323
if (!value) return "en";
2424
var tag = String(value).trim().replace("_", "-");
2525
if (!tag) return "en";
26+
var lower = tag.toLowerCase();
27+
if (
28+
lower.startsWith("zh-tw") ||
29+
lower.startsWith("zh-hk") ||
30+
lower.startsWith("zh-mo") ||
31+
lower.startsWith("zh-hant")
32+
) {
33+
return "zh-TW";
34+
}
2635
var idx = tag.indexOf("-");
2736
if (idx !== -1) {
2837
tag = tag.slice(0, idx);

crates/web/src/assets/js/locales/en/settings.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export default {
5656
languageEnglish: "English",
5757
languageFrench: "French",
5858
languageChinese: "Chinese (Simplified)",
59+
languageChineseTW: "Chinese (Traditional)",
5960
applyLanguage: "Apply language",
6061
languageUpdated: "Language updated.",
6162
failedToSave: "Failed to save",

crates/web/src/assets/js/locales/fr/settings.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export default {
5656
languageEnglish: "English",
5757
languageFrench: "French",
5858
languageChinese: "Chinese (Simplified)",
59+
languageChineseTW: "Chinois (Traditionnel)",
5960
applyLanguage: "Apply language",
6061
languageUpdated: "Language updated.",
6162
failedToSave: "Failed to save",
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// ── Channels page Traditional Chinese (Taiwan) strings ──────
2+
3+
export default {
4+
// ── Page & tabs ─────────────────────────────────────────
5+
title: "頻道",
6+
tabs: {
7+
channels: "頻道",
8+
senders: "傳送者",
9+
},
10+
addTelegramBot: "+ 新增 Telegram 機器人",
11+
12+
// ── Channel card ────────────────────────────────────────
13+
card: {
14+
defaultName: "Telegram",
15+
unknownStatus: "未知",
16+
editTitle: "編輯 {{name}}",
17+
removeTitle: "移除 {{name}}",
18+
noActiveSession: "沒有使用中的工作階段",
19+
sessionInfo: "{{label}}({{count}} 則訊息)",
20+
removeConfirm: "確定要移除 {{name}} 嗎?",
21+
fallbackName: "頻道",
22+
},
23+
24+
// ── Empty states ────────────────────────────────────────
25+
empty: {
26+
noBotsConnected: "尚未連線任何 Telegram 機器人。",
27+
addBotHint: "按一下「+ 新增 Telegram 機器人」,使用來自 @BotFather 的權杖進行連線。",
28+
noChannelsConfigured: "尚未設定任何頻道。",
29+
},
30+
31+
// ── Senders tab ─────────────────────────────────────────
32+
senders: {
33+
accountLabel: "帳號:",
34+
noMessagesYet: "此帳號尚未收到任何訊息。",
35+
colSender: "傳送者",
36+
colUsername: "使用者名稱",
37+
colMessages: "訊息數",
38+
colLastSeen: "最後出現",
39+
colStatus: "狀態",
40+
colAction: "操作",
41+
otpCopied: "OTP 驗證碼已複製",
42+
otpPrefix: "OTP:",
43+
allowed: "已允許",
44+
denied: "已拒絕",
45+
approve: "核准",
46+
deny: "拒絕",
47+
},
48+
49+
// ── Allowlist input ─────────────────────────────────────
50+
allowlistPlaceholder: "輸入使用者名稱後按 Enter",
51+
52+
// ── Add channel modal ───────────────────────────────────
53+
add: {
54+
modalTitle: "新增 Telegram 機器人",
55+
helpHeading: "如何建立 Telegram 機器人",
56+
helpStep1: "1. 在 Telegram 中開啟 {{link}}",
57+
helpStep2: "2. 傳送 /newbot 並依提示選擇名稱與使用者名稱",
58+
helpStep3: "3. 複製機器人權杖(格式如 123456:ABC-DEF...)並貼到下方",
59+
helpSeeMore: "詳細資訊請參閱 {{link}}。",
60+
botFather: "@BotFather",
61+
telegramBotTutorial: "Telegram Bot 教學",
62+
botUsernameLabel: "機器人使用者名稱",
63+
botUsernamePlaceholder: "例如 my_assistant_bot",
64+
botTokenLabel: "機器人權杖(來自 @BotFather)",
65+
botTokenPlaceholder: "123456:ABC-DEF...",
66+
connectingBtn: "連線中\u2026",
67+
connectBtn: "連線機器人",
68+
failedToConnect: "連線機器人失敗。",
69+
},
70+
71+
// ── Edit channel modal ──────────────────────────────────
72+
edit: {
73+
modalTitle: "編輯 Telegram 機器人",
74+
saveChangesBtn: "儲存變更",
75+
failedToUpdate: "更新機器人失敗。",
76+
},
77+
78+
// ── Shared form labels ──────────────────────────────────
79+
form: {
80+
dmPolicyLabel: "私訊政策",
81+
dmPolicyOpen: "開放(所有人)",
82+
dmPolicyAllowlist: "僅限允許清單",
83+
dmPolicyDisabled: "已停用",
84+
mentionModeLabel: "群組提及模式",
85+
mentionModeMention: "須 @提及機器人",
86+
mentionModeAlways: "總是回應",
87+
mentionModeNone: "不在群組中回應",
88+
defaultModelLabel: "預設模型",
89+
modelDefault: "(預設:{{model}})",
90+
modelServerDefault: "(伺服器預設)",
91+
dmAllowlistLabel: "私訊允許清單",
92+
},
93+
};

0 commit comments

Comments
 (0)