Files
cowork-local/i18n/settings_dialog.py
T
f9f6bc01fd
CI / test (push) Canceled after 0s
Feature/delta team/epic r04 (#7)
## Summary

epic r04 - begin refactor

## Change Type

- [x] Cowork feature
- [ ] Bug fix
- [ ] Core AI contribution
- [ ] Test / hardening
- [ ] Performance
- [ ] Documentation

## Related Work

Cowork Task:

Core Repo: http://34.143.229.138/gitea-admin/fsg-ai-core-assets

Core AI Issue:

Core Task:

Related PR:

## Scope

What is intentionally included?

What is intentionally NOT included?

## Validation

- [ ] Unit tests
- [ ] Integration tests
- [ ] Manual verification
- [ ] Regression check

Commands / evidence:

## Security Impact

Permission / credential / network / customer data impact:

## Compatibility

- [ ] No breaking change
- [ ] Breaking change documented

## Reviewer Notes

Anything Cowork reviewers should pay attention to.

---------

Co-authored-by: Anh Tran Nguyen Minh <anhtnm1@fpt.com>
Co-authored-by: Huong Le Thi Thien <huongltt35@fpt.com>
Co-authored-by: Nam Pham Dinh Thanh <nampdt@fpt.com>
Co-authored-by: Vu Dam Tuan <vudt15@fpt.com>
Co-authored-by: Hiep Ha Van <hiephv3@fpt.com>
Co-authored-by: Lam Hoang Van <lamhv7@fpt.com>
Reviewed-on: #7
Co-authored-by: Duy Le Huu <duylh19@fpt.com>
2026-08-31 05:15:13 +00:00

344 lines
29 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Chuỗi hiển thị — phần settings_dialog.
Cắt ra từ ``i18n.py``: một dict 3.000 dòng không mở nổi để sửa một chữ.
Cắt theo mốc phân đoạn có sẵn, nên mỗi cụm vẫn là các màn đi liền nhau.
``i18n.py`` gộp tất cả lại thành ``STRINGS``.
"""
from __future__ import annotations
from typing import Dict
STRINGS: Dict[str, Dict[str, str]] = {
"settings.sandbox_block_network": {
"en": "Block network for agent-run commands",
"ja": "エージェントが実行するコマンドのネットワークをブロック",
"vi": "Chặn mạng cho lệnh do agent chạy"},
"settings.allow_url_fetch": {
"en": "Allow the agent to fetch URLs (web pages, SharePoint / OneDrive links)",
"ja": "エージェントによるURL取得を許可(Webページ、SharePoint / OneDriveリンク)",
"vi": "Cho phép agent lấy dữ liệu từ URL (trang web, link SharePoint / OneDrive)"},
"settings.allow_url_fetch_tooltip": {
"en": ("Lets the agent's fetch_url tool read web pages, online documents and "
"SharePoint/OneDrive share links to search & process them. Separate from "
"'Block network' (which only sandboxes shell commands). Default: on."),
"ja": "エージェントのfetch_urlツールがWebページ・オンライン文書・SharePoint/OneDrive共有リンクを"
"読み取れるようにします。「ネットワークをブロック」(シェルコマンド用)とは別です。既定: オン。",
"vi": ("Cho phép tool fetch_url của agent đọc trang web, tài liệu online và link chia sẻ "
"SharePoint/OneDrive để tìm kiếm & xử lý. Tách biệt với 'Chặn mạng' (chỉ áp cho lệnh "
"shell). Mặc định: bật.")},
"settings.test_internet": {
"en": "Test Internet", "ja": "インターネット接続テスト", "vi": "Kiểm tra Internet"},
"settings.test_internet_tooltip": {
"en": ("Live-checks the app's own outbound HTTPS path (the same one fetch_url uses) "
"and reports the concrete reason if it can't reach the internet."),
"ja": "アプリ自身の送信HTTPS経路(fetch_urlと同じ)を実際にテストし、インターネットに到達できない"
"場合は具体的な理由を表示します。",
"vi": ("Kiểm tra trực tiếp đường HTTPS ra ngoài của app (đúng đường mà fetch_url dùng) và "
"báo lý do cụ thể nếu không truy cập được internet.")},
"settings.testing_internet": {
"en": "Testing internet access…", "ja": "インターネット接続をテスト中…",
"vi": "Đang kiểm tra truy cập internet…"},
"settings.sandbox_block_network_tooltip": {
"en": ("Policy-level control (proxy env vars point at a black hole) — not a kernel "
"firewall. Combine with the command whitelist above for defense in depth."),
"ja": "ポリシーレベルの制御です(プロキシ環境変数をブラックホールに向ける)— カーネルレベルの"
"ファイアウォールではありません。上のコマンドホワイトリストと併用してください。",
"vi": "Kiểm soát ở tầng chính sách (trỏ biến môi trường proxy vào hố đen) — không phải "
"firewall tầng kernel. Kết hợp với whitelist lệnh ở trên để phòng thủ nhiều lớp."},
"settings.sandbox_unlimited": {"en": "Unlimited", "ja": "無制限", "vi": "Không giới hạn"},
"settings.sandbox_cpu_label": {"en": "CPU limit", "ja": "CPU 制限", "vi": "Giới hạn CPU"},
"settings.sandbox_memory_label": {"en": "Memory limit", "ja": "メモリ制限", "vi": "Giới hạn bộ nhớ"},
"settings.sandbox_disk_label": {"en": "Disk I/O limit", "ja": "ディスク I/O 制限", "vi": "Giới hạn disk I/O"},
"settings.sandbox_hint": {
"en": ("Applies to every run_command/install_package the agent executes "
"(Cowork, Code tab, and Schedule Task alike). 0 = unlimited. This layer is "
"independent of \"Agent Security\" above — it still applies even while that "
"toggle is off."),
"ja": "エージェントが実行するすべての run_command/install_package に適用されます"
"(Cowork、Code タブ、Schedule Task 共通)。0 = 無制限。この機能は上の「Agent "
"Security」とは独立しており、そのトグルがオフの間も適用され続けます。",
"vi": "Áp dụng cho mọi run_command/install_package mà agent chạy (Cowork, tab Code, "
"và Schedule Task). 0 = không giới hạn. Lớp này độc lập với \"Agent Security\" "
"ở trên — vẫn áp dụng ngay cả khi tắt Agent Security."},
"settings.group.mcp": {"en": "MCP Servers", "ja": "MCP サーバー", "vi": "MCP Servers"},
"settings.mcp_hint": {
"en": ("Connect to external MCP (Model Context Protocol) servers — e.g. the official "
"filesystem/GitHub/brave-search servers — and their tools become available to "
"the agent alongside Microsoft 365 and the built-in file/command tools."),
"ja": "外部の MCP(Model Context Protocol)サーバー(公式の filesystem/GitHub/brave-search "
"サーバーなど)に接続すると、そのツールが Microsoft 365 や組み込みのファイル/コマンド"
"ツールと並んでエージェントから利用できるようになります。",
"vi": "Kết nối tới các MCP server bên ngoài (vd: server filesystem/GitHub/brave-search chính "
"thức) — tool của chúng sẽ khả dụng cho agent cùng với Microsoft 365 và tool file/lệnh "
"có sẵn."},
"settings.mcp_add_btn": {"en": "Add server…", "ja": "サーバーを追加…", "vi": "Thêm server…"},
"settings.mcp_edit_btn": {"en": "Edit", "ja": "編集", "vi": "Sửa"},
"settings.mcp_delete_btn": {"en": "Delete", "ja": "削除", "vi": "Xóa"},
"settings.mcp_no_servers": {
"en": "(No MCP servers configured — click 'Add server…')",
"ja": "(MCP サーバーが設定されていません。「サーバーを追加…」をクリック)",
"vi": "(Chưa cấu hình MCP server nào — bấm 'Thêm server…')"},
"settings.mcp_delete_confirm": {
"en": "Remove MCP server \"{name}\"?", "ja": "MCP サーバー「{name}」を削除しますか?",
"vi": "Xóa MCP server \"{name}\"?"},
"mcp.add_title": {"en": "Add MCP server", "ja": "MCP サーバーを追加", "vi": "Thêm MCP server"},
"mcp.edit_title": {"en": "Edit MCP server", "ja": "MCP サーバーを編集", "vi": "Sửa MCP server"},
"mcp.name_label": {"en": "Name", "ja": "名前", "vi": "Tên"},
"mcp.name_placeholder": {"en": "e.g. filesystem", "ja": "例: filesystem", "vi": "vd: filesystem"},
"mcp.command_label": {"en": "Command", "ja": "コマンド", "vi": "Lệnh"},
"mcp.command_placeholder": {"en": "e.g. npx", "ja": "例: npx", "vi": "vd: npx"},
"mcp.args_label": {"en": "Arguments", "ja": "引数", "vi": "Tham số"},
"mcp.args_placeholder": {
"en": "e.g. -y @modelcontextprotocol/server-filesystem C:\\Data",
"ja": "例: -y @modelcontextprotocol/server-filesystem C:\\Data",
"vi": "vd: -y @modelcontextprotocol/server-filesystem C:\\Data"},
"mcp.hint": {
"en": ("The server is launched as a subprocess and talked to over stdio (the standard "
"MCP transport) — the SAME way Claude Desktop/other MCP clients connect to it."),
"ja": "サーバーはサブプロセスとして起動され、stdio(標準の MCP トランスポート)で通信します"
"— Claude Desktop など他の MCP クライアントと同じ方式です。",
"vi": "Server được khởi chạy như 1 subprocess và giao tiếp qua stdio (giao thức MCP chuẩn) "
"— giống cách Claude Desktop hay các MCP client khác kết nối tới nó."},
# ---- settings_dialog.py / ext_connector_dialog.py: External Connectors (CAD/CAE/Office) ----
"settings.group.ext": {
"en": "Connectors (MCP)",
"ja": "コネクタ(MCP)",
"vi": "Connectors (MCP)"},
"settings.ext_moved_hint": {
"en": "Connector (MCP / REST-API) setup moved to Monitoring → Tools → Connector.",
"ja": "コネクター(MCP / REST-API)の設定は「モニタリング → ツール → Connector」へ移動しました。",
"vi": "Thiết lập Connector (MCP / REST-API) đã chuyển sang Monitoring → Công cụ → Connector."},
"settings.ext_hint": {
"en": ("One place for every external tool source — grouped as CAD (NX/CATIA/SolidWorks/"
"AutoCAD), CAE (ANSA/ABAQUS/HyperWorks/ANSYS), MS365 (Microsoft 365/OneDrive/"
"SharePoint) and Other (any generic MCP server). MS365 auto-connects via the built-in "
"server once you sign in; for the rest, point each connector at an MCP server you "
"already have or a REST API it exposes (no vendor SDK is bundled)."),
"ja": "外部ツール接続を1か所に集約 — CAD(NX/CATIA/SolidWorks/AutoCAD)、CAE(ANSA/ABAQUS/"
"HyperWorks/ANSYS)、MS365(Microsoft 365/OneDrive/SharePoint)、Other(汎用 MCP サーバー)。"
"MS365 はサインインすると内蔵サーバーで自動接続。その他は既存の MCP サーバーまたは REST API を"
"指定してください(ベンダー SDK は同梱しません)。",
"vi": "Một nơi duy nhất cho mọi nguồn tool ngoài — nhóm theo CAD (NX/CATIA/SolidWorks/AutoCAD), "
"CAE (ANSA/ABAQUS/HyperWorks/ANSYS), MS365 (Microsoft 365/OneDrive/SharePoint) và Other "
"(MCP server bất kỳ). MS365 tự kết nối qua server tích hợp sau khi đăng nhập; còn lại bạn "
"trỏ mỗi connector tới MCP server bạn đã có hoặc REST API nó cung cấp (không kèm SDK hãng nào)."},
"settings.ext_add_btn": {"en": "Add connector…", "ja": "コネクタを追加…", "vi": "Thêm connector…"},
"settings.ext_edit_btn": {"en": "Edit", "ja": "編集", "vi": "Sửa"},
"settings.ext_delete_btn": {"en": "Delete", "ja": "削除", "vi": "Xóa"},
"settings.ext_delete_confirm": {
"en": "Remove connector \"{name}\"?", "ja": "コネクタ「{name}」を削除しますか?",
"vi": "Xóa connector \"{name}\"?"},
"ext.add_title": {"en": "Add connector", "ja": "コネクタを追加", "vi": "Thêm connector"},
"ext.edit_title": {"en": "Edit connector", "ja": "コネクタを編集", "vi": "Sửa connector"},
"ext.category_label": {"en": "Category", "ja": "カテゴリ", "vi": "Nhóm"},
"ext.preset_label": {"en": "App", "ja": "アプリ", "vi": "Ứng dụng"},
"ext.preset_custom": {"en": "(Custom…)", "ja": "(カスタム…)", "vi": "(Tuỳ chỉnh…)"},
"ext.name_label": {"en": "Display name", "ja": "表示名", "vi": "Tên hiển thị"},
"ext.name_placeholder": {"en": "e.g. NX (Site A)", "ja": "例: NX(サイトA)", "vi": "vd: NX (Site A)"},
"ext.mode_label": {"en": "Connection type", "ja": "接続方式", "vi": "Kiểu kết nối"},
"ext.mode_mcp": {"en": "MCP server (stdio)", "ja": "MCP サーバー(stdio)", "vi": "MCP server (stdio)"},
"ext.mode_rest": {"en": "REST API", "ja": "REST API", "vi": "REST API"},
"ext.mode_builtin": {"en": "built-in, auto-connect", "ja": "内蔵・自動接続", "vi": "tích hợp, tự kết nối"},
"settings.ms365_signin_btn": {"en": "Sign in to Microsoft 365", "ja": "Microsoft 365 にサインイン",
"vi": "Đăng nhập Microsoft 365"},
"settings.ms365_signout_btn": {"en": "Sign out", "ja": "サインアウト", "vi": "Đăng xuất"},
"settings.ms365_signed_in": {"en": "Microsoft 365: signed in as {who}",
"ja": "Microsoft 365: {who} でサインイン中",
"vi": "Microsoft 365: đã đăng nhập ({who})"},
"settings.ms365_signed_out": {
"en": "Microsoft 365: not signed in — one click, no Tenant/Client ID needed.",
"ja": "Microsoft 365: 未サインイン — ワンクリック、テナント/クライアント ID 不要。",
"vi": "Microsoft 365: chưa đăng nhập — 1 cú click, không cần Tenant/Client ID."},
"settings.ms365_signing_in": {
"en": "Microsoft 365: opening sign-in… follow the code prompt.",
"ja": "Microsoft 365: サインインを開始中… コードの案内に従ってください。",
"vi": "Microsoft 365: đang mở đăng nhập… làm theo hướng dẫn mã code."},
"settings.ms365_code_hint": {
"en": ("The sign-in page opened in your browser (<a href='{url}'>{url}</a>) and the code "
"below was copied to your clipboard — just paste it, then sign in with your Microsoft "
"account. This window closes automatically when sign-in completes."),
"ja": ("ブラウザでサインインページ(<a href='{url}'>{url}</a>)を開きました。下のコードはクリップボードに"
"コピー済みです — 貼り付けて Microsoft アカウントでサインインしてください。完了すると自動で閉じます。"),
"vi": ("Trang đăng nhập đã mở trong trình duyệt (<a href='{url}'>{url}</a>) và mã bên dưới đã được "
"copy vào clipboard — chỉ cần dán, rồi đăng nhập bằng tài khoản Microsoft. Cửa sổ này tự đóng "
"khi đăng nhập xong.")},
"settings.ms365_copy_code": {"en": "Copy code", "ja": "コードをコピー", "vi": "Copy mã"},
"settings.ms365_open_link": {"en": "Open link", "ja": "リンクを開く", "vi": "Mở link"},
"settings.ms365_local_connected": {
"en": "OneDrive / SharePoint: auto-connected via local sync — no sign-in needed.\nSynced folder: {path}",
"ja": "OneDrive / SharePoint: ローカル同期で自動接続 — サインイン不要。\n同期フォルダ: {path}",
"vi": "OneDrive / SharePoint: tự động kết nối qua thư mục sync local — không cần đăng nhập.\nThư mục đã sync: {path}"},
"settings.ms365_local_none": {
"en": "OneDrive / SharePoint: no locally-synced OneDrive folder found. Install/sign in to "
"the OneDrive desktop app and sync a folder, then reopen Settings.",
"ja": "OneDrive / SharePoint: ローカル同期の OneDrive フォルダが見つかりません。OneDrive デスクトップ"
"アプリでサインインしフォルダを同期してから、設定を開き直してください。",
"vi": "OneDrive / SharePoint: chưa tìm thấy thư mục OneDrive sync trên máy. Cài/đăng nhập OneDrive "
"desktop và sync một thư mục, rồi mở lại Settings."},
"ext.command_label": {"en": "Command", "ja": "コマンド", "vi": "Lệnh"},
"ext.command_placeholder": {"en": "e.g. python or npx", "ja": "例: python または npx", "vi": "vd: python hoặc npx"},
"ext.args_label": {"en": "Arguments", "ja": "引数", "vi": "Tham số"},
"ext.args_placeholder": {"en": "e.g. -m nx_mcp_server", "ja": "例: -m nx_mcp_server", "vi": "vd: -m nx_mcp_server"},
"ext.base_url_label": {"en": "Base URL", "ja": "ベース URL", "vi": "Base URL"},
"ext.base_url_placeholder": {
"en": "e.g. https://cad-api.internal.company.com",
"ja": "例: https://cad-api.internal.company.com",
"vi": "vd: https://cad-api.internal.company.com"},
"ext.api_key_label": {"en": "API key", "ja": "API キー", "vi": "API key"},
"ext.auth_header_label": {"en": "Auth header name", "ja": "認証ヘッダー名", "vi": "Tên header xác thực"},
"ext.auth_scheme_label": {"en": "Auth scheme", "ja": "認証スキーム", "vi": "Auth scheme"},
"ext.test_btn": {"en": "Test connection", "ja": "接続テスト", "vi": "Kiểm tra kết nối"},
"ext.err_no_command": {
"en": "Enter a command first.", "ja": "先にコマンドを入力してください。", "vi": "Hãy nhập lệnh trước."},
"ext.test_mcp_ok": {
"en": "MCP server started and responded.", "ja": "MCP サーバーが起動し応答しました。",
"vi": "MCP server đã khởi chạy và phản hồi."},
"settings.sec_enabled": {
"en": "Enable AI-assisted agent security guardrails",
"ja": "AI 支援のエージェント セキュリティ ガードレールを有効化",
"vi": "Bật các lớp bảo mật agent có AI hỗ trợ"},
"settings.sec_hint": {
"en": "Three independent layers: an AI reviews the user's request and "
"attachment content against the rules below before the agent "
"acts, and a whitelist + AI control-agent checks every "
"run_command/install_package call. A violation always blocks "
"the action and emails the admin below. Each AI check fails "
"OPEN (allows) if the model itself can't be reached — a gateway "
"hiccup must never make the agent unusable.",
"ja": "3つの独立した層があります:エージェントが行動する前に、AI がユーザーの"
"リクエストと添付ファイルの内容を下記のルールと照合してチェックし、"
"ホワイトリストと AI コントロールエージェントがすべての "
"run_command/install_package 呼び出しをチェックします。違反時は常に"
"操作をブロックし、下記の管理者にメールで通知します。各 AI チェックは"
"モデルに到達できない場合は「許可」側に倒れます(フェイルオープン)— "
"ゲートウェイの一時的な不調でエージェントが使えなくなることがあっては"
"なりません。",
"vi": "Ba lớp độc lập: AI kiểm tra yêu cầu của người dùng và nội dung file "
"đính kèm theo các rule bên dưới TRƯỚC khi agent hành động, và một "
"whitelist + AI control-agent kiểm tra mọi lệnh run_command/"
"install_package. Vi phạm sẽ luôn CHẶN hành động và gửi email cho "
"admin bên dưới. Mỗi lớp kiểm tra bằng AI sẽ MẶC ĐỊNH CHO PHÉP nếu "
"không gọi được model — một sự cố gateway tạm thời không được phép "
"làm agent ngừng hoạt động."},
"settings.sec_validate_prompt": {
"en": "Validate the user's request (prompt) before acting",
"ja": "行動する前にユーザーのリクエスト(プロンプト)を検証",
"vi": "Validate yêu cầu (prompt) của người dùng trước khi hành động"},
"settings.sec_validate_attachments": {
"en": "Scan attachment/file content for malicious payloads",
"ja": "添付/ファイルの内容に悪意あるペイロードがないかスキャン",
"vi": "Scan nội dung file đính kèm để phát hiện nội dung độc hại"},
"settings.sec_validate_commands": {
"en": "Check run_command / install_package against a whitelist",
"ja": "run_command / install_package をホワイトリストと照合",
"vi": "Kiểm tra run_command / install_package theo whitelist"},
"settings.sec_command_ai_check": {
"en": "Also let an AI control-agent judge commands not covered by the whitelist",
"ja": "ホワイトリストに含まれないコマンドは AI コントロールエージェントにも判定させる",
"vi": "Cho AI control-agent xét thêm các lệnh whitelist chưa liệt kê"},
"settings.sec_whitelist_label": {"en": "Command whitelist", "ja": "コマンド ホワイトリスト", "vi": "Whitelist lệnh"},
"settings.sec_whitelist_placeholder": {
"en": "One regex pattern per line, e.g. ^pip install\\n^pytest\\n^git ",
"ja": "1行に1つの正規表現、例: ^pip install\\n^pytest\\n^git ",
"vi": "Mỗi dòng 1 regex, vd: ^pip install\\n^pytest\\n^git "},
"settings.sec_whitelist_empty_warning": {
"en": "Empty whitelist + AI check off = every command is BLOCKED "
"(fail-closed) — add a pattern above or turn AI check back on.",
"ja": "ホワイトリストが空でAIチェックも無効の場合、すべてのコマンドが"
"ブロックされます(フェイルクローズ)。上にパターンを追加するか"
"AIチェックを再度有効にしてください。",
"vi": "Whitelist trống + tắt AI-check = MỌI lệnh sẽ bị CHẶN hết "
"(fail-closed) — hãy thêm pattern ở trên hoặc bật lại AI-check."},
"settings.sec_onedrive_label": {"en": "OneDrive rules link", "ja": "OneDrive ルールへのリンク", "vi": "Link OneDrive chứa rule"},
"settings.sec_onedrive_placeholder": {
"en": "(optional) sharing link to an admin-authored .md rules document",
"ja": "(任意)管理者が作成した .md ルール文書への共有リンク",
"vi": "(tuỳ chọn) link chia sẻ tới file .md rule do admin soạn"},
"settings.sec_admin_email_label": {"en": "Admin email", "ja": "管理者メール", "vi": "Email admin"},
"settings.sec_admin_email_placeholder": {
"en": "admin@yourcompany.com — receives violation alerts via Microsoft 365",
"ja": "admin@yourcompany.com — Microsoft 365 経由で違反アラートを受信",
"vi": "admin@yourcompany.com — nhận cảnh báo vi phạm qua Microsoft 365"},
"settings.sec_rules_path_hint": {
"en": "Local admin rules file (optional, edited directly, always applied): {path}",
"ja": "ローカルの管理者ルールファイル(任意・直接編集・常に適用): {path}",
"vi": "File rule admin cục bộ (tuỳ chọn, sửa trực tiếp, luôn được áp dụng): {path}"},
"settings.group.history": {"en": "Conversation history", "ja": "会話履歴", "vi": "Lịch sử hội thoại"},
"settings.history_local": {"en": "Local (this PC)", "ja": "ローカル(このPC)", "vi": "Local (máy này)"},
"settings.history_onedrive": {"en": "OneDrive", "ja": "OneDrive", "vi": "OneDrive"},
"settings.location": {"en": "Location", "ja": "保存先", "vi": "Nơi lưu"},
"settings.folder": {"en": "Folder", "ja": "フォルダ", "vi": "Thư mục"},
"settings.folder_placeholder": {
"en": "(optional) specific folder — leave empty for default",
"ja": "(任意)特定のフォルダ ― 空欄で既定値",
"vi": "(tuỳ chọn) thư mục cụ thể — để trống dùng mặc định"},
"settings.browse": {"en": "Browse…", "ja": "参照…", "vi": "Duyệt…"},
"settings.autosave": {"en": "Auto-save history after each turn", "ja": "各ターン後に履歴を自動保存", "vi": "Tự động lưu lịch sử sau mỗi lượt"},
"settings.group.cowork": {"en": "Cowork", "ja": "Cowork", "vi": "Cowork"},
"settings.max_parallel": {"en": "Max parallel conversations", "ja": "同時実行する会話数の上限", "vi": "Số hội thoại chạy song song tối đa"},
"settings.parallel_suffix": {"en": " conversations at once", "ja": " 件を同時実行", "vi": " hội thoại cùng lúc"},
"settings.parallel_tooltip": {
"en": ("How many conversations run in parallel. Within one conversation messages always "
"run one at a time (queued); only different conversations run in parallel."),
"ja": ("並列実行する会話数です。1つの会話内のメッセージは常に1件ずつ(キュー)実行され、"
"異なる会話同士のみ並列に実行されます。"),
"vi": ("Số cuộc trò chuyện chạy song song. Trong MỘT cuộc trò chuyện, tin nhắn luôn "
"chạy lần lượt (xếp hàng) để không bị trộn lẫn; chỉ các cuộc trò chuyện khác "
"nhau mới chạy song song.")},
"settings.group.attachments": {"en": "Attachments", "ja": "添付ファイル", "vi": "Tệp đính kèm"},
"settings.max_files": {"en": "Max files", "ja": "最大ファイル数", "vi": "Số tệp tối đa"},
"settings.max_files_suffix": {"en": " files / message", "ja": " 件 / メッセージ", "vi": " tệp / tin nhắn"},
"settings.max_files_tooltip": {
"en": "Maximum number of files attachable to one message.",
"ja": "1メッセージに添付できるファイル数の上限。",
"vi": "Số tệp tối đa đính kèm vào một tin nhắn."},
"settings.max_per_file": {"en": "Max per file", "ja": "ファイルあたりの上限", "vi": "Giới hạn mỗi tệp"},
"settings.max_per_file_suffix": {"en": " K tokens / file", "ja": " Kトークン / ファイル", "vi": " K tokens / tệp"},
"settings.max_per_file_tooltip": {
"en": ("Limits how much of each attached file's content is added to the prompt; anything "
"beyond this is truncated (fewer tokens, avoids exceeding the context limit)."),
"ja": "各添付ファイルの内容をプロンプトに含める量の上限。超過分は切り捨てられます(トークン削減、コンテキスト超過回避)。",
"vi": ("Giới hạn nội dung mỗi tệp đính kèm đưa vào prompt; phần vượt sẽ bị cắt "
"(giảm token, tránh lỗi vượt context).")},
"settings.group.structure": {"en": "GraphRAG", "ja": "GraphRAG", "vi": "GraphRAG"},
"settings.group.sandbox_limits": {"en": "Sandbox resource limits", "ja": "サンドボックスのリソース上限",
"vi": "Giới hạn tài nguyên Sandbox"},
"settings.max_nodes": {"en": "Max nodes", "ja": "最大ノード数", "vi": "Số node tối đa"},
"settings.unlimited": {"en": "Unlimited", "ja": "無制限", "vi": "Không giới hạn"},
"settings.nodes_suffix": {"en": " nodes", "ja": " ノード", "vi": " node"},
"settings.nodes_tooltip": {
"en": ("Cap the number of nodes in the Structure graph (0 = unlimited). "
"A lower cap speeds up scanning/layout for large folders."),
"ja": "構造グラフのノード数上限(0=無制限)。大きなフォルダでは低い値の方が高速です。",
"vi": "Giới hạn số node trong đồ thị Cấu trúc (0 = không giới hạn). Giá trị thấp hơn giúp quét/vẽ nhanh hơn với thư mục lớn."},
"settings.max_edges": {"en": "Max edges", "ja": "最大エッジ数", "vi": "Số cạnh tối đa"},
"settings.edges_suffix": {"en": " edges", "ja": " エッジ", "vi": " cạnh"},
"settings.edges_tooltip": {
"en": "Cap the number of edges in the Structure graph (0 = unlimited).",
"ja": "構造グラフのエッジ数上限(0=無制限)。",
"vi": "Giới hạn số cạnh trong đồ thị Cấu trúc (0 = không giới hạn)."},
"settings.tip": {
"en": "Tip: set your Internal Gateway URL + API key above, then pick a model.",
"ja": "ヒント: 上で社内ゲートウェイの URL と API キーを設定してからモデルを選んでください。",
"vi": "Mẹo: điền URL Gateway nội bộ + API key ở trên, rồi chọn model."},
"settings.loading_models": {"en": "Loading models…", "ja": "モデルを読み込み中…", "vi": "Đang tải danh sách model…"},
"settings.loaded_models": {
"en": "Loaded {n} model(s) for {provider}.", "ja": "{provider} のモデルを {n} 件読み込みました。",
"vi": "Đã tải {n} model cho {provider}."},
"settings.load_failed": {"en": "Load failed: {err}", "ja": "読み込み失敗: {err}", "vi": "Tải thất bại: {err}"},
"settings.load_models_error": {
"en": "No models loaded — {err}", "ja": "モデルを読み込めませんでした — {err}",
"vi": "Không tải được model nào — {err}"},
"settings.load_models_error_unknown": {
"en": "unknown error (check base URL / API key / network).",
"ja": "不明なエラー(URL・APIキー・ネットワークを確認)。",
"vi": "lỗi không xác định (kiểm tra base URL / API key / kết nối mạng)."},
"settings.test_connection": {"en": "Test connection", "ja": "接続テスト", "vi": "Test kết nối"},
"settings.test_connection_tooltip": {
"en": "Check connectivity to this provider right now and show the real reason if it fails.",
"ja": "このプロバイダーへの接続を今すぐ確認し、失敗した場合は本当の理由を表示します。",
"vi": "Kiểm tra kết nối tới provider này ngay và hiện lý do thật nếu thất bại."},
}