Files
cowork-local/i18n/cowork_tab.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

343 lines
27 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 cowork_tab.
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]] = {
"dashboard.estimated_note": {
"en": "~{pct}% of turns are estimated (~4 chars/token) — the gateway didn't report exact usage.",
"ja": "約{pct}%のターンは推定値(約4文字/トークン)です。",
"vi": "~{pct}% lượt là ước tính (~4 ký tự/token) — gateway không trả về usage chính xác."},
"dashboard.ai_analyze_btn": {"en": "AI analyze", "ja": "AI分析", "vi": "AI phân tích"},
"dashboard.ai_analyzing": {"en": "Analyzing…", "ja": "分析中…", "vi": "Đang phân tích…"},
"dashboard.ai_analyze_tooltip": {
"en": "AI reviews the aggregated numbers (never your prompt contents) and suggests how to prompt better and spend fewer tokens.",
"ja": "集計値のみをAIがレビューし(プロンプト内容は送信しません)、トークン削減のコツを提案します。",
"vi": "AI xem các con số tổng hợp (không gửi nội dung prompt) và gợi ý cách viết prompt tốt hơn, tốn ít token hơn."},
"dashboard.ai_advice_title": {
"en": "AI recommendations", "ja": "AIの提案", "vi": "Khuyến nghị từ AI"},
"dashboard.period_tooltip": {
"en": "Time range for all numbers on this page.", "ja": "このページ全体の集計期間。",
"vi": "Khoảng thời gian tính mọi con số trên trang này."},
"dashboard.source_tooltip": {
"en": "Filter by one task/session, or all.", "ja": "タスク/セッション単位で絞り込み。",
"vi": "Lọc theo 1 task/phiên, hoặc tất cả."},
"dashboard.currency_tooltip": {
"en": "Display currency (rates: fixed USD→VND/JPY, editable in config).",
"ja": "表示通貨(USD→VND/JPYの固定レート、configで変更可)。",
"vi": "Tiền tệ hiển thị (tỉ giá USD→VND/JPY cố định, sửa được trong config)."},
"dashboard.price_in_tooltip": {
"en": "USD per 1M input tokens (your gateway's price).",
"ja": "入力100万トークンあたりのUSD単価。", "vi": "USD cho 1 triệu token input (giá của gateway bạn dùng)."},
"dashboard.price_out_tooltip": {
"en": "USD per 1M output tokens.", "ja": "出力100万トークンあたりのUSD単価。",
"vi": "USD cho 1 triệu token output."},
"dashboard.price_cache_tooltip": {
"en": "USD per 1M cached tokens.", "ja": "キャッシュ100万トークンあたりのUSD単価。",
"vi": "USD cho 1 triệu token cache."},
# ---- cowork_tab.py -------------------------------------------------
"cowork.title": {"en": "Cowork", "ja": "Cowork", "vi": "Cowork"},
"cowork.skills_btn": {"en": "Skills", "ja": "スキル", "vi": "Skills"},
"cowork.skills_tooltip": {
"en": "Add / manage skills the agent follows (or type /skill).",
"ja": "エージェントが従うスキルを追加/管理(/skill と入力も可)。",
"vi": "Thêm/quản lý skill mà agent tuân theo (hoặc gõ /skill)."},
"cowork.new_chat": {"en": "New chat", "ja": "新しいチャット", "vi": "Cuộc trò chuyện mới"},
"cowork.assistant_title": {"en": "Internal Agent", "ja": "内部エージェント", "vi": "Internal Agent"},
"cowork.project_label": {"en": "{name}", "ja": "{name}", "vi": "{name}"},
"cowork.project_tooltip": {
"en": "This thread belongs to project “{name}” — its shared instructions and workspace apply. Manage projects in the Workspace screen.",
"ja": "このスレッドはプロジェクト「{name}」に属します — 共有指示とワークスペースが適用されます。プロジェクトはワークスペース画面で管理できます。",
"vi": "Thread này thuộc project “{name}” — instructions chung và workspace của project được áp dụng. Quản lý project trong màn hình Workspace.",
},
"cowork.pick_folder_btn": {"en": "Local folder…",
"ja": "ローカルフォルダ…",
"vi": "Thư mục Local…"},
"cowork.pick_folder_tooltip": {
"en": "Save Cowork's output directly into a folder you choose, instead of "
"auto-creating a new session folder under Output.",
"ja": "Output 配下に新しいセッションフォルダを自動作成する代わりに、選んだフォルダに直接保存します。",
"vi": "Lưu output của Cowork trực tiếp vào thư mục bạn chọn, thay vì tự tạo "
"folder phiên mới trong Output."},
"cowork.pick_folder_title": {"en": "Choose the Cowork output folder",
"ja": "Cowork の出力フォルダを選択",
"vi": "Chọn thư mục output cho Cowork"},
# ---- code_tab.py -----------------------------------------------
"code.title": {"en": "Code", "ja": "Code", "vi": "Code"},
"code.files_header": {"en": "Files", "ja": "ファイル", "vi": "Files"},
"code.collapse_file_panel": {
"en": "Collapse the file panel", "ja": "ファイルパネルを折りたたむ", "vi": "Thu gọn bảng cây thư mục"},
"code.expand_file_panel": {
"en": "Click to expand the file panel", "ja": "クリックしてファイルパネルを展開",
"vi": "Bấm để mở lại bảng cây thư mục"},
"code.local_btn": {"en": "Local…", "ja": "ローカル…", "vi": "Local…"},
"code.onedrive_btn": {"en": "OneDrive", "ja": "OneDrive", "vi": "OneDrive"},
"code.onedrive_badge": {"en": "OneDrive", "ja": "OneDrive", "vi": "OneDrive"},
"code.auto_run": {"en": "Auto-run", "ja": "自動実行", "vi": "Tự động"},
"code.auto_run_tooltip": {
"en": "On: agent writes files / runs commands automatically. Off: ask before each action.",
"ja": "オン:エージェントが自動でファイル書き込み/コマンド実行。オフ:毎回確認します。",
"vi": "Bật: agent tự ghi file/chạy lệnh. Tắt: hỏi xác nhận trước mỗi thao tác."},
"code.skills_tooltip": {
"en": "Add / set skills for the agent to follow (or type /skill).",
"ja": "エージェントが従うスキルを追加/設定(/skill と入力も可)。",
"vi": "Thêm/đặt skill mà agent tuân theo (hoặc gõ /skill)."},
"code.flow_chk": {"en": "Flow", "ja": "フロー", "vi": "Flow"},
"code.flow_chk_tooltip": {
"en": "Enable the predefined Req→Demo flow feature (off by default).",
"ja": "定義済みの Req→Demo フロー機能を有効化(初期値はオフ)。",
"vi": "Bật tính năng Flow Req→Demo dựng sẵn (mặc định tắt)."},
"code.flow_btn": {"en": "Flow Management", "ja": "Flow Management", "vi": "Flow Management"},
"code.flow_btn_tooltip": {
"en": "Build and run a multi-stage flow from requirement to demo.",
"ja": "要件からデモまでの多段フローを作成・実行します。",
"vi": "Xây dựng và chạy quy trình nhiều bước từ yêu cầu đến bản demo."},
"code.new_session": {"en": "New session", "ja": "新しいセッション", "vi": "Phiên mới"},
"code.cli_tooltip": {
"en": "Open a terminal (CLI) at the current working folder",
"ja": "現在の作業フォルダでターミナル(CLI)を開く",
"vi": "Mở CLI (terminal) tại thư mục làm việc hiện tại"},
"code.cli_not_found": {
"en": "No terminal application was found on this system.",
"ja": "このシステムにはターミナルアプリが見つかりませんでした。",
"vi": "Không tìm thấy ứng dụng terminal nào trên máy này."},
"code.skills_btn_count": {"en": "Skills ({n})", "ja": "スキル ({n})", "vi": "Skills ({n})"},
"code.assistant_title": {"en": "Code agent", "ja": "Code エージェント", "vi": "Code agent"},
"code.plan": {"en": "Plan", "ja": "プラン", "vi": "Plan"},
"code.act": {"en": "Act", "ja": "実行", "vi": "Act"},
"code.mode_toggle_tooltip": {
"en": "Plan = analyze only (no file writes). Act = execute. Auto-switches to Act on gencode.",
"ja": "Plan=分析のみ(書き込みなし)。Act=実行。コード生成指示で自動的に Act に切替。",
"vi": "Plan = chỉ phân tích (không ghi file). Act = thực thi. Tự chuyển sang Act khi phát hiện yêu cầu sinh code."},
"code.act_status": {"en": "Code: Act mode (executes).", "ja": "Code: Act モード(実行)。", "vi": "Code: chế độ Act (thực thi)."},
"code.plan_status": {"en": "Code: Plan mode (analyze only).", "ja": "Code: Plan モード(分析のみ)。", "vi": "Code: chế độ Plan (chỉ phân tích)."},
"code.cloud_sync_suffix": {"en": " — files sync to cloud", "ja": " — クラウドに同期", "vi": " — file sẽ đồng bộ lên cloud"},
"code.mode_auto_status": {"en": "Code: Auto-run mode.", "ja": "Code: 自動実行モード。", "vi": "Code: chế độ Tự động."},
"code.mode_confirm_status": {"en": "Code: Confirm mode.", "ja": "Code: 確認モード。", "vi": "Code: chế độ Xác nhận."},
"code.pick_local_title": {"en": "Choose working folder (Local)", "ja": "作業フォルダを選択(ローカル)", "vi": "Chọn thư mục làm việc (Local)"},
"code.pick_onedrive_title": {"en": "Choose a folder in OneDrive", "ja": "OneDrive 内のフォルダを選択", "vi": "Chọn thư mục trong OneDrive"},
"code.onedrive_choose_folder": {
"en": "Choose a folder in OneDrive…", "ja": "OneDrive 内のフォルダを選択…", "vi": "Chọn thư mục trong OneDrive…"},
"code.no_onedrive": {"en": "No OneDrive detected", "ja": "OneDrive が見つかりません", "vi": "Không phát hiện OneDrive"},
"code.flow_running": {
"en": "Running flow '{name}' (Act) — {n} stages.",
"ja": "フロー「{name}」を実行中(Act)— {n} ステージ。",
"vi": "Đang chạy flow '{name}' (Act) — {n} bước."},
# ---- settings_dialog.py --------------------------------------------
"settings.title": {"en": "Settings", "ja": "設定", "vi": "Cài đặt"},
"settings.active_provider": {"en": "Active provider", "ja": "使用中のプロバイダー", "vi": "Nhà cung cấp đang dùng"},
"settings.theme": {"en": "Theme", "ja": "テーマ", "vi": "Giao diện"},
"settings.theme_dark": {"en": "Dark", "ja": "ダーク", "vi": "Tối"},
"settings.theme_light": {"en": "Light", "ja": "ライト", "vi": "Sáng"},
"settings.theme_system": {"en": "Auto (System)", "ja": "自動(システム)", "vi": "Tự động (theo hệ thống)"},
"settings.language": {"en": "Language", "ja": "言語", "vi": "Ngôn ngữ"},
"settings.tray_keep": {
"en": "Keep running in the system tray when the window is closed",
"ja": "ウィンドウを閉じてもシステムトレイで実行を継続",
"vi": "Giữ chạy nền trong khay hệ thống khi đóng cửa sổ"},
"settings.tray_notify": {
"en": "Show a tray notification when a task finishes or fails",
"ja": "タスク完了/失敗時にトレイ通知を表示",
"vi": "Hiện thông báo khay hệ thống khi tác vụ xong hoặc lỗi"},
"settings.group.openai": {"en": "OpenAI-compatible (Internal Gateway)", "ja": "OpenAI 互換(社内ゲートウェイ)", "vi": "OpenAI-compatible (Gateway nội bộ)"},
"settings.group.anthropic": {"en": "Anthropic Claude", "ja": "Anthropic Claude", "vi": "Anthropic Claude"},
# Name for the language/tray block at the top of Settings — it had none,
# because until the index existed nothing had to refer to it.
"settings.group.general": {"en": "General", "ja": "一般", "vi": "Chung"},
"settings.group.provider": {"en": "AI Provider", "ja": "AI プロバイダー", "vi": "Nhà cung cấp AI"},
"settings.group.parameter": {"en": "Parameter", "ja": "Parameter", "vi": "Parameter"},
"settings.param_section_pricing": {
"en": "Model pricing", "ja": "モデル価格", "vi": "Bảng giá model"},
"settings.pricing_url_label": {
"en": "Pricing reference link", "ja": "価格表の参考リンク", "vi": "Link bảng giá tham khảo"},
"settings.pricing_url_placeholder": {
"en": "https://… (the provider's public price list)",
"ja": "https://…(プロバイダーの公開価格表)",
"vi": "https://… (trang bảng giá công khai của provider)"},
"settings.pricing_url_tooltip": {
"en": "Shown as a reference link beside the Monitoring pricing table. Prices themselves are entered by hand in that table.",
"ja": "監視画面の価格表の横に参考リンクとして表示されます。価格自体は表に手入力します。",
"vi": "Hiển thị làm link tham khảo cạnh bảng giá trong Monitoring. Giá vẫn do Admin nhập tay vào bảng."},
"settings.group.accounts": {
"en": "Shared accounts folder", "ja": "共有アカウントフォルダー", "vi": "Thư mục tài khoản dùng chung"},
"settings.accounts_dir_label": {"en": "Folder", "ja": "フォルダー", "vi": "Thư mục"},
"settings.accounts_dir_placeholder": {
"en": "OneDrive/network folder holding the shared accounts & groups",
"ja": "アカウント/グループを保存する OneDrive・共有フォルダー",
"vi": "Thư mục OneDrive/mạng chứa danh sách tài khoản & nhóm dùng chung"},
"settings.accounts_dir_hint": {
"en": "Where accounts, groups and shared telemetry live. Every machine must point at the SAME folder.",
"ja": "アカウント・グループ・共有テレメトリの保存先。全マシンで同じフォルダーを指定してください。",
"vi": "Nơi lưu tài khoản, nhóm và telemetry dùng chung. Mọi máy phải trỏ về CÙNG một thư mục."},
"settings.accounts_dir_admin_only": {
"en": "Only an Admin can change this folder.",
"ja": "このフォルダーを変更できるのは管理者のみです。",
"vi": "Chỉ Admin mới thay đổi được thư mục này."},
"settings.group.monitoring_visibility": {
"en": "Monitoring tab visibility (Sub-admin)", "ja": "モニタリングタブの表示(サブ管理者)",
"vi": "Hiển thị tab Monitoring (Sub-admin)"},
"settings.mv_security_events": {"en": "Security Events", "ja": "セキュリティイベント",
"vi": "Security Events"},
"settings.mv_mcp_history": {"en": "MCP Call History", "ja": "MCP 呼び出し履歴", "vi": "MCP Call History"},
"settings.mv_action_logs": {"en": "Action Logs", "ja": "アクションログ", "vi": "Action Logs"},
"settings.mv_agent_status": {"en": "Agent Status", "ja": "エージェント状態", "vi": "Trạng thái Agent"},
"settings.mv_hint": {
"en": "Admin always sees every Monitoring tab. Turn one off here to hide it from Sub-admin too (it stays available to Admin).",
"ja": "管理者は常にすべてのタブを見られます。ここでオフにすると、そのタブはサブ管理者からも隠されます(管理者には影響しません)。",
"vi": "Admin luôn thấy mọi tab Monitoring. Tắt một mục ở đây sẽ ẩn tab đó với Sub-admin (Admin vẫn thấy như thường)."},
"settings.sec_unlock_user_placeholder": {
"en": "Admin account", "ja": "管理者アカウント", "vi": "Tài khoản admin"},
"settings.sec_unlock_code_placeholder": {
"en": "Access code", "ja": "アクセスコード", "vi": "Mã truy cập"},
"settings.sec_unlock_btn": {"en": "Unlock", "ja": "ロック解除", "vi": "Mở khóa"},
"settings.sec_locked_hint": {
"en": "Locked — enter an Admin account + access code to change these settings.",
"ja": "ロック中 — 変更するには管理者アカウントとアクセスコードを入力してください。",
"vi": "Đang khóa — nhập tài khoản Admin + mã truy cập để thay đổi các thiết lập này."},
"settings.sec_unlocked_hint": {
"en": "Unlocked — changes will be saved; the group locks again after Save.",
"ja": "ロック解除中 — 保存後に再びロックされます。",
"vi": "Đã mở khóa — thay đổi sẽ được lưu; nhóm sẽ tự khóa lại sau khi Save."},
"settings.sec_unlock_failed": {
"en": "Not an Admin account (or wrong code / accounts folder unreachable).",
"ja": "管理者アカウントではありません(またはコード誤り・フォルダー未接続)。",
"vi": "Không phải tài khoản Admin (hoặc sai mã / không truy cập được thư mục tài khoản)."},
"settings.sec_no_lock_hint": {
"en": "No shared accounts folder configured yet — the group is editable without an admin unlock.",
"ja": "共有アカウントフォルダー未設定のため、ロックなしで編集できます。",
"vi": "Chưa cấu hình thư mục tài khoản dùng chung — nhóm này đang chỉnh sửa được mà không cần mở khóa."},
"settings.base_url": {"en": "Base URL", "ja": "ベース URL", "vi": "Base URL"},
"settings.api_key": {"en": "API Key", "ja": "API キー", "vi": "API Key"},
"settings.model": {"en": "Model", "ja": "モデル", "vi": "Model"},
"settings.load": {"en": "Load", "ja": "読み込み", "vi": "Tải"},
"settings.load_tooltip": {
"en": "Fetch the available models/agents from this provider",
"ja": "このプロバイダーから利用可能なモデル/エージェントを取得",
"vi": "Lấy danh sách model/agent khả dụng từ nhà cung cấp này"},
"settings.group.teams": {"en": "Microsoft Teams", "ja": "Microsoft Teams", "vi": "Microsoft Teams"},
"settings.teams_webhook": {"en": "Webhook URL", "ja": "Webhook URL", "vi": "Webhook URL"},
"settings.teams_webhook_placeholder": {
"en": "https://… (Workflows or Incoming Webhook URL)",
"ja": "https://…(Workflows または Incoming Webhook の URL)",
"vi": "https://… (URL của Workflows hoặc Incoming Webhook)"},
"settings.teams_test": {"en": "Test", "ja": "テスト", "vi": "Kiểm tra"},
"settings.teams_notify": {
"en": "Auto-send to Teams when a task completes", "ja": "タスク完了時に Teams へ自動送信",
"vi": "Tự động gửi sang Teams khi tác vụ hoàn thành"},
"settings.teams_hint": {
"en": ("Get a webhook: Teams channel → ⋯ → Connectors → Incoming Webhook, "
"OR Power Automate → 'When a HTTP request is received' → 'Post message in a chat or channel'. "
"URL must contain logic.azure.com or webhook.office.com."),
"ja": ("Webhook の取得: Teams チャンネル → ⋯ → コネクタ → Incoming Webhook、"
"または Power Automate → 'HTTP要求の受信時' → 'チャットまたはチャネルにメッセージを投稿'。"
"URL には logic.azure.com か webhook.office.com を含める必要があります。"),
"vi": ("Lấy webhook: kênh Teams → ⋯ → Connectors → Incoming Webhook, "
"HOẶC Power Automate → 'When a HTTP request is received' → 'Post message in a chat or channel'. "
"URL phải chứa logic.azure.com hoặc webhook.office.com.")},
"settings.group.ms365": {
"en": "Microsoft 365 connections", "ja": "Microsoft 365 連携",
"vi": "Kết nối Microsoft 365"},
"settings.ms365_unlock_code": {"en": "Unlock code", "ja": "解除コード", "vi": "Mã mở khóa"},
"settings.ms365_unlock_placeholder": {
"en": "Enter the unlock code", "ja": "解除コードを入力",
"vi": "Nhập mã để mở khóa"},
"settings.ms365_unlock_btn": {"en": "Unlock", "ja": "解除", "vi": "Mở khóa"},
"settings.ms365_locked_hint": {
"en": "Locked — enter the unlock code above to edit this section.",
"ja": "ロック中 — このセクションを編集するには上の解除コードを入力してください。",
"vi": "Đang khóa — nhập mã ở trên để chỉnh sửa mục này."},
"settings.ms365_unlocked_hint": {
"en": "Unlocked — remember to click Save; this section re-locks automatically afterward.",
"ja": "解除しました — 保存を忘れずに。保存後は自動的に再ロックされます。",
"vi": "Đã mở khóa — nhớ bấm Save; mục này sẽ tự khóa lại ngay sau đó."},
"settings.ms365_wrong_code": {
"en": "Wrong code.", "ja": "コードが違います。", "vi": "Mã không đúng."},
"settings.ms365_connector.outlook": {"en": "Outlook", "ja": "Outlook", "vi": "Outlook"},
"settings.ms365_connector.teams": {"en": "Teams", "ja": "Teams", "vi": "Teams"},
"settings.ms365_connector.onedrive": {"en": "OneDrive", "ja": "OneDrive", "vi": "OneDrive"},
"settings.ms365_connector.sharepoint": {"en": "SharePoint", "ja": "SharePoint", "vi": "SharePoint"},
"settings.ms365_connector.meeting_transcript": {
"en": "Meeting transcript", "ja": "会議の文字起こし", "vi": "Meeting transcript"},
"settings.ms365_allow_internet": {
"en": "Allow external internet access", "ja": "外部インターネットアクセスを許可",
"vi": "Cho phép truy cập Internet bên ngoài"},
"settings.ms365_internet_off_hint": {
"en": ("External internet access is OFF — every connector was turned off to avoid "
"leaking data outside. Turn it back on, then re-tick the connectors you want."),
"ja": ("外部インターネットアクセスがオフです — データが外部に漏れないよう、すべてのコネクタ"
"がオフになりました。再度オンにしてから、必要なコネクタを選び直してください。"),
"vi": ("Đã tắt truy cập Internet bên ngoài — mọi connector đã tự tắt để tránh rò rỉ "
"thông tin ra ngoài. Bật lại rồi tick lại từng connector muốn dùng.")},
"settings.ms365_signin_btn": {"en": "Sign in with Microsoft", "ja": "Microsoft でサインイン",
"vi": "Đăng nhập Microsoft"},
"settings.ms365_signout_btn": {"en": "Sign out", "ja": "サインアウト", "vi": "Đăng xuất"},
"settings.ms365_not_signed_in": {
"en": "Not signed in to Microsoft 365.", "ja": "Microsoft 365 にサインインしていません。",
"vi": "Chưa đăng nhập Microsoft 365."},
"settings.ms365_signed_in_as": {
"en": "Signed in as {user}", "ja": "{user} としてサインイン中",
"vi": "Đã đăng nhập với {user}"},
"settings.ms365_missing_ids": {
"en": "Enter the Tenant ID and Client ID first.", "ja": "先に Tenant ID と Client ID を入力してください。",
"vi": "Hãy nhập Tenant ID và Client ID trước."},
"settings.ms365_signing_in": {
"en": "Starting sign-in…", "ja": "サインインを開始しています…", "vi": "Đang bắt đầu đăng nhập…"},
"settings.ms365_signin_failed": {
"en": "Sign-in failed: {err}", "ja": "サインインに失敗しました: {err}",
"vi": "Đăng nhập thất bại: {err}"},
"settings.ms365_teams_link_label": {
"en": "Or just paste a Teams channel/chat link — no ID needed:",
"ja": "または Teams のチャネル/チャットのリンクを貼り付けるだけ — ID は不要です:",
"vi": "Hoặc chỉ cần paste link kênh/chat Teams — không cần ID:"},
"settings.ms365_teams_link_placeholder": {
"en": "Paste a link from Teams ('Get link to channel' or a message's 'Copy link')",
"ja": "Teams のリンクを貼り付け(「チャネルへのリンクを取得」またはメッセージの「リンクをコピー」)",
"vi": "Dán link từ Teams ('Get link to channel' hoặc 'Copy link' của 1 tin nhắn)"},
"settings.ms365_teams_connect_btn": {"en": "Connect", "ja": "接続", "vi": "Kết nối"},
"settings.ms365_teams_not_connected": {
"en": "No Teams chat/channel connected yet.", "ja": "Teams のチャット/チャネルはまだ接続されていません。",
"vi": "Chưa kết nối chat/kênh Teams nào."},
"settings.ms365_teams_connected_channel": {
"en": "Connected to a Teams channel.", "ja": "Teams のチャネルに接続済みです。",
"vi": "Đã kết nối vào một kênh Teams."},
"settings.ms365_teams_connected_chat": {
"en": "Connected to a Teams chat.", "ja": "Teams のチャットに接続済みです。",
"vi": "Đã kết nối vào một đoạn chat Teams."},
"settings.ms365_teams_link_missing": {
"en": "Paste a Teams link first.", "ja": "先に Teams のリンクを貼り付けてください。",
"vi": "Hãy dán link Teams trước."},
"settings.ms365_teams_connecting": {
"en": "Connecting…", "ja": "接続しています…", "vi": "Đang kết nối…"},
"settings.ms365_teams_connect_failed": {
"en": "Connect failed: {err}", "ja": "接続に失敗しました: {err}",
"vi": "Kết nối thất bại: {err}"},
"settings.ms365_teams_intro_message": {
"en": "Hi, I'm the Cowork agent — just connected to this chat/channel.",
"ja": "こんにちは、Cowork エージェントです — このチャット/チャネルに接続しました。",
"vi": "Xin chào, mình là Cowork agent — vừa kết nối vào chat/kênh này."},
"settings.group.agent_security": {
"en": "Agent Security (AI)", "ja": "エージェント セキュリティ(AI)",
"vi": "Agent Security (AI)"},
"settings.group.sandbox": {
"en": "Sandbox Security Layer", "ja": "サンドボックス セキュリティ層",
"vi": "Sandbox Security Layer"},
"settings.sandbox_confirm_commands": {
"en": "Confirm before Cowork runs a command",
"ja": "Cowork がコマンドを実行する前に確認する",
"vi": "Xác nhận trước khi Cowork chạy lệnh"},
"settings.sandbox_confirm_commands_tooltip": {
"en": ("Shows an Approve/Reject dialog before run_command/install_package "
"executes in Cowork — off by default (auto-run), same as before."),
"ja": "Cowork で run_command/install_package を実行する前に承認/拒否ダイアログを表示します — "
"デフォルトはオフ(自動実行)で、これまでと同じです。",
"vi": "Hiện hộp thoại Duyệt/Từ chối trước khi Cowork chạy run_command/install_package — "
"mặc định tắt (tự chạy), giống hành vi cũ."},
}