From f50c85ce84fb2b57cff7676bde5fbe297e688516 Mon Sep 17 00:00:00 2001 From: xintaofei Date: Fri, 27 Mar 2026 20:49:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dweb=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=9C=AA=E5=A4=84=E7=90=86=E5=A4=9A=E8=AF=AD?= =?UTF-8?q?=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../settings/web-service-settings.tsx | 40 +++++++++++-------- src/i18n/messages/ar.json | 20 ++++++++++ src/i18n/messages/de.json | 20 ++++++++++ src/i18n/messages/en.json | 20 ++++++++++ src/i18n/messages/es.json | 20 ++++++++++ src/i18n/messages/fr.json | 20 ++++++++++ src/i18n/messages/ja.json | 20 ++++++++++ src/i18n/messages/ko.json | 20 ++++++++++ src/i18n/messages/pt.json | 20 ++++++++++ src/i18n/messages/zh-CN.json | 20 ++++++++++ src/i18n/messages/zh-TW.json | 20 ++++++++++ 11 files changed, 224 insertions(+), 16 deletions(-) diff --git a/src/components/settings/web-service-settings.tsx b/src/components/settings/web-service-settings.tsx index 7364e6f..1a49e84 100644 --- a/src/components/settings/web-service-settings.tsx +++ b/src/components/settings/web-service-settings.tsx @@ -2,6 +2,7 @@ import { useCallback, useEffect, useState } from "react" import { Check, Copy, ExternalLink, Eye, EyeOff } from "lucide-react" +import { useTranslations } from "next-intl" import { startWebServer, stopWebServer, @@ -11,6 +12,7 @@ import { import { openUrl } from "@/lib/platform" function AddressCard({ label, value }: { label: string; value: string }) { + const t = useTranslations("WebServiceSettings") return (
{label}
@@ -23,7 +25,7 @@ function AddressCard({ label, value }: { label: string; value: string }) { type="button" onClick={() => openUrl(value)} className="inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-accent-foreground" - title="打开" + title={t("open")} > @@ -34,6 +36,7 @@ function AddressCard({ label, value }: { label: string; value: string }) { } function TokenCard({ label, value }: { label: string; value: string }) { + const t = useTranslations("WebServiceSettings") const [copied, setCopied] = useState(false) const [revealed, setRevealed] = useState(false) @@ -59,7 +62,7 @@ function TokenCard({ label, value }: { label: string; value: string }) { type="button" onClick={() => setRevealed((v) => !v)} className="inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-accent-foreground" - title={revealed ? "隐藏" : "显示"} + title={revealed ? t("hide") : t("show")} > {revealed ? ( @@ -71,7 +74,7 @@ function TokenCard({ label, value }: { label: string; value: string }) { type="button" onClick={handleCopy} className="inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-accent-foreground" - title="复制" + title={t("copy")} > {copied ? ( @@ -86,6 +89,7 @@ function TokenCard({ label, value }: { label: string; value: string }) { } export function WebServiceSettings() { + const t = useTranslations("WebServiceSettings") const [status, setStatus] = useState(null) const [port, setPort] = useState("3080") const [loading, setLoading] = useState(false) @@ -119,7 +123,7 @@ export function WebServiceSettings() { const msg = e && typeof e === "object" && "message" in e ? (e as { message: string }).message - : "启动失败" + : t("startFailed") setError(msg) } finally { setLoading(false) @@ -132,7 +136,7 @@ export function WebServiceSettings() { await stopWebServer() setStatus(null) } catch { - setError("停止失败") + setError(t("stopFailed")) } finally { setLoading(false) } @@ -143,16 +147,16 @@ export function WebServiceSettings() { return (
-

Web 服务

+

{t("sectionTitle")}

- 启用后可通过浏览器远程访问 Codeg + {t("sectionDescription")}

{/* Port config */}
- + - +
- {isRunning ? "运行中" : "已停止"} + + {isRunning ? t("running") : t("stopped")} +
@@ -190,12 +196,14 @@ export function WebServiceSettings() { {isRunning && (
{status.addresses.map((addr) => ( - + ))} - -

- Web 客户端首次访问时需输入此 Token -

+ +

{t("tokenHint")}

)}
diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index b7b9536..190137a 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -1630,5 +1630,25 @@ "directoryExists": "الدليل الهدف موجود بالفعل", "commandFailed": "فشل أمر إنشاء المشروع." } + }, + "WebServiceSettings": { + "sectionTitle": "خدمة الويب", + "sectionDescription": "تفعيل للوصول إلى Codeg عن بُعد عبر المتصفح", + "port": "المنفذ", + "status": "الحالة", + "running": "قيد التشغيل", + "stopped": "متوقف", + "processing": "جارٍ المعالجة...", + "start": "تشغيل", + "stop": "إيقاف", + "startFailed": "فشل التشغيل", + "stopFailed": "فشل الإيقاف", + "open": "فتح", + "hide": "إخفاء", + "show": "إظهار", + "copy": "نسخ", + "addressLabel": "عنوان الوصول", + "tokenLabel": "رمز الوصول", + "tokenHint": "أدخل هذا الرمز عند الوصول إلى عميل الويب لأول مرة" } } diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index d47c64f..52ba47f 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -1630,5 +1630,25 @@ "directoryExists": "Zielverzeichnis existiert bereits", "commandFailed": "Projekterstellungsbefehl fehlgeschlagen." } + }, + "WebServiceSettings": { + "sectionTitle": "Webdienst", + "sectionDescription": "Aktivieren Sie den Fernzugriff auf Codeg über den Browser", + "port": "Port", + "status": "Status", + "running": "Läuft", + "stopped": "Gestoppt", + "processing": "Verarbeitung...", + "start": "Starten", + "stop": "Stoppen", + "startFailed": "Start fehlgeschlagen", + "stopFailed": "Stopp fehlgeschlagen", + "open": "Öffnen", + "hide": "Ausblenden", + "show": "Einblenden", + "copy": "Kopieren", + "addressLabel": "Zugriffsadresse", + "tokenLabel": "Zugriffstoken", + "tokenHint": "Geben Sie dieses Token beim ersten Zugriff auf den Web-Client ein" } } diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index c0aaa10..f833d87 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -1630,5 +1630,25 @@ "directoryExists": "Target directory already exists", "commandFailed": "Project creation command failed." } + }, + "WebServiceSettings": { + "sectionTitle": "Web Service", + "sectionDescription": "Enable to access Codeg remotely via browser", + "port": "Port", + "status": "Status", + "running": "Running", + "stopped": "Stopped", + "processing": "Processing...", + "start": "Start", + "stop": "Stop", + "startFailed": "Failed to start", + "stopFailed": "Failed to stop", + "open": "Open", + "hide": "Hide", + "show": "Show", + "copy": "Copy", + "addressLabel": "Access Address", + "tokenLabel": "Access Token", + "tokenHint": "Enter this token when accessing the Web client for the first time" } } diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index 95a275e..e231eb0 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -1630,5 +1630,25 @@ "directoryExists": "El directorio de destino ya existe", "commandFailed": "El comando de creación del proyecto falló." } + }, + "WebServiceSettings": { + "sectionTitle": "Servicio Web", + "sectionDescription": "Habilitar para acceder a Codeg de forma remota a través del navegador", + "port": "Puerto", + "status": "Estado", + "running": "En ejecución", + "stopped": "Detenido", + "processing": "Procesando...", + "start": "Iniciar", + "stop": "Detener", + "startFailed": "Error al iniciar", + "stopFailed": "Error al detener", + "open": "Abrir", + "hide": "Ocultar", + "show": "Mostrar", + "copy": "Copiar", + "addressLabel": "Dirección de acceso", + "tokenLabel": "Token de acceso", + "tokenHint": "Ingrese este token al acceder al cliente Web por primera vez" } } diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index b5045f8..a095030 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -1630,5 +1630,25 @@ "directoryExists": "Le répertoire cible existe déjà", "commandFailed": "La commande de création du projet a échoué." } + }, + "WebServiceSettings": { + "sectionTitle": "Service Web", + "sectionDescription": "Activer pour accéder à Codeg à distance via le navigateur", + "port": "Port", + "status": "Statut", + "running": "En cours", + "stopped": "Arrêté", + "processing": "Traitement...", + "start": "Démarrer", + "stop": "Arrêter", + "startFailed": "Échec du démarrage", + "stopFailed": "Échec de l'arrêt", + "open": "Ouvrir", + "hide": "Masquer", + "show": "Afficher", + "copy": "Copier", + "addressLabel": "Adresse d'accès", + "tokenLabel": "Token d'accès", + "tokenHint": "Entrez ce token lors du premier accès au client Web" } } diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index 0f9720f..05e5831 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -1630,5 +1630,25 @@ "directoryExists": "対象ディレクトリは既に存在します", "commandFailed": "プロジェクト作成コマンドが失敗しました。" } + }, + "WebServiceSettings": { + "sectionTitle": "Webサービス", + "sectionDescription": "有効にするとブラウザからCodegにリモートアクセスできます", + "port": "ポート", + "status": "ステータス", + "running": "実行中", + "stopped": "停止中", + "processing": "処理中...", + "start": "開始", + "stop": "停止", + "startFailed": "開始に失敗しました", + "stopFailed": "停止に失敗しました", + "open": "開く", + "hide": "非表示", + "show": "表示", + "copy": "コピー", + "addressLabel": "アクセスアドレス", + "tokenLabel": "アクセストークン", + "tokenHint": "Webクライアントの初回アクセス時にこのトークンを入力してください" } } diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index a63ea0a..34f73aa 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -1630,5 +1630,25 @@ "directoryExists": "대상 디렉터리가 이미 존재합니다", "commandFailed": "프로젝트 생성 명령이 실패했습니다." } + }, + "WebServiceSettings": { + "sectionTitle": "웹 서비스", + "sectionDescription": "활성화하면 브라우저를 통해 Codeg에 원격으로 접속할 수 있습니다", + "port": "포트", + "status": "상태", + "running": "실행 중", + "stopped": "중지됨", + "processing": "처리 중...", + "start": "시작", + "stop": "중지", + "startFailed": "시작 실패", + "stopFailed": "중지 실패", + "open": "열기", + "hide": "숨기기", + "show": "표시", + "copy": "복사", + "addressLabel": "접속 주소", + "tokenLabel": "접속 토큰", + "tokenHint": "웹 클라이언트 첫 접속 시 이 토큰을 입력하세요" } } diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index 2cfdd59..0dbbe38 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -1630,5 +1630,25 @@ "directoryExists": "O diretório de destino já existe", "commandFailed": "O comando de criação do projeto falhou." } + }, + "WebServiceSettings": { + "sectionTitle": "Serviço Web", + "sectionDescription": "Ativar para acessar o Codeg remotamente pelo navegador", + "port": "Porta", + "status": "Status", + "running": "Em execução", + "stopped": "Parado", + "processing": "Processando...", + "start": "Iniciar", + "stop": "Parar", + "startFailed": "Falha ao iniciar", + "stopFailed": "Falha ao parar", + "open": "Abrir", + "hide": "Ocultar", + "show": "Mostrar", + "copy": "Copiar", + "addressLabel": "Endereço de acesso", + "tokenLabel": "Token de acesso", + "tokenHint": "Insira este token ao acessar o cliente Web pela primeira vez" } } diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index 9079f6f..c419abe 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -1630,5 +1630,25 @@ "directoryExists": "目标目录已存在", "commandFailed": "项目创建命令执行失败。" } + }, + "WebServiceSettings": { + "sectionTitle": "Web 服务", + "sectionDescription": "启用后可通过浏览器远程访问 Codeg", + "port": "端口", + "status": "状态", + "running": "运行中", + "stopped": "已停止", + "processing": "处理中...", + "start": "启动", + "stop": "停止", + "startFailed": "启动失败", + "stopFailed": "停止失败", + "open": "打开", + "hide": "隐藏", + "show": "显示", + "copy": "复制", + "addressLabel": "访问地址", + "tokenLabel": "访问 Token", + "tokenHint": "Web 客户端首次访问时需输入此 Token" } } diff --git a/src/i18n/messages/zh-TW.json b/src/i18n/messages/zh-TW.json index c573800..6c1f01a 100644 --- a/src/i18n/messages/zh-TW.json +++ b/src/i18n/messages/zh-TW.json @@ -1630,5 +1630,25 @@ "directoryExists": "目標目錄已存在", "commandFailed": "專案建立命令執行失敗。" } + }, + "WebServiceSettings": { + "sectionTitle": "Web 服務", + "sectionDescription": "啟用後可透過瀏覽器遠端存取 Codeg", + "port": "連接埠", + "status": "狀態", + "running": "執行中", + "stopped": "已停止", + "processing": "處理中...", + "start": "啟動", + "stop": "停止", + "startFailed": "啟動失敗", + "stopFailed": "停止失敗", + "open": "開啟", + "hide": "隱藏", + "show": "顯示", + "copy": "複製", + "addressLabel": "存取位址", + "tokenLabel": "存取 Token", + "tokenHint": "Web 用戶端首次存取時需輸入此 Token" } }