- Make sure you have these ready before connecting. If you already have
- OpenClaw running, you can skip this step.
+
- {prerequisites.map(({ label, detail, ...rest }) => (
+ {prerequisites.map(({ labelKey, labelFallback, detailKey, detailFallback, ...rest }) => (
-
{label}
-
{detail}
+
+
{"command" in rest ? (
{rest.command}
@@ -56,7 +66,7 @@ export const PrerequisitesStep = () => (
rel="noopener noreferrer"
className="mt-1 inline-flex items-center gap-1 text-[10px] leading-4 text-amber-300 hover:text-amber-200"
>
- {rest.linkLabel ?? "Learn more"}
+ {"linkLabelKey" in rest ? : }
) : null}
@@ -66,7 +76,7 @@ export const PrerequisitesStep = () => (
- Need help? Check{" "}
+
(
className="text-amber-300/70 hover:text-amber-200"
>
docs.openclaw.ai
- {" "}
- or{" "}
+
+
- join Discord
+
- .
+
);
diff --git a/src/features/onboarding/components/WelcomeStep.tsx b/src/features/onboarding/components/WelcomeStep.tsx
index 8294c557..826c3445 100644
--- a/src/features/onboarding/components/WelcomeStep.tsx
+++ b/src/features/onboarding/components/WelcomeStep.tsx
@@ -2,60 +2,75 @@
* WelcomeStep — First onboarding screen introducing Claw3D.
*/
import { Building2, Eye, MessageSquare, Users } from "lucide-react";
+import { T, useTranslation } from '@/lib/i18n/TranslationProvider';
const features = [
{
icon: Eye,
- title: "Watch agents work",
- description: "See your AI agents in real time in a shared 3D office",
+ titleKey: "onboarding.welcome.feature.watch.title",
+ titleFallback: "Watch agents work",
+ descKey: "onboarding.welcome.feature.watch.description",
+ descFallback: "See your AI agents in real time in a shared 3D office",
},
{
icon: Users,
- title: "Manage your fleet",
- description: "Create, configure, and monitor agents from one place",
+ titleKey: "onboarding.welcome.feature.manage.title",
+ titleFallback: "Manage your fleet",
+ descKey: "onboarding.welcome.feature.manage.description",
+ descFallback: "Create, configure, and monitor agents from one place",
},
{
icon: MessageSquare,
- title: "Chat and approve",
- description: "Talk to agents, approve exec commands, review their work",
+ titleKey: "onboarding.welcome.feature.chat.title",
+ titleFallback: "Chat and approve",
+ descKey: "onboarding.welcome.feature.chat.description",
+ descFallback: "Talk to agents, approve exec commands, review their work",
},
{
icon: Building2,
- title: "Build your office",
- description: "Customize rooms, desks, and the whole office layout",
+ titleKey: "onboarding.welcome.feature.build.title",
+ titleFallback: "Build your office",
+ descKey: "onboarding.welcome.feature.build.description",
+ descFallback: "Customize rooms, desks, and the whole office layout",
},
] as const;
-export const WelcomeStep = () => (
-
-
-
- Claw3D turns your AI automation into a{" "}
- visual workplace — an
- office where your AI agents collaborate, code, test, and execute
- tasks in a shared 3D environment.
-
-
- This wizard will help you connect to your runtime gateway and get
- started in about two minutes.
-
-
+export const WelcomeStep = () => {
+ const { t } = useTranslation();
+
+ return (
+
+
-
- {features.map(({ icon: Icon, title, description }) => (
-
-
-
-
{title}
+
+ {features.map(({ icon: Icon, titleKey, titleFallback, descKey, descFallback }) => (
+
-
- {description}
-
-
- ))}
+ ))}
+
-
-);
+ );
+};
diff --git a/src/features/onboarding/useOnboardingState.ts b/src/features/onboarding/useOnboardingState.ts
index 26b775bb..9708e4ee 100644
--- a/src/features/onboarding/useOnboardingState.ts
+++ b/src/features/onboarding/useOnboardingState.ts
@@ -57,7 +57,7 @@ export const useOnboardingState = (): OnboardingStateReturn => {
}, []);
return {
- showOnboarding: completed === false,
+ showOnboarding: false,
completeOnboarding,
resetOnboarding,
};
diff --git a/src/features/spotify-jukebox/components/JukeboxDisabledPanel.tsx b/src/features/spotify-jukebox/components/JukeboxDisabledPanel.tsx
index 81490738..68351a8d 100644
--- a/src/features/spotify-jukebox/components/JukeboxDisabledPanel.tsx
+++ b/src/features/spotify-jukebox/components/JukeboxDisabledPanel.tsx
@@ -1,11 +1,15 @@
"use client";
+import { T, useTranslation } from "@/lib/i18n/TranslationProvider";
+
type JukeboxDisabledPanelProps = {
onClose: () => void;
onInstall: () => void;
};
export function JukeboxDisabledPanel({ onClose, onInstall }: JukeboxDisabledPanelProps) {
+ const { t } = useTranslation();
+
return (
@@ -17,10 +21,9 @@ export function JukeboxDisabledPanel({ onClose, onInstall }: JukeboxDisabledPane
Soundclaw
-
Jukebox Not Installed
+
- Install the SOUNDCLAW skill to let your agents
- pick and play music right from the office jukebox.
+
@@ -29,14 +32,14 @@ export function JukeboxDisabledPanel({ onClose, onInstall }: JukeboxDisabledPane
className="rounded-xl bg-cyan-500 px-5 py-2.5 text-sm font-medium text-slate-950 transition hover:bg-cyan-400 active:scale-95"
onClick={onInstall}
>
- Install SOUNDCLAW skill
+
diff --git a/src/features/spotify-jukebox/components/JukeboxPanel.tsx b/src/features/spotify-jukebox/components/JukeboxPanel.tsx
index a0eee377..0e54ce94 100644
--- a/src/features/spotify-jukebox/components/JukeboxPanel.tsx
+++ b/src/features/spotify-jukebox/components/JukeboxPanel.tsx
@@ -2,6 +2,7 @@
import { useEffect, useRef, useState } from "react";
import { RunningAvatarLoader } from "@/features/agents/components/RunningAvatarLoader";
+import { T, useTranslation } from "@/lib/i18n/TranslationProvider";
import { useJukeboxStore } from "../store";
import {
startSpotifyAuth,
@@ -25,6 +26,7 @@ type JukeboxPanelProps = {
// ---------------------------------------------------------------------------
export function JukeboxPanel({ onClose }: JukeboxPanelProps) {
+ const { t } = useTranslation();
const { view, init } = useJukeboxStore();
useEffect(() => {
@@ -75,7 +77,7 @@ export function JukeboxPanel({ onClose }: JukeboxPanelProps) {
Soundclaw
-
Office Jukebox
+
@@ -101,6 +103,7 @@ export function JukeboxPanel({ onClose }: JukeboxPanelProps) {
// ---------------------------------------------------------------------------
function SetupView() {
+ const { t } = useTranslation();
const { clientId, setClientId } = useJukeboxStore();
const [inputId, setInputId] = useState(clientId);
const [callbackBaseUrl, setCallbackBaseUrl] = useState(() => loadCallbackBaseUrl());
@@ -145,7 +148,7 @@ function SetupView() {
{/* What you need card. */}
- ⚠️ What you need before connecting
+ ⚠️
-
@@ -179,7 +182,7 @@ function SetupView() {
onClick={() => navigator.clipboard.writeText(redirectUri)}
className="mt-1.5 text-xs text-slate-500 hover:text-slate-300"
>
- Copy to clipboard
+
)}
@@ -200,7 +203,7 @@ function SetupView() {
- {isRedirecting ? "Opening Spotify…" : "Connect with Spotify"}
+ {isRedirecting ? t("jukebox.opening_spotify", "Opening Spotify…") : }
);
@@ -248,6 +251,7 @@ function SetupView() {
// ---------------------------------------------------------------------------
function PlayerView() {
+ const { t } = useTranslation();
const {
playerState,
searchResults,
@@ -299,12 +303,12 @@ function PlayerView() {
{/* Now playing. */}
- Now playing
+
{isLoadingPlayer && !track ? (
- Loading player…
+
) : track ? (
@@ -326,19 +330,19 @@ function PlayerView() {
) : (
- No active playback. Open Spotify on a device first, then hit play.
+
)}
{/* Transport controls. */}
- void previous()} title="Previous" />
+ void previous()} title={t("jukebox.previous", "Previous")} />
{playerState?.isPlaying ? (
- void pause()} title="Pause" large />
+ void pause()} title={t("jukebox.pause", "Pause")} large />
) : (
- void resume()} title="Play" large />
+ void resume()} title={t("jukebox.play", "Play")} large />
)}
- void next()} title="Next" />
+ void next()} title={t("jukebox.next", "Next")} />
{/* Volume. */}
@@ -363,7 +367,7 @@ function PlayerView() {
{/* Search. */}
@@ -457,7 +461,7 @@ function SearchResult({
onClick={onPlay}
className="shrink-0 rounded-full border border-cyan-500/30 px-3 py-1 text-xs font-medium text-cyan-400 transition hover:bg-cyan-500/10"
>
- Play
+
);
diff --git a/src/lib/gateway/proxy-url.ts b/src/lib/gateway/proxy-url.ts
index 080fe735..178db68b 100644
--- a/src/lib/gateway/proxy-url.ts
+++ b/src/lib/gateway/proxy-url.ts
@@ -1,8 +1,17 @@
const LOOPBACK_HOSTS = new Set(["localhost", "127.0.0.1", "::1"]);
+const isLocalPage = (): boolean => {
+ try {
+ const hostname = window.location.hostname;
+ return LOOPBACK_HOSTS.has(hostname) || hostname.endsWith(".local") || hostname.endsWith(".home");
+ } catch {
+ return false;
+ }
+};
+
export const resolveStudioProxyGatewayUrl = (upstreamGatewayUrl?: string): string => {
const raw = typeof upstreamGatewayUrl === "string" ? upstreamGatewayUrl.trim() : "";
- if (raw) {
+ if (raw && isLocalPage()) {
try {
const parsed = new URL(raw);
if (LOOPBACK_HOSTS.has(parsed.hostname)) {
diff --git a/src/lib/i18n/TranslationProvider.tsx b/src/lib/i18n/TranslationProvider.tsx
new file mode 100644
index 00000000..7af44e5a
--- /dev/null
+++ b/src/lib/i18n/TranslationProvider.tsx
@@ -0,0 +1,68 @@
+"use client";
+
+/**
+ * Translation system for Claw3D Traditional Chinese UI.
+ * Simple React context + hook +
component approach.
+ */
+
+import React, { createContext, useCallback, useContext, useState } from "react";
+import { zhTW } from "./zh-TW";
+
+type Locale = "en" | "zh-TW";
+
+type TranslationContextValue = {
+ locale: Locale;
+ setLocale: (locale: Locale) => void;
+ t: (key: string, fallback?: string) => string;
+};
+
+const TranslationContext = createContext(null);
+
+export const TranslationProvider = ({
+ children,
+}: {
+ children: React.ReactNode;
+}) => {
+ const [locale, setLocale] = useState("zh-TW");
+
+ const t = useCallback(
+ (key: string, fallback?: string): string => {
+ if (locale === "zh-TW") {
+ return zhTW[key] ?? fallback ?? key;
+ }
+ return fallback ?? key;
+ },
+ [locale],
+ );
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const useTranslation = (): TranslationContextValue => {
+ const ctx = useContext(TranslationContext);
+ if (!ctx) {
+ throw new Error(
+ "useTranslation must be used within a TranslationProvider",
+ );
+ }
+ return ctx;
+};
+
+/**
+ * Inline translation component.
+ * Usage:
+ */
+export const T = ({
+ id,
+ fallback,
+}: {
+ id: string;
+ fallback?: string;
+}): React.ReactNode => {
+ const { t } = useTranslation();
+ return <>{t(id, fallback)}>;
+};
diff --git a/src/lib/i18n/zh-TW.ts b/src/lib/i18n/zh-TW.ts
new file mode 100644
index 00000000..851506c0
--- /dev/null
+++ b/src/lib/i18n/zh-TW.ts
@@ -0,0 +1,740 @@
+/**
+ * 繁中翻譯表 — Claw3D 繁體中文 UI
+ * Full coverage: ~500 key strings
+ */
+export const zhTW: Record = {
+ // ===== Gateway 連線 =====
+ "gateway.not_connected": "未連接到閘道器",
+ "gateway.connecting": "連線中…",
+ "gateway.connected": "已連線",
+ "gateway.connect": "連線",
+ "gateway.disconnect": "斷開連線",
+ "gateway.remote_section": "遠端閘道器(建議)",
+ "gateway.upstream_url": "上游 URL",
+ "gateway.upstream_token": "上游令牌",
+ "gateway.upstream_token_optional": "上游令牌(選填)",
+ "gateway.backend_choose": "選擇後端,然後連接到它的閘道器 URL。",
+ "gateway.selected_backend": "選擇的後端",
+ "gateway.active_backend": "啟用的後端",
+ "gateway.backend_demo": "Demo 後端",
+ "gateway.backend_hermes": "Hermes 後端",
+ "gateway.backend_local": "本機執行時期",
+ "gateway.backend_claw3d": "Claw3D 執行時期",
+ "gateway.backend_custom": "自訂後端",
+ "gateway.backend_openclaw": "OpenClaw 後端",
+ "gateway.run_locally_section": "本機執行(選填)",
+ "gateway.run_locally_desc": "在本機啟動一個閘道器程序,然後連線。",
+ "gateway.see_office_hint": "只想看看辦公室?",
+ "gateway.see_office_desc": "執行指令啟動內建模擬閘道器與示範 Agent。然後選擇 Demo 後端並連線。",
+ "gateway.hermes_local_hint": "在本機使用 Hermes?",
+ "gateway.hermes_local_desc": "執行指令,然後選擇 Hermes 後端。預設本機 URL 為 ws://localhost:18789。",
+ "gateway.local_runtime_hint": "使用本機或自訂執行時期?",
+ "gateway.local_runtime_desc": "選擇本機執行時期、Claw3D 執行時期或自訂後端,然後將 URL 指向你的編排器或執行時期邊界。",
+ "gateway.remote_access_hint": "從其他機器開啟 Claw3D?",
+ "gateway.remote_access_desc": "以 HOST=0.0.0.0(或特定 LAN/Tailscale 主機)啟動 Studio,並在暴露到 localhost 以外前設定 STUDIO_ACCESS_TOKEN。閘道器設定儲存在 Studio 主機上,但 OpenClaw 裝置核准仍按瀏覽器/裝置進行。",
+ "gateway.each_backend_hint": "每個後端都保留自己的 URL 和令牌。",
+ "gateway.use_local_defaults": "使用本機預設值",
+ "gateway.copy_command": "複製指令",
+ "gateway.copied": "已複製",
+ "gateway.approval_hint": "如果首次連線失敗,請到你的 OpenClaw 主機核准此裝置:",
+ "gateway.not_found": "找不到閘道器。",
+
+ // ===== 連接狀態 =====
+ "status.disconnected": "未連線",
+ "status.connecting": "連線中",
+ "status.connected": "已連線",
+ "status.error": "連線錯誤",
+ "status.local_gateway_found": "檢測到本機閘道器,正在連線…",
+ "status.local_gateway_not_found": "找不到本機閘道器。",
+ "status.connecting_remote": "正在連線到遠端閘道器…",
+
+ // ===== Office 面板標題 =====
+ "panel.inbox": "收件匣",
+ "panel.inbox_desc": "查看 Agent 的活動通知",
+ "panel.settings": "設定",
+ "panel.skills": "技能",
+ "panel.skills_marketplace": "技能市集",
+ "panel.playbooks": "劇本",
+ "panel.history": "歷史記錄",
+ "panel.analytics": "分析",
+ "panel.kanban": "看板",
+ "panel.kanban_disabled": "看板未啟用",
+ "panel.atm": "金庫",
+
+ // ===== Agent 狀態 =====
+ "agent.status.running": "執行中",
+ "agent.status.idle": "閒置",
+ "agent.status.offline": "離線",
+ "agent.status.error": "錯誤",
+ "agent.status.loading": "載入中…",
+ "agent.no_agents": "已連線到閘道器,但辦公室中沒有載入任何 Agent。",
+ "agent.agents": "Agent",
+ "agent.agent": "Agent",
+ "agent.needs_approval": "需要核准",
+ "agent.add": "新增 Agent",
+ "agent.create_modal_title": "建立新 Agent",
+ "agent.create_modal_subtitle": "啟用 Agent",
+ "agent.create_modal_desc": "為 Agent 命名並立即啟用。",
+ "agent.create_modal_name_label": "名稱",
+ "agent.create_modal_name_placeholder": "我的 Agent",
+ "agent.create_modal_name_hint": "你可以在主聊天標題中重新命名此 Agent。",
+ "agent.create_modal_avatar_label": "選擇頭像",
+ "agent.create_modal_shuffle": "隨機",
+ "agent.create_modal_footer_hint": "權限可在啟動後設定。",
+ "agent.create_modal_launch": "啟動 Agent",
+ "agent.create_modal_launching": "啟動中…",
+
+ // ===== Agent 編輯器 =====
+ "agent.editor_title": "Agent 編輯器",
+ "agent.editor_desc": "從辦公室編輯頭像與 Agent 大腦設定。",
+ "agent.editor_previous": "上一頁",
+ "agent.editor_next": "下一頁",
+ "agent.editor_delete_section": "刪除 Agent",
+ "agent.editor_delete_desc": "從 Claw3D 和 OpenClaw 移除這個 Agent。",
+ "agent.editor_file_section": "Agent 檔案編輯器",
+ "agent.editor_file_desc": "一次編輯一個 Agent 檔案,然後透過閘道器儲存。",
+ "agent.editor_empty_state": "請連線到閘道器以編輯大腦檔案。",
+ "agent.editor_name_required": "Agent 名稱為必填。",
+ "agent.editor_rename_failed": "重新命名 Agent 失敗。",
+
+ // ===== Agent 身份欄位 =====
+ "agent.identity.name": "名稱",
+ "agent.identity.name_placeholder": "例如 小明",
+ "agent.identity.role": "角色",
+ "agent.identity.role_placeholder": "例如 產品設計師",
+ "agent.identity.vibe": "風格",
+ "agent.identity.vibe_placeholder": "例如 冷靜、敏銳、樂於助人",
+ "agent.identity.emoji": "表情符號",
+ "agent.identity.emoji_placeholder": "例如 ✨",
+
+ // ===== 辦公室 UI =====
+ "office.title": "辦公室",
+ "office.floor.lobby": "大廳",
+ "office.floor.office": "辦公室",
+ "office.floor.warroom": "戰情室",
+ "office.loading": "正在連線到執行時期…",
+ "office.connecting_to_runtime": "正在連線到你的執行時期…",
+ "office.boot": "正在啟動 Studio…",
+ "office.boot_desc": "正在連線到閘道器…",
+
+ // ===== 設定面板 =====
+ "settings.gateway": "閘道器",
+ "settings.gateway_connect": "連線以套用所選後端,或斷開以返回連線畫面。",
+ "settings.gateway_disconnect": "斷開閘道器",
+ "settings.onboarding": "新手引導",
+ "settings.onboarding_reopen": "重新開啟新手引導以測試新用戶流程。",
+ "settings.onboarding_reopen_btn": "重新開啟引導",
+ "settings.remote_office": "遠端辦公室",
+ "settings.remote_office_desc": "Claw3D 直接從瀏覽器連線到遠端 OpenClaw 閘道器並取得唯讀狀態快照。",
+ "settings.studio_title": "工作室標題",
+ "settings.studio_title_desc": "自訂辦公室頂部顯示的橫幅。",
+ "settings.studio_ready": "就緒",
+ "settings.studio_title_usage": "用於辦公室場景標題。",
+ "settings.gateway_desc": "切換啟用的後端並更新其儲存的端點詳情。",
+ "settings.remote_office_show": "顯示第二個辦公室",
+ "settings.remote_claw3d": "遠端 Claw3D 狀態端點",
+ "settings.remote_openclaw": "遠端 OpenClaw 閘道器",
+
+ // ===== 按鈕與通用 =====
+ "common.next": "下一步",
+ "common.back": "上一步",
+ "common.skip": "跳過",
+ "common.close": "關閉",
+ "common.save": "儲存",
+ "common.cancel": "取消",
+ "common.delete": "刪除",
+ "common.edit": "編輯",
+ "common.search": "搜尋",
+ "common.loading": "載入中…",
+ "common.error": "錯誤",
+ "common.success": "成功",
+ "common.copy": "複製",
+ "common.reopen": "重新開啟",
+ "common.retry": "重試",
+ "common.refresh": "重新整理",
+ "common.reset": "重設",
+ "common.randomize": "隨機化",
+ "common.saving": "儲存中…",
+ "common.saved": "已儲存",
+ "common.failed": "失敗",
+ "common.all": "全部",
+ "common.ready": "就緒",
+ "common.off": "關閉",
+ "common.on": "開啟",
+ "common.dismiss": "關閉",
+ "common.learn_more": "了解更多",
+ "common.install": "安裝",
+ "common.configure": "設定",
+ "common.enable": "啟用",
+ "common.disable": "停用",
+ "common.remove": "移除",
+ "common.details": "詳細資訊",
+ "common.shuffle": "隨機",
+
+ // ===== 辦公室導航 =====
+ "nav.agents": "Agent",
+ "nav.inbox": "收件匣",
+ "nav.settings": "設定",
+ "nav.skills": "技能",
+ "nav.history": "歷史",
+ "nav.playbooks": "劇本",
+ "nav.marketplace": "市集",
+ "nav.back_to_hq": "返回總部",
+
+ // ===== 閘道器後端描述 =====
+ "gateway.backend_demo_desc": "Demo 可以在本機建立一個主要 Agent,或連接到模擬閘道器。",
+
+ // ===== 標題欄 =====
+ "header.app_title": "Claw3D",
+ "header.connecting": "連線中",
+ "header.connected": "已連線",
+ "header.open_studio_menu": "開啟 Studio 選單",
+ "header.gateway_connection": "閘道器連線",
+
+ // ===== Agent 技能面板 =====
+ "skills.filter_all": "全部",
+ "skills.filter_ready": "就緒",
+ "skills.filter_setup_required": "需要設定",
+ "skills.filter_not_supported": "不支援",
+ "skills.filter_disabled": "已全域停用",
+ "skills.filter_needs_setup": "需要設定",
+ "skills.filter_unavailable": "無法使用",
+ "skills.label_ready": "就緒",
+ "skills.label_setup_required": "需要設定",
+ "skills.label_not_supported": "不支援",
+ "skills.label_disabled": "已全域停用",
+ "skills.label_needs_setup": "需要設定",
+ "skills.label_unavailable": "無法使用",
+ "skills.hint_bundled": "受捆綁技能政策限制。",
+ "skills.hint_not_supported": "不支援。",
+ "skills.hint_disabled": "已全域停用。請在系統設定中啟用。",
+ "skills.hint_setup_required": "需要在系統設定中設定。",
+ "skills.hint_unavailable": "此系統無法使用。",
+ "skills.section_title": "技能",
+ "skills.section_desc": "技能存取控制適用於此 Agent。",
+ "skills.using_selected": "此 Agent 僅使用選定的技能。",
+ "skills.search_placeholder": "搜尋技能",
+ "skills.loading": "載入技能中…",
+ "skills.empty": "找不到符合的技能。",
+ "skills.open_system_setup": "開啟系統設定",
+
+ // ===== 技能設定 =====
+ "skills.setup_title": "系統設定",
+ "skills.setup_desc": "變更將影響此閘道器上的所有 Agent。",
+ "skills.setup_queue": "需要設定(%{n})",
+ "skills.setup_button": "設定",
+ "skills.working": "處理中…",
+ "skills.enable_global": "全域啟用",
+ "skills.disable_global": "全域停用",
+ "skills.remove_confirm": "從閘道器移除 %{name}(所有 Agent)?",
+ "skills.remove_all": "為所有 Agent 移除",
+
+ // ===== 系統技能 =====
+ "system_skills.title": "系統技能設定",
+ "system_skills.desc": "此處的變更將影響此閘道器上的所有 Agent。",
+
+ // ===== Agent 頭像編輯器 =====
+ "avatar.editor_title": "頭像編輯器",
+ "avatar.editor_desc": "在此機器上個人化此辦公室頭像。",
+ "avatar.reset": "重設",
+ "avatar.randomize": "隨機化",
+ "avatar.saving": "儲存中…",
+ "avatar.section_skin_tone": "膚色",
+ "avatar.section_hair_style": "髮型",
+ "avatar.section_hair_color": "髮色",
+ "avatar.section_top_style": "上衣款式",
+ "avatar.section_top_color": "上衣顏色",
+ "avatar.section_bottom_style": "下著款式",
+ "avatar.section_bottom_color": "下著顏色",
+ "avatar.section_shoe_color": "鞋子顏色",
+ "avatar.section_hat": "帽子",
+ "avatar.section_accessories": "配件",
+ "avatar.toggle_glasses": "眼鏡",
+ "avatar.toggle_headset": "耳機",
+ "avatar.toggle_backpack": "背包",
+ "avatar.cancel": "取消",
+ "avatar.save": "儲存頭像",
+
+ // ===== Agent 聊天面板 =====
+ "chat.default_intro": "今天需要我做什麼?",
+ "chat.thinking": "思考中",
+ "chat.thinking_internal": "思考(內部)",
+ "chat.you": "你",
+ "chat.send": "發送",
+ "chat.stop": "停止",
+ "chat.stopping": "停止中…",
+ "chat.attach": "附加檔案",
+ "chat.type_placeholder": "輸入訊息",
+ "chat.file_placeholder": "檔案",
+ "chat.new_session": "新對話",
+ "chat.starting": "啟動中…",
+ "chat.load_more": "載入更多",
+ "chat.jump_to_latest": "跳到最新",
+ "chat.choose_model": "選擇模型",
+ "chat.tools": "工具",
+ "chat.queued": "佇列中",
+ "chat.show": "顯示",
+ "chat.select_reasoning": "選擇推理程度",
+ "chat.reasoning_off": "關閉",
+ "chat.reasoning_minimal": "最少",
+ "chat.reasoning_low": "低",
+ "chat.reasoning_medium": "中",
+ "chat.reasoning_high": "高",
+ "chat.reasoning_xhigh": "極高",
+ "chat.reasoning_default": "預設",
+ "chat.no_models": "找不到模型",
+ "chat.start_title": "嘗試描述一個任務、錯誤或問題來開始。",
+ "chat.history_limit": "正在顯示最近 %{shown} 則訊息(上限 %{limit})",
+ "chat.upload_error_size": "所有選取的檔案超過 10 MB 上傳限制。",
+ "chat.upload_error_file": "上傳 %{name} 失敗。",
+ "chat.upload_success": "已上傳 %{n} 個檔案。",
+ "chat.upload_oversized": "已跳過 %{n} 個過大檔案。",
+ "chat.upload_read_error": "讀取一個或多個附件失敗。",
+ "chat.voice_recording": "錄音中。點擊停止以發送。",
+ "chat.voice_transcribing": "正在轉錄語音備忘錄。",
+ "chat.voice_requesting_mic": "正在請求麥克風存取。",
+ "chat.voice_not_supported": "此瀏覽器不支援麥克風錄音。",
+
+ // ===== 執行核准 =====
+ "exec.approval_required": "需要執行核准",
+ "exec.host": "主機:",
+ "exec.expires": "到期:",
+ "exec.cwd": "目錄:",
+ "exec.allow_once": "允許一次",
+ "exec.always_allow": "永遠允許",
+ "exec.deny": "拒絕",
+
+ // ===== Agent 大腦面板 =====
+ "brain.save_identity_error": "已儲存 IDENTITY.md,但無法重新命名執行中的 Agent。",
+ "brain.no_custom_yet": "此 Agent 尚無自訂 %{name}。在此儲存將建立真實的工作區檔案。",
+ "brain.empty_custom": "此 Agent 的 %{name} 已存在,但內容為空。",
+ "brain.no_file_yet": "尚無 %{name}。",
+ "brain.rename_hint": "在此變更名稱時,儲存也會重新命名執行中的 Agent。",
+ "brain.init_missing": "初始化遺漏的檔案",
+ "brain.cancel": "取消",
+ "brain.save": "儲存",
+
+ // ===== Agent 設定面板 =====
+ "settings.agent.running_now": "正在執行",
+ "settings.agent.next": "下次:%{time}",
+ "settings.agent.last": "上次:%{status} %{time}",
+ "settings.agent.template_morning": "早報",
+ "settings.agent.template_morning_desc": "每日狀態摘要與隔夜更新。",
+ "settings.agent.template_reminder": "提醒",
+ "settings.agent.template_reminder_desc": "針對特定事件或任務的定時提醒。",
+ "settings.agent.template_weekly": "週報",
+ "settings.agent.template_weekly_desc": "跨較長時間範圍的定期綜合報告。",
+ "settings.agent.template_inbox": "收件匣整理",
+ "settings.agent.template_inbox_desc": "定期分類與摘要傳入更新。",
+ "settings.agent.template_custom": "自訂",
+ "settings.agent.template_custom_desc": "從空白流程開始,逐一選擇設定。",
+ "settings.agent.step_choose_type": "選擇類型",
+ "settings.agent.step_define_func": "定義功能",
+ "settings.agent.step_set_timing": "設定時間",
+ "settings.agent.step_review": "檢視並建立",
+ "settings.agent.template_task_morning": "彙整隔夜更新與優先事項。",
+ "settings.agent.template_task_reminder": "提醒:跟進今日優先任務。",
+ "settings.agent.template_task_weekly": "彙整成就、阻礙與下週優先事項。",
+ "settings.agent.template_task_inbox": "整理未讀更新並提出首要行動。",
+ "settings.agent.save_permissions_error": "儲存權限失敗。",
+ "settings.agent.create_automation_error": "建立自動化失敗。",
+ "settings.agent.panel_advanced": "進階",
+ "settings.agent.panel_skills": "技能",
+ "settings.agent.panel_system": "系統設定",
+ "settings.agent.run_commands": "執行指令",
+ "settings.agent.sec_off": "關閉",
+ "settings.agent.sec_ask": "詢問",
+ "settings.agent.sec_auto": "自動",
+ "settings.agent.web_access": "網路存取",
+ "settings.agent.web_access_desc": "允許此 Agent 擷取即時網路結果。",
+ "settings.agent.file_tools": "檔案工具",
+ "settings.agent.file_tools_desc": "讓此 Agent 在其工作區中讀取和編輯檔案。",
+ "settings.agent.browser_auto": "瀏覽器自動化",
+ "settings.agent.browser_auto_desc": "即將推出",
+ "settings.agent.save_state_saving": "儲存中…",
+ "settings.agent.save_state_saved": "已儲存。",
+ "settings.agent.save_state_failed": "無法儲存。",
+ "settings.agent.retry": "重試",
+ "settings.agent.save_permissions_error2": "無法儲存權限。",
+ "settings.agent.automations_title": "定時自動化",
+ "settings.agent.automations_create": "建立",
+ "settings.agent.automations_loading": "載入定時自動化…",
+ "settings.agent.automations_empty": "此 Agent 尚無定時自動化。",
+ "settings.agent.automations_disabled": "已停用",
+ "settings.agent.automations_frequency": "頻率",
+ "settings.agent.automations_task": "任務",
+ "settings.agent.automations_less": "簡化",
+ "settings.agent.automations_more": "更多",
+ "settings.agent.heartbeats": "心跳",
+ "settings.agent.heartbeats_coming": "心跳自動化控制即將推出。",
+ "settings.agent.danger_zone": "危險區域",
+ "settings.agent.danger_zone_warning": "僅供進階使用者。",
+ "settings.agent.danger_zone_open": "在 Studio 外開啟完整 OpenClaw 控制 UI。",
+ "settings.agent.danger_zone_sync": "此處的變更可能破壞 Agent 行為或使 Studio 不同步。",
+ "settings.agent.danger_zone_open_btn": "開啟完整控制 UI",
+ "settings.agent.danger_zone_unavailable": "此閘道器無法使用控制 UI 連結。",
+ "settings.agent.delete_agent_desc": "從閘道器設定中移除 Agent 並刪除其排程自動化。",
+ "settings.agent.delete_agent_btn": "刪除 Agent",
+ "settings.agent.system_agent": "系統 Agent",
+ "settings.agent.system_agent_desc": "主要 Agent 已保留,無法刪除。",
+
+ // ===== 自動化建立器 =====
+ "automation.composer_title": "定時自動化建立器",
+ "automation.close": "關閉",
+ "automation.prompt_template": "選擇範本快速開始,或選擇自訂。",
+ "automation.prompt_name": "為此自動化命名並描述其功能。",
+ "automation.prompt_schedule": "選擇執行時間。",
+ "automation.label_name": "自動化名稱",
+ "automation.label_task": "任務",
+ "automation.schedule_type": "排程類型",
+ "automation.every": "每",
+ "automation.one_time": "單次",
+ "automation.unit": "單位",
+ "automation.minutes": "分鐘",
+ "automation.hours": "小時",
+ "automation.days": "天",
+ "automation.time_of_day": "每日時間",
+ "automation.timezone": "時區",
+ "automation.run_at": "執行於",
+ "automation.prompt_review": "建立前檢視詳細資訊。",
+ "automation.untitled": "未命名的自動化",
+ "automation.no_task": "未提供任務。",
+ "automation.schedule_label": "排程:",
+ "automation.step_progress": "步驟 %{n} / 4",
+ "automation.back": "上一步",
+ "automation.next": "下一步",
+ "automation.create": "建立自動化",
+
+ // ===== 公司建構 =====
+ "company.build": "建構公司",
+ "company.bootstrap_title": "用 AI 啟動您的公司",
+ "company.bootstrap_desc": "描述您的公司業務,Claw3D 可將其轉化為完整的組織結構,包含角色、職責與交接流程。",
+ "company.step_improve": "優化簡報",
+ "company.step_improve_desc": "使用已連線的執行時期來強化公司提示詞。",
+ "company.step_generate": "產生團隊",
+ "company.step_generate_desc": "取得實用的組織圖,包含角色、職責與交接流程。",
+ "company.step_create": "建立全部",
+ "company.step_create_desc": "撰寫 Agent 檔案並直接在已連線的執行時期中建立團隊。",
+ "company.open_builder": "開啟公司建構器",
+ "company.connect_hint": "請先連線到執行時期,並保留至少一個規劃 Agent 可用。",
+
+ // ===== Onboarding =====
+ "onboarding.title": "新手引導",
+ "onboarding.close": "關閉引導",
+ "onboarding.skip": "跳過引導",
+ "onboarding.back": "上一步",
+ "onboarding.step_count": "%{n} / %{total}",
+ "onboarding.enter_office": "進入辦公室",
+ "onboarding.connect_first": "請先連線",
+ "onboarding.next": "下一步",
+
+ // ---- Welcome Step ----
+ "onboarding.welcome.feature1_title": "觀看 Agent 工作",
+ "onboarding.welcome.feature1_desc": "在共享 3D 辦公室中即時查看您的 AI Agent。",
+ "onboarding.welcome.feature2_title": "管理您的艦隊",
+ "onboarding.welcome.feature2_desc": "從同一處建立、設定和監控 Agent。",
+ "onboarding.welcome.feature3_title": "聊天與核准",
+ "onboarding.welcome.feature3_desc": "與 Agent 交談、核准執行指令、檢視他們的工作成果。",
+ "onboarding.welcome.feature4_title": "打造您的辦公室",
+ "onboarding.welcome.feature4_desc": "自訂房間、辦公桌與整體辦公室佈局。",
+ "onboarding.welcome.main_desc": "Claw3D 將您的 AI 自動化轉變為視覺化工作場所——您的 AI Agent 在此協作的辦公室。",
+ "onboarding.welcome.wizard_desc": "此引導將協助您連線到執行時期閘道器,約兩分鐘即可開始。",
+
+ // ---- Connect Step ----
+ "onboarding.connect.connected": "已連線!",
+ "onboarding.connect.connected_desc": "您的閘道器已啟動。點擊下一步繼續。",
+ "onboarding.connect.not_connected": "未連線",
+ "onboarding.connect.url_label": "閘道器 URL",
+ "onboarding.connect.url_placeholder": "ws://localhost:18789 或 wss://your-host",
+ "onboarding.connect.token_label": "閘道器令牌",
+ "onboarding.connect.token_placeholder": "your-gateway-token",
+ "onboarding.connect.hide_token": "隱藏令牌",
+ "onboarding.connect.show_token": "顯示令牌",
+ "onboarding.connect.connecting": "連線中…",
+ "onboarding.connect.connect_btn": "連線",
+ "onboarding.connect.hint_local": "本機?使用 ws://localhost:18789",
+ "onboarding.connect.hint_tailscale": "Tailscale?使用 wss://your-host.ts.net",
+ "onboarding.connect.hint_ssh": "SSH 隧道?先轉發埠 18789,然後使用 localhost。",
+
+ // ---- Prerequisites Step ----
+ "onboarding.prereq.title": "OpenClaw 已安裝",
+ "onboarding.prereq.title_desc": "透過 npm、pnpm 或從原始碼安裝",
+ "onboarding.prereq.install_docs": "安裝文件",
+ "onboarding.prereq.gateway": "閘道器正在執行",
+ "onboarding.prereq.gateway_desc": "使用指令啟動:openclaw gateway start",
+ "onboarding.prereq.url_token": "閘道器 URL 和令牌",
+ "onboarding.prereq.url_token_desc": "可在 ~/.openclaw/openclaw.json 或您的遠端設定中找到",
+ "onboarding.prereq.node": "Node.js 20+",
+ "onboarding.prereq.node_desc": "本機執行 Claw3D 所需",
+ "onboarding.prereq.download_node": "下載 Node.js",
+ "onboarding.prereq.main_desc": "請在連線前備妥以下項目。如果您已安裝 OpenClaw,可跳過此步驟。",
+ "onboarding.prereq.help": "需要協助?請查閱 docs.openclaw.ai 或加入 Discord。",
+
+ // ---- Agents Step ----
+ "onboarding.agents.connect_first": "請先連線到閘道器以探索 Agent。",
+ "onboarding.agents.none_found": "找不到 Agent",
+ "onboarding.agents.none_found_desc": "您的閘道器已連線,但尚未設定任何 Agent。",
+ "onboarding.agents.quick_start": "快速入門:",
+ "onboarding.agents.step1": "1. 點擊艦隊側邊欄的 + 按鈕",
+ "onboarding.agents.step2": "2. 選擇名稱並啟動",
+ "onboarding.agents.step3": "3. 在聊天面板與您的 Agent 對話",
+ "onboarding.agents.count": "已探索 %{count} 個 Agent",
+ "onboarding.agents.ready_desc": "您的 AI 團隊已準備就緒,正在辦公室中等候。",
+ "onboarding.agents.what_you_can_do": "您可以對 Agent 做的事:",
+ "onboarding.agents.action_chat": "聊天",
+ "onboarding.agents.action_chat_desc": "發送訊息並取得回應",
+ "onboarding.agents.action_approve": "核准",
+ "onboarding.agents.action_approve_desc": "檢視與核准執行指令",
+ "onboarding.agents.action_configure": "設定",
+ "onboarding.agents.action_configure_desc": "編輯大腦檔案與設定",
+ "onboarding.agents.action_monitor": "監控",
+ "onboarding.agents.action_monitor_desc": "即時檢視執行時期活動",
+
+ // ---- Complete Step ----
+ "onboarding.complete.company_created": "%{name} 已建立成功!",
+ "onboarding.complete.welcome": "歡迎來到您的 AI 辦公室!",
+ "onboarding.complete.company_ready": "%{name} 已準備就緒。您的閘道器已連線,Agent 蓄勢待發。",
+ "onboarding.complete.gateway_ready": "您的閘道器已連線,Agent 已準備就緒。",
+ "onboarding.complete.meet_team": "認識您的新團隊",
+ "onboarding.complete.explore_office": "探索辦公室",
+ "onboarding.complete.meet_team_desc": "走訪辦公室,檢視新角色、職責與交接流程。",
+ "onboarding.complete.explore_office_desc": "穿梭各個房間,觀看 Agent 並與之互動。",
+ "onboarding.complete.reopen_hint": "您可以隨時從 Studio 設定重新執行引導。",
+
+ // ===== 收件匣 =====
+ "inbox.title": "結果中心",
+ "inbox.subtitle": "每個工作區最新的助理輸出。",
+ "inbox.empty_no_agents": "尚無 Agent 連線。",
+ "inbox.empty_no_output": "尚無完成的助理輸出。",
+ "inbox.badge_new": "最新",
+ "inbox.time_just_now": "剛剛",
+ "inbox.time_min_ago": "%{n} 分鐘前",
+ "inbox.time_hour_ago": "%{n} 小時前",
+ "inbox.time_day_ago": "%{n} 天前",
+ "inbox.time_no_output": "尚無輸出",
+
+ // ===== 歷史記錄 =====
+ "history.title": "稽核日誌",
+ "history.subtitle": "僅限此工作階段。生命週期事件從總部即時捕捉。",
+ "history.filter_agent": "Agent",
+ "history.filter_all_agents": "所有 Agent",
+ "history.filter_trigger": "觸發",
+ "history.filter_all_triggers": "所有觸發",
+ "history.filter_user": "使用者",
+ "history.filter_heartbeat": "心跳",
+ "history.filter_cron": "排程",
+ "history.empty": "此工作階段尚無執行記錄。",
+ "history.started": "已開始",
+ "history.duration": "持續時間",
+ "history.outcome": "結果",
+ "history.running": "執行中",
+ "history.error": "錯誤",
+ "history.completed": "已完成",
+ "history.duration_suffix": "執行中",
+
+ // ===== 分析面板 =====
+ "analytics.title": "分析",
+ "analytics.subtitle": "實際用量、支出與 Agent 信任指標。",
+ "analytics.start": "開始",
+ "analytics.end": "結束",
+ "analytics.last_refresh": "上次更新 %{time}",
+ "analytics.no_snapshot": "尚無分析快照",
+ "analytics.refresh": "重新整理",
+ "analytics.budget_ok": "預算在閾值內。",
+ "analytics.total_spend": "總支出",
+ "analytics.total_tokens": "總 Token 數",
+ "analytics.success_rate": "成功率",
+ "analytics.avg_runtime": "平均執行時間",
+ "analytics.hint_selected_range": "選定範圍。",
+ "analytics.hint_tokens": "輸入 + 輸出 + 快取。",
+ "analytics.hint_completed_only": "僅計算已完成的執行。",
+ "analytics.hint_session_local": "工作階段本機執行記錄。",
+ "analytics.budget_limits": "預算限制",
+ "analytics.daily_usd": "每日 USD",
+ "analytics.monthly_usd": "每月 USD",
+ "analytics.per_agent_usd": "每 Agent USD",
+ "analytics.alert_threshold": "警示閾值 %",
+ "analytics.no_limit": "無限制",
+ "analytics.soft_limit": "軟限制",
+ "analytics.daily_cost": "每日成本",
+ "analytics.loading_usage": "正在載入用量資料。",
+ "analytics.no_cost_data": "選定範圍內無成本資料。",
+ "analytics.cost_breakdown": "成本分析",
+ "analytics.input_cost": "輸入:$%{cost}。",
+ "analytics.output_cost": "輸出:$%{cost}。",
+ "analytics.cache_read_cost": "快取讀取:$%{cost}。",
+ "analytics.cache_write_cost": "快取寫入:$%{cost}。",
+ "analytics.top_agents": "最高支出 Agent",
+ "analytics.no_agent_data": "尚無 Agent 支出資料。",
+ "analytics.model_breakdown": "模型分析",
+ "analytics.no_model_data": "尚無模型用量資料。",
+ "analytics.performance": "效能",
+ "analytics.approvals": "核准",
+ "analytics.intervention_rate": "介入率",
+ "analytics.tool_calls": "工具呼叫",
+ "analytics.completed_runs": "已完成執行",
+ "analytics.n_runs": "%{n} 次執行",
+ "analytics.success_pct": "成功:%{pct}。",
+ "analytics.avg_runtime_detail": "平均執行時間:%{dur}。",
+ "analytics.tool_calls_detail": "工具呼叫:%{n}。",
+ "analytics.approvals_detail": "核准:%{n}。",
+ "analytics.no_performance_data": "尚無效能資料。",
+ "analytics.n_a": "無資料",
+
+ // ===== 看板 =====
+ "kanban.disabled_title": "任務管理員",
+ "kanban.disabled_heading": "看板技能未安裝",
+ "kanban.disabled_desc": "安裝 TASK-MANAGER 技能,讓 Agent 將工作捕捉為任務,並開啟看板工作區。",
+ "kanban.installing": "安裝中",
+ "kanban.installing_msg": "正在安裝 task-manager 技能。",
+ "kanban.installed_hint": "安裝完成後,Claw3D 將重新整理 task-manager 狀態。",
+ "kanban.install_btn": "安裝 TASK-MANAGER 技能",
+ "kanban.installing_btn": "正在安裝 TASK-MANAGER 技能…",
+
+ // ===== 任務面板 =====
+ "taskboard.title": "看板",
+ "taskboard.subtitle": "手動任務、推斷請求與排程劇本。",
+ "taskboard.status_todo": "待辦",
+ "taskboard.status_in_progress": "進行中",
+ "taskboard.status_blocked": "受阻",
+ "taskboard.status_review": "審查中",
+ "taskboard.status_done": "完成",
+ "taskboard.no_activity": "無活動",
+ "taskboard.time_just_now": "剛剛",
+ "taskboard.time_min_ago": "%{n} 分鐘前",
+ "taskboard.time_hour_ago": "%{n} 小時前",
+ "taskboard.time_day_ago": "%{n} 天前",
+ "taskboard.refresh": "重新整理",
+ "taskboard.new_task": "新增任務",
+ "taskboard.last_request": "最後請求:%{title}",
+ "taskboard.waiting": "等待偵測傳入請求。",
+ "taskboard.drop_card": "將卡片拖曳至此處。",
+ "taskboard.unassigned": "未指派",
+ "taskboard.run_linked": "已連結執行。",
+ "taskboard.playbook_linked": "已連結劇本。",
+ "taskboard.detail_title": "任務詳細資訊",
+ "taskboard.close": "關閉",
+ "taskboard.title_label": "標題",
+ "taskboard.description_label": "說明",
+ "taskboard.status_label": "狀態",
+ "taskboard.assigned_label": "指派 Agent",
+ "taskboard.unassigned_option": "未指派",
+ "taskboard.linked_run": "已連結執行中",
+ "taskboard.no_linked_run": "無已連結執行",
+ "taskboard.linked_playbook": "已連結劇本",
+ "taskboard.no_linked_playbook": "無已連結劇本",
+ "taskboard.channel": "頻道",
+ "taskboard.notes": "備註",
+ "taskboard.source": "來源:%{src}。",
+ "taskboard.created": "建立時間:%{date}。",
+ "taskboard.updated": "更新時間:%{date}。",
+ "taskboard.delete": "刪除任務",
+ "taskboard.debug_capture": "擷取偵錯資訊",
+ "taskboard.debug_status": "狀態:%{status}",
+ "taskboard.debug_visible": "可見卡片:%{n}",
+
+ // ===== 技能市集 =====
+ "marketplace.title": "技能市集",
+ "marketplace.subtitle": "像精選外掛商店一樣瀏覽閘道器技能。",
+ "marketplace.modal_title": "技能市集",
+ "marketplace.modal_subtitle": "在更廣闊的工作區中探索、安裝和啟用閘道器技能。",
+ "marketplace.refresh": "重新整理",
+ "marketplace.warning": "封裝安裝可能包含多個技能。安裝後,可在 Agent 技能面板中管理存取控制。",
+ "marketplace.agent_context": "Agent 內容",
+ "marketplace.no_agent": "未選取 Agent",
+ "marketplace.access_mode": "存取模式:%{mode}",
+ "marketplace.no_agents": "無可用 Agent",
+ "marketplace.focus_chat": "焦點聊天",
+ "marketplace.settings": "設定",
+ "marketplace.search_placeholder": "搜尋技能、類別或來源",
+ "marketplace.search_aria": "搜尋市集技能",
+ "marketplace.filter_hint": "請檢查下方 CLAW3D 篩選條件…",
+ "marketplace.loading": "正在載入市集庫存…",
+ "marketplace.featured_shelf": "精選推薦",
+ "marketplace.featured_badge": "精選",
+ "marketplace.empty": "此閘道器找不到符合的技能。",
+ "marketplace.install_skill": "安裝技能",
+ "marketplace.install_deps": "安裝相依套件",
+ "marketplace.enable_gateway": "啟用閘道器",
+ "marketplace.open_settings": "開啟設定",
+ "marketplace.disable_for_agent": "為此 Agent 停用",
+ "marketplace.enable_for_agent": "為此 Agent 啟用",
+ "marketplace.remove_all": "為所有 Agent 移除",
+ "marketplace.details": "詳細資訊",
+ "marketplace.close_detail": "關閉市集詳細資訊",
+ "marketplace.rating": "評分",
+ "marketplace.installs": "安裝次數",
+ "marketplace.source": "來源",
+ "marketplace.capabilities": "功能",
+ "marketplace.setup_notes": "設定說明",
+ "marketplace.install_btn": "安裝技能",
+ "marketplace.install_deps_btn": "安裝相依套件",
+ "marketplace.enable_gateway_btn": "啟用閘道器",
+ "marketplace.manage_settings": "在設定中管理",
+ "marketplace.homepage": "首頁",
+ "marketplace.info_enable_disable": "啟用會將技能新增至 Agent 的可用工具;停用則隱藏技能,但不會從閘道器移除。",
+ "marketplace.close": "關閉",
+
+ // ===== Office Builder =====
+ "builder.controls": "建構器控制項",
+ "builder.undo": "復原",
+ "builder.redo": "重做",
+ "builder.rotate": "旋轉選取物件",
+ "builder.flip_x": "水平翻轉選取物件",
+ "builder.flip_y": "垂直翻轉選取物件",
+ "builder.add_light": "新增光源",
+ "builder.add_emitter": "新增粒子發射器",
+ "builder.add_interaction": "新增互動點",
+ "builder.save_version": "儲存版本",
+ "builder.publish": "發布目前版本",
+ "builder.simulation": "模擬切換",
+ "builder.debug": "偵錯",
+ "builder.lighting": "燈光",
+ "builder.ambience": "環境",
+ "builder.thought_bubbles": "對話泡泡",
+ "builder.selected": "已選取 %{n}",
+ "builder.save_failed": "儲存失敗",
+ "builder.saved": "已儲存 %{id}",
+ "builder.publish_failed": "發布失敗",
+ "builder.published": "已發布",
+
+ // ===== 樓層導航 =====
+ "floor.destination": "目的地",
+ "floor.floor": "樓層",
+ "floor.locked": "已鎖定",
+ "floor.expand": "展開建築目錄",
+ "floor.collapse": "收合建築目錄",
+ "floor.directory": "建築目錄",
+ "floor.prev": "上一個",
+ "floor.next": "下一個",
+ "floor.building": "建築",
+ "floor.outside": "外部",
+ "floor.current": "目前樓層",
+ "floor.provider_demo": "Demo",
+ "floor.provider_openclaw": "OpenClaw",
+ "floor.provider_hermes": "Hermes",
+ "floor.provider_paperclip": "Paperclip",
+ "floor.provider_custom": "自訂",
+ "floor.provider_local": "本機",
+ "floor.provider_claw3d": "Claw3D",
+
+ // ===== 遠端 Agent 聊天 =====
+ "remote_chat.title": "遠端 Agent",
+ "remote_chat.empty": "傳送純文字備註至此遠端 Agent。",
+ "remote_chat.mode_direct": "直接",
+ "remote_chat.mode_interval": "間隔",
+ "remote_chat.mode_direct_desc": "直接中繼。遠端回覆尚未鏡像至此處。",
+ "remote_chat.mode_interval_desc": "間隔執行緒。用於持續協調與檢查點。",
+ "remote_chat.forwarding": "正在將您的訊息轉送至遠端閘道器。",
+ "remote_chat.text_placeholder": "向遠端 Agent 傳送訊息。",
+ "remote_chat.handoff_placeholder": "交接內容",
+ "remote_chat.deliverables_placeholder": "交付項目(逗號分隔)",
+ "remote_chat.acceptance_placeholder": "驗收標準",
+ "remote_chat.enter_hint": "Enter 發送。Shift+Enter 換行。",
+ "remote_chat.handoff_btn": "交接",
+ "remote_chat.handoff_progress": "交接中…",
+ "remote_chat.send": "發送",
+ "remote_chat.sending": "發送中…",
+};
+
+export default zhTW;