From 7bcbb63253f6e27d848aa79f1a5e5c32e8b7f30c Mon Sep 17 00:00:00 2001 From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com> Date: Wed, 30 Sep 2026 13:29:09 -0700 Subject: [PATCH 01/10] Cloud: 5 VMs per seat, 4 vCPU/8 GB on Pro, 16 vCPU/32 GB on Max Freestyle priced the paid allowance as 5 VMs per user at 4 vCPU / 8 GB each. Pro, Team (per seat), and Founder's now allow 5 active machines up to 8 GB; Max allows 5 active machines up to 32 GB. The 64 GB row leaves the sellable ladder, and the resize vCPU ceiling follows the image ladder (one vCPU per 2 GB) instead of one per 4 GB. Pricing, docs, native pricing, and the Mac client's fallback size mirror describe per-VM resources instead of the retired shared pool. Co-Authored-By: Claude Opus 5.5 (1M context) --- Resources/Localizable.xcstrings | 172 +++++++++--------- Sources/Cloud/MachinesPanelView.swift | 2 +- Sources/Cloud/NewMachineModel.swift | 12 +- Sources/PricingPlansScreen.swift | 24 +-- cmuxTests/NewMachineModelTests.swift | 52 +++--- skills/cmux-billing/SKILL.md | 2 +- .../(landing)/docs/cloud/machines/page.tsx | 5 +- web/messages/ar.json | 14 +- web/messages/bs.json | 14 +- web/messages/da.json | 14 +- web/messages/de.json | 14 +- web/messages/en.json | 46 ++--- web/messages/es.json | 14 +- web/messages/fr.json | 14 +- web/messages/it.json | 14 +- web/messages/ja.json | 46 ++--- web/messages/km.json | 14 +- web/messages/ko.json | 14 +- web/messages/no.json | 14 +- web/messages/pl.json | 14 +- web/messages/pt-BR.json | 14 +- web/messages/ru.json | 14 +- web/messages/th.json | 14 +- web/messages/tr.json | 14 +- web/messages/uk.json | 14 +- web/messages/zh-CN.json | 14 +- web/messages/zh-TW.json | 14 +- web/services/billing/plans.ts | 4 +- web/services/billing/pro.ts | 4 +- web/services/vms/README.md | 6 +- web/services/vms/entitlements.ts | 24 ++- web/services/vms/machineSpec.ts | 4 +- web/services/vms/routeHelpers.ts | 2 +- web/tests/app-pricing-page.test.tsx | 4 +- web/tests/billing-max-plan.test.ts | 6 +- web/tests/pricing-page.test.tsx | 12 +- web/tests/pro-pricing.test.ts | 91 +++++---- web/tests/vm-billing-limit-paywall.test.ts | 83 +++++---- web/tests/vm-independent-limits.test.ts | 8 +- web/tests/vm-resize-route.test.ts | 14 +- web/tests/vm-route-auth.test.ts | 18 +- 41 files changed, 448 insertions(+), 445 deletions(-) diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 291fb553db38..854348bd0db9 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -269285,19 +269285,19 @@ "en": { "stringUnit": { "state": "translated", - "value": "50" + "value": "5" } }, "ja": { "stringUnit": { "state": "translated", - "value": "50" + "value": "5" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "50" + "value": "5" } } } @@ -269308,55 +269308,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "50 per user" + "value": "5 per user" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ユーザーごとに 50" + "value": "ユーザーごとに 5" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "每用户 50 个" + "value": "每用户 5 个" } }, "de": { "stringUnit": { "state": "translated", - "value": "50 pro Benutzer" + "value": "5 pro Benutzer" } }, "fr": { "stringUnit": { "state": "translated", - "value": "50 par utilisateur" + "value": "5 par utilisateur" } }, "ar": { "stringUnit": { "state": "translated", - "value": "50 لكل مستخدم" + "value": "5 لكل مستخدم" } }, "es": { "stringUnit": { "state": "translated", - "value": "50 por usuario" + "value": "5 por usuario" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "每位使用者 50 個" + "value": "每位使用者 5 個" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용자당 50개" + "value": "사용자당 5개" } } } @@ -271778,55 +271778,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "Up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs" + "value": "Up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM" } }, "ja": { "stringUnit": { "state": "translated", - "value": "最大 50 台の Cloud VM で、24 GB RAM と 6 vCPU を共有" + "value": "最大 5 台の Cloud VM、各 4 vCPU と 8 GB RAM" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "最多 50 台云端虚拟机,所有虚拟机共享 24 GB 内存和 6 个虚拟 CPU" + "value": "最多 5 台云端虚拟机,每台 4 个虚拟 CPU 和 8 GB 内存" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bis zu 50 Cloud-VMs mit insgesamt 24 GB RAM und 6 vCPUs, die alle VMs gemeinsam nutzen" + "value": "Bis zu 5 Cloud-VMs mit jeweils 4 vCPUs und 8 GB RAM" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Jusqu’à 50 VM cloud, avec 24 Go de RAM et 6 vCPU partagés entre toutes les VM" + "value": "Jusqu’à 5 VM cloud, chacune avec 4 vCPU et 8 Go de RAM" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ما يصل إلى 50 جهازًا افتراضيًا سحابيًا، مع ذاكرة وصول عشوائي بسعة 24 جيجابايت و6 وحدات معالجة مركزية افتراضية مشتركة بين جميع الأجهزة" + "value": "ما يصل إلى 5 أجهزة افتراضية سحابية، لكل منها 4 وحدات معالجة مركزية افتراضية و8 جيجابايت من الذاكرة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Hasta 50 VM en la nube, con 24 GB de RAM y 6 vCPU compartidos entre todas las VM" + "value": "Hasta 5 VM en la nube, cada una con 4 vCPU y 8 GB de RAM" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "最多 50 台雲端虛擬機,所有虛擬機共用 24 GB 記憶體與 6 個虛擬 CPU" + "value": "最多 5 台雲端虛擬機,每台 4 個虛擬 CPU 與 8 GB 記憶體" } }, "ko": { "stringUnit": { "state": "translated", - "value": "최대 50개의 클라우드 VM이 RAM 24 GB와 vCPU 6개를 공유합니다" + "value": "최대 5개의 클라우드 VM, 각각 vCPU 4개와 RAM 8 GB" } } } @@ -272383,121 +272383,121 @@ "en": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." } }, "ja": { "stringUnit": { "state": "translated", - "value": "Pro では最大 50 台の Cloud VM で、24 GB RAM と 6 vCPU を共有します。Team ではユーザーごとに同じ上限が適用されます。従量課金や超過料金はありません。" + "value": "Pro には最大 5 台の Cloud VM が含まれ、各 VM に 4 vCPU と 8 GB RAM があります。Team ではユーザーごとに同じ上限が適用されます。従量課金や超過料金はありません。" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تتضمن باقة Pro ما يصل إلى 50 جهازًا افتراضيًا سحابيًا، مع ذاكرة وصول عشوائي بسعة 24 جيجابايت و6 وحدات معالجة مركزية افتراضية مشتركة بين جميع الأجهزة. وتمنح باقة Team الحدود نفسها لكل مستخدم. لا توجد فوترة حسب الاستهلاك أو رسوم إضافية لتجاوز الحدود." + "value": "تتضمن باقة Pro ما يصل إلى 5 أجهزة افتراضية سحابية، لكل منها 4 وحدات معالجة مركزية افتراضية و8 جيجابايت من الذاكرة. وتمنح باقة Team الحدود نفسها لكل مستخدم. لا توجد فوترة حسب الاستهلاك أو رسوم إضافية لتجاوز الحدود." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." } }, "da": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." } }, "de": { "stringUnit": { "state": "translated", - "value": "Pro beinhaltet bis zu 50 Cloud-VMs mit 24 GB RAM und 6 vCPUs, die von allen VMs gemeinsam genutzt werden. Team beinhaltet dieselben Limits pro Benutzer. Es gibt keine verbrauchsabhängige Abrechnung oder Nachberechnung." + "value": "Pro beinhaltet bis zu 5 Cloud-VMs mit jeweils 4 vCPUs und 8 GB RAM. Team beinhaltet dieselben Limits pro Benutzer. Es gibt keine verbrauchsabhängige Abrechnung oder Nachberechnung." } }, "es": { "stringUnit": { "state": "translated", - "value": "Pro incluye hasta 50 VM en la nube, con 24 GB de RAM y 6 vCPUs compartidos entre todas las VM. Team incluye los mismos límites por usuario. No hay facturación por consumo ni por exceso." + "value": "Pro incluye hasta 5 VM en la nube, cada una con 4 vCPU y 8 GB de RAM. Team incluye los mismos límites por usuario. No hay facturación por consumo ni por exceso." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Pro inclut jusqu'à 50 VM Cloud, avec 24 Go de RAM et 6 vCPUs partagés entre toutes les VM. Team inclut les mêmes limites par utilisateur. Il n'y a pas de facturation à l'utilisation ou de dépassement." + "value": "Pro inclut jusqu'à 5 VM Cloud, chacune avec 4 vCPU et 8 Go de RAM. Team inclut les mêmes limites par utilisateur. Il n'y a pas de facturation à l'utilisation ou de dépassement." } }, "it": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." } }, "km": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." } }, "ko": { "stringUnit": { "state": "translated", - "value": "Pro는 최대 50개의 클라우드 VM을 포함하며, 모든 VM이 RAM 24 GB와 vCPU 6개를 공유합니다. Team은 사용자마다 동일한 한도가 적용됩니다. 사용량 기반 과금이나 초과 요금은 없습니다." + "value": "Pro는 최대 5개의 클라우드 VM을 포함하며, 각 VM에 vCPU 4개와 RAM 8 GB가 있습니다. Team은 사용자마다 동일한 한도가 적용됩니다. 사용량 기반 과금이나 초과 요금은 없습니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." } }, "th": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." } }, "tr": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Pro 最多包含 50 台云端虚拟机,所有虚拟机共享 24 GB 内存和 6 个虚拟 CPU。Team 的每位用户享有相同上限。不按用量计费,也不收取超额费用。" + "value": "Pro 最多包含 5 台云端虚拟机,每台有 4 个虚拟 CPU 和 8 GB 内存。Team 的每位用户享有相同上限。不按用量计费,也不收取超额费用。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Pro 包含最多 50 台雲端虛擬機,所有虛擬機共用 24 GB 記憶體與 6 個虛擬 CPU。Team 的每位使用者享有相同上限。不按用量計費,也不收取超額費用。" + "value": "Pro 包含最多 5 台雲端虛擬機,每台有 4 個虛擬 CPU 與 8 GB 記憶體。Team 的每位使用者享有相同上限。不按用量計費,也不收取超額費用。" } } } @@ -273164,55 +273164,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "Up to 50 Cloud VMs per user, with 24 GB RAM and 6 vCPUs per user shared across all their VMs" + "value": "Up to 5 Cloud VMs per user, each with 4 vCPUs and 8 GB RAM" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ユーザーごとに最大 50 台の Cloud VM で、ユーザーあたり 24 GB RAM と 6 vCPU を共有" + "value": "ユーザーごとに最大 5 台の Cloud VM、各 4 vCPU と 8 GB RAM" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "每位用户最多 50 台云端虚拟机,该用户的所有虚拟机共享 24 GB 内存和 6 个虚拟 CPU" + "value": "每位用户最多 5 台云端虚拟机,每台 4 个虚拟 CPU 和 8 GB 内存" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bis zu 50 Cloud-VMs pro Benutzer mit jeweils insgesamt 24 GB RAM und 6 vCPUs, die alle VMs dieses Benutzers gemeinsam nutzen" + "value": "Bis zu 5 Cloud-VMs pro Benutzer mit jeweils 4 vCPUs und 8 GB RAM" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Jusqu’à 50 VM cloud par utilisateur, avec 24 Go de RAM et 6 vCPU par utilisateur partagés entre toutes ses VM" + "value": "Jusqu’à 5 VM cloud par utilisateur, chacune avec 4 vCPU et 8 Go de RAM" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ما يصل إلى 50 جهازًا افتراضيًا سحابيًا لكل مستخدم، مع ذاكرة وصول عشوائي بسعة 24 جيجابايت و6 وحدات معالجة مركزية افتراضية لكل مستخدم مشتركة بين جميع أجهزته" + "value": "ما يصل إلى 5 أجهزة افتراضية سحابية لكل مستخدم، لكل منها 4 وحدات معالجة مركزية افتراضية و8 جيجابايت من الذاكرة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Hasta 50 VM en la nube por usuario, con 24 GB de RAM y 6 vCPU por usuario compartidos entre todas sus VM" + "value": "Hasta 5 VM en la nube por usuario, cada una con 4 vCPU y 8 GB de RAM" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "每位使用者最多 50 台雲端虛擬機,該使用者的所有虛擬機共用 24 GB 記憶體與 6 個虛擬 CPU" + "value": "每位使用者最多 5 台雲端虛擬機,每台 4 個虛擬 CPU 與 8 GB 記憶體" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용자당 최대 50개의 클라우드 VM이 사용자당 RAM 24 GB와 vCPU 6개를 공유합니다" + "value": "사용자당 최대 5개의 클라우드 VM, 각각 vCPU 4개와 RAM 8 GB" } } } @@ -516555,55 +516555,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "32 GB and 64 GB machines need cmux Max." + "value": "Max includes up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM." } }, "de": { "stringUnit": { "state": "translated", - "value": "Maschinen mit 32 GB und 64 GB benötigen cmux Max." + "value": "Max beinhaltet bis zu 5 Cloud-VMs mit jeweils 16 vCPUs und 32 GB RAM." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les machines de 32 Go et 64 Go nécessitent cmux Max." + "value": "Max inclut jusqu'à 5 VM Cloud, chacune avec 16 vCPU et 32 Go de RAM." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الأجهزة ذات 32 و64 غيغابايت تتطلب cmux Max." + "value": "تتضمن باقة Max ما يصل إلى 5 أجهزة افتراضية سحابية، لكل منها 16 وحدة معالجة مركزية افتراضية و32 جيجابايت من الذاكرة." } }, "es": { "stringUnit": { "state": "translated", - "value": "Las máquinas de 32 GB y 64 GB requieren cmux Max." + "value": "Max incluye hasta 5 VM en la nube, cada una con 16 vCPU y 32 GB de RAM." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "32 GB 和 64 GB 機器需要 cmux Max。" + "value": "Max 包含最多 5 台雲端虛擬機,每台有 16 個虛擬 CPU 與 32 GB 記憶體。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "32 GB 和 64 GB 机器需要 cmux Max。" + "value": "Max 最多包含 5 台云端虚拟机,每台有 16 个虚拟 CPU 和 32 GB 内存。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "32 GB 및 64 GB 머신에는 cmux Max가 필요합니다." + "value": "Max는 최대 5개의 클라우드 VM을 포함하며, 각 VM에 vCPU 16개와 RAM 32 GB가 있습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "32 GB と 64 GB のマシンには cmux Max が必要です。" + "value": "Max には最大 5 台の Cloud VM が含まれ、各 VM に 16 vCPU と 32 GB RAM があります。" } } } @@ -517381,55 +517381,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "Up to 64 GB RAM per machine" + "value": "Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bis zu 64 GB RAM pro Maschine" + "value": "Bis zu 5 Cloud-VMs mit jeweils 16 vCPUs und 32 GB RAM" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Jusqu’à 64 Go de RAM par machine" + "value": "Jusqu’à 5 VM cloud, chacune avec 16 vCPU et 32 Go de RAM" } }, "ar": { "stringUnit": { "state": "translated", - "value": "حتى 64 غيغابايت من الذاكرة لكل جهاز" + "value": "ما يصل إلى 5 أجهزة افتراضية سحابية، لكل منها 16 وحدة معالجة مركزية افتراضية و32 جيجابايت من الذاكرة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Hasta 64 GB de RAM por máquina" + "value": "Hasta 5 VM en la nube, cada una con 16 vCPU y 32 GB de RAM" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "每台機器最高 64 GB RAM" + "value": "最多 5 台雲端虛擬機,每台 16 個虛擬 CPU 與 32 GB 記憶體" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "每台机器最高 64 GB RAM" + "value": "最多 5 台云端虚拟机,每台 16 个虚拟 CPU 和 32 GB 内存" } }, "ko": { "stringUnit": { "state": "translated", - "value": "머신당 최대 64 GB RAM" + "value": "최대 5개의 클라우드 VM, 각각 vCPU 16개와 RAM 32 GB" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マシンごとに最大 64 GB RAM" + "value": "最大 5 台の Cloud VM、各 16 vCPU と 32 GB RAM" } } } @@ -517558,55 +517558,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "64 GB RAM" + "value": "32 GB RAM" } }, "de": { "stringUnit": { "state": "translated", - "value": "64 GB Arbeitsspeicher" + "value": "32 GB Arbeitsspeicher" } }, "fr": { "stringUnit": { "state": "translated", - "value": "64 Go de RAM" + "value": "32 Go de RAM" } }, "ar": { "stringUnit": { "state": "translated", - "value": "64 غيغابايت من الذاكرة" + "value": "32 غيغابايت من الذاكرة" } }, "es": { "stringUnit": { "state": "translated", - "value": "64 GB de RAM" + "value": "32 GB de RAM" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "64 GB 記憶體" + "value": "32 GB 記憶體" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "64 GB 内存" + "value": "32 GB 内存" } }, "ko": { "stringUnit": { "state": "translated", - "value": "64 GB 메모리" + "value": "32 GB 메모리" } }, "ja": { "stringUnit": { "state": "translated", - "value": "64 GB メモリ" + "value": "32 GB メモリ" } } } @@ -518207,55 +518207,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "24 GB RAM" + "value": "8 GB RAM" } }, "de": { "stringUnit": { "state": "translated", - "value": "24 GB Arbeitsspeicher" + "value": "8 GB Arbeitsspeicher" } }, "fr": { "stringUnit": { "state": "translated", - "value": "24 Go de RAM" + "value": "8 Go de RAM" } }, "ar": { "stringUnit": { "state": "translated", - "value": "24 غيغابايت من الذاكرة" + "value": "8 غيغابايت من الذاكرة" } }, "es": { "stringUnit": { "state": "translated", - "value": "24 GB de RAM" + "value": "8 GB de RAM" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "24 GB 記憶體" + "value": "8 GB 記憶體" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "24 GB 内存" + "value": "8 GB 内存" } }, "ko": { "stringUnit": { "state": "translated", - "value": "24 GB 메모리" + "value": "8 GB 메모리" } }, "ja": { "stringUnit": { "state": "translated", - "value": "24 GB メモリ" + "value": "8 GB メモリ" } } } diff --git a/Sources/Cloud/MachinesPanelView.swift b/Sources/Cloud/MachinesPanelView.swift index 7dc9ead203e4..1607cebea185 100644 --- a/Sources/Cloud/MachinesPanelView.swift +++ b/Sources/Cloud/MachinesPanelView.swift @@ -633,7 +633,7 @@ struct MachinesPanelView: View { ) } - /// Paid plans: "Your plan includes 50 machines" under the create button, + /// Paid plans: "Your plan includes 5 machines" under the create button, /// so the empty state answers "what do I get" before the Cloud Machines /// header shows a count. The uncapped wording only appears when an /// operator lifted the cap. diff --git a/Sources/Cloud/NewMachineModel.swift b/Sources/Cloud/NewMachineModel.swift index 259db544e6ec..b644526a507c 100644 --- a/Sources/Cloud/NewMachineModel.swift +++ b/Sources/Cloud/NewMachineModel.swift @@ -92,23 +92,23 @@ final class NewMachineModel { /// The base-image sizes the backend exposes, in ascending memory order. /// Each row is a validated Freestyle snapshot: 4/16, 8/32, 16/64, - /// 24/96, 32/128, or 64/128 GB of memory/disk. The server's list trims + /// 24/96, or 32/128 GB of memory/disk. The server's list trims /// this set for plan limits. The 128 MiB BusyBox image is intentionally /// not a coding-machine option because it has no baked dev tools. - nonisolated static let memoryOptionsMb: [Int] = [4096, 8192, 16384, 24576, 32768, 65536] + nonisolated static let memoryOptionsMb: [Int] = [4096, 8192, 16384, 24576, 32768] static let planMachineMemoryMb = 8192 /// The pre-ladder backend default. It is used only when the server omits /// `limits.memoryOptionsMb`, so the client does not send an unsupported /// `--size` flag during a rolling upgrade. static let legacyPlanMachineMemoryMb = 20480 - /// The plan that sells the ladder's 32 GB and 64 GB rows + /// The plan that sells the ladder's 16, 24, and 32 GB rows /// (`MEMORY_UPGRADE_PLAN_ID` on the server). nonisolated static let maxPlanId = "max" /// The largest machine every plan except Max may start /// (`PLAN_MAX_MEMORY_MB` on the server). - nonisolated static let standardPlanMaxMemoryMb = 24576 + nonisolated static let standardPlanMaxMemoryMb = 8192 /// Mirrors `maxMemoryMbForPlan` without its env overrides: Max gets the - /// whole ladder, every other plan (and an unknown plan) stops at 24 GB. + /// whole ladder, every other plan (and an unknown plan) stops at 8 GB. /// The server's `limits.lockedMemoryOptionsMb` wins whenever it is sent; /// this mirror only covers a control plane that predates that field. nonisolated static func maxMemoryMb(planId: String?) -> Int { @@ -344,7 +344,7 @@ final class NewMachineModel { return String(format: format, size.menuTitle, memoryUpgradePlanName) } - /// "32 GB and 64 GB machines need cmux Max."; nil when nothing is locked + /// "16 GB, 24 GB, and 32 GB machines need cmux Max."; nil when nothing is locked /// or no plan sells the locked sizes. var lockedSizesNoteText: String? { guard supportsSize, !lockedMemoryOptions.isEmpty, let memoryUpgradePlanNames = lockedMemoryUpgradePlanNames else { return nil } diff --git a/Sources/PricingPlansScreen.swift b/Sources/PricingPlansScreen.swift index 0679c54822f3..6d392880feac 100644 --- a/Sources/PricingPlansScreen.swift +++ b/Sources/PricingPlansScreen.swift @@ -475,7 +475,7 @@ private struct NativePricingPlansView: View { isProminent: !snapshot.isMax && !snapshot.isGo, features: [ String(localized: "pricing.native.pro.feature.vms", defaultValue: "Cloud agents on isolated Cloud VMs"), - String(localized: "pricing.native.pro.feature.hours", defaultValue: "Up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs"), + String(localized: "pricing.native.pro.feature.hours", defaultValue: "Up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM"), String(localized: "pricing.native.pro.feature.gateway", defaultValue: "Unlimited workspaces"), String(localized: "pricing.native.pro.feature.ios", defaultValue: "cmux iOS app and email support"), ] @@ -489,7 +489,7 @@ private struct NativePricingPlansView: View { action: snapshot.isMax ? nil : { ProUpgradePresenter.presentCheckout(source: .nativePricingPreview, plan: .max) }, isProminent: snapshot.isMax, features: [ - String(localized: "pricing.native.max.feature.sizes", defaultValue: "Up to 50 Cloud VMs sharing 64 GB RAM and 16 vCPUs"), + String(localized: "pricing.native.max.feature.sizes", defaultValue: "Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM"), String(localized: "pricing.native.max.feature.pro", defaultValue: "Unlimited workspaces and the iOS app"), ] ) @@ -503,7 +503,7 @@ private struct NativePricingPlansView: View { features: [ String(localized: "pricing.native.team.feature.billing", defaultValue: "Unified billing for the whole team"), String(localized: "pricing.native.team.feature.seats", defaultValue: "Centralized seat management"), - String(localized: "pricing.native.team.feature.compute", defaultValue: "Up to 50 Cloud VMs per user, with 24 GB RAM and 6 vCPUs per user shared across all their VMs"), + String(localized: "pricing.native.team.feature.compute", defaultValue: "Up to 5 Cloud VMs per user, each with 4 vCPUs and 8 GB RAM"), String(localized: "pricing.native.team.feature.gateway", defaultValue: "Team-wide model gateway analytics"), String(localized: "pricing.native.team.feature.support", defaultValue: "Priority email support"), ] @@ -703,18 +703,18 @@ private struct NativePricingComparisonSection: View { id: "concurrent", label: String(localized: "pricing.native.compare.concurrent", defaultValue: "Concurrent Cloud VMs"), free: .text(String(localized: "pricing.native.compare.concurrent.free", defaultValue: "1")), - pro: .text(String(localized: "pricing.native.compare.concurrent.paid", defaultValue: "50")), - max: .text(String(localized: "pricing.native.compare.concurrent.paid", defaultValue: "50")), - team: .text(String(localized: "pricing.native.compare.concurrent.team", defaultValue: "50 per user")), + pro: .text(String(localized: "pricing.native.compare.concurrent.paid", defaultValue: "5")), + max: .text(String(localized: "pricing.native.compare.concurrent.paid", defaultValue: "5")), + team: .text(String(localized: "pricing.native.compare.concurrent.team", defaultValue: "5 per user")), enterprise: .text(String(localized: "pricing.native.compare.custom", defaultValue: "Custom")) ), NativePricingCompareRow( id: "largestVm", label: String(localized: "pricing.native.compare.largestVm", defaultValue: "Largest Cloud VM"), - free: .text(String(localized: "pricing.native.compare.largestVm.standard", defaultValue: "24 GB RAM")), - pro: .text(String(localized: "pricing.native.compare.largestVm.standard", defaultValue: "24 GB RAM")), - max: .text(String(localized: "pricing.native.compare.largestVm.max", defaultValue: "64 GB RAM from the shared pool")), - team: .text(String(localized: "pricing.native.compare.largestVm.standard", defaultValue: "24 GB RAM")), + free: .text(String(localized: "pricing.native.compare.largestVm.standard", defaultValue: "8 GB RAM")), + pro: .text(String(localized: "pricing.native.compare.largestVm.standard", defaultValue: "8 GB RAM")), + max: .text(String(localized: "pricing.native.compare.largestVm.max", defaultValue: "32 GB RAM")), + team: .text(String(localized: "pricing.native.compare.largestVm.standard", defaultValue: "8 GB RAM")), enterprise: .text(String(localized: "pricing.native.compare.custom", defaultValue: "Custom")) ), NativePricingCompareRow( @@ -884,13 +884,13 @@ private struct NativePricingSizeSection: View { .foregroundStyle(.secondary) Text(String( localized: "pricing.native.sizes.body", - defaultValue: "Pro includes up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same limits per user. There is no metering or overage billing." + defaultValue: "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." )) .font(.system(size: 13)) .foregroundStyle(.secondary) Text(String( localized: "pricing.native.sizes.max", - defaultValue: "Max includes 64 GB RAM and 16 vCPUs shared across up to 50 Cloud VMs." + defaultValue: "Max includes up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM." )) .font(.system(size: 13)) .foregroundStyle(.secondary) diff --git a/cmuxTests/NewMachineModelTests.swift b/cmuxTests/NewMachineModelTests.swift index ea644a7aa4e1..1686852d4043 100644 --- a/cmuxTests/NewMachineModelTests.swift +++ b/cmuxTests/NewMachineModelTests.swift @@ -52,8 +52,8 @@ struct NewMachineModelTests { init(_ value: Value) { self.value = value } } - private static let proPlan = MachinePlanSnapshot(activeCount: 0, maxActiveVms: 50, planId: "pro") - private static let maxPlan = MachinePlanSnapshot(activeCount: 0, maxActiveVms: 50, planId: "max") + private static let proPlan = MachinePlanSnapshot(activeCount: 0, maxActiveVms: 5, planId: "pro") + private static let maxPlan = MachinePlanSnapshot(activeCount: 0, maxActiveVms: 5, planId: "max") private func makeModel( mode: NewMachineModel.Mode = .newMachine, @@ -95,32 +95,32 @@ struct NewMachineModelTests { @Test func defaultSizeIsTheSmallestSupportedBaseImage() { let (model, _) = makeModel(plan: Self.maxPlan) - #expect(model.memoryOptions == [4096, 8192, 16384, 24576, 32768, 65536]) + #expect(model.memoryOptions == [4096, 8192, 16384, 24576, 32768]) #expect(model.memoryMb == 8192) #expect(model.selectedSize == MachineSizeOption(memoryMb: 8192)) } /// The client mirror of the server ladder: Pro (and every plan but Max) - /// stops at 24 GB, and the two rows above it are locked and sold by Max. + /// stops at 8 GB, and the three rows above it are locked and sold by Max. @Test func proPlanLocksTheMaxSizesWhenTheServerOmitsThem() { let (model, _) = makeModel(plan: Self.proPlan) - #expect(model.memoryOptions == [4096, 8192, 16384, 24576]) - #expect(model.lockedMemoryOptions == [32768, 65536]) + #expect(model.memoryOptions == [4096, 8192]) + #expect(model.lockedMemoryOptions == [16384, 24576, 32768]) #expect(model.memoryUpgradePlanId == "max") #expect(model.memoryUpgradePlanName == "Max") - #expect(model.lockedSizesNoteText == "32 GB and 64 GB machines need cmux Max.") + #expect(model.lockedSizesNoteText == "16 GB, 24 GB, and 32 GB machines need cmux Max.") #expect(model.memoryUpgradeButtonTitle == "Upgrade to Max") #expect(model.lockedSizeMenuTitle(MachineSizeOption(memoryMb: 32768)!) == "32 GB RAM · 128 GB disk · Requires Max") - #expect(NewMachineModel.maxMemoryMb(planId: "pro") == 24576) - #expect(NewMachineModel.maxMemoryMb(planId: "free") == 24576) - #expect(NewMachineModel.maxMemoryMb(planId: nil) == 24576) - #expect(NewMachineModel.maxMemoryMb(planId: "max") == 65536) - #expect(NewMachineModel.maxMemoryMb(planId: " Max\n") == 65536) + #expect(NewMachineModel.maxMemoryMb(planId: "pro") == 8192) + #expect(NewMachineModel.maxMemoryMb(planId: "free") == 8192) + #expect(NewMachineModel.maxMemoryMb(planId: nil) == 8192) + #expect(NewMachineModel.maxMemoryMb(planId: "max") == 32768) + #expect(NewMachineModel.maxMemoryMb(planId: " Max\n") == 32768) } @Test func maxPlanHasTheWholeLadderAndNothingLocked() { let (model, _) = makeModel(plan: Self.maxPlan) - #expect(model.memoryOptions == [4096, 8192, 16384, 24576, 32768, 65536]) + #expect(model.memoryOptions == [4096, 8192, 16384, 24576, 32768]) #expect(model.lockedMemoryOptions == []) #expect(model.memoryUpgradePlanId == nil) #expect(model.lockedSizesNoteText == nil) @@ -142,15 +142,15 @@ struct NewMachineModelTests { #expect(tighter.lockedSizesNoteText == "24 GB, 32 GB, and 64 GB machines need cmux Max.") let (open, _) = makeModel(plan: Self.proPlan, lockedMemoryOptionsMb: [], memoryUpgradePlanId: nil) - #expect(open.memoryOptions == [4096, 8192, 16384, 24576, 32768, 65536]) + #expect(open.memoryOptions == [4096, 8192, 16384, 24576, 32768]) #expect(open.lockedMemoryOptions == []) #expect(open.memoryUpgradePlanId == nil) // A locked list without an upgrade plan still names Max, the plan // that sells the ladder, unless the plan already is Max. - let (unnamed, _) = makeModel(plan: Self.proPlan, lockedMemoryOptionsMb: [65536], memoryUpgradePlanId: nil) + let (unnamed, _) = makeModel(plan: Self.proPlan, lockedMemoryOptionsMb: [32768], memoryUpgradePlanId: nil) #expect(unnamed.memoryUpgradePlanId == "max") - #expect(unnamed.memoryOptions == [4096, 8192, 16384, 24576, 32768]) + #expect(unnamed.memoryOptions == [4096, 8192, 16384, 24576]) } /// The Picker binding can only land on an allowed size: a locked pick @@ -158,23 +158,23 @@ struct NewMachineModelTests { /// carries that size. @Test func selectionNeverLandsOnALockedSize() { let (model, recorder) = makeModel(plan: Self.proPlan) - model.memoryMb = 65536 - #expect(model.memoryMb == 24576) model.memoryMb = 32768 - #expect(model.memoryMb == 24576) + #expect(model.memoryMb == 8192) model.memoryMb = 16384 - #expect(model.memoryMb == 16384) - model.memoryMb = 65536 + #expect(model.memoryMb == 8192) + model.memoryMb = 4096 + #expect(model.memoryMb == 4096) + model.memoryMb = 32768 model.create() - #expect(recorder.value.first?.arguments == ["vm", "new", "--desktop", "--size", "24576", "--focus", "false"]) + #expect(recorder.value.first?.arguments == ["vm", "new", "--desktop", "--size", "8192", "--focus", "false"]) let (smallest, _) = makeModel(plan: Self.proPlan, memoryOptionsMb: [8192, 16384], lockedMemoryOptionsMb: [4096, 32768]) smallest.memoryMb = 4096 #expect(smallest.memoryMb == 8192) let (maxModel, _) = makeModel(plan: Self.maxPlan) - maxModel.memoryMb = 65536 - #expect(maxModel.memoryMb == 65536) + maxModel.memoryMb = 32768 + #expect(maxModel.memoryMb == 32768) } @Test func sizeLabelsDescribeMemoryAndDisk() { @@ -213,12 +213,12 @@ struct NewMachineModelTests { /// the size is user input here, and it travels as `--size`. @Test func defaultCreateIsADesktopMachineAtTheSelectedSize() { let (model, recorder) = makeModel(plan: Self.maxPlan) - model.memoryMb = 65536 + model.memoryMb = 32768 model.create() let request = recorder.value.first #expect(request?.kind == .desktop) #expect(request?.name == nil) - #expect(request?.arguments == ["vm", "new", "--desktop", "--size", "65536", "--focus", "false"]) + #expect(request?.arguments == ["vm", "new", "--desktop", "--size", "32768", "--focus", "false"]) } @Test func baseSetupHasNoSizeFlagAndDefaultsToADesktop() { diff --git a/skills/cmux-billing/SKILL.md b/skills/cmux-billing/SKILL.md index 391f0c6483a1..cbe349fd4f61 100644 --- a/skills/cmux-billing/SKILL.md +++ b/skills/cmux-billing/SKILL.md @@ -37,7 +37,7 @@ Read before changing billing, pricing, Stripe, Pro entitlement, checkout, webhoo Prices live in `web/services/billing/plans.ts` and are provisioned by `web/scripts/stripe/provision-catalog.sh`. Current checkout keys: `cmux-go-monthly-10` ($10/mo), `cmux-pro-monthly-50` ($50/mo), `cmux-max-monthly-200` ($200/mo, monthly only, no yearly Price on purpose), `cmux-team-monthly-60` ($60/user/mo), all billed monthly. Go and Max are personal plans like Pro: the user-scoped subscription row's `plan` column is derived from its Price lookup key (`personalPlanIdForSubscription`), `cmuxPlan` mirrors the exact purchased plan, and every `isPro` check passes. A Pro subscriber who buys Max goes through `/api/billing/portal?flow=switch_plan&plan=max`, which opens Stripe's subscription-update flow with the portal configuration stamped `metadata.purpose=personal_plan_switch` (the script provisions it; the account default configuration stays quantity-only). Stripe amounts are immutable, so a price change mints a new lookup key carrying the amount and adds the old key to `LEGACY_PRICE_LOOKUP_KEYS`; grandfathered Prices (`cmux-pro-monthly` $30, `cmux-pro-yearly` $240, `cmux-pro-yearly-288` $288, `cmux-team-monthly` $35, `cmux-team-yearly-336` $336, `cmux-pro-yearly-480` $480, `cmux-team-yearly-576` $576) stay active for the subscriptions on them and `/dashboard/billing` prices every row from its own Stripe amount. Env price-id overrides carry the amount in their name (`STRIPE_PRO_MONTHLY_50_PRICE_ID` and friends); a retired name fails env validation, so delete it from Vercel before deploying a price change. Test-mode Pro product `prod_UyHgRPpmCzrkLJ`, live `prod_Uq4a28vk0fP3E6`; test-mode Max product `prod_VEpLXrLxxrIFTx` (price `price_1UELhFLbtiW1udY8YwbWvt0P`, switch portal `bpc_1UELhHLbtiW1udY89mZWzSi0`); live Max product `prod_VEpRwst8UwD5cm` (price `price_1UELmdGhInAdn3Jb8Gpe9ilK`, switch portal `bpc_1UELmeGhInAdn3JbgZqLIbP0`). `STRIPE_PERSONAL_PLAN_SWITCH_PORTAL_CONFIGURATION_ID` is pinned in Vercel (production = live id, development and preview = test id) so the restricted production key never has to list portal configurations. Staging webhook endpoint `we_1Tq1SZGhInAdn3JbWJReKNEN` forwards to `cmux-staging.vercel.app`; its secrets are already in the `cmux-staging` Vercel project. -The paid Cloud VM allowance lives in `web/services/vms/machineSpec.ts`: Pro allows up to 50 machines for one paid account. Team grants 50 machines per paid seat. Each machine has its own CPU, memory, and disk; there is no aggregate resource pool. The default machine has 8 GB RAM and 32 GB disk. Free, Pro, Team, and Founder's machines stop at 24 GB RAM (`PLAN_MAX_MEMORY_MB`); the 32 GB and 64 GB ladder rows are what Max sells (`maxMemoryMbForPlan("max")`). The machine list publishes `lockedMemoryOptionsMb` and `memoryUpgradePlanId`, and a create that asks for a locked size gets `402 vm_memory_requires_plan` instead of a silently smaller machine. Disk grows independently up to 256 GB. The repository enforces machine counts under the billing-team lock and tracks individual shapes for fork, snapshot, and resize recovery. Paid-limit environment overrides are retired; the create kill switch remains the incident control. +The paid Cloud VM allowance lives in `web/services/vms/machineSpec.ts`: Pro allows up to 5 machines for one paid account. Team grants 5 machines per paid seat. Each machine has its own CPU, memory, and disk; there is no aggregate resource pool. The default machine has 8 GB RAM and 32 GB disk. Free, Pro, Team, and Founder's machines stop at 4 vCPU / 8 GB RAM (`PLAN_MAX_MEMORY_MB`); the 16, 24, and 32 GB ladder rows (up to 16 vCPU) are what Max sells (`maxMemoryMbForPlan("max")`). Max also allows 5 machines. The machine list publishes `lockedMemoryOptionsMb` and `memoryUpgradePlanId`, and a create that asks for a locked size gets `402 vm_memory_requires_plan` instead of a silently smaller machine. Disk grows independently up to 256 GB. The repository enforces machine counts under the billing-team lock and tracks individual shapes for fork, snapshot, and resize recovery. Paid-limit environment overrides are retired; the create kill switch remains the incident control. New annual checkout requests return `annual_unavailable` before creating Stripe state. Annual prices stay active only for existing subscriptions; new checkout price resolution and the personal plan-switch portal allow monthly offers only. Pricing views and CTA analytics always report `interval: month` and `discount_percent: 0`. diff --git a/web/app/[locale]/(landing)/docs/cloud/machines/page.tsx b/web/app/[locale]/(landing)/docs/cloud/machines/page.tsx index 8250b0a1b04d..3c9095d221ac 100644 --- a/web/app/[locale]/(landing)/docs/cloud/machines/page.tsx +++ b/web/app/[locale]/(landing)/docs/cloud/machines/page.tsx @@ -50,10 +50,9 @@ cmux vm new --detach --json`} 4g4 GB216 GB{t("planPaid")} 8g8 GB432 GB{t("planPaid")} - 16g16 GB864 GB{t("planPaid")} - 24g24 GB1296 GB{t("planPaid")} + 16g16 GB864 GB{t("planMax")} + 24g24 GB1296 GB{t("planMax")} 32g32 GB16128 GB{t("planMax")} - 64g64 GB32128 GB{t("planMax")}

{t("sizesDefault")}

diff --git a/web/messages/ar.json b/web/messages/ar.json index 446db9f2fb29..9a400563c840 100644 --- a/web/messages/ar.json +++ b/web/messages/ar.json @@ -489,11 +489,11 @@ ], "pro": [ "وكلاء سحابيون على Cloud VMs", - "24 غيغابايت RAM و6 vCPU مشتركة بين الأجهزة", + "5 Cloud VMs، لكل منها 4 vCPU و8 غيغابايت RAM", "تطبيق cmux لنظام iOS" ], "max": [ - "64 غيغابايت RAM و16 vCPU مشتركة بين الأجهزة", + "5 Cloud VMs، لكل منها 16 vCPU و32 غيغابايت RAM", "أحجام أجهزة أكبر", "كل ما في Pro" ], @@ -2837,12 +2837,12 @@ "limitsTitle": "حدود الخطة", "limitsDesc": "تحسب حدود الخطة عدد الأجهزة، وليس مجمعاً مشتركاً من المعالج أو الذاكرة. يحصل كل جهاز على موارد حجمه.", "limitsFree": "لا تستطيع الحسابات المجانية إنشاء أجهزة.", - "limitsPaid": "يمكن لحسابات Pro وMax امتلاك ما يصل إلى 50 جهازاً نشطاً. يكون الجهاز نشطاً ما دام قيد التشغيل أو البدء.", - "limitsTeam": "يمكن لحسابات الفرق امتلاك ما يصل إلى 50 جهازاً نشطاً لكل مقعد مدفوع.", - "limitsMax": "تحتاج الأجهزة الأكبر من 24 GB إلى cmux Max.", + "limitsPaid": "يمكن لحسابات Pro وMax امتلاك ما يصل إلى 5 أجهزة نشطة. يكون الجهاز نشطاً ما دام قيد التشغيل أو البدء.", + "limitsTeam": "يمكن لحسابات الفرق امتلاك ما يصل إلى 5 أجهزة نشطة لكل مقعد مدفوع.", + "limitsMax": "تحتاج الأجهزة الأكبر من 8 GB إلى cmux Max. تصل أجهزة Max إلى 32 GB و16 vCPU.", "limitsPricing": "راجع صفحة الأسعار لمعرفة الأسعار الحالية. لا يوجد قياس للاستهلاك ولا فوترة للاستخدام الزائد.", "resizeTitle": "تغيير الحجم", - "resizeDesc": "يمكنك تكبير جهاز دون فقدان البيانات. انقر بزر الفأرة الأيمن على الجهاز واختر Resize machine، أو استخدم cmux vm resize. يمكن لتغيير الحجم تكبير الجهاز فقط. يكبر القرص بخطوات 4 GB حتى 256 GB، والذاكرة حتى 64 GB، والمعالج حتى 32 vCPU. تحدد خطتك الحد الأقصى الفعلي.", + "resizeDesc": "يمكنك تكبير جهاز دون فقدان البيانات. انقر بزر الفأرة الأيمن على الجهاز واختر Resize machine، أو استخدم cmux vm resize. يمكن لتغيير الحجم تكبير الجهاز فقط. يكبر القرص بخطوات 4 GB حتى 256 GB، والذاكرة حتى 32 GB، والمعالج حتى 16 vCPU. تحدد خطتك الحد الأقصى الفعلي.", "pauseTitle": "الإيقاف المؤقت والاستئناف", "pauseDesc": "يوقف cmux vm pause موارد الحوسبة للجهاز. يبقى القرص ومساحات العمل وسجل الطرفية. تتوقف العمليات العاملة. يعيد cmux vm resume تشغيل الجهاز. كما أن فتح جهاز متوقف مؤقتاً أو تشغيل أمر عليه يبدأ تشغيله أيضاً.", "pauseIdle": "لا تتوقف الأجهزة مؤقتاً من تلقاء نفسها عندما تكون خاملة. يستمر الجهاز في العمل حتى توقفه مؤقتاً أو تحذفه.", @@ -2993,7 +2993,7 @@ "errPlan": "تتطلب آلات Cloud الافتراضية خطة مدفوعة", "fixPlan": "لا تستطيع الحسابات المجانية إنشاء أجهزة. قم بالترقية من صفحة الأسعار.", "errSize": "الحجم يحتاج إلى خطة أكبر", - "fixSize": "تحتاج الأجهزة الأكبر من 24 GB إلى cmux Max. اختر حجماً أصغر أو قم بالترقية.", + "fixSize": "تحتاج الأجهزة الأكبر من 8 GB إلى cmux Max. اختر حجماً أصغر أو قم بالترقية.", "errLimit": "تم بلوغ حد الأجهزة النشطة", "fixLimit": "أوقف جهازاً مؤقتاً أو احذفه، ثم حاول مجدداً.", "errLocked": "الجهاز مقفل", diff --git a/web/messages/bs.json b/web/messages/bs.json index 2ddb81f3b6fe..cc940871b318 100644 --- a/web/messages/bs.json +++ b/web/messages/bs.json @@ -489,11 +489,11 @@ ], "pro": [ "Cloud agenti na Cloud VMs", - "24 GB RAM-a i 6 vCPU-a dijeljeno među VM-ovima", + "5 Cloud VM-ova, svaki sa 4 vCPU-a i 8 GB RAM-a", "cmux aplikacija za iOS" ], "max": [ - "64 GB RAM-a i 16 vCPU-a dijeljeno među VM-ovima", + "5 Cloud VM-ova, svaki sa 16 vCPU-a i 32 GB RAM-a", "Veće mašine", "Sve iz Pro" ], @@ -2840,12 +2840,12 @@ "limitsTitle": "Ograničenja plana", "limitsDesc": "Ograničenja plana broje mašine, a ne zajednički skup CPU-a ili memorije. Svaka mašina dobija resurse svoje veličine.", "limitsFree": "Besplatni računi ne mogu kreirati mašine.", - "limitsPaid": "Pro i Max računi mogu imati do 50 aktivnih mašina. Mašina je aktivna dok radi ili se pokreće.", - "limitsTeam": "Timski računi mogu imati do 50 aktivnih mašina po svakom plaćenom mjestu.", - "limitsMax": "Mašine veće od 24 GB zahtijevaju cmux Max.", + "limitsPaid": "Pro i Max računi mogu imati do 5 aktivnih mašina. Mašina je aktivna dok radi ili se pokreće.", + "limitsTeam": "Timski računi mogu imati do 5 aktivnih mašina po svakom plaćenom mjestu.", + "limitsMax": "Mašine veće od 8 GB zahtijevaju cmux Max. Max mašine idu do 32 GB i 16 vCPU-a.", "limitsPricing": "Trenutne cijene pogledajte na stranici s cijenama. Nema mjerenja potrošnje ni naplate prekoračenja.", "resizeTitle": "Promjena veličine", - "resizeDesc": "Mašinu možete povećati bez gubitka podataka. Kliknite desnim klikom na mašinu i izaberite Resize machine ili koristite cmux vm resize. Veličina se može samo povećati. Disk raste u koracima od 4 GB do 256 GB, memorija do 64 GB, a CPU do 32 vCPU. Stvarni maksimum određuje vaš plan.", + "resizeDesc": "Mašinu možete povećati bez gubitka podataka. Kliknite desnim klikom na mašinu i izaberite Resize machine ili koristite cmux vm resize. Veličina se može samo povećati. Disk raste u koracima od 4 GB do 256 GB, memorija do 32 GB, a CPU do 16 vCPU. Stvarni maksimum određuje vaš plan.", "pauseTitle": "Pauziranje i nastavak", "pauseDesc": "cmux vm pause zaustavlja računarske resurse mašine. Disk, radni prostori i historija terminala ostaju. Pokrenuti procesi se zaustavljaju. cmux vm resume ponovo pokreće mašinu. Otvaranje pauzirane mašine ili pokretanje komande na njoj također je pokreće.", "pauseIdle": "Mašine se ne pauziraju same kada miruju. Mašina radi dok je ne pauzirate ili obrišete.", @@ -2996,7 +2996,7 @@ "errPlan": "Cloud VM-ovi zahtijevaju plaćeni plan", "fixPlan": "Besplatni računi ne mogu kreirati mašine. Nadogradite na stranici s cijenama.", "errSize": "Veličina zahtijeva veći plan", - "fixSize": "Mašine veće od 24 GB zahtijevaju cmux Max. Izaberite manju veličinu ili nadogradite plan.", + "fixSize": "Mašine veće od 8 GB zahtijevaju cmux Max. Izaberite manju veličinu ili nadogradite plan.", "errLimit": "Dostignuto je ograničenje aktivnih mašina", "fixLimit": "Pauzirajte ili obrišite mašinu, pa pokušajte ponovo.", "errLocked": "Mašina je zaključana", diff --git a/web/messages/da.json b/web/messages/da.json index bcb60837cb67..0332f4dc4dca 100644 --- a/web/messages/da.json +++ b/web/messages/da.json @@ -489,11 +489,11 @@ ], "pro": [ "Cloud-agenter på Cloud VMs", - "24 GB RAM og 6 vCPU'er delt mellem VM'er", + "5 Cloud VMs med 4 vCPU'er og 8 GB RAM hver", "cmux-appen til iOS" ], "max": [ - "64 GB RAM og 16 vCPU'er delt mellem VM'er", + "5 Cloud VMs med 16 vCPU'er og 32 GB RAM hver", "Større maskinstørrelser", "Alt i Pro" ], @@ -2837,12 +2837,12 @@ "limitsTitle": "Abonnementsgrænser", "limitsDesc": "Abonnementsgrænser tæller maskiner, ikke en fælles pulje af CPU eller hukommelse. Hver maskine får ressourcerne for sin størrelse.", "limitsFree": "Gratis konti kan ikke oprette maskiner.", - "limitsPaid": "Pro- og Max-konti kan have op til 50 aktive maskiner. En maskine er aktiv, mens den kører eller starter.", - "limitsTeam": "Teamkonti kan have op til 50 aktive maskiner pr. betalt plads.", - "limitsMax": "Maskiner større end 24 GB kræver cmux Max.", + "limitsPaid": "Pro- og Max-konti kan have op til 5 aktive maskiner. En maskine er aktiv, mens den kører eller starter.", + "limitsTeam": "Teamkonti kan have op til 5 aktive maskiner pr. betalt plads.", + "limitsMax": "Maskiner større end 8 GB kræver cmux Max. Max-maskiner går op til 32 GB og 16 vCPU'er.", "limitsPricing": "Se prissiden for aktuelle priser. Der er ingen forbrugsmåling og ingen fakturering for overforbrug.", "resizeTitle": "Ændr størrelse", - "resizeDesc": "Du kan gøre en maskine større uden tab af data. Højreklik på maskinen, og vælg Resize machine, eller brug cmux vm resize. En størrelsesændring kan kun gøre en maskine større. Disken vokser i trin á 4 GB op til 256 GB, hukommelsen op til 64 GB og CPU op til 32 vCPU. Dit abonnement fastsætter det reelle maksimum.", + "resizeDesc": "Du kan gøre en maskine større uden tab af data. Højreklik på maskinen, og vælg Resize machine, eller brug cmux vm resize. En størrelsesændring kan kun gøre en maskine større. Disken vokser i trin á 4 GB op til 256 GB, hukommelsen op til 32 GB og CPU op til 16 vCPU. Dit abonnement fastsætter det reelle maksimum.", "pauseTitle": "Pause og genoptagelse", "pauseDesc": "cmux vm pause stopper maskinens beregning. Disken, arbejdsområderne og terminalhistorikken bevares. Kørende processer stopper. cmux vm resume starter maskinen igen. Hvis du åbner en maskine på pause eller kører en kommando på den, starter den også.", "pauseIdle": "Maskiner sættes ikke på pause af sig selv, når de er inaktive. En maskine kører, indtil du sætter den på pause eller sletter den.", @@ -2993,7 +2993,7 @@ "errPlan": "Cloud-VM'er kræver et betalt abonnement", "fixPlan": "Gratis konti kan ikke oprette maskiner. Opgrader på prissiden.", "errSize": "En størrelse kræver et større abonnement", - "fixSize": "Maskiner større end 24 GB kræver cmux Max. Vælg en mindre størrelse, eller opgrader.", + "fixSize": "Maskiner større end 8 GB kræver cmux Max. Vælg en mindre størrelse, eller opgrader.", "errLimit": "Grænsen for aktive maskiner er nået", "fixLimit": "Sæt en maskine på pause, eller slet den, og prøv igen.", "errLocked": "Maskinen er låst", diff --git a/web/messages/de.json b/web/messages/de.json index b252bb8c66a8..16b1783e9db0 100644 --- a/web/messages/de.json +++ b/web/messages/de.json @@ -489,11 +489,11 @@ ], "pro": [ "Cloud-Agenten auf Cloud VMs", - "24 GB RAM und 6 vCPUs für alle VMs", + "5 Cloud VMs mit je 4 vCPUs und 8 GB RAM", "Die cmux iOS-App" ], "max": [ - "64 GB RAM und 16 vCPUs für alle VMs", + "5 Cloud VMs mit je 16 vCPUs und 32 GB RAM", "Größere Maschinengrößen", "Alles aus Pro" ], @@ -2840,12 +2840,12 @@ "limitsTitle": "Planlimits", "limitsDesc": "Planlimits zählen Maschinen, keinen gemeinsamen Pool aus CPU oder Arbeitsspeicher. Jede Maschine erhält die Ressourcen ihrer Größe.", "limitsFree": "Kostenlose Konten können keine Maschinen erstellen.", - "limitsPaid": "Pro- und Max-Konten können bis zu 50 aktive Maschinen haben. Eine Maschine ist aktiv, solange sie läuft oder startet.", - "limitsTeam": "Team-Konten können pro bezahltem Platz bis zu 50 aktive Maschinen haben.", - "limitsMax": "Maschinen mit mehr als 24 GB benötigen cmux Max.", + "limitsPaid": "Pro- und Max-Konten können bis zu 5 aktive Maschinen haben. Eine Maschine ist aktiv, solange sie läuft oder startet.", + "limitsTeam": "Team-Konten können pro bezahltem Platz bis zu 5 aktive Maschinen haben.", + "limitsMax": "Maschinen mit mehr als 8 GB benötigen cmux Max. Max-Maschinen gehen bis 32 GB und 16 vCPUs.", "limitsPricing": "Aktuelle Preise findest du auf der Preisseite. Es gibt keine nutzungsbasierte Abrechnung und keine Überschreitungsgebühren.", "resizeTitle": "Größe ändern", - "resizeDesc": "Du kannst eine Maschine ohne Datenverlust vergrößern. Klicke mit der rechten Maustaste auf die Maschine und wähle Resize machine, oder nutze cmux vm resize. Eine Maschine lässt sich nur vergrößern. Die Festplatte wächst in 4-GB-Schritten bis 256 GB, der Arbeitsspeicher bis 64 GB und die CPU bis 32 vCPU. Das tatsächliche Maximum legt dein Plan fest.", + "resizeDesc": "Du kannst eine Maschine ohne Datenverlust vergrößern. Klicke mit der rechten Maustaste auf die Maschine und wähle Resize machine, oder nutze cmux vm resize. Eine Maschine lässt sich nur vergrößern. Die Festplatte wächst in 4-GB-Schritten bis 256 GB, der Arbeitsspeicher bis 32 GB und die CPU bis 16 vCPU. Das tatsächliche Maximum legt dein Plan fest.", "pauseTitle": "Pausieren und fortsetzen", "pauseDesc": "cmux vm pause stoppt die Rechenleistung der Maschine. Festplatte, Workspaces und Terminalverlauf bleiben erhalten. Laufende Prozesse werden beendet. cmux vm resume startet die Maschine wieder. Auch das Öffnen einer pausierten Maschine oder das Ausführen eines Befehls darauf startet sie.", "pauseIdle": "Maschinen pausieren nicht von selbst, wenn sie im Leerlauf sind. Eine Maschine läuft weiter, bis du sie pausierst oder löschst.", @@ -2996,7 +2996,7 @@ "errPlan": "Cloud-VMs erfordern einen kostenpflichtigen Plan", "fixPlan": "Kostenlose Konten können keine Maschinen erstellen. Führe auf der Preisseite ein Upgrade durch.", "errSize": "Eine Größe erfordert einen höheren Plan", - "fixSize": "Maschinen mit mehr als 24 GB benötigen cmux Max. Wähle eine kleinere Größe oder führe ein Upgrade durch.", + "fixSize": "Maschinen mit mehr als 8 GB benötigen cmux Max. Wähle eine kleinere Größe oder führe ein Upgrade durch.", "errLimit": "Limit für aktive Maschinen erreicht", "fixLimit": "Pausiere oder lösche eine Maschine und versuche es erneut.", "errLocked": "Maschine ist gesperrt", diff --git a/web/messages/en.json b/web/messages/en.json index 08bcd22ce56f..8d91345dcebf 100644 --- a/web/messages/en.json +++ b/web/messages/en.json @@ -651,7 +651,7 @@ "activeBody": "Your Max plan is active. It renews on {date}.", "pendingBody": "Your Max plan ends on {date}.", "monthlyPrice": "${amount}/mo", - "upsell": "Max includes up to 50 Cloud VMs sharing 64 GB RAM and 16 vCPUs for $200 per month, billed monthly." + "upsell": "Max includes up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM, for $200 per month, billed monthly." }, "teamPanel": { "notFound": "This team is not available. You may have left it, or it was deleted.", @@ -716,11 +716,11 @@ ], "pro": [ "Cloud agents on Cloud VMs", - "24 GB RAM and 6 vCPUs shared across VMs", + "5 Cloud VMs with 4 vCPUs and 8 GB RAM each", "The cmux iOS app" ], "max": [ - "64 GB RAM and 16 vCPUs shared across VMs", + "5 Cloud VMs with 16 vCPUs and 32 GB RAM each", "Larger machine sizes", "Everything in Pro" ], @@ -1666,7 +1666,7 @@ "featuresLead": "Everything in Free, plus:", "features": [ "Cloud agents on Cloud VMs in isolated remote sandboxes", - "Up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs", + "Up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM", "Unlimited workspaces", "The cmux iOS app and email support" ], @@ -1683,7 +1683,7 @@ "cta": "Get Max", "featuresLead": "Everything in Pro, plus:", "features": [ - "Up to 50 Cloud VMs sharing 64 GB RAM and 16 vCPUs", + "Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM", "Unlimited workspaces and the iOS app" ] }, @@ -1782,27 +1782,27 @@ { "label": "Concurrent Cloud VMs", "free": "false", - "pro": "50", - "max": "50", - "team": "50 per user", + "pro": "5", + "max": "5", + "team": "5 per user", "enterprise": "Custom", "go": "1" }, { - "label": "Resources shared across all Cloud VMs", + "label": "Resources per Cloud VM", "free": "false", - "pro": "24 GB RAM and 6 vCPUs shared across all VMs", - "max": "64 GB RAM and 16 vCPUs shared across all VMs", - "team": "24 GB RAM and 6 vCPUs per user, shared across all their VMs", + "pro": "4 vCPUs and 8 GB RAM", + "max": "16 vCPUs and 32 GB RAM", + "team": "4 vCPUs and 8 GB RAM", "enterprise": "Custom", "go": "2 vCPU, 4 GiB RAM, 16 GiB disk" }, { "label": "Largest Cloud VM", - "free": "24 GB RAM", - "pro": "24 GB RAM", - "max": "64 GB RAM", - "team": "24 GB RAM", + "free": "8 GB RAM", + "pro": "8 GB RAM", + "max": "32 GB RAM", + "team": "8 GB RAM", "enterprise": "Custom", "go": "4 GiB RAM" }, @@ -1900,11 +1900,11 @@ }, { "q": "What are Cloud VMs?", - "a": "Persistent Linux machines in the cloud: pets, not cattle. Following the Zen of cmux, a machine is a primitive, not a managed solution: it keeps its files, installed tools, and state, and what you build on it is yours. Agents clone repositories, run commands, and open pull requests there without touching your Mac. Pro includes up to 50 Cloud VMs with 24 GB RAM and 6 vCPUs shared across all VMs. Team includes the same pool per user." + "a": "Persistent Linux machines in the cloud: pets, not cattle. Following the Zen of cmux, a machine is a primitive, not a managed solution: it keeps its files, installed tools, and state, and what you build on it is yours. Agents clone repositories, run commands, and open pull requests there without touching your Mac. Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same allowance per user." }, { "q": "What does Max add?", - "a": "Max is $200/mo, billed monthly. Up to 50 Cloud VMs share a total of 64 GB RAM and 16 vCPUs. It includes everything in Pro and supports 32 GB and 64 GB machines within that shared total. Pro, Team, and Free machines top out at 24 GB RAM." + "a": "Max is $200/mo, billed monthly. It includes everything in Pro and up to 5 Cloud VMs, each with up to 16 vCPUs and 32 GB RAM. Pro, Team, and Free machines top out at 4 vCPUs and 8 GB RAM." }, { "q": "What is cmux Vault?", @@ -4362,12 +4362,12 @@ "limitsTitle": "Plan limits", "limitsDesc": "Plan limits count machines, not a shared pool of CPU or memory. Each machine gets the resources of its size.", "limitsFree": "Free accounts cannot create machines.", - "limitsPaid": "Pro and Max accounts can have up to 50 active machines. A machine is active while it is running or starting.", - "limitsTeam": "Team accounts can have up to 50 active machines for each paid seat.", - "limitsMax": "Machines larger than 24 GB need cmux Max.", + "limitsPaid": "Pro and Max accounts can have up to 5 active machines. A machine is active while it is running or starting.", + "limitsTeam": "Team accounts can have up to 5 active machines for each paid seat.", + "limitsMax": "Machines larger than 8 GB need cmux Max. Max machines go up to 32 GB and 16 vCPUs.", "limitsPricing": "See the pricing page for current prices. There is no metering and no overage billing.", "resizeTitle": "Resize", - "resizeDesc": "You can make a machine larger without data loss. Right-click the machine and choose Resize machine, or use cmux vm resize. Resize can only grow a machine. Disk grows in 4 GB steps up to 256 GB, memory up to 64 GB, and CPU up to 32 vCPU. Your plan sets the real maximum.", + "resizeDesc": "You can make a machine larger without data loss. Right-click the machine and choose Resize machine, or use cmux vm resize. Resize can only grow a machine. Disk grows in 4 GB steps up to 256 GB, memory up to 32 GB, and CPU up to 16 vCPU. Your plan sets the real maximum.", "pauseTitle": "Pause and resume", "pauseDesc": "cmux vm pause stops the machine's compute. The disk, workspaces, and terminal history stay. Running processes stop. cmux vm resume starts the machine again. Opening a paused machine or running a command on it also starts it.", "pauseIdle": "Machines do not pause by themselves when they are idle. A machine keeps running until you pause it or delete it.", @@ -4518,7 +4518,7 @@ "errPlan": "Cloud VMs require a paid plan", "fixPlan": "Free accounts cannot create machines. Upgrade on the pricing page.", "errSize": "A size needs a larger plan", - "fixSize": "Machines larger than 24 GB need cmux Max. Choose a smaller size or upgrade.", + "fixSize": "Machines larger than 8 GB need cmux Max. Choose a smaller size or upgrade.", "errLimit": "Active machine limit reached", "fixLimit": "Pause or delete a machine, then try again.", "errLocked": "Machine is locked", diff --git a/web/messages/es.json b/web/messages/es.json index 9fe0e9227259..711785bc0885 100644 --- a/web/messages/es.json +++ b/web/messages/es.json @@ -489,11 +489,11 @@ ], "pro": [ "Agentes en la nube en Cloud VMs", - "24 GB de RAM y 6 vCPU compartidos entre VM", + "5 Cloud VMs con 4 vCPU y 8 GB de RAM cada una", "La app cmux para iOS" ], "max": [ - "64 GB de RAM y 16 vCPU compartidos entre VM", + "5 Cloud VMs con 16 vCPU y 32 GB de RAM cada una", "Máquinas más grandes", "Todo lo de Pro" ], @@ -2839,12 +2839,12 @@ "limitsTitle": "Límites del plan", "limitsDesc": "Los límites del plan cuentan máquinas, no un fondo compartido de CPU o memoria. Cada máquina recibe los recursos de su tamaño.", "limitsFree": "Las cuentas gratuitas no pueden crear máquinas.", - "limitsPaid": "Las cuentas Pro y Max pueden tener hasta 50 máquinas activas. Una máquina está activa mientras está en ejecución o iniciándose.", - "limitsTeam": "Las cuentas de equipo pueden tener hasta 50 máquinas activas por cada puesto de pago.", - "limitsMax": "Las máquinas de más de 24 GB requieren cmux Max.", + "limitsPaid": "Las cuentas Pro y Max pueden tener hasta 5 máquinas activas. Una máquina está activa mientras está en ejecución o iniciándose.", + "limitsTeam": "Las cuentas de equipo pueden tener hasta 5 máquinas activas por cada puesto de pago.", + "limitsMax": "Las máquinas de más de 8 GB requieren cmux Max. Las máquinas Max llegan hasta 32 GB y 16 vCPU.", "limitsPricing": "Consulta la página de precios para ver los precios actuales. No hay medición de uso ni cargos por exceso.", "resizeTitle": "Cambiar tamaño", - "resizeDesc": "Puedes ampliar una máquina sin perder datos. Haz clic derecho en la máquina y elige Resize machine, o usa cmux vm resize. Solo se puede ampliar una máquina, no reducirla. El disco crece en incrementos de 4 GB hasta 256 GB, la memoria hasta 64 GB y la CPU hasta 32 vCPU. Tu plan fija el máximo real.", + "resizeDesc": "Puedes ampliar una máquina sin perder datos. Haz clic derecho en la máquina y elige Resize machine, o usa cmux vm resize. Solo se puede ampliar una máquina, no reducirla. El disco crece en incrementos de 4 GB hasta 256 GB, la memoria hasta 32 GB y la CPU hasta 16 vCPU. Tu plan fija el máximo real.", "pauseTitle": "Pausar y reanudar", "pauseDesc": "cmux vm pause detiene el cómputo de la máquina. El disco, los espacios de trabajo y el historial de los terminales se conservan. Los procesos en ejecución se detienen. cmux vm resume vuelve a iniciar la máquina. Abrir una máquina en pausa o ejecutar un comando en ella también la inicia.", "pauseIdle": "Las máquinas no se pausan solas cuando están inactivas. Una máquina sigue en ejecución hasta que la pausas o la eliminas.", @@ -2995,7 +2995,7 @@ "errPlan": "Las VM de Cloud requieren un plan de pago", "fixPlan": "Las cuentas gratuitas no pueden crear máquinas. Mejora tu plan en la página de precios.", "errSize": "Un tamaño requiere un plan superior", - "fixSize": "Las máquinas de más de 24 GB requieren cmux Max. Elige un tamaño menor o mejora tu plan.", + "fixSize": "Las máquinas de más de 8 GB requieren cmux Max. Elige un tamaño menor o mejora tu plan.", "errLimit": "Se alcanzó el límite de máquinas activas", "fixLimit": "Pausa o elimina una máquina y vuelve a intentarlo.", "errLocked": "La máquina está bloqueada", diff --git a/web/messages/fr.json b/web/messages/fr.json index 5b7e5581195b..5ca3dbbf6f81 100644 --- a/web/messages/fr.json +++ b/web/messages/fr.json @@ -489,11 +489,11 @@ ], "pro": [ "Agents cloud sur des Cloud VMs", - "24 Go de RAM et 6 vCPU partagés entre les VM", + "5 Cloud VMs avec 4 vCPU et 8 Go de RAM chacune", "L'app cmux pour iOS" ], "max": [ - "64 Go de RAM et 16 vCPU partagés entre les VM", + "5 Cloud VMs avec 16 vCPU et 32 Go de RAM chacune", "Des machines plus grandes", "Tout ce qu'inclut Pro" ], @@ -2842,12 +2842,12 @@ "limitsTitle": "Limites de forfait", "limitsDesc": "Les limites de forfait comptent les machines, pas un pool partagé de CPU ou de mémoire. Chaque machine reçoit les ressources de sa taille.", "limitsFree": "Les comptes gratuits ne peuvent pas créer de machines.", - "limitsPaid": "Les comptes Pro et Max peuvent avoir jusqu'à 50 machines actives. Une machine est active tant qu'elle est en cours d'exécution ou de démarrage.", - "limitsTeam": "Les comptes Team peuvent avoir jusqu'à 50 machines actives par siège payant.", - "limitsMax": "Les machines de plus de 24 GB nécessitent cmux Max.", + "limitsPaid": "Les comptes Pro et Max peuvent avoir jusqu'à 5 machines actives. Une machine est active tant qu'elle est en cours d'exécution ou de démarrage.", + "limitsTeam": "Les comptes Team peuvent avoir jusqu'à 5 machines actives par siège payant.", + "limitsMax": "Les machines de plus de 8 GB nécessitent cmux Max. Les machines Max vont jusqu'à 32 GB et 16 vCPU.", "limitsPricing": "Consultez la page des tarifs pour les prix actuels. Il n'y a ni facturation à l'usage ni frais de dépassement.", "resizeTitle": "Redimensionner", - "resizeDesc": "Vous pouvez agrandir une machine sans perte de données. Faites un clic droit sur la machine et choisissez Resize machine, ou utilisez cmux vm resize. Le redimensionnement ne peut qu'agrandir une machine. Le disque augmente par paliers de 4 GB jusqu'à 256 GB, la mémoire jusqu'à 64 GB et le CPU jusqu'à 32 vCPU. Votre forfait fixe le maximum réel.", + "resizeDesc": "Vous pouvez agrandir une machine sans perte de données. Faites un clic droit sur la machine et choisissez Resize machine, ou utilisez cmux vm resize. Le redimensionnement ne peut qu'agrandir une machine. Le disque augmente par paliers de 4 GB jusqu'à 256 GB, la mémoire jusqu'à 32 GB et le CPU jusqu'à 16 vCPU. Votre forfait fixe le maximum réel.", "pauseTitle": "Mettre en pause et reprendre", "pauseDesc": "cmux vm pause arrête le calcul de la machine. Le disque, les espaces de travail et l'historique des terminaux sont conservés. Les processus en cours s'arrêtent. cmux vm resume redémarre la machine. Ouvrir une machine en pause ou y exécuter une commande la redémarre aussi.", "pauseIdle": "Les machines ne se mettent pas en pause d'elles-mêmes lorsqu'elles sont inactives. Une machine continue de tourner jusqu'à ce que vous la mettiez en pause ou la supprimiez.", @@ -2998,7 +2998,7 @@ "errPlan": "Les VM Cloud nécessitent un forfait payant", "fixPlan": "Les comptes gratuits ne peuvent pas créer de machines. Passez à un forfait payant sur la page des tarifs.", "errSize": "Une taille nécessite un forfait supérieur", - "fixSize": "Les machines de plus de 24 GB nécessitent cmux Max. Choisissez une taille plus petite ou passez à un forfait supérieur.", + "fixSize": "Les machines de plus de 8 GB nécessitent cmux Max. Choisissez une taille plus petite ou passez à un forfait supérieur.", "errLimit": "Limite de machines actives atteinte", "fixLimit": "Mettez en pause ou supprimez une machine, puis réessayez.", "errLocked": "La machine est verrouillée", diff --git a/web/messages/it.json b/web/messages/it.json index 6b3467af7215..c0e5c80a6641 100644 --- a/web/messages/it.json +++ b/web/messages/it.json @@ -489,11 +489,11 @@ ], "pro": [ "Agenti cloud su Cloud VMs", - "24 GB di RAM e 6 vCPU condivisi tra le VM", + "5 Cloud VMs con 4 vCPU e 8 GB di RAM ciascuna", "L'app cmux per iOS" ], "max": [ - "64 GB di RAM e 16 vCPU condivisi tra le VM", + "5 Cloud VMs con 16 vCPU e 32 GB di RAM ciascuna", "Macchine più grandi", "Tutto ciò che include Pro" ], @@ -2840,12 +2840,12 @@ "limitsTitle": "Limiti del piano", "limitsDesc": "I limiti del piano contano le macchine, non un pool condiviso di CPU o memoria. Ogni macchina riceve le risorse della sua dimensione.", "limitsFree": "Gli account gratuiti non possono creare macchine.", - "limitsPaid": "Gli account Pro e Max possono avere fino a 50 macchine attive. Una macchina è attiva mentre è in esecuzione o in avvio.", - "limitsTeam": "Gli account Team possono avere fino a 50 macchine attive per ogni postazione a pagamento.", - "limitsMax": "Le macchine oltre 24 GB richiedono cmux Max.", + "limitsPaid": "Gli account Pro e Max possono avere fino a 5 macchine attive. Una macchina è attiva mentre è in esecuzione o in avvio.", + "limitsTeam": "Gli account Team possono avere fino a 5 macchine attive per ogni postazione a pagamento.", + "limitsMax": "Le macchine oltre 8 GB richiedono cmux Max. Le macchine Max arrivano fino a 32 GB e 16 vCPU.", "limitsPricing": "Consulta la pagina dei prezzi per i prezzi attuali. Non ci sono misurazioni a consumo né addebiti per eccedenze.", "resizeTitle": "Ridimensionare", - "resizeDesc": "Puoi ingrandire una macchina senza perdere dati. Fai clic destro sulla macchina e scegli Resize machine, oppure usa cmux vm resize. Il ridimensionamento può solo ingrandire una macchina. Il disco cresce a passi di 4 GB fino a 256 GB, la memoria fino a 64 GB e la CPU fino a 32 vCPU. Il massimo effettivo dipende dal tuo piano.", + "resizeDesc": "Puoi ingrandire una macchina senza perdere dati. Fai clic destro sulla macchina e scegli Resize machine, oppure usa cmux vm resize. Il ridimensionamento può solo ingrandire una macchina. Il disco cresce a passi di 4 GB fino a 256 GB, la memoria fino a 32 GB e la CPU fino a 16 vCPU. Il massimo effettivo dipende dal tuo piano.", "pauseTitle": "Pausa e ripresa", "pauseDesc": "cmux vm pause arresta il calcolo della macchina. Il disco, i workspace e la cronologia dei terminali restano. I processi in esecuzione si arrestano. cmux vm resume riavvia la macchina. Anche aprire una macchina in pausa o eseguirvi un comando la avvia.", "pauseIdle": "Le macchine non vanno in pausa da sole quando sono inattive. Una macchina resta in esecuzione finché non la metti in pausa o la elimini.", @@ -2996,7 +2996,7 @@ "errPlan": "Le VM Cloud richiedono un piano a pagamento", "fixPlan": "Gli account gratuiti non possono creare macchine. Passa a un piano a pagamento dalla pagina dei prezzi.", "errSize": "Una dimensione richiede un piano superiore", - "fixSize": "Le macchine oltre 24 GB richiedono cmux Max. Scegli una dimensione inferiore o passa a un piano superiore.", + "fixSize": "Le macchine oltre 8 GB richiedono cmux Max. Scegli una dimensione inferiore o passa a un piano superiore.", "errLimit": "Limite di macchine attive raggiunto", "fixLimit": "Metti in pausa o elimina una macchina, poi riprova.", "errLocked": "La macchina è bloccata", diff --git a/web/messages/ja.json b/web/messages/ja.json index fe9a141f4ce2..1ba68756761b 100644 --- a/web/messages/ja.json +++ b/web/messages/ja.json @@ -651,7 +651,7 @@ "activeBody": "Max プランは有効です。次回更新日は {date} です。", "pendingBody": "Max プランは {date} に終了します。", "monthlyPrice": "${amount}/月", - "upsell": "Max は月額 $200 の月払いで、最大 50 台の Cloud VM が 64 GB RAM と 16 vCPU を共有します。" + "upsell": "Max は月額 $200 の月払いで、最大 5 台の Cloud VM を利用でき、各 VM に 16 vCPU と 32 GB RAM が割り当てられます。" }, "teamPanel": { "notFound": "このチームは利用できません。チームから退出したか、チームが削除された可能性があります。", @@ -716,11 +716,11 @@ ], "pro": [ "Cloud VM 上のクラウドエージェント", - "VM 全体で共有する 24 GB RAM と 6 vCPU", + "Cloud VM 5 台、各 4 vCPU と 8 GB RAM", "cmux iOS アプリ" ], "max": [ - "VM 全体で共有する 64 GB RAM と 16 vCPU", + "Cloud VM 5 台、各 16 vCPU と 32 GB RAM", "より大きなマシンサイズ", "Pro のすべての機能" ], @@ -1666,7 +1666,7 @@ "featuresLead": "Free のすべてに加えて:", "features": [ "分離されたリモートサンドボックスの Cloud VM 上で動くクラウドエージェント", - "最大 50 台の Cloud VM で、24 GB RAM と 6 vCPUを共有", + "最大 5 台の Cloud VM、各 VM に 4 vCPU と 8 GB RAM", "ワークスペースは無制限", "cmux iOS アプリとメールサポート" ], @@ -1683,7 +1683,7 @@ "cta": "Max を入手", "featuresLead": "Pro のすべてに加えて:", "features": [ - "最大 50 台の Cloud VM で 64 GB RAM と 16 vCPU を共有", + "最大 5 台の Cloud VM、各 VM に 16 vCPU と 32 GB RAM", "無制限のワークスペースと iOS アプリ" ] }, @@ -1782,27 +1782,27 @@ { "label": "同時 Cloud VM 数", "free": "false", - "pro": "50", - "max": "50", - "team": "ユーザーごとに 50", + "pro": "5", + "max": "5", + "team": "ユーザーごとに 5", "enterprise": "カスタム", "go": "1" }, { - "label": "すべての Cloud VM で共有するリソース", + "label": "Cloud VM あたりのリソース", "free": "false", - "pro": "24 GB RAM と 6 vCPUをすべての VM で共有", - "max": "すべての VM で 64 GB RAM と 16 vCPU を共有", - "team": "ユーザーあたり 24 GB RAM と 6 vCPUを、そのユーザーの VM で共有", + "pro": "4 vCPU と 8 GB RAM", + "max": "16 vCPU と 32 GB RAM", + "team": "4 vCPU と 8 GB RAM", "enterprise": "カスタム", "go": "2 vCPU、4 GiB RAM、16 GiB ディスク" }, { "label": "最大の Cloud VM", - "free": "24 GB RAM", - "pro": "24 GB RAM", - "max": "64 GB RAM", - "team": "24 GB RAM", + "free": "8 GB RAM", + "pro": "8 GB RAM", + "max": "32 GB RAM", + "team": "8 GB RAM", "enterprise": "カスタム", "go": "4 GiB RAM" }, @@ -1900,11 +1900,11 @@ }, { "q": "Cloud VM とは何ですか?", - "a": "クラウド上の永続的な Linux マシンで、使い捨て(cattle)ではなくペットです。Zen of cmux のとおり、マシンはソリューションではなくプリミティブです。ファイル、インストールしたツール、状態はそのまま保持され、その上に構築したものはあなたのものです。エージェントはそこでリポジトリをクローンし、コマンドを実行し、プルリクエストを開くため、お使いの Mac には触れません。Pro では最大 50 台の Cloud VM で、24 GB RAM と 6 vCPUを共有します。Team ではユーザーごとに同じプールが適用されます。" + "a": "クラウド上の永続的な Linux マシンで、使い捨て(cattle)ではなくペットです。Zen of cmux のとおり、マシンはソリューションではなくプリミティブです。ファイル、インストールしたツール、状態はそのまま保持され、その上に構築したものはあなたのものです。エージェントはそこでリポジトリをクローンし、コマンドを実行し、プルリクエストを開くため、お使いの Mac には触れません。Pro では最大 5 台の Cloud VM を利用でき、各 VM に 4 vCPU と 8 GB RAM が割り当てられます。Team ではユーザーごとに同じ枠が適用されます。" }, { "q": "Max では何が追加されますか?", - "a": "Max は月払いで $200/月です。最大 50 台の Cloud VM で合計 64 GB RAM と 16 vCPU を共有します。Pro のすべてを含み、この共有リソースの範囲内で 32 GB と 64 GB のマシンを利用できます。Pro、Team、Free のマシンは最大 24 GB RAM です。" + "a": "Max は月払いで $200/月です。Pro のすべてを含み、最大 5 台の Cloud VM を利用でき、各 VM は最大 16 vCPU と 32 GB RAM です。Pro、Team、Free のマシンは最大 4 vCPU と 8 GB RAM です。" }, { "q": "cmux Vault とは何ですか?", @@ -4274,12 +4274,12 @@ "limitsTitle": "プランの上限", "limitsDesc": "プランの上限はマシンの台数で数えます。CPUやメモリの共有プールではありません。各マシンにはそのサイズ分のリソースが割り当てられます。", "limitsFree": "無料アカウントではマシンを作成できません。", - "limitsPaid": "ProおよびMaxアカウントでは、アクティブなマシンを最大50台まで持てます。実行中または起動中のマシンがアクティブとして数えられます。", - "limitsTeam": "Teamアカウントでは、有料シート1つにつきアクティブなマシンを最大50台まで持てます。", - "limitsMax": "24 GBを超えるマシンにはcmux Maxが必要です。", + "limitsPaid": "ProおよびMaxアカウントでは、アクティブなマシンを最大5台まで持てます。実行中または起動中のマシンがアクティブとして数えられます。", + "limitsTeam": "Teamアカウントでは、有料シート1つにつきアクティブなマシンを最大5台まで持てます。", + "limitsMax": "8 GBを超えるマシンにはcmux Maxが必要です。Maxのマシンは最大32 GB、16 vCPUまで使えます。", "limitsPricing": "現在の価格は料金ページを参照してください。従量課金や超過料金はありません。", "resizeTitle": "サイズ変更", - "resizeDesc": "データを失わずにマシンを大きくできます。マシンを右クリックして「マシンのサイズを変更」を選ぶか、cmux vm resize を使います。サイズ変更は拡大のみです。ディスクは4 GB単位で最大256 GB、メモリは最大64 GB、CPUは最大32 vCPUまで拡大できます。実際の上限はプランによって決まります。", + "resizeDesc": "データを失わずにマシンを大きくできます。マシンを右クリックして「マシンのサイズを変更」を選ぶか、cmux vm resize を使います。サイズ変更は拡大のみです。ディスクは4 GB単位で最大256 GB、メモリは最大32 GB、CPUは最大16 vCPUまで拡大できます。実際の上限はプランによって決まります。", "pauseTitle": "一時停止と再開", "pauseDesc": "cmux vm pause はマシンのコンピュートを停止します。ディスク、ワークスペース、ターミナルの履歴は残りますが、実行中のプロセスは停止します。cmux vm resume でマシンを再び起動します。一時停止中のマシンを開いたり、そのマシンでコマンドを実行したりしても起動します。", "pauseIdle": "アイドル状態でもマシンは自動では一時停止しません。一時停止するか削除するまで動き続けます。", @@ -4430,7 +4430,7 @@ "errPlan": "Cloud VMには有料プランが必要", "fixPlan": "無料アカウントではマシンを作成できません。料金ページでアップグレードしてください。", "errSize": "サイズに上位プランが必要", - "fixSize": "24 GBを超えるマシンにはcmux Maxが必要です。小さいサイズを選ぶか、アップグレードしてください。", + "fixSize": "8 GBを超えるマシンにはcmux Maxが必要です。小さいサイズを選ぶか、アップグレードしてください。", "errLimit": "アクティブなマシンの上限に達した", "fixLimit": "マシンを一時停止または削除してから、もう一度試してください。", "errLocked": "マシンがロックされている", diff --git a/web/messages/km.json b/web/messages/km.json index bfdb2641c19a..ecdae8fff724 100644 --- a/web/messages/km.json +++ b/web/messages/km.json @@ -489,11 +489,11 @@ ], "pro": [ "ភ្នាក់ងារពពកនៅលើ Cloud VMs", - "RAM 24 GB និង vCPU 6 ចែករំលែកគ្រប់ VM", + "Cloud VMs ចំនួន 5 ដែលនីមួយៗមាន vCPU 4 និង RAM 8 GB", "កម្មវិធី cmux សម្រាប់ iOS" ], "max": [ - "RAM 64 GB និង vCPU 16 ចែករំលែកគ្រប់ VM", + "Cloud VMs ចំនួន 5 ដែលនីមួយៗមាន vCPU 16 និង RAM 32 GB", "ម៉ាស៊ីនធំជាងមុន", "អ្វីៗទាំងអស់ក្នុង Pro" ], @@ -2838,12 +2838,12 @@ "limitsTitle": "ដែនកំណត់គម្រោង", "limitsDesc": "ដែនកំណត់គម្រោងរាប់ចំនួនម៉ាស៊ីន មិនមែនបណ្ដុំ CPU ឬអង្គចងចាំរួមគ្នាទេ។ ម៉ាស៊ីននីមួយៗទទួលបានធនធានតាមទំហំរបស់វា។", "limitsFree": "គណនីឥតគិតថ្លៃមិនអាចបង្កើតម៉ាស៊ីនបានទេ។", - "limitsPaid": "គណនី Pro និង Max អាចមានម៉ាស៊ីនសកម្មរហូតដល់ 50។ ម៉ាស៊ីនមួយសកម្ម ខណៈវាកំពុងដំណើរការ ឬកំពុងចាប់ផ្ដើម។", - "limitsTeam": "គណនីក្រុមអាចមានម៉ាស៊ីនសកម្មរហូតដល់ 50 សម្រាប់កៅអីបង់ប្រាក់នីមួយៗ។", - "limitsMax": "ម៉ាស៊ីនធំជាង 24 GB ត្រូវការ cmux Max។", + "limitsPaid": "គណនី Pro និង Max អាចមានម៉ាស៊ីនសកម្មរហូតដល់ 5។ ម៉ាស៊ីនមួយសកម្ម ខណៈវាកំពុងដំណើរការ ឬកំពុងចាប់ផ្ដើម។", + "limitsTeam": "គណនីក្រុមអាចមានម៉ាស៊ីនសកម្មរហូតដល់ 5 សម្រាប់កៅអីបង់ប្រាក់នីមួយៗ។", + "limitsMax": "ម៉ាស៊ីនធំជាង 8 GB ត្រូវការ cmux Max។ ម៉ាស៊ីន Max អាចមានរហូតដល់ 32 GB និង 16 vCPU។", "limitsPricing": "សូមមើលទំព័រតម្លៃសម្រាប់តម្លៃបច្ចុប្បន្ន។ មិនមានការវាស់ការប្រើប្រាស់ និងមិនមានការគិតថ្លៃលើសទេ។", "resizeTitle": "ប្ដូរទំហំ", - "resizeDesc": "អ្នកអាចពង្រីកម៉ាស៊ីនដោយមិនបាត់ទិន្នន័យ។ ចុចកណ្ដុរស្ដាំលើម៉ាស៊ីន ហើយជ្រើសរើស Resize machine ឬប្រើ cmux vm resize។ ការប្ដូរទំហំអាចពង្រីកម៉ាស៊ីនបានតែប៉ុណ្ណោះ។ ថាសកើនឡើងម្ដង 4 GB រហូតដល់ 256 GB អង្គចងចាំរហូតដល់ 64 GB និង CPU រហូតដល់ 32 vCPU។ គម្រោងរបស់អ្នកកំណត់កម្រិតអតិបរមាពិតប្រាកដ។", + "resizeDesc": "អ្នកអាចពង្រីកម៉ាស៊ីនដោយមិនបាត់ទិន្នន័យ។ ចុចកណ្ដុរស្ដាំលើម៉ាស៊ីន ហើយជ្រើសរើស Resize machine ឬប្រើ cmux vm resize។ ការប្ដូរទំហំអាចពង្រីកម៉ាស៊ីនបានតែប៉ុណ្ណោះ។ ថាសកើនឡើងម្ដង 4 GB រហូតដល់ 256 GB អង្គចងចាំរហូតដល់ 32 GB និង CPU រហូតដល់ 16 vCPU។ គម្រោងរបស់អ្នកកំណត់កម្រិតអតិបរមាពិតប្រាកដ។", "pauseTitle": "ផ្អាក និងបន្ត", "pauseDesc": "cmux vm pause បញ្ឈប់ការគណនារបស់ម៉ាស៊ីន។ ថាស workspace និងប្រវត្តិទែមីណលនៅដដែល។ ដំណើរការដែលកំពុងដំណើរការនឹងឈប់។ cmux vm resume ចាប់ផ្ដើមម៉ាស៊ីនម្ដងទៀត។ ការបើកម៉ាស៊ីនដែលបានផ្អាក ឬដំណើរការពាក្យបញ្ជានៅលើវា ក៏ចាប់ផ្ដើមវាដែរ។", "pauseIdle": "ម៉ាស៊ីនមិនផ្អាកដោយខ្លួនឯងនៅពេលទំនេរទេ។ ម៉ាស៊ីនបន្តដំណើរការរហូតដល់អ្នកផ្អាក ឬលុបវា។", @@ -2994,7 +2994,7 @@ "errPlan": "Cloud VM តម្រូវឱ្យមានគម្រោងបង់ប្រាក់", "fixPlan": "គណនីឥតគិតថ្លៃមិនអាចបង្កើតម៉ាស៊ីនបានទេ។ ដំឡើងកម្រិតនៅលើទំព័រតម្លៃ។", "errSize": "ទំហំនេះត្រូវការគម្រោងធំជាង", - "fixSize": "ម៉ាស៊ីនធំជាង 24 GB ត្រូវការ cmux Max។ ជ្រើសរើសទំហំតូចជាង ឬដំឡើងកម្រិត។", + "fixSize": "ម៉ាស៊ីនធំជាង 8 GB ត្រូវការ cmux Max។ ជ្រើសរើសទំហំតូចជាង ឬដំឡើងកម្រិត។", "errLimit": "ឈានដល់ដែនកំណត់ម៉ាស៊ីនសកម្ម", "fixLimit": "ផ្អាក ឬលុបម៉ាស៊ីនមួយ រួចព្យាយាមម្ដងទៀត។", "errLocked": "ម៉ាស៊ីនត្រូវបានចាក់សោ", diff --git a/web/messages/ko.json b/web/messages/ko.json index 37dfe29c98a9..5cdf6e17b014 100644 --- a/web/messages/ko.json +++ b/web/messages/ko.json @@ -489,11 +489,11 @@ ], "pro": [ "Cloud VM의 클라우드 에이전트", - "VM 전체가 공유하는 24 GB RAM과 vCPU 6개", + "각각 vCPU 4개와 8 GB RAM을 갖춘 Cloud VM 5대", "cmux iOS 앱" ], "max": [ - "VM 전체가 공유하는 64 GB RAM과 vCPU 16개", + "각각 vCPU 16개와 32 GB RAM을 갖춘 Cloud VM 5대", "더 큰 머신 크기", "Pro의 모든 기능" ], @@ -2837,12 +2837,12 @@ "limitsTitle": "플랜 한도", "limitsDesc": "플랜 한도는 공유 CPU나 메모리 풀이 아니라 머신 수를 기준으로 합니다. 각 머신은 해당 크기만큼의 리소스를 받습니다.", "limitsFree": "무료 계정은 머신을 만들 수 없습니다.", - "limitsPaid": "Pro 및 Max 계정은 활성 머신을 최대 50대까지 가질 수 있습니다. 실행 중이거나 시작 중인 머신이 활성 머신입니다.", - "limitsTeam": "Team 계정은 유료 시트 하나당 활성 머신을 최대 50대까지 가질 수 있습니다.", - "limitsMax": "24 GB보다 큰 머신에는 cmux Max가 필요합니다.", + "limitsPaid": "Pro 및 Max 계정은 활성 머신을 최대 5대까지 가질 수 있습니다. 실행 중이거나 시작 중인 머신이 활성 머신입니다.", + "limitsTeam": "Team 계정은 유료 시트 하나당 활성 머신을 최대 5대까지 가질 수 있습니다.", + "limitsMax": "8 GB보다 큰 머신에는 cmux Max가 필요합니다. Max 머신은 최대 32 GB와 vCPU 16개까지 가능합니다.", "limitsPricing": "현재 가격은 가격 페이지를 확인하세요. 사용량 기반 과금이나 초과 요금은 없습니다.", "resizeTitle": "크기 조정", - "resizeDesc": "데이터 손실 없이 머신을 더 크게 만들 수 있습니다. 머신을 오른쪽 클릭하고 Resize machine을 선택하거나 cmux vm resize를 사용합니다. 크기 조정은 머신을 키우는 것만 가능합니다. 디스크는 4 GB 단위로 최대 256 GB, 메모리는 최대 64 GB, CPU는 최대 32 vCPU까지 늘릴 수 있습니다. 실제 최대치는 플랜에 따라 정해집니다.", + "resizeDesc": "데이터 손실 없이 머신을 더 크게 만들 수 있습니다. 머신을 오른쪽 클릭하고 Resize machine을 선택하거나 cmux vm resize를 사용합니다. 크기 조정은 머신을 키우는 것만 가능합니다. 디스크는 4 GB 단위로 최대 256 GB, 메모리는 최대 32 GB, CPU는 최대 16 vCPU까지 늘릴 수 있습니다. 실제 최대치는 플랜에 따라 정해집니다.", "pauseTitle": "일시 중지와 재개", "pauseDesc": "cmux vm pause는 머신의 컴퓨팅을 중지합니다. 디스크, 워크스페이스, 터미널 기록은 유지되고, 실행 중인 프로세스는 중지됩니다. cmux vm resume은 머신을 다시 시작합니다. 일시 중지된 머신을 열거나 그 머신에서 명령을 실행해도 머신이 시작됩니다.", "pauseIdle": "머신은 유휴 상태여도 스스로 일시 중지되지 않습니다. 일시 중지하거나 삭제할 때까지 계속 실행됩니다.", @@ -2993,7 +2993,7 @@ "errPlan": "Cloud VM에는 유료 플랜이 필요함", "fixPlan": "무료 계정은 머신을 만들 수 없습니다. 가격 페이지에서 업그레이드하세요.", "errSize": "선택한 크기에 더 높은 플랜이 필요함", - "fixSize": "24 GB보다 큰 머신에는 cmux Max가 필요합니다. 더 작은 크기를 고르거나 업그레이드하세요.", + "fixSize": "8 GB보다 큰 머신에는 cmux Max가 필요합니다. 더 작은 크기를 고르거나 업그레이드하세요.", "errLimit": "활성 머신 한도에 도달함", "fixLimit": "머신을 일시 중지하거나 삭제한 뒤 다시 시도하세요.", "errLocked": "머신이 잠겨 있음", diff --git a/web/messages/no.json b/web/messages/no.json index f2f28565054f..1a0300c694ab 100644 --- a/web/messages/no.json +++ b/web/messages/no.json @@ -489,11 +489,11 @@ ], "pro": [ "Skyagenter på Cloud VMs", - "24 GB RAM og 6 vCPU-er delt mellom VM-er", + "5 Cloud VMs med 4 vCPU-er og 8 GB RAM hver", "cmux-appen for iOS" ], "max": [ - "64 GB RAM og 16 vCPU-er delt mellom VM-er", + "5 Cloud VMs med 16 vCPU-er og 32 GB RAM hver", "Større maskinstørrelser", "Alt i Pro" ], @@ -2837,12 +2837,12 @@ "limitsTitle": "Abonnementsgrenser", "limitsDesc": "Abonnementsgrenser teller maskiner, ikke en felles pott med CPU eller minne. Hver maskin får ressursene til sin størrelse.", "limitsFree": "Gratiskontoer kan ikke opprette maskiner.", - "limitsPaid": "Pro- og Max-kontoer kan ha opptil 50 aktive maskiner. En maskin er aktiv mens den kjører eller starter.", - "limitsTeam": "Teamkontoer kan ha opptil 50 aktive maskiner per betalt lisens.", - "limitsMax": "Maskiner større enn 24 GB krever cmux Max.", + "limitsPaid": "Pro- og Max-kontoer kan ha opptil 5 aktive maskiner. En maskin er aktiv mens den kjører eller starter.", + "limitsTeam": "Teamkontoer kan ha opptil 5 aktive maskiner per betalt lisens.", + "limitsMax": "Maskiner større enn 8 GB krever cmux Max. Max-maskiner går opptil 32 GB og 16 vCPU-er.", "limitsPricing": "Se prissiden for gjeldende priser. Det er ingen forbruksmåling og ingen fakturering for overforbruk.", "resizeTitle": "Endre størrelse", - "resizeDesc": "Du kan gjøre en maskin større uten å miste data. Høyreklikk på maskinen og velg Resize machine, eller bruk cmux vm resize. Størrelsesendring kan bare gjøre en maskin større. Disken vokser i steg på 4 GB opptil 256 GB, minnet opptil 64 GB og CPU opptil 32 vCPU. Abonnementet ditt bestemmer det reelle maksimumet.", + "resizeDesc": "Du kan gjøre en maskin større uten å miste data. Høyreklikk på maskinen og velg Resize machine, eller bruk cmux vm resize. Størrelsesendring kan bare gjøre en maskin større. Disken vokser i steg på 4 GB opptil 256 GB, minnet opptil 32 GB og CPU opptil 16 vCPU. Abonnementet ditt bestemmer det reelle maksimumet.", "pauseTitle": "Pause og gjenoppta", "pauseDesc": "cmux vm pause stopper maskinens beregningsressurser. Disken, arbeidsområdene og terminalhistorikken beholdes. Kjørende prosesser stopper. cmux vm resume starter maskinen igjen. Å åpne en maskin på pause eller kjøre en kommando på den starter den også.", "pauseIdle": "Maskiner settes ikke på pause av seg selv når de er inaktive. En maskin kjører til du setter den på pause eller sletter den.", @@ -2993,7 +2993,7 @@ "errPlan": "Cloud-VM-er krever et betalt abonnement", "fixPlan": "Gratiskontoer kan ikke opprette maskiner. Oppgrader på prissiden.", "errSize": "En størrelse krever et større abonnement", - "fixSize": "Maskiner større enn 24 GB krever cmux Max. Velg en mindre størrelse eller oppgrader.", + "fixSize": "Maskiner større enn 8 GB krever cmux Max. Velg en mindre størrelse eller oppgrader.", "errLimit": "Grensen for aktive maskiner er nådd", "fixLimit": "Sett en maskin på pause eller slett den, og prøv igjen.", "errLocked": "Maskinen er låst", diff --git a/web/messages/pl.json b/web/messages/pl.json index ef93e1a01e6a..2070ed9b82c0 100644 --- a/web/messages/pl.json +++ b/web/messages/pl.json @@ -489,11 +489,11 @@ ], "pro": [ "Agenci w chmurze na Cloud VMs", - "24 GB RAM i 6 vCPU współdzielone przez VM", + "5 Cloud VMs, każda z 4 vCPU i 8 GB RAM", "Aplikacja cmux na iOS" ], "max": [ - "64 GB RAM i 16 vCPU współdzielone przez VM", + "5 Cloud VMs, każda z 16 vCPU i 32 GB RAM", "Większe maszyny", "Wszystko z planu Pro" ], @@ -2840,12 +2840,12 @@ "limitsTitle": "Limity planu", "limitsDesc": "Limity planu dotyczą liczby maszyn, a nie wspólnej puli CPU czy pamięci. Każda maszyna dostaje zasoby odpowiadające jej rozmiarowi.", "limitsFree": "Konta darmowe nie mogą tworzyć maszyn.", - "limitsPaid": "Konta Pro i Max mogą mieć do 50 aktywnych maszyn. Maszyna jest aktywna, gdy działa lub się uruchamia.", - "limitsTeam": "Konta zespołowe mogą mieć do 50 aktywnych maszyn na każde płatne stanowisko.", - "limitsMax": "Maszyny większe niż 24 GB wymagają cmux Max.", + "limitsPaid": "Konta Pro i Max mogą mieć do 5 aktywnych maszyn. Maszyna jest aktywna, gdy działa lub się uruchamia.", + "limitsTeam": "Konta zespołowe mogą mieć do 5 aktywnych maszyn na każde płatne stanowisko.", + "limitsMax": "Maszyny większe niż 8 GB wymagają cmux Max. Maszyny Max mają do 32 GB i 16 vCPU.", "limitsPricing": "Aktualne ceny znajdziesz na stronie z cennikiem. Nie ma pomiaru zużycia ani opłat za przekroczenia.", "resizeTitle": "Zmiana rozmiaru", - "resizeDesc": "Możesz powiększyć maszynę bez utraty danych. Kliknij maszynę prawym przyciskiem i wybierz Resize machine lub użyj cmux vm resize. Zmiana rozmiaru może tylko powiększyć maszynę. Dysk rośnie w krokach po 4 GB do 256 GB, pamięć do 64 GB, a CPU do 32 vCPU. Rzeczywiste maksimum wyznacza Twój plan.", + "resizeDesc": "Możesz powiększyć maszynę bez utraty danych. Kliknij maszynę prawym przyciskiem i wybierz Resize machine lub użyj cmux vm resize. Zmiana rozmiaru może tylko powiększyć maszynę. Dysk rośnie w krokach po 4 GB do 256 GB, pamięć do 32 GB, a CPU do 16 vCPU. Rzeczywiste maksimum wyznacza Twój plan.", "pauseTitle": "Wstrzymywanie i wznawianie", "pauseDesc": "cmux vm pause zatrzymuje moc obliczeniową maszyny. Dysk, obszary robocze i historia terminali zostają zachowane. Działające procesy zostają zatrzymane. cmux vm resume ponownie uruchamia maszynę. Otwarcie wstrzymanej maszyny lub uruchomienie na niej polecenia również ją uruchamia.", "pauseIdle": "Maszyny nie wstrzymują się same, gdy są bezczynne. Maszyna działa, dopóki jej nie wstrzymasz lub nie usuniesz.", @@ -2996,7 +2996,7 @@ "errPlan": "Maszyny wirtualne Cloud wymagają płatnego planu", "fixPlan": "Konta darmowe nie mogą tworzyć maszyn. Zmień plan na stronie z cennikiem.", "errSize": "Rozmiar wymaga wyższego planu", - "fixSize": "Maszyny większe niż 24 GB wymagają cmux Max. Wybierz mniejszy rozmiar lub zmień plan.", + "fixSize": "Maszyny większe niż 8 GB wymagają cmux Max. Wybierz mniejszy rozmiar lub zmień plan.", "errLimit": "Osiągnięto limit aktywnych maszyn", "fixLimit": "Wstrzymaj lub usuń maszynę, a następnie spróbuj ponownie.", "errLocked": "Maszyna jest zablokowana", diff --git a/web/messages/pt-BR.json b/web/messages/pt-BR.json index cec2814af407..cd0fe371631c 100644 --- a/web/messages/pt-BR.json +++ b/web/messages/pt-BR.json @@ -489,11 +489,11 @@ ], "pro": [ "Agentes na nuvem em Cloud VMs", - "24 GB de RAM e 6 vCPUs compartilhados entre VMs", + "5 Cloud VMs com 4 vCPUs e 8 GB de RAM cada", "O app cmux para iOS" ], "max": [ - "64 GB de RAM e 16 vCPUs compartilhados entre VMs", + "5 Cloud VMs com 16 vCPUs e 32 GB de RAM cada", "Máquinas maiores", "Tudo do Pro" ], @@ -2840,12 +2840,12 @@ "limitsTitle": "Limites do plano", "limitsDesc": "Os limites do plano contam máquinas, não um conjunto compartilhado de CPU ou memória. Cada máquina recebe os recursos do seu tamanho.", "limitsFree": "Contas gratuitas não podem criar máquinas.", - "limitsPaid": "Contas Pro e Max podem ter até 50 máquinas ativas. Uma máquina está ativa enquanto está em execução ou iniciando.", - "limitsTeam": "Contas de equipe podem ter até 50 máquinas ativas por assento pago.", - "limitsMax": "Máquinas maiores que 24 GB exigem o cmux Max.", + "limitsPaid": "Contas Pro e Max podem ter até 5 máquinas ativas. Uma máquina está ativa enquanto está em execução ou iniciando.", + "limitsTeam": "Contas de equipe podem ter até 5 máquinas ativas por assento pago.", + "limitsMax": "Máquinas maiores que 8 GB exigem o cmux Max. Máquinas Max vão até 32 GB e 16 vCPUs.", "limitsPricing": "Consulte a página de preços para ver os valores atuais. Não há medição de uso nem cobrança por excedente.", "resizeTitle": "Redimensionar", - "resizeDesc": "Você pode aumentar uma máquina sem perder dados. Clique com o botão direito na máquina e escolha Resize machine, ou use cmux vm resize. O redimensionamento só pode aumentar uma máquina. O disco cresce em passos de 4 GB até 256 GB, a memória até 64 GB e a CPU até 32 vCPU. Seu plano define o máximo real.", + "resizeDesc": "Você pode aumentar uma máquina sem perder dados. Clique com o botão direito na máquina e escolha Resize machine, ou use cmux vm resize. O redimensionamento só pode aumentar uma máquina. O disco cresce em passos de 4 GB até 256 GB, a memória até 32 GB e a CPU até 16 vCPU. Seu plano define o máximo real.", "pauseTitle": "Pausar e retomar", "pauseDesc": "cmux vm pause interrompe a computação da máquina. O disco, os espaços de trabalho e o histórico dos terminais permanecem. Os processos em execução param. cmux vm resume inicia a máquina novamente. Abrir uma máquina pausada ou executar um comando nela também a inicia.", "pauseIdle": "As máquinas não pausam sozinhas quando estão ociosas. Uma máquina continua rodando até você pausá-la ou excluí-la.", @@ -2996,7 +2996,7 @@ "errPlan": "As VMs do Cloud exigem um plano pago", "fixPlan": "Contas gratuitas não podem criar máquinas. Faça upgrade na página de preços.", "errSize": "Um tamanho exige um plano maior", - "fixSize": "Máquinas maiores que 24 GB exigem o cmux Max. Escolha um tamanho menor ou faça upgrade.", + "fixSize": "Máquinas maiores que 8 GB exigem o cmux Max. Escolha um tamanho menor ou faça upgrade.", "errLimit": "Limite de máquinas ativas atingido", "fixLimit": "Pause ou exclua uma máquina e tente de novo.", "errLocked": "A máquina está bloqueada", diff --git a/web/messages/ru.json b/web/messages/ru.json index cbb20ef368af..3dc6e798abfb 100644 --- a/web/messages/ru.json +++ b/web/messages/ru.json @@ -489,11 +489,11 @@ ], "pro": [ "Облачные агенты на Cloud VMs", - "24 ГБ RAM и 6 vCPU на все VM", + "5 Cloud VMs, у каждой 4 vCPU и 8 ГБ RAM", "Приложение cmux для iOS" ], "max": [ - "64 ГБ RAM и 16 vCPU на все VM", + "5 Cloud VMs, у каждой 16 vCPU и 32 ГБ RAM", "Более крупные машины", "Всё из Pro" ], @@ -2840,12 +2840,12 @@ "limitsTitle": "Ограничения тарифа", "limitsDesc": "Ограничения тарифа считают машины, а не общий пул CPU или памяти. Каждая машина получает ресурсы своего размера.", "limitsFree": "Бесплатные аккаунты не могут создавать машины.", - "limitsPaid": "Аккаунты Pro и Max могут иметь до 50 активных машин. Машина считается активной, пока она работает или запускается.", - "limitsTeam": "Командные аккаунты могут иметь до 50 активных машин на каждое платное место.", - "limitsMax": "Для машин больше 24 GB нужен cmux Max.", + "limitsPaid": "Аккаунты Pro и Max могут иметь до 5 активных машин. Машина считается активной, пока она работает или запускается.", + "limitsTeam": "Командные аккаунты могут иметь до 5 активных машин на каждое платное место.", + "limitsMax": "Для машин больше 8 GB нужен cmux Max. Машины Max бывают до 32 GB и 16 vCPU.", "limitsPricing": "Актуальные цены указаны на странице цен. Поминутного учета и оплаты за превышение нет.", "resizeTitle": "Изменение размера", - "resizeDesc": "Машину можно увеличить без потери данных. Щелкните машину правой кнопкой и выберите Resize machine или используйте cmux vm resize. Размер можно только увеличить. Диск растет шагами по 4 GB до 256 GB, память до 64 GB, а CPU до 32 vCPU. Фактический максимум задает ваш тариф.", + "resizeDesc": "Машину можно увеличить без потери данных. Щелкните машину правой кнопкой и выберите Resize machine или используйте cmux vm resize. Размер можно только увеличить. Диск растет шагами по 4 GB до 256 GB, память до 32 GB, а CPU до 16 vCPU. Фактический максимум задает ваш тариф.", "pauseTitle": "Пауза и возобновление", "pauseDesc": "cmux vm pause останавливает вычислительные ресурсы машины. Диск, рабочие пространства и история терминалов сохраняются. Запущенные процессы останавливаются. cmux vm resume снова запускает машину. Открытие приостановленной машины или запуск команды на ней тоже ее запускает.", "pauseIdle": "Машины не встают на паузу сами при простое. Машина работает, пока вы ее не приостановите или не удалите.", @@ -2996,7 +2996,7 @@ "errPlan": "Для облачных VM нужен платный тариф", "fixPlan": "Бесплатные аккаунты не могут создавать машины. Перейдите на платный тариф на странице цен.", "errSize": "Для размера нужен тариф выше", - "fixSize": "Для машин больше 24 GB нужен cmux Max. Выберите размер поменьше или повысьте тариф.", + "fixSize": "Для машин больше 8 GB нужен cmux Max. Выберите размер поменьше или повысьте тариф.", "errLimit": "Достигнут лимит активных машин", "fixLimit": "Приостановите или удалите машину и повторите попытку.", "errLocked": "Машина заблокирована", diff --git a/web/messages/th.json b/web/messages/th.json index a03a4d520df4..d852ac19718a 100644 --- a/web/messages/th.json +++ b/web/messages/th.json @@ -489,11 +489,11 @@ ], "pro": [ "เอเจนต์บนคลาวด์ใน Cloud VMs", - "RAM 24 GB และ 6 vCPU ใช้ร่วมกันทุก VM", + "Cloud VMs 5 เครื่อง แต่ละเครื่องมี 4 vCPU และ RAM 8 GB", "แอป cmux สำหรับ iOS" ], "max": [ - "RAM 64 GB และ 16 vCPU ใช้ร่วมกันทุก VM", + "Cloud VMs 5 เครื่อง แต่ละเครื่องมี 16 vCPU และ RAM 32 GB", "เครื่องขนาดใหญ่ขึ้น", "ทุกอย่างใน Pro" ], @@ -2845,12 +2845,12 @@ "limitsTitle": "ข้อจำกัดของแผน", "limitsDesc": "ข้อจำกัดของแผนนับจำนวนเครื่อง ไม่ใช่พูล CPU หรือหน่วยความจำที่ใช้ร่วมกัน แต่ละเครื่องได้ทรัพยากรตามขนาดของตัวเอง", "limitsFree": "บัญชีฟรีสร้างเครื่องไม่ได้", - "limitsPaid": "บัญชี Pro และ Max มีเครื่องที่ใช้งานอยู่ได้สูงสุด 50 เครื่อง เครื่องจะนับว่าใช้งานอยู่ขณะกำลังทำงานหรือกำลังเริ่มต้น", - "limitsTeam": "บัญชีทีมมีเครื่องที่ใช้งานอยู่ได้สูงสุด 50 เครื่องต่อหนึ่งที่นั่งแบบชำระเงิน", - "limitsMax": "เครื่องที่ใหญ่กว่า 24 GB ต้องใช้ cmux Max", + "limitsPaid": "บัญชี Pro และ Max มีเครื่องที่ใช้งานอยู่ได้สูงสุด 5 เครื่อง เครื่องจะนับว่าใช้งานอยู่ขณะกำลังทำงานหรือกำลังเริ่มต้น", + "limitsTeam": "บัญชีทีมมีเครื่องที่ใช้งานอยู่ได้สูงสุด 5 เครื่องต่อหนึ่งที่นั่งแบบชำระเงิน", + "limitsMax": "เครื่องที่ใหญ่กว่า 8 GB ต้องใช้ cmux Max เครื่อง Max มีได้ถึง 32 GB และ 16 vCPU", "limitsPricing": "ดูราคาปัจจุบันได้ที่หน้าราคา ไม่มีการคิดค่าบริการตามการใช้งานและไม่มีค่าใช้จ่ายส่วนเกิน", "resizeTitle": "ปรับขนาด", - "resizeDesc": "คุณขยายเครื่องได้โดยไม่สูญเสียข้อมูล คลิกขวาที่เครื่องแล้วเลือก Resize machine หรือใช้ cmux vm resize การปรับขนาดทำได้เฉพาะการขยายเท่านั้น ดิสก์ขยายทีละ 4 GB ได้ถึง 256 GB หน่วยความจำได้ถึง 64 GB และ CPU ได้ถึง 32 vCPU แผนของคุณเป็นตัวกำหนดค่าสูงสุดจริง", + "resizeDesc": "คุณขยายเครื่องได้โดยไม่สูญเสียข้อมูล คลิกขวาที่เครื่องแล้วเลือก Resize machine หรือใช้ cmux vm resize การปรับขนาดทำได้เฉพาะการขยายเท่านั้น ดิสก์ขยายทีละ 4 GB ได้ถึง 256 GB หน่วยความจำได้ถึง 32 GB และ CPU ได้ถึง 16 vCPU แผนของคุณเป็นตัวกำหนดค่าสูงสุดจริง", "pauseTitle": "หยุดชั่วคราวและทำงานต่อ", "pauseDesc": "cmux vm pause จะหยุดการประมวลผลของเครื่อง ดิสก์ workspace และประวัติเทอร์มินัลยังคงอยู่ แต่โปรเซสที่ทำงานอยู่จะหยุด cmux vm resume จะเริ่มเครื่องอีกครั้ง การเปิดเครื่องที่หยุดชั่วคราวหรือรันคำสั่งบนเครื่องนั้นก็จะเริ่มเครื่องเช่นกัน", "pauseIdle": "เครื่องจะไม่หยุดชั่วคราวเองเมื่อไม่มีการใช้งาน เครื่องจะทำงานต่อไปจนกว่าคุณจะหยุดชั่วคราวหรือลบ", @@ -3001,7 +3001,7 @@ "errPlan": "Cloud VM ต้องใช้แผนชำระเงิน", "fixPlan": "บัญชีฟรีสร้างเครื่องไม่ได้ อัปเกรดได้ที่หน้าราคา", "errSize": "ขนาดนี้ต้องใช้แผนที่สูงกว่า", - "fixSize": "เครื่องที่ใหญ่กว่า 24 GB ต้องใช้ cmux Max เลือกขนาดที่เล็กกว่าหรืออัปเกรด", + "fixSize": "เครื่องที่ใหญ่กว่า 8 GB ต้องใช้ cmux Max เลือกขนาดที่เล็กกว่าหรืออัปเกรด", "errLimit": "ถึงขีดจำกัดจำนวนเครื่องที่ใช้งานอยู่แล้ว", "fixLimit": "หยุดชั่วคราวหรือลบเครื่อง แล้วลองอีกครั้ง", "errLocked": "เครื่องถูกล็อก", diff --git a/web/messages/tr.json b/web/messages/tr.json index e5b905ae4cea..02b5435ea36b 100644 --- a/web/messages/tr.json +++ b/web/messages/tr.json @@ -489,11 +489,11 @@ ], "pro": [ "Cloud VMs üzerinde bulut ajanları", - "VM'ler arasında paylaşılan 24 GB RAM ve 6 vCPU", + "Her biri 4 vCPU ve 8 GB RAM'e sahip 5 Cloud VM", "cmux iOS uygulaması" ], "max": [ - "VM'ler arasında paylaşılan 64 GB RAM ve 16 vCPU", + "Her biri 16 vCPU ve 32 GB RAM'e sahip 5 Cloud VM", "Daha büyük makine boyutları", "Pro'daki her şey" ], @@ -2838,12 +2838,12 @@ "limitsTitle": "Plan sınırları", "limitsDesc": "Plan sınırları ortak bir CPU veya bellek havuzunu değil, makineleri sayar. Her makine kendi boyutunun kaynaklarını alır.", "limitsFree": "Ücretsiz hesaplar makine oluşturamaz.", - "limitsPaid": "Pro ve Max hesaplarında en fazla 50 etkin makine olabilir. Bir makine çalışırken veya başlatılırken etkin sayılır.", - "limitsTeam": "Ekip hesaplarında her ücretli koltuk için en fazla 50 etkin makine olabilir.", - "limitsMax": "24 GB'tan büyük makineler için cmux Max gerekir.", + "limitsPaid": "Pro ve Max hesaplarında en fazla 5 etkin makine olabilir. Bir makine çalışırken veya başlatılırken etkin sayılır.", + "limitsTeam": "Ekip hesaplarında her ücretli koltuk için en fazla 5 etkin makine olabilir.", + "limitsMax": "8 GB'tan büyük makineler için cmux Max gerekir. Max makineleri 32 GB'a ve 16 vCPU'ya kadar çıkar.", "limitsPricing": "Güncel fiyatlar için fiyatlandırma sayfasına bakın. Kullanım ölçümü ve aşım ücreti yoktur.", "resizeTitle": "Yeniden boyutlandırma", - "resizeDesc": "Bir makineyi veri kaybı olmadan büyütebilirsiniz. Makineye sağ tıklayıp Resize machine'i seçin veya cmux vm resize kullanın. Yeniden boyutlandırma yalnızca büyütebilir. Disk 4 GB'lık adımlarla 256 GB'a, bellek 64 GB'a ve CPU 32 vCPU'ya kadar büyür. Gerçek üst sınırı planınız belirler.", + "resizeDesc": "Bir makineyi veri kaybı olmadan büyütebilirsiniz. Makineye sağ tıklayıp Resize machine'i seçin veya cmux vm resize kullanın. Yeniden boyutlandırma yalnızca büyütebilir. Disk 4 GB'lık adımlarla 256 GB'a, bellek 32 GB'a ve CPU 16 vCPU'ya kadar büyür. Gerçek üst sınırı planınız belirler.", "pauseTitle": "Duraklatma ve sürdürme", "pauseDesc": "cmux vm pause makinenin işlem kaynaklarını durdurur. Disk, çalışma alanları ve terminal geçmişi korunur. Çalışan işlemler durur. cmux vm resume makineyi yeniden başlatır. Duraklatılmış bir makineyi açmak veya üzerinde komut çalıştırmak da onu başlatır.", "pauseIdle": "Makineler boşta kaldıklarında kendiliğinden duraklamaz. Bir makine siz onu duraklatana veya silene kadar çalışmaya devam eder.", @@ -2994,7 +2994,7 @@ "errPlan": "Cloud VM'ler için ücretli plan gerekir", "fixPlan": "Ücretsiz hesaplar makine oluşturamaz. Fiyatlandırma sayfasından planınızı yükseltin.", "errSize": "Bir boyut daha büyük bir plan gerektiriyor", - "fixSize": "24 GB'tan büyük makineler için cmux Max gerekir. Daha küçük bir boyut seçin veya planınızı yükseltin.", + "fixSize": "8 GB'tan büyük makineler için cmux Max gerekir. Daha küçük bir boyut seçin veya planınızı yükseltin.", "errLimit": "Etkin makine sınırına ulaşıldı", "fixLimit": "Bir makineyi duraklatın veya silin, ardından yeniden deneyin.", "errLocked": "Makine kilitli", diff --git a/web/messages/uk.json b/web/messages/uk.json index 101a07b7e67b..a4e676eda302 100644 --- a/web/messages/uk.json +++ b/web/messages/uk.json @@ -489,11 +489,11 @@ ], "pro": [ "Хмарні агенти на Cloud VMs", - "24 ГБ RAM і 6 vCPU на всі VM", + "5 Cloud VMs, кожна з 4 vCPU і 8 ГБ RAM", "Застосунок cmux для iOS" ], "max": [ - "64 ГБ RAM і 16 vCPU на всі VM", + "5 Cloud VMs, кожна з 16 vCPU і 32 ГБ RAM", "Більші машини", "Усе з Pro" ], @@ -2908,12 +2908,12 @@ "limitsTitle": "Обмеження тарифу", "limitsDesc": "Обмеження тарифу рахують машини, а не спільний пул CPU чи пам’яті. Кожна машина отримує ресурси свого розміру.", "limitsFree": "Безкоштовні акаунти не можуть створювати машини.", - "limitsPaid": "Акаунти Pro і Max можуть мати до 50 активних машин. Машина вважається активною, поки вона працює або запускається.", - "limitsTeam": "Командні акаунти можуть мати до 50 активних машин на кожне платне місце.", - "limitsMax": "Для машин понад 24 GB потрібен cmux Max.", + "limitsPaid": "Акаунти Pro і Max можуть мати до 5 активних машин. Машина вважається активною, поки вона працює або запускається.", + "limitsTeam": "Командні акаунти можуть мати до 5 активних машин на кожне платне місце.", + "limitsMax": "Для машин понад 8 GB потрібен cmux Max. Машини Max мають до 32 GB і 16 vCPU.", "limitsPricing": "Актуальні ціни вказано на сторінці цін. Погодинного обліку й оплати за перевищення немає.", "resizeTitle": "Зміна розміру", - "resizeDesc": "Машину можна збільшити без втрати даних. Клацніть машину правою кнопкою й виберіть Resize machine або скористайтеся cmux vm resize. Розмір можна лише збільшити. Диск зростає кроками по 4 GB до 256 GB, пам’ять до 64 GB, а CPU до 32 vCPU. Фактичний максимум задає ваш тариф.", + "resizeDesc": "Машину можна збільшити без втрати даних. Клацніть машину правою кнопкою й виберіть Resize machine або скористайтеся cmux vm resize. Розмір можна лише збільшити. Диск зростає кроками по 4 GB до 256 GB, пам’ять до 32 GB, а CPU до 16 vCPU. Фактичний максимум задає ваш тариф.", "pauseTitle": "Пауза та відновлення", "pauseDesc": "cmux vm pause зупиняє обчислювальні ресурси машини. Диск, робочі простори й історія терміналів зберігаються. Запущені процеси зупиняються. cmux vm resume знову запускає машину. Відкриття призупиненої машини або запуск команди на ній теж її запускає.", "pauseIdle": "Машини не призупиняються самі під час простою. Машина працює, доки ви її не призупините або не видалите.", @@ -3064,7 +3064,7 @@ "errPlan": "Для хмарних VM потрібен платний тариф", "fixPlan": "Безкоштовні акаунти не можуть створювати машини. Перейдіть на платний тариф на сторінці цін.", "errSize": "Для розміру потрібен вищий тариф", - "fixSize": "Для машин понад 24 GB потрібен cmux Max. Виберіть менший розмір або підвищте тариф.", + "fixSize": "Для машин понад 8 GB потрібен cmux Max. Виберіть менший розмір або підвищте тариф.", "errLimit": "Досягнуто ліміту активних машин", "fixLimit": "Призупиніть або видаліть машину й спробуйте знову.", "errLocked": "Машину заблоковано", diff --git a/web/messages/zh-CN.json b/web/messages/zh-CN.json index 9e8f7fe27c5c..0a56297205f3 100644 --- a/web/messages/zh-CN.json +++ b/web/messages/zh-CN.json @@ -489,11 +489,11 @@ ], "pro": [ "在 Cloud VM 上运行云端智能体", - "所有 VM 共享 24 GB 内存和 6 个 vCPU", + "5 台 Cloud VM,每台 4 个 vCPU 和 8 GB 内存", "cmux iOS 应用" ], "max": [ - "所有 VM 共享 64 GB 内存和 16 个 vCPU", + "5 台 Cloud VM,每台 16 个 vCPU 和 32 GB 内存", "更大的机器规格", "Pro 的全部功能" ], @@ -2840,12 +2840,12 @@ "limitsTitle": "套餐限制", "limitsDesc": "套餐限制按机器数量计算,而不是共享的 CPU 或内存池。每台机器都会获得其规格对应的资源。", "limitsFree": "免费账户无法创建机器。", - "limitsPaid": "Pro 和 Max 账户最多可拥有 50 台活跃机器。正在运行或正在启动的机器即为活跃机器。", - "limitsTeam": "Team 账户每个付费席位最多可拥有 50 台活跃机器。", - "limitsMax": "大于 24 GB 的机器需要 cmux Max。", + "limitsPaid": "Pro 和 Max 账户最多可拥有 5 台活跃机器。正在运行或正在启动的机器即为活跃机器。", + "limitsTeam": "Team 账户每个付费席位最多可拥有 5 台活跃机器。", + "limitsMax": "大于 8 GB 的机器需要 cmux Max。Max 机器最高可达 32 GB 和 16 vCPU。", "limitsPricing": "当前价格请查看定价页面。不按用量计费,也没有超额费用。", "resizeTitle": "调整规格", - "resizeDesc": "你可以在不丢失数据的情况下扩大机器。右键点击机器并选择 Resize machine,或使用 cmux vm resize。调整规格只能扩大机器。磁盘以 4 GB 为步长最多扩展到 256 GB,内存最多 64 GB,CPU 最多 32 vCPU。实际上限由你的套餐决定。", + "resizeDesc": "你可以在不丢失数据的情况下扩大机器。右键点击机器并选择 Resize machine,或使用 cmux vm resize。调整规格只能扩大机器。磁盘以 4 GB 为步长最多扩展到 256 GB,内存最多 32 GB,CPU 最多 16 vCPU。实际上限由你的套餐决定。", "pauseTitle": "暂停与恢复", "pauseDesc": "cmux vm pause 会停止机器的计算资源。磁盘、工作区和终端历史会保留,正在运行的进程会停止。cmux vm resume 会重新启动机器。打开已暂停的机器或在其上运行命令也会启动它。", "pauseIdle": "机器空闲时不会自动暂停。机器会一直运行,直到你暂停或删除它。", @@ -2996,7 +2996,7 @@ "errPlan": "Cloud VM 需要付费套餐", "fixPlan": "免费账户无法创建机器。请在定价页面升级。", "errSize": "所选规格需要更高级的套餐", - "fixSize": "大于 24 GB 的机器需要 cmux Max。请选择更小的规格或升级。", + "fixSize": "大于 8 GB 的机器需要 cmux Max。请选择更小的规格或升级。", "errLimit": "已达到活跃机器数量上限", "fixLimit": "暂停或删除一台机器后重试。", "errLocked": "机器已被锁定", diff --git a/web/messages/zh-TW.json b/web/messages/zh-TW.json index 592d576ed30b..16ac34615aab 100644 --- a/web/messages/zh-TW.json +++ b/web/messages/zh-TW.json @@ -489,11 +489,11 @@ ], "pro": [ "在 Cloud VM 上執行雲端代理", - "所有 VM 共用 24 GB RAM 和 6 個 vCPU", + "5 台 Cloud VM,每台 4 個 vCPU 和 8 GB RAM", "cmux iOS App" ], "max": [ - "所有 VM 共用 64 GB RAM 和 16 個 vCPU", + "5 台 Cloud VM,每台 16 個 vCPU 和 32 GB RAM", "更大的機器規格", "Pro 的所有功能" ], @@ -2839,12 +2839,12 @@ "limitsTitle": "方案限制", "limitsDesc": "方案限制以機器數量計算,而不是共用的 CPU 或記憶體資源池。每台機器都會取得其規格對應的資源。", "limitsFree": "免費帳號無法建立機器。", - "limitsPaid": "Pro 和 Max 帳號最多可擁有 50 台使用中的機器。正在執行或正在啟動的機器即為使用中的機器。", - "limitsTeam": "Team 帳號每個付費席位最多可擁有 50 台使用中的機器。", - "limitsMax": "大於 24 GB 的機器需要 cmux Max。", + "limitsPaid": "Pro 和 Max 帳號最多可擁有 5 台使用中的機器。正在執行或正在啟動的機器即為使用中的機器。", + "limitsTeam": "Team 帳號每個付費席位最多可擁有 5 台使用中的機器。", + "limitsMax": "大於 8 GB 的機器需要 cmux Max。Max 機器最高可達 32 GB 和 16 vCPU。", "limitsPricing": "目前的價格請參閱定價頁面。不依用量計費,也沒有超額費用。", "resizeTitle": "調整規格", - "resizeDesc": "你可以在不遺失資料的情況下擴大機器。在機器上按右鍵並選擇 Resize machine,或使用 cmux vm resize。調整規格只能擴大機器。磁碟以 4 GB 為單位最多擴充到 256 GB,記憶體最多 64 GB,CPU 最多 32 vCPU。實際上限由你的方案決定。", + "resizeDesc": "你可以在不遺失資料的情況下擴大機器。在機器上按右鍵並選擇 Resize machine,或使用 cmux vm resize。調整規格只能擴大機器。磁碟以 4 GB 為單位最多擴充到 256 GB,記憶體最多 32 GB,CPU 最多 16 vCPU。實際上限由你的方案決定。", "pauseTitle": "暫停與繼續", "pauseDesc": "cmux vm pause 會停止機器的運算資源。磁碟、工作區和終端機歷史記錄會保留,執行中的程序則會停止。cmux vm resume 會再次啟動機器。開啟已暫停的機器或在其上執行指令也會啟動它。", "pauseIdle": "機器閒置時不會自動暫停。機器會持續執行,直到你暫停或刪除它。", @@ -2995,7 +2995,7 @@ "errPlan": "Cloud VM 需要付費方案", "fixPlan": "免費帳號無法建立機器。請在定價頁面升級。", "errSize": "所選規格需要更高階的方案", - "fixSize": "大於 24 GB 的機器需要 cmux Max。請選擇較小的規格或升級。", + "fixSize": "大於 8 GB 的機器需要 cmux Max。請選擇較小的規格或升級。", "errLimit": "已達使用中機器數量上限", "fixLimit": "暫停或刪除一台機器後再試一次。", "errLocked": "機器已被鎖定", diff --git a/web/services/billing/plans.ts b/web/services/billing/plans.ts index 90bea1e7923d..e271cb984642 100644 --- a/web/services/billing/plans.ts +++ b/web/services/billing/plans.ts @@ -44,8 +44,8 @@ export const TEAM_PRICING_USD = { } as const satisfies MonthlyOnlyPlanPricing; /** - * Max is a personal plan above Pro: the same allowance, plus the 32 GB and - * 64 GB machine sizes Pro cannot start. It is monthly only, so there is no + * Max is a personal plan above Pro: the same machine count, plus the 16, 24, + * and 32 GB machine sizes (up to 16 vCPU) Pro cannot start. It is monthly only, so there is no * annual price and no interval selector on its card. */ export const MAX_PRICING_USD = { diff --git a/web/services/billing/pro.ts b/web/services/billing/pro.ts index 97f3acf6efed..975713b1daec 100644 --- a/web/services/billing/pro.ts +++ b/web/services/billing/pro.ts @@ -28,7 +28,7 @@ import { export const PRO_PLAN_ID = "pro"; export const GO_PLAN_ID = "go"; -// Max is Pro plus the 32 GB and 64 GB machine sizes. It is a personal +// Max is Pro plus the 16, 24, and 32 GB machine sizes. It is a personal // subscription like Pro: same Stripe customer scope, same metadata mirror // (`cmuxPlan: "max"`), and it satisfies every "is Pro" check. export const MAX_PLAN_ID = "max"; @@ -768,7 +768,7 @@ export function metadataPlanId(raw: unknown): string | null { * Writes `cmuxPlan: "team"` and `cmuxSeats` (the subscription quantity) into * a Stack team's clientReadOnlyMetadata while a Stripe Team subscription is * active; both are removed when it lapses. Seats size the team's Cloud VM - * allowance (50 machines per seat), so a quantity change must land here even + * allowance (5 machines per seat), so a quantity change must land here even * when the plan id is unchanged. `cmuxVmPlan` is operator-owned and left * untouched. */ diff --git a/web/services/vms/README.md b/web/services/vms/README.md index 48a839af1d50..f3daaf69ed01 100644 --- a/web/services/vms/README.md +++ b/web/services/vms/README.md @@ -644,15 +644,15 @@ machine (no env, no rule, still no secret) and must never be set in production. The usage ledger is in Postgres. VM create pricing gates can use Stack Auth payment items, but free-plan create credits are opt-in. Configure `CMUX_VM_PLAN_FREE_CREATE_CREDIT_ITEM_ID` only when the free plan should consume a prepaid create-credit bucket. When enabled, the create workflow records a one-time local grant row, seeds the configured Stack Auth item credits once per billing team, reserves one create credit only for a newly inserted row, calls the provider, and refunds the credit if provisioning fails before a usable VM exists. -Plan limits are team-based. Stack Auth personal teams should stay enabled for both dev/staging and production projects (`createTeamOnSignUp` / `teams.createPersonalTeamOnSignUp`). New VM rows store `billing_team_id` and `billing_plan_id`; the free plan allows zero active VMs by default and remains at zero regardless of stale free-limit env values while the paid-plan gate is on. A deliberate `CMUX_VM_ALLOW_FREE_PROVISIONING=1` escape hatch re-enables the configured free allowance for local demos or a controlled rollback; Go is a $10/month personal starter plan with one active 2 vCPU / 4 GiB / 16 GB VM and two saved VM records. It includes 40 VM-hours per Stripe billing period. PostgreSQL runtime records commit with VM state changes, and an account-level lock limits Go to two retained VMs in total, with one active. Freestyle lifetime runtime caps enforce the remaining allowance and block restarts until cmux grants a new allowance. A minute job reconciles exhausted machines. Go disk growth beyond 16 GiB is refused; Pro and Max get the allowance sold on /pricing, 50 active machines per billing team, multiplied by the Team subscription's paid seats (`cmuxSeats` in the team's Stack metadata, written from the Stripe quantity) so "50 per paid seat" holds for the whole team (`PAID_MAX_ACTIVE_VMS_DEFAULT`; `maxActiveVms` in entitlements and the list response). New machines use validated Freestyle base snapshots from 4 GiB RAM / 16 GB disk through 64 GiB RAM / 128 GB disk, including the 24 GiB / 96 GB intermediate size. The default is 8 GiB RAM and 32 GB disk. Free, Pro, Team, and Founder's plans may start machines up to 24 GiB; the 32 GiB and 64 GiB sizes require the Max plan (`maxMemoryMbForPlan`, `lockedMemoryOptionsMbForPlan`). The list response names the locked sizes and the upgrade plan, and a create with a locked size returns `402 vm_memory_requires_plan` rather than coercing to a smaller machine. Each machine has its own CPU, memory, and disk. The repository enforces only the machine-count allowance under the billing-team lock; resource metadata supports per-machine fork, snapshot, and resize recovery. Disk growth is independent, grow-only, and capped at 256 GiB in 4 GiB steps. The Freestyle driver applies the default at create (`CMUX_VM_DISK_MB` overrides it), and the resize API reads provider stats before and after the provider confirms the change. Destroyed VMs do not count against a limit; pausing frees the active slot, while Go still counts the retained VM toward its saved limit. Paid plan activation should write a readable plan id such as `pro` into Stack Auth team read-only metadata (`cmuxVmPlan`) or equivalent billing sync metadata. Paid-plan `CMUX_VM_PLAN__MAX_ACTIVE_VMS`, `CMUX_VM_PAID_MAX_ACTIVE_VMS`, and `CMUX_VM_SHARED_CPU_LIMIT_ENABLED` are retired and ignored. The paid allowance lives in code; `CMUX_VM_CREATE_ENABLED=0` remains the provisioning incident control. Paid plans only consume Stack Auth create credits when `CMUX_VM_PLAN__CREATE_CREDIT_ITEM_ID` or the global `CMUX_VM_CREATE_CREDIT_ITEM_ID` is configured. +Plan limits are team-based. Stack Auth personal teams should stay enabled for both dev/staging and production projects (`createTeamOnSignUp` / `teams.createPersonalTeamOnSignUp`). New VM rows store `billing_team_id` and `billing_plan_id`; the free plan allows zero active VMs by default and remains at zero regardless of stale free-limit env values while the paid-plan gate is on. A deliberate `CMUX_VM_ALLOW_FREE_PROVISIONING=1` escape hatch re-enables the configured free allowance for local demos or a controlled rollback; Go is a $10/month personal starter plan with one active 2 vCPU / 4 GiB / 16 GB VM and two saved VM records. It includes 40 VM-hours per Stripe billing period. PostgreSQL runtime records commit with VM state changes, and an account-level lock limits Go to two retained VMs in total, with one active. Freestyle lifetime runtime caps enforce the remaining allowance and block restarts until cmux grants a new allowance. A minute job reconciles exhausted machines. Go disk growth beyond 16 GiB is refused; Pro and Max get the allowance sold on /pricing, 5 active machines per billing team, multiplied by the Team subscription's paid seats (`cmuxSeats` in the team's Stack metadata, written from the Stripe quantity) so "5 per paid seat" holds for the whole team (`PAID_MAX_ACTIVE_VMS_DEFAULT`; `maxActiveVms` in entitlements and the list response). New machines use validated Freestyle base snapshots from 4 GiB RAM / 16 GB disk through 32 GiB RAM / 128 GB disk, including the 24 GiB / 96 GB intermediate size. The 64 GiB snapshot stays in the manifest but no plan sells it. The default is 8 GiB RAM and 32 GB disk. Free, Pro, Team, and Founder's plans may start machines up to 4 vCPU / 8 GiB; the 16, 24, and 32 GiB sizes (up to 16 vCPU) require the Max plan (`maxMemoryMbForPlan`, `lockedMemoryOptionsMbForPlan`). The list response names the locked sizes and the upgrade plan, and a create with a locked size returns `402 vm_memory_requires_plan` rather than coercing to a smaller machine. Each machine has its own CPU, memory, and disk. The repository enforces only the machine-count allowance under the billing-team lock; resource metadata supports per-machine fork, snapshot, and resize recovery. Disk growth is independent, grow-only, and capped at 256 GiB in 4 GiB steps. The Freestyle driver applies the default at create (`CMUX_VM_DISK_MB` overrides it), and the resize API reads provider stats before and after the provider confirms the change. Destroyed VMs do not count against a limit; pausing frees the active slot, while Go still counts the retained VM toward its saved limit. Paid plan activation should write a readable plan id such as `pro` into Stack Auth team read-only metadata (`cmuxVmPlan`) or equivalent billing sync metadata. Paid-plan `CMUX_VM_PLAN__MAX_ACTIVE_VMS`, `CMUX_VM_PAID_MAX_ACTIVE_VMS`, and `CMUX_VM_SHARED_CPU_LIMIT_ENABLED` are retired and ignored. The paid allowance lives in code; `CMUX_VM_CREATE_ENABLED=0` remains the provisioning incident control. Paid plans only consume Stack Auth create credits when `CMUX_VM_PLAN__CREATE_CREDIT_ITEM_ID` or the global `CMUX_VM_CREATE_CREDIT_ITEM_ID` is configured. ### The free limit is the paywall moment -`vmActiveLimitExceededResponse` (routeHelpers) renders every provisioning verb's over-limit error. On unpaid plans the message sells the upgrade — with the default zero allowance it is the subscribe gate ("Cloud VMs require a cmux Pro subscription") with `upgradeRequired: true` and `upgradeUrl` pointing at `/pricing` — so clients can show a real upgrade prompt (checkout flow per `skills/cmux-billing`) instead of a dead error. Paid plans see it at the plan allowance (50 active machines, times paid seats on Team) or at an operator incident brake; then the message is operational "delete one" guidance, not a paywall. +`vmActiveLimitExceededResponse` (routeHelpers) renders every provisioning verb's over-limit error. On unpaid plans the message sells the upgrade — with the default zero allowance it is the subscribe gate ("Cloud VMs require a cmux Pro subscription") with `upgradeRequired: true` and `upgradeUrl` pointing at `/pricing` — so clients can show a real upgrade prompt (checkout flow per `skills/cmux-billing`) instead of a dead error. Paid plans see it at the plan allowance (5 active machines, times paid seats on Team) or at an operator incident brake; then the message is operational "delete one" guidance, not a paywall. ### Pricing is flat -Go includes one active VM with the starter resource shape. Pro and Max include up to 50 active VMs (per paid seat on Team) for a flat subscription price, with independent CPU, memory, and disk for each VM. Go is capped by active VM count until usage metering is added. There is no overage billing; an earlier GB-RAM-awake-seconds metering design was considered and dropped to keep pricing simple. Legacy VM resource claims are repaired by the status-reconcile cron in batches of 50, so create and resize requests do not fan out provider stats reads. Legacy resource metadata does not block new machines or consume another machine's capacity. +Go includes one active VM with the starter resource shape. Pro and Max include up to 5 active VMs (per paid seat on Team) for a flat subscription price, with independent CPU, memory, and disk for each VM. Go is capped by active VM count until usage metering is added. There is no overage billing; an earlier GB-RAM-awake-seconds metering design was considered and dropped to keep pricing simple. Legacy VM resource claims are repaired by the status-reconcile cron in batches of 50, so create and resize requests do not fan out provider stats reads. Legacy resource metadata does not block new machines or consume another machine's capacity. # Signed VM model-plane authorization VM model traffic uses one `x-cmux-authorization: Bearer ` header. The diff --git a/web/services/vms/entitlements.ts b/web/services/vms/entitlements.ts index 4dc26d42034a..5a002aea7e38 100644 --- a/web/services/vms/entitlements.ts +++ b/web/services/vms/entitlements.ts @@ -162,22 +162,26 @@ function resolveBillingContext( /** * Machine sizes a person can pick, as memory in MB. The supported ladder is - * 4/16, 8/32, 16/64, 24/96, 32/128, and 64/128 (memory/disk in GB). vCPUs - * follow memory (vcpusForMemoryMb). The server owns this list so clients show + * 4/16, 8/32, 16/64, 24/96, and 32/128 (memory/disk in GB). vCPUs follow + * the image ladder, one per 2 GB. The server owns this list so clients show * valid sizes. BusyBox's 128 MiB image is a bootstrap image, not a coding VM. * Every selected size belongs to one machine, independently of other VMs. */ -export const VM_MEMORY_OPTIONS_MB: readonly number[] = [4096, 8192, 16384, 24576, 32768, 65536]; +export const VM_MEMORY_OPTIONS_MB: readonly number[] = [4096, 8192, 16384, 24576, 32768]; /** - * The largest machine Free, Pro, Team, and Founder's Edition may start. The - * 32 GB and 64 GB rows above it are what Max sells; the plan that unlocks - * them is MEMORY_UPGRADE_PLAN_ID so every surface names the same upgrade. + * The largest machine Free, Pro, Team, and Founder's Edition may start + * (4 vCPU / 8 GB). The 16, 24, and 32 GB rows above it are what Max sells; + * the plan that unlocks them is MEMORY_UPGRADE_PLAN_ID so every surface names + * the same upgrade. */ -export const PLAN_MAX_MEMORY_MB = 24576; +export const PLAN_MAX_MEMORY_MB = 8192; export const GO_PLAN_MAX_MEMORY_MB = 4096; export const GO_PLAN_DEFAULT_MEMORY_MB = 4096; +/** Max machines stop at 16 vCPU / 32 GB. */ export const MAX_PLAN_MAX_MEMORY_MB = Math.max(...VM_MEMORY_OPTIONS_MB); +/** The image ladder pairs one vCPU with every 2 GB of memory. */ +export const VM_PLAN_MEMORY_MB_PER_VCPU = 2048; export const MEMORY_UPGRADE_PLAN_ID = MAX_PLAN_ID; export const GO_MEMORY_UPGRADE_PLAN_ID = PRO_PLAN_ID; @@ -233,12 +237,12 @@ export function maxDiskMbForPlan( : fallback; } -/** vCPU ceiling is derived from the plan's memory tier. */ +/** vCPU ceiling follows the image ladder row at the plan's memory tier. */ export function maxVcpusForPlan( planId: string | null | undefined, env: Record = process.env, ): number { - return Math.max(1, Math.floor(maxMemoryMbForPlan(planId, env) / 4096)); + return Math.max(1, Math.floor(maxMemoryMbForPlan(planId, env) / VM_PLAN_MEMORY_MB_PER_VCPU)); } /** @@ -305,7 +309,7 @@ export function defaultMemoryMbForPlan( * Active-machine ceiling for a plan, or null when there is none. Paid plans * get the allowance sold on /pricing (PAID_MAX_ACTIVE_VMS_DEFAULT), counted * per billing team; a Team subscription multiplies it by its paid seats - * (`cmuxSeats`), so "50 per user" holds for the whole team. Free plans stay + * (`cmuxSeats`), so "5 per user" holds for the whole team. Free plans stay * capped (zero unless free provisioning is allowed). */ export function maxActiveVmsForPlan( diff --git a/web/services/vms/machineSpec.ts b/web/services/vms/machineSpec.ts index f50526502b9e..5fea2eadc39b 100644 --- a/web/services/vms/machineSpec.ts +++ b/web/services/vms/machineSpec.ts @@ -1,9 +1,9 @@ /** - * Paid plans include 50 independent machines per seat. CPU, memory, and disk + * Paid plans include 5 independent machines per seat. CPU, memory, and disk * describe each machine; there is no aggregate resource quota. This module is * dependency-free so provider sizing does not import the billing graph. */ -export const PAID_MAX_ACTIVE_VMS_DEFAULT = 50; +export const PAID_MAX_ACTIVE_VMS_DEFAULT = 5; export const PLAN_MACHINE_MEMORY_MB = 8192; export const VM_MEMORY_MB_PER_VCPU = 4096; diff --git a/web/services/vms/routeHelpers.ts b/web/services/vms/routeHelpers.ts index b72d47eae2e5..ae18067f30d5 100644 --- a/web/services/vms/routeHelpers.ts +++ b/web/services/vms/routeHelpers.ts @@ -548,7 +548,7 @@ export async function invalidVmDisplayNameResponse(request: Request): Promise { expect(html).toContain("For individuals"); expect(html).toContain("For teams and businesses"); expect(html).toContain("Get Max"); - expect(html).toContain("Up to 50 Cloud VMs sharing 64 GB RAM and 16 vCPUs"); + expect(html).toContain("Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM"); expect(html).toContain("Largest Cloud VM"); expect(html).toContain("$60/user/mo"); expect(html).toContain( - "Up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs", + "Up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM", ); expect(html).toContain('

Includes:

'); expect(html).not.toContain('style="min-height:4rem"'); diff --git a/web/tests/billing-max-plan.test.ts b/web/tests/billing-max-plan.test.ts index b8dfab2c2e0e..fbabd6e17ac4 100644 --- a/web/tests/billing-max-plan.test.ts +++ b/web/tests/billing-max-plan.test.ts @@ -31,14 +31,14 @@ describe("Max as a personal plan", () => { for (const options of [{}, { requestedBillingTeamId: "team-1" }]) { const result = resolveVmEntitlements(user, {}, options); expect(result.planId).toBe("max"); - expect(result.maxActiveVms).toBe(150); + expect(result.maxActiveVms).toBe(15); expect(result.billingTeamId).toBe("team-1"); } }); test("legacy memory overrides cannot sell Max sizes to Pro", () => { - expect(maxMemoryMbForPlan("pro", { CMUX_VM_PAID_MAX_MEMORY_MB: "65536" })).toBe(24576); - expect(maxMemoryMbForPlan("pro", { CMUX_VM_PLAN_PRO_MAX_MEMORY_MB: "65536" })).toBe(24576); + expect(maxMemoryMbForPlan("pro", { CMUX_VM_PAID_MAX_MEMORY_MB: "65536" })).toBe(8192); + expect(maxMemoryMbForPlan("pro", { CMUX_VM_PLAN_PRO_MAX_MEMORY_MB: "65536" })).toBe(8192); }); test("max is paid, personal, and outranks pro", () => { expect(isPaidPlanId("max")).toBe(true); diff --git a/web/tests/pricing-page.test.tsx b/web/tests/pricing-page.test.tsx index 99910cb51a05..4de126cfe933 100644 --- a/web/tests/pricing-page.test.tsx +++ b/web/tests/pricing-page.test.tsx @@ -130,7 +130,7 @@ describe("localized pricing page", () => { try { const first = await readInitialMain(reader); expect(first.includes("$50") && first.includes("$200")).toBe(true); - expect(first.includes("Up to 50 Cloud VMs sharing 64 GB RAM and 16 vCPUs")).toBe(true); + expect(first.includes("Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM")).toBe(true); expect(first.includes("animate-pulse")).toBe(false); expect(first.includes("Current plan")).toBe(false); } finally { @@ -200,9 +200,9 @@ describe("localized pricing page", () => { label: "Concurrent Cloud VMs", go: "1", free: "false", - pro: "50", - max: "50", - team: "50 per user", + pro: "5", + max: "5", + team: "5 per user", enterprise: "Custom", }); expect(enMessages.dashboard.billing.free.upsellTitle).toBe( @@ -302,7 +302,7 @@ describe("localized pricing page", () => { expect(html).toContain("$200"); expect(html).toContain("$200 /mo"); expect(html).not.toContain("$200/mo, billed yearly"); - expect(html).toContain("Up to 50 Cloud VMs sharing 64 GB RAM and 16 vCPUs"); + expect(html).toContain("Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM"); expect(html).toContain("Get Go"); expect(html).toContain("2 vCPU, 4 GiB RAM, and 16 GiB disk"); expect(html).toContain("For individuals"); @@ -417,7 +417,7 @@ describe("localized pricing page", () => { expect(html).toContain("$50"); expect(html).toContain("$60"); expect(html).toContain( - "Up to 50 Cloud VMs, with 24 GB RAM and 6 vCPUs shared across all VMs", + "Up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM", ); expect(html).toContain("Unlimited workspaces"); expect(html).not.toContain("Unlimited active Cloud VMs"); diff --git a/web/tests/pro-pricing.test.ts b/web/tests/pro-pricing.test.ts index 0d17333f54da..49709995fcef 100644 --- a/web/tests/pro-pricing.test.ts +++ b/web/tests/pro-pricing.test.ts @@ -86,8 +86,8 @@ describe("pricing plans", () => { describe("VM defaults and pricing copy", () => { const memoryGb = PLAN_MACHINE_MEMORY_MB / 1024; const startingDiskGb = VM_DISK_MB_DEFAULT / 1024; - test("VM creation defaults are separate from advertised shared plan resources", () => { - expect(PAID_MAX_ACTIVE_VMS_DEFAULT).toBe(50); + test("VM creation defaults are separate from advertised plan limits", () => { + expect(PAID_MAX_ACTIVE_VMS_DEFAULT).toBe(5); expect(memoryGb).toBe(8); expect(startingDiskGb).toBe(32); }); @@ -122,31 +122,30 @@ describe("VM defaults and pricing copy", () => { })).toEqual({ vcpus: 1, memoryMb: 4096, diskMb: 65536 }); }); - // These are the advertised plan limits, not the default shape of one VM. - // Keep cards, comparison rows, FAQs, and native strings on the same policy. - for (const [locale, messages, label, shared] of [ - ["en", enMessages, "Resources shared across all Cloud VMs", "shared across all"], - ["ja", jaMessages, "すべての Cloud VM で共有するリソース", "共有"], + // These are the advertised plan limits: a machine count plus the largest + // shape of each machine. There is no shared pool. Keep cards, comparison + // rows, FAQs, and native strings on the same policy. + for (const [locale, messages, label] of [ + ["en", enMessages, "Resources per Cloud VM"], + ["ja", jaMessages, "Cloud VM あたりのリソース"], ] as const) { - test(`${locale} pricing advertises 24 GB RAM and 6 vCPUs shared across up to 50 VMs`, () => { + test(`${locale} pricing advertises 5 VMs with 4 vCPUs and 8 GB RAM each`, () => { const features = messages.pricing.pro.features.join("\n"); - expect(features).toContain("50 "); + expect(features).toMatch(/(?:^|\D)5(?:\D|$)/); const row = messages.pricing.compare.rows.find(row => row.label === label); expect(row).toBeDefined(); const faq = messages.pricing.faq.items.map(item => item.a).join("\n"); for (const copy of [features, row!.pro, row!.team, faq]) { - expect(copy).toContain("24 GB RAM"); - expect(copy).toContain("6 vCPU"); - expect(copy).toContain(shared); + expect(copy).toContain("8 GB RAM"); + expect(copy).toContain("4 vCPU"); } - // Only Max sells the 32 GB and 64 GB sizes; Free, Pro, and Team copy - // must not mention them. The Max card, the "Largest Cloud VM" row, and - // the Max FAQ are the only places those sizes appear. + // Only Max sells the larger sizes; Free, Pro, and Team copy must not + // mention them or the retired shared pool. const { max: _max, compare, faq: _faq, ...otherPlans } = messages.pricing; const nonMaxRows = compare.rows.map(({ max: _rowMax, ...rest }) => rest); const nonMaxCopy = JSON.stringify([otherPlans, nonMaxRows]); - expect(nonMaxCopy).not.toMatch(/(?:8|32|64|256) GB|5 vCPU|each with its own resources|Each machine has its own|各マシンに専用のリソース|各マシンには独立した/); - expect(JSON.stringify(messages.pricing)).not.toMatch(/(?:8|256) GB|5 vCPU|each with its own resources|Each machine has its own|各マシンに専用のリソース|各マシンには独立した/); + expect(nonMaxCopy).not.toMatch(/(?:16|24|32|64) GB|16 vCPU|shared across|を共有/); + expect(JSON.stringify(messages.pricing)).not.toMatch(/(?:24|64) GB|6 vCPUs shared|50 Cloud VMs/); }); } @@ -154,20 +153,20 @@ describe("VM defaults and pricing copy", () => { ["en", enMessages, "Largest Cloud VM", "What does Max add?"], ["ja", jaMessages, "最大の Cloud VM", "Max では何が追加されますか?"], ] as const) { - test(`${locale} Max copy sells the 32 GB and 64 GB machines Pro cannot start`, () => { + test(`${locale} Max copy sells 5 VMs with 16 vCPUs and 32 GB RAM each`, () => { const features = messages.pricing.max.features.join("\n"); - expect(features).toContain("64 GB"); + expect(features).toContain("32 GB"); expect(features).toContain("16 vCPU"); - expect(features).toContain("50"); - expect(features).toContain(locale === "en" ? "sharing" : "共有"); - const sharedRow = messages.pricing.compare.rows.find(row => row.max.includes("16 vCPU")); - expect(sharedRow!.max).toContain(locale === "en" ? "shared across all VMs" : "共有"); + expect(features).toMatch(/(?:^|\D)5(?:\D|$)/); + const perVmRow = messages.pricing.compare.rows.find(row => row.max.includes("16 vCPU")); + expect(perVmRow!.max).toContain("32 GB RAM"); expect(messages.dashboard.billing.max.upsell).toContain("16 vCPU"); + expect(messages.dashboard.billing.max.upsell).toContain("32 GB"); const row = messages.pricing.compare.rows.find(row => row.label === largestLabel); expect(row).toBeDefined(); - expect(row!.max).toBe("64 GB RAM"); + expect(row!.max).toBe("32 GB RAM"); for (const plan of ["free", "pro", "team"] as const) { - expect(row![plan]).toBe("24 GB RAM"); + expect(row![plan]).toBe("8 GB RAM"); } for (const row of messages.pricing.compare.rows) { expect(typeof row.max).toBe("string"); @@ -176,47 +175,43 @@ describe("VM defaults and pricing copy", () => { expect(faq).toBeDefined(); expect(faq!.a).toContain("$200"); expect(faq!.a).toContain("16 vCPU"); - expect(faq!.a).toContain(locale === "en" ? "share a total" : "共有"); expect(faq!.a).toContain("32 GB"); - expect(faq!.a).toContain("64 GB"); - expect(faq!.a).toContain("24 GB"); + expect(faq!.a).toContain("8 GB"); + expect(faq!.a).not.toContain("64 GB"); const billingFaq = messages.pricing.faq.items.map(item => item.a).join("\n"); expect(billingFaq).toContain("$200"); }); } - test("fallback locales inherit the shared resource wording", async () => { + test("fallback locales inherit the per-VM resource wording", async () => { for (const locale of locales) { if (locale === "en" || locale === "ja") continue; const messages = await loadMessages(locale) as unknown as typeof enMessages; - expect(messages.pricing.pro.features.join("\n")).toContain("24 GB RAM and 6 vCPUs shared across all VMs"); - expect(messages.pricing.max.features[0]).toBe("Up to 50 Cloud VMs sharing 64 GB RAM and 16 vCPUs"); - expect(messages.pricing.compare.rows.find(row => row.label === "Resources shared across all Cloud VMs")).toBeDefined(); + expect(messages.pricing.pro.features.join("\n")).toContain("Up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM"); + expect(messages.pricing.max.features[0]).toBe("Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM"); + expect(messages.pricing.compare.rows.find(row => row.label === "Resources per Cloud VM")).toBeDefined(); } }); - test("native pricing translations preserve the shared plan quantities", () => { + test("native pricing translations preserve the plan quantities", () => { const catalog = JSON.parse(readFileSync(new URL("../../Resources/Localizable.xcstrings", import.meta.url), "utf8")); - const sharedTerms: Record = { - en: "shared across all", - de: "gemeinsam", - fr: "partagés", - ar: "مشتركة", - es: "compartid", - "zh-Hans": "共享", - "zh-Hant": "共用", - ko: "공유", - ja: "共有", - }; for (const key of ["pricing.native.pro.feature.hours", "pricing.native.team.feature.compute", "pricing.native.sizes.body"]) { const localizations = catalog.strings[key].localizations as Record; - for (const [locale, { stringUnit: { value } }] of Object.entries(localizations)) { + for (const [, { stringUnit: { value } }] of Object.entries(localizations)) { // Units and word order are localized; plan quantities stay the same. - for (const quantity of [24, 6, 50]) { + for (const quantity of [5, 4, 8]) { expect(value).toMatch(new RegExp(`(?:^|\\D)${quantity}(?:\\D|$)`)); } - expect(value).toContain(sharedTerms[locale] ?? sharedTerms.en); - expect(value).not.toMatch(/(?:^|\D)(?:8|32|64|256)(?:\D|$)|each with its own resources/); + expect(value).not.toMatch(/(?:^|\D)(?:6|24|50|64)(?:\D|$)/); + } + } + for (const key of ["pricing.native.max.feature.sizes", "pricing.native.sizes.max"]) { + const localizations = catalog.strings[key].localizations as Record; + for (const [, { stringUnit: { value } }] of Object.entries(localizations)) { + for (const quantity of [5, 16, 32]) { + expect(value).toMatch(new RegExp(`(?:^|\\D)${quantity}(?:\\D|$)`)); + } + expect(value).not.toMatch(/(?:^|\D)(?:50|64)(?:\D|$)/); } } }); diff --git a/web/tests/vm-billing-limit-paywall.test.ts b/web/tests/vm-billing-limit-paywall.test.ts index 8e2c3275d2f3..ff4d94053460 100644 --- a/web/tests/vm-billing-limit-paywall.test.ts +++ b/web/tests/vm-billing-limit-paywall.test.ts @@ -7,6 +7,7 @@ import { maxActiveVmsForPlan, lockedMemoryOptionsMbForPlan, maxMemoryMbForPlan, + maxVcpusForPlan, memoryOptionsMbForPlan, vcpusForMemoryMb, vmDiskMb, @@ -23,33 +24,34 @@ describe("free plan VM allowance", () => { expect(maxActiveVmsForPlan("free", {})).toBe(0); }); - test("paid plans get the advertised 50-machine allowance", () => { - expect(maxActiveVmsForPlan("pro", {})).toBe(50); - expect(maxActiveVmsForPlan("team", {})).toBe(50); - expect(maxActiveVmsForPlan("founders", {})).toBe(50); + test("paid plans get the advertised 5-machine allowance", () => { + expect(maxActiveVmsForPlan("pro", {})).toBe(5); + expect(maxActiveVmsForPlan("team", {})).toBe(5); + expect(maxActiveVmsForPlan("founders", {})).toBe(5); + expect(maxActiveVmsForPlan("max", {})).toBe(5); }); - test("a Team subscription gets 50 machines per paid seat", () => { - expect(maxActiveVmsForPlan("team", {}, { seats: 4 })).toBe(200); - expect(maxActiveVmsForPlan("team", {}, { seats: 1 })).toBe(50); - expect(maxActiveVmsForPlan("team", {}, { seats: null })).toBe(50); - expect(maxActiveVmsForPlan("team", {}, { seats: 0 })).toBe(50); + test("a Team subscription gets 5 machines per paid seat", () => { + expect(maxActiveVmsForPlan("team", {}, { seats: 4 })).toBe(20); + expect(maxActiveVmsForPlan("team", {}, { seats: 1 })).toBe(5); + expect(maxActiveVmsForPlan("team", {}, { seats: null })).toBe(5); + expect(maxActiveVmsForPlan("team", {}, { seats: 0 })).toBe(5); // Seats only mean something on the Team plan. - expect(maxActiveVmsForPlan("pro", {}, { seats: 4 })).toBe(50); + expect(maxActiveVmsForPlan("pro", {}, { seats: 4 })).toBe(5); expect(maxActiveVmsForPlan("free", {}, { seats: 4 })).toBe(0); // Retired overrides cannot erase paid seats. - expect(maxActiveVmsForPlan("team", { CMUX_VM_PLAN_TEAM_MAX_ACTIVE_VMS: "2" }, { seats: 3 })).toBe(150); - expect(maxActiveVmsForPlan("team", { CMUX_VM_PAID_MAX_ACTIVE_VMS: "5" }, { seats: 4 })).toBe(200); + expect(maxActiveVmsForPlan("team", { CMUX_VM_PLAN_TEAM_MAX_ACTIVE_VMS: "2" }, { seats: 3 })).toBe(15); + expect(maxActiveVmsForPlan("team", { CMUX_VM_PAID_MAX_ACTIVE_VMS: "1" }, { seats: 4 })).toBe(20); }); - test("retired paid overrides cannot lower the product allowance", () => { - expect(maxActiveVmsForPlan("pro", { CMUX_VM_PAID_MAX_ACTIVE_VMS: "5" })).toBe(50); + test("retired paid overrides cannot change the product allowance", () => { + expect(maxActiveVmsForPlan("pro", { CMUX_VM_PAID_MAX_ACTIVE_VMS: "1" })).toBe(5); expect(maxActiveVmsForPlan("pro", { - CMUX_VM_PAID_MAX_ACTIVE_VMS: "5", + CMUX_VM_PAID_MAX_ACTIVE_VMS: "1", CMUX_VM_PLAN_PRO_MAX_ACTIVE_VMS: "25", - })).toBe(50); - expect(maxActiveVmsForPlan("team", { CMUX_VM_PLAN_PRO_MAX_ACTIVE_VMS: "25" })).toBe(50); - expect(maxActiveVmsForPlan("pro", { CMUX_VM_PAID_MAX_ACTIVE_VMS: "0" })).toBe(50); + })).toBe(5); + expect(maxActiveVmsForPlan("team", { CMUX_VM_PLAN_PRO_MAX_ACTIVE_VMS: "25" })).toBe(5); + expect(maxActiveVmsForPlan("pro", { CMUX_VM_PAID_MAX_ACTIVE_VMS: "0" })).toBe(5); }); test("free allowance is env-overridable only with the explicit escape hatch", () => { @@ -75,42 +77,45 @@ describe("free plan VM allowance", () => { }); describe("Cloud VM memory allowance", () => { - test("plans default to 8 GB; Pro-tier plans stop at 24 GB and only Max reaches 64 GB", () => { + test("plans default to 8 GB; Pro-tier plans stop at 4 vCPU / 8 GB and Max at 16 vCPU / 32 GB", () => { expect(PLAN_MACHINE_MEMORY_MB).toBe(8192); - expect(VM_MEMORY_OPTIONS_MB).toEqual([4096, 8192, 16384, 24576, 32768, 65536]); + expect(VM_MEMORY_OPTIONS_MB).toEqual([4096, 8192, 16384, 24576, 32768]); for (const planId of ["free", "pro", "team", "founders"]) { expect(defaultMemoryMbForPlan(planId, {})).toBe(8192); - expect(maxMemoryMbForPlan(planId, {})).toBe(24576); + expect(maxMemoryMbForPlan(planId, {})).toBe(8192); + expect(maxVcpusForPlan(planId, {})).toBe(4); expect(lockedMemoryOptionsMbForPlan(planId, {})).toEqual({ - memoryOptionsMb: [32768, 65536], + memoryOptionsMb: [16384, 24576, 32768], upgradePlanId: "max", }); } expect(defaultMemoryMbForPlan("max", {})).toBe(8192); - expect(maxMemoryMbForPlan("max", {})).toBe(65536); - expect(memoryOptionsMbForPlan("max", {})).toEqual([4096, 8192, 16384, 24576, 32768, 65536]); + expect(maxMemoryMbForPlan("max", {})).toBe(32768); + expect(maxVcpusForPlan("max", {})).toBe(16); + expect(memoryOptionsMbForPlan("max", {})).toEqual([4096, 8192, 16384, 24576, 32768]); expect(lockedMemoryOptionsMbForPlan("max", {})).toEqual({ memoryOptionsMb: [], upgradePlanId: null }); }); test("Go is capped at one 2 vCPU, 4 GB, 16 GB VM", () => { expect(maxActiveVmsForPlan("go", {})).toBe(1); expect(maxMemoryMbForPlan("go", {})).toBe(4096); + expect(maxVcpusForPlan("go", {})).toBe(2); expect(memoryOptionsMbForPlan("go", {})).toEqual([4096]); expect(lockedMemoryOptionsMbForPlan("go", {})).toEqual({ - memoryOptionsMb: [8192, 16384, 24576, 32768, 65536], + memoryOptionsMb: [8192, 16384, 24576, 32768], upgradePlanId: "pro", }); }); test("an operator ceiling on Max leaves nothing to upgrade to", () => { // A lower Max ceiling can still advertise Max as the next tier for Pro. - const env = { CMUX_VM_PLAN_MAX_MAX_MEMORY_MB: "32768" }; + const env = { CMUX_VM_PLAN_MAX_MAX_MEMORY_MB: "16384" }; expect(lockedMemoryOptionsMbForPlan("pro", env)).toEqual({ - memoryOptionsMb: [32768, 65536], + memoryOptionsMb: [16384, 24576, 32768], upgradePlanId: "max", }); expect(lockedMemoryOptionsMbForPlan("max", env)).toEqual({ - memoryOptionsMb: [65536], + memoryOptionsMb: [24576, 32768], upgradePlanId: null, }); }); @@ -129,23 +134,23 @@ describe("Cloud VM memory allowance", () => { }); test("accepted sizes follow the plan ceiling and always include the configured default", () => { - expect(memoryOptionsMbForPlan("pro", {})).toEqual([4096, 8192, 16384, 24576]); - // An operator default below the catalog stays creatable, so an omitted - // size never 400s after an override. - expect(memoryOptionsMbForPlan("free", { CMUX_VM_FREE_DEFAULT_MEMORY_MB: "16384" })).toEqual([4096, 8192, 16384, 24576]); - // A raised paid ceiling reopens the ladder for Pro without touching Max. - expect(memoryOptionsMbForPlan("pro", { CMUX_VM_PAID_MAX_MEMORY_MB: "65536" })).toEqual([4096, 8192, 16384, 24576]); + expect(memoryOptionsMbForPlan("pro", {})).toEqual([4096, 8192]); + // A default above the ceiling is clamped, so an omitted size never 400s. + expect(memoryOptionsMbForPlan("free", { CMUX_VM_FREE_DEFAULT_MEMORY_MB: "16384" })).toEqual([4096, 8192]); + // A raised paid ceiling cannot sell Max sizes to Pro. + expect(memoryOptionsMbForPlan("pro", { CMUX_VM_PAID_MAX_MEMORY_MB: "65536" })).toEqual([4096, 8192]); // A lower ceiling trims the catalog and keeps the (clamped) default. - expect(memoryOptionsMbForPlan("pro", { CMUX_VM_PLAN_PRO_MAX_MEMORY_MB: "16384" })).toEqual([4096, 8192, 16384]); + expect(memoryOptionsMbForPlan("pro", { CMUX_VM_PLAN_PRO_MAX_MEMORY_MB: "4096" })).toEqual([4096]); }); test("memory defaults and caps are independently env-overridable", () => { const env = { - CMUX_VM_PLAN_PRO_DEFAULT_MEMORY_MB: "16384", - CMUX_VM_PLAN_PRO_MAX_MEMORY_MB: "24576", + CMUX_VM_PLAN_PRO_DEFAULT_MEMORY_MB: "4096", + CMUX_VM_PLAN_PRO_MAX_MEMORY_MB: "4096", }; - expect(defaultMemoryMbForPlan("pro", env)).toBe(16384); - expect(maxMemoryMbForPlan("pro", env)).toBe(24576); + expect(defaultMemoryMbForPlan("pro", env)).toBe(4096); + expect(maxMemoryMbForPlan("pro", env)).toBe(4096); + expect(defaultMemoryMbForPlan("max", { CMUX_VM_PLAN_MAX_DEFAULT_MEMORY_MB: "16384" })).toBe(16384); }); }); diff --git a/web/tests/vm-independent-limits.test.ts b/web/tests/vm-independent-limits.test.ts index f584a1da6af9..f2ba951a180a 100644 --- a/web/tests/vm-independent-limits.test.ts +++ b/web/tests/vm-independent-limits.test.ts @@ -23,10 +23,10 @@ const runRepo = (operation: (repo: VmRepositoryShape) => Effect.Effect { test("retired deployment overrides cannot reduce the advertised paid allowance", () => { - const env = { CMUX_VM_PAID_MAX_ACTIVE_VMS: "5", CMUX_VM_PLAN_PRO_MAX_ACTIVE_VMS: "5" }; - expect(maxActiveVmsForPlan("pro", env)).toBe(50); - expect(maxActiveVmsForPlan("founders", env)).toBe(50); - expect(maxActiveVmsForPlan("team", env, { seats: 4 })).toBe(200); + const env = { CMUX_VM_PAID_MAX_ACTIVE_VMS: "1", CMUX_VM_PLAN_PRO_MAX_ACTIVE_VMS: "1" }; + expect(maxActiveVmsForPlan("pro", env)).toBe(5); + expect(maxActiveVmsForPlan("founders", env)).toBe(5); + expect(maxActiveVmsForPlan("team", env, { seats: 4 })).toBe(20); }); dbTest("admits the third machine, all 50 sizes, and exactly one concurrent final slot", async () => { diff --git a/web/tests/vm-resize-route.test.ts b/web/tests/vm-resize-route.test.ts index 9aa1b6f3fed3..976bb6c396e8 100644 --- a/web/tests/vm-resize-route.test.ts +++ b/web/tests/vm-resize-route.test.ts @@ -9,7 +9,7 @@ let authedUser: AuthedUser | null = null; const programs: Array> = []; let routeResult: { ok: true; value: Record } | { ok: false; response: Response } = { ok: true, - value: { state: "awake", diskTotalMb: 65536, cpus: 4, memoryTotalMb: 16384 }, + value: { state: "awake", diskTotalMb: 65536, cpus: 4, memoryTotalMb: 8192 }, }; const realAuth = await import("../services/vms/auth"); @@ -84,7 +84,7 @@ describe("POST /api/vm/[id]/resize", () => { programs.length = 0; routeResult = { ok: true, - value: { state: "awake", diskTotalMb: 65536, cpus: 4, memoryTotalMb: 16384 }, + value: { state: "awake", diskTotalMb: 65536, cpus: 4, memoryTotalMb: 8192 }, }; }); @@ -106,16 +106,16 @@ describe("POST /api/vm/[id]/resize", () => { }); test("passes disk, CPU, and memory together and returns confirmed stats", async () => { - const response = await resizeRoute.POST(post({ storageMb: 64 * 1024, cpu: 4, memoryMb: 16 * 1024 }), params); + const response = await resizeRoute.POST(post({ storageMb: 64 * 1024, cpu: 4, memoryMb: 8 * 1024 }), params); expect(response.status).toBe(200); expect(await response.json()).toMatchObject({ id: "fs-route", diskTotalMb: 65536, cpus: 4, - memoryTotalMb: 16384, + memoryTotalMb: 8192, maxDiskMb: 131072, - maxMemoryMb: 24576, - maxVcpus: 6, + maxMemoryMb: 8192, + maxVcpus: 4, }); expect(programs).toHaveLength(1); expect(programs[0]).toMatchObject({ @@ -124,7 +124,7 @@ describe("POST /api/vm/[id]/resize", () => { providerVmId: "fs-route", storageMb: 65536, cpu: 4, - memoryMb: 16384, + memoryMb: 8192, }); }); diff --git a/web/tests/vm-route-auth.test.ts b/web/tests/vm-route-auth.test.ts index 4aa098af6796..4ff57192f1f4 100644 --- a/web/tests/vm-route-auth.test.ts +++ b/web/tests/vm-route-auth.test.ts @@ -532,7 +532,7 @@ describe("VM REST auth", () => { billingCustomerType: "team", billingTeamId: "team-1", billingPlanId: "pro", - maxActiveVms: 50, + maxActiveVms: 5, provider: "freestyle", image: "snapshot-test", imageVersion: null, @@ -825,7 +825,7 @@ describe("VM REST auth", () => { expect(createVm).toHaveBeenCalledWith(expect.objectContaining({ billingTeamId: "team-1", billingPlanId: "pro", - maxActiveVms: 50, + maxActiveVms: 5, })); }); @@ -919,12 +919,12 @@ describe("VM REST auth", () => { upgradePlanId: "max", upgradeUrl: "https://cmux.com/api/billing/checkout?plan=max&cmux_source=vm_memory_limit", memoryMb: 32768, - maxMemoryMb: 24576, + maxMemoryMb: 8192, }); expect(runVmWorkflow).not.toHaveBeenCalled(); }); - test("starts a 64 GB machine on Max", async () => { + test("starts a 32 GB machine on Max", async () => { getUser.mockResolvedValue(stackUserForPlan("max")); runVmWorkflow.mockResolvedValue({ providerVmId: "provider-vm-max", @@ -938,12 +938,12 @@ describe("VM REST auth", () => { new Request("https://cmux.test/api/vm", { method: "POST", headers: { origin: "https://cmux.test" }, - body: JSON.stringify({ provider: "freestyle", image: "snapshot-test", memoryMb: 65536 }), + body: JSON.stringify({ provider: "freestyle", image: "snapshot-test", memoryMb: 32768 }), }), ); expect(response.status).toBe(200); - expect(createVm).toHaveBeenCalledWith(expect.objectContaining({ memoryMb: 65536 })); + expect(createVm).toHaveBeenCalledWith(expect.objectContaining({ memoryMb: 32768 })); }); test("rejects malformed memory sizes before billing or provider work", async () => { @@ -1910,7 +1910,7 @@ describe("VM REST auth", () => { billingCustomerType: "team", billingTeamId: "team-2", billingPlanId: "team", - maxActiveVms: 200, + maxActiveVms: 20, })); expect(runVmWorkflow).toHaveBeenCalled(); }); @@ -2021,7 +2021,7 @@ describe("VM REST auth", () => { deviceFingerprint: "fp-device-1", clientCapabilities: ["direct-ws-user-agent"], callerPlanId: "pro", - maxActiveVms: 50, + maxActiveVms: 5, modelPlane: expect.objectContaining({}), }); expect(openAttachEndpoint).not.toHaveBeenCalled(); @@ -2269,7 +2269,7 @@ describe("VM REST auth", () => { providerVmId: "provider-vm-team-1", callerPlanId: "pro", command: "true", - maxActiveVms: 50, + maxActiveVms: 5, timeoutMs: 30_000, modelPlane: expect.objectContaining({}), }); From 71eebed7aa7ab679f5fe5021a37270c326cfe2bb Mon Sep 17 00:00:00 2001 From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com> Date: Wed, 30 Sep 2026 13:44:09 -0700 Subject: [PATCH 02/10] Localization: document the invariant 5 VM count literal Co-Authored-By: Claude Opus 5.5 (1M context) --- scripts/localization-allowed-omissions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/localization-allowed-omissions.json b/scripts/localization-allowed-omissions.json index fc948136dbcc..752ae24dd5f3 100644 --- a/scripts/localization-allowed-omissions.json +++ b/scripts/localization-allowed-omissions.json @@ -1775,7 +1775,7 @@ }, "pricing.native.compare.concurrent.paid": { "class": "format", - "source": "50" + "source": "5" }, "pricing.native.compare.support.community": { "source": "Community", From 3bd544afa21f15db572e5a0d072ed9b973026d0e Mon Sep 17 00:00:00 2001 From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:02:31 -0700 Subject: [PATCH 03/10] Cloud: enforce plan shape on every access verb, no free machines in production An existing machine above the caller's current plan (memory or vCPU) is now locked for access verbs (attach, exec, ssh, scp, ports, resume, resize, fork) through the shared requireAccessibleUserVm gate; list, status, rename, and delete keep working. Production ignores every free provisioning override, so a free account never gets a machine. Pricing drops the Free VM trial from the native screen and web comparison, the Mac resize menu follows the 2 GB per vCPU ladder, Settings stops quoting the retired annual price, and the Stripe catalog script sets product descriptions to the new limits. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../Account/ProUpgradeCard.swift | 2 +- Resources/Localizable.xcstrings | 134 ++++-------------- Sources/Cloud/MachinesPanelView.swift | 3 +- Sources/PricingPlansScreen.swift | 8 +- scripts/localization-allowed-omissions.json | 4 - .../(landing)/docs/cloud/machines/page.tsx | 1 + web/messages/en.json | 5 +- web/messages/ja.json | 5 +- .../cloud-vm/freeProvisioningAudit.mjs | 1 + web/scripts/stripe/provision-catalog.sh | 15 ++ web/services/vms/README.md | 2 +- web/services/vms/entitlements.ts | 10 +- web/services/vms/workflows.ts | 19 +++ web/tests/cloud-vm-env-audit.test.ts | 2 + web/tests/pro-pricing.test.ts | 4 +- web/tests/stripe-provision-catalog.test.ts | 14 ++ web/tests/vm-max-memory-workflow.test.ts | 34 ++++- web/tests/vm-pro-gate.test.ts | 16 +++ 18 files changed, 151 insertions(+), 128 deletions(-) diff --git a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Account/ProUpgradeCard.swift b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Account/ProUpgradeCard.swift index e8d3f2341436..c63666912d6b 100644 --- a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Account/ProUpgradeCard.swift +++ b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Account/ProUpgradeCard.swift @@ -70,7 +70,7 @@ struct ProUpgradeCard: View { } return String( localized: "settings.account.pro.subtitle", - defaultValue: "Cloud dev boxes, the iOS app, and cmux AI. $50/month, or $480/year." + defaultValue: "5 Cloud VMs, the iOS app, and cmux AI. $50/month." ) } diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 854348bd0db9..7ecc05d22d47 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -269026,65 +269026,6 @@ } } }, - "pricing.native.compare.cloud.free": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "1 VM trial" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "VM トライアル 1 回" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "1 个 VM 试用" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "1 Test-VM" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Essai d’une VM" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تجربة جهاز افتراضي واحد" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Prueba de 1 VM" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "1 個 VM 試用" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "VM 1개 체험" - } - } - } - }, "pricing.native.compare.cloud.pro": { "extractionState": "manual", "localizations": { @@ -269262,23 +269203,6 @@ } } }, - "pricing.native.compare.concurrent.free": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "1" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "1" - } - } - } - }, "pricing.native.compare.concurrent.paid": { "extractionState": "manual", "localizations": { @@ -270853,120 +270777,120 @@ } } }, - "pricing.native.free.feature.terminal": { + "pricing.native.free.feature.history": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Native Ghostty-based terminal" + "value": "Local session history" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Ghostty ベースのネイティブターミナル" + "value": "ローカルセッション履歴" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "基于 Ghostty 的原生终端" + "value": "本地会话历史" } }, "de": { "stringUnit": { "state": "translated", - "value": "Natives Ghostty-basiertes Terminal" + "value": "Lokaler Sitzungsverlauf" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Terminal natif basé sur Ghostty" + "value": "Historique de session local" } }, "ar": { "stringUnit": { "state": "translated", - "value": "طرفية أصيلة تعتمد على Ghostty" + "value": "سجل جلسات محلي" } }, "es": { "stringUnit": { "state": "translated", - "value": "Terminal nativa basada en Ghostty" + "value": "Historial de sesiones locales" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "原生 Ghostty 終端機" + "value": "本地工作階段歷程紀錄" } }, "ko": { "stringUnit": { "state": "translated", - "value": "네이티브 Ghostty 기반 터미널" + "value": "로컬 세션 기록" } } } }, - "pricing.native.free.feature.trial": { + "pricing.native.free.feature.terminal": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Local session history and one Cloud VM trial" + "value": "Native Ghostty-based terminal" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ローカルセッション履歴と Cloud VM の1回分トライアル" + "value": "Ghostty ベースのネイティブターミナル" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "本地会话历史与一次 Cloud VM 试用" + "value": "基于 Ghostty 的原生终端" } }, "de": { "stringUnit": { "state": "translated", - "value": "Lokaler Sitzungsverlauf und eine Cloud-VM-Testversion" + "value": "Natives Ghostty-basiertes Terminal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Historique de session local et essai d’une VM cloud" + "value": "Terminal natif basé sur Ghostty" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سجل جلسات محلي وتجربة لجهاز افتراضي سحابي واحد" + "value": "طرفية أصيلة تعتمد على Ghostty" } }, "es": { "stringUnit": { "state": "translated", - "value": "Historial de sesiones locales y una prueba de VM en la nube" + "value": "Terminal nativa basada en Ghostty" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "本地工作階段歷程紀錄與一個 Cloud VM 試用" + "value": "原生 Ghostty 終端機" } }, "ko": { "stringUnit": { "state": "translated", - "value": "로컬 세션 기록 및 Cloud VM 1개 체험" + "value": "네이티브 Ghostty 기반 터미널" } } } @@ -290059,55 +289983,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "Cloud dev boxes, the iOS app, and cmux AI. $50/month, or $480/year." + "value": "5 Cloud VMs, the iOS app, and cmux AI. $50/month." } }, "ja": { "stringUnit": { "state": "translated", - "value": "クラウド開発マシン、iOSアプリ、cmux AI。月額$50、または年額$480。" + "value": "Cloud VM 5 台、iOSアプリ、cmux AI。月額$50。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "云端开发机、iOS 应用与 cmux AI。每月 $50,或每年 $480。" + "value": "5 台云端虚拟机、iOS 应用与 cmux AI。每月 $50。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Entwicklerboxen, die iOS-App und cmux AI. 50 $/Monat oder 480 $/Jahr." + "value": "5 Cloud-VMs, die iOS-App und cmux AI. 50 $/Monat." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Machines de dev cloud, l’application iOS et l’IA cmux. 50 $/mois, ou 480 $/an." + "value": "5 VM cloud, l’application iOS et l’IA cmux. 50 $/mois." } }, "ar": { "stringUnit": { "state": "translated", - "value": "بيئات تطوير سحابية، وتطبيق iOS، ومساعد cmux الذكي. 50$ شهريًا، أو 480$ سنويًا." + "value": "5 أجهزة افتراضية سحابية، وتطبيق iOS، ومساعد cmux الذكي. 50$ شهريًا." } }, "es": { "stringUnit": { "state": "translated", - "value": "Entornos de desarrollo en la nube, la aplicación para iOS y cmux AI. $50 al mes o $480 al año." + "value": "5 VM en la nube, la aplicación para iOS y cmux AI. $50 al mes." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "雲端開發盒、iOS 應用程式和 cmux AI。每月 50 美元,或每年 480 美元。" + "value": "5 台雲端虛擬機、iOS 應用程式和 cmux AI。每月 50 美元。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 개발 상자, iOS 앱 및 cmux AI. 월 $50 또는 연 $480." + "value": "클라우드 VM 5개, iOS 앱 및 cmux AI. 월 $50." } } } diff --git a/Sources/Cloud/MachinesPanelView.swift b/Sources/Cloud/MachinesPanelView.swift index 1607cebea185..5c35798b6ac8 100644 --- a/Sources/Cloud/MachinesPanelView.swift +++ b/Sources/Cloud/MachinesPanelView.swift @@ -456,7 +456,8 @@ struct MachinesPanelView: View { // Max-only size and wait for a server rejection. let planMemoryGiB = viewModel.memoryOptionsMb.map { $0 / 1024 }.filter { $0 > 0 } machineActions.resizeMemoryOptionsGiB = planMemoryGiB - machineActions.resizeCPUOptions = planMemoryGiB.map { max(1, ($0 + 3) / 4) } + // The image ladder pairs one vCPU with every 2 GB (8 GB = 4 vCPU). + machineActions.resizeCPUOptions = planMemoryGiB.map { max(1, ($0 + 1) / 2) } viewModel.bindMachineOrdering(to: &machineActions) machineActions.create = MachineCreateRowActions.bound(coordinator: viewModel.createCoordinator) var nodeActions = CloudTreeNodeActions.bound( diff --git a/Sources/PricingPlansScreen.swift b/Sources/PricingPlansScreen.swift index 6d392880feac..9ea0d3e886d5 100644 --- a/Sources/PricingPlansScreen.swift +++ b/Sources/PricingPlansScreen.swift @@ -445,7 +445,7 @@ private struct NativePricingPlansView: View { String(localized: "pricing.native.free.feature.terminal", defaultValue: "Native Ghostty-based terminal"), String(localized: "pricing.native.free.feature.agents", defaultValue: "Claude Code, Codex, Gemini, and local CLI agents"), String(localized: "pricing.native.free.feature.workspaces", defaultValue: "Vertical tabs, split panes, browser panels, and notifications"), - String(localized: "pricing.native.free.feature.trial", defaultValue: "Local session history and one Cloud VM trial"), + String(localized: "pricing.native.free.feature.history", defaultValue: "Local session history"), String(localized: "pricing.native.free.feature.community", defaultValue: "Community support on Discord and GitHub"), ] ) @@ -693,7 +693,7 @@ private struct NativePricingComparisonSection: View { NativePricingCompareRow( id: "cloud", label: String(localized: "pricing.native.compare.cloud", defaultValue: "Cloud agents on Cloud VMs"), - free: .text(String(localized: "pricing.native.compare.cloud.free", defaultValue: "1 VM trial")), + free: .unavailable, pro: .text(String(localized: "pricing.native.compare.cloud.pro", defaultValue: "Included")), max: .text(String(localized: "pricing.native.compare.cloud.max", defaultValue: "Included")), team: .text(String(localized: "pricing.native.compare.cloud.team", defaultValue: "Included")), @@ -702,7 +702,7 @@ private struct NativePricingComparisonSection: View { NativePricingCompareRow( id: "concurrent", label: String(localized: "pricing.native.compare.concurrent", defaultValue: "Concurrent Cloud VMs"), - free: .text(String(localized: "pricing.native.compare.concurrent.free", defaultValue: "1")), + free: .unavailable, pro: .text(String(localized: "pricing.native.compare.concurrent.paid", defaultValue: "5")), max: .text(String(localized: "pricing.native.compare.concurrent.paid", defaultValue: "5")), team: .text(String(localized: "pricing.native.compare.concurrent.team", defaultValue: "5 per user")), @@ -711,7 +711,7 @@ private struct NativePricingComparisonSection: View { NativePricingCompareRow( id: "largestVm", label: String(localized: "pricing.native.compare.largestVm", defaultValue: "Largest Cloud VM"), - free: .text(String(localized: "pricing.native.compare.largestVm.standard", defaultValue: "8 GB RAM")), + free: .unavailable, pro: .text(String(localized: "pricing.native.compare.largestVm.standard", defaultValue: "8 GB RAM")), max: .text(String(localized: "pricing.native.compare.largestVm.max", defaultValue: "32 GB RAM")), team: .text(String(localized: "pricing.native.compare.largestVm.standard", defaultValue: "8 GB RAM")), diff --git a/scripts/localization-allowed-omissions.json b/scripts/localization-allowed-omissions.json index 752ae24dd5f3..0676d3ece80d 100644 --- a/scripts/localization-allowed-omissions.json +++ b/scripts/localization-allowed-omissions.json @@ -1769,10 +1769,6 @@ "de": "Reviewed native word, technical abbreviation, or SaaS tier name with the same spelling in this context." } }, - "pricing.native.compare.concurrent.free": { - "class": "format", - "source": "1" - }, "pricing.native.compare.concurrent.paid": { "class": "format", "source": "5" diff --git a/web/app/[locale]/(landing)/docs/cloud/machines/page.tsx b/web/app/[locale]/(landing)/docs/cloud/machines/page.tsx index 3c9095d221ac..d435f665c0fb 100644 --- a/web/app/[locale]/(landing)/docs/cloud/machines/page.tsx +++ b/web/app/[locale]/(landing)/docs/cloud/machines/page.tsx @@ -64,6 +64,7 @@ cmux vm new --detach --json`}
  • {t("limitsPaid")}
  • {t("limitsTeam")}
  • {t("limitsMax")}
  • +
  • {t("limitsOversize")}
  • {t("limitsPricing")}

    diff --git a/web/messages/en.json b/web/messages/en.json index 8d91345dcebf..6ff6473a4c20 100644 --- a/web/messages/en.json +++ b/web/messages/en.json @@ -1799,7 +1799,7 @@ }, { "label": "Largest Cloud VM", - "free": "8 GB RAM", + "free": "false", "pro": "8 GB RAM", "max": "32 GB RAM", "team": "8 GB RAM", @@ -1904,7 +1904,7 @@ }, { "q": "What does Max add?", - "a": "Max is $200/mo, billed monthly. It includes everything in Pro and up to 5 Cloud VMs, each with up to 16 vCPUs and 32 GB RAM. Pro, Team, and Free machines top out at 4 vCPUs and 8 GB RAM." + "a": "Max is $200/mo, billed monthly. It includes everything in Pro and up to 5 Cloud VMs, each with up to 16 vCPUs and 32 GB RAM. Pro and Team machines top out at 4 vCPUs and 8 GB RAM. Free accounts do not include Cloud VMs." }, { "q": "What is cmux Vault?", @@ -4365,6 +4365,7 @@ "limitsPaid": "Pro and Max accounts can have up to 5 active machines. A machine is active while it is running or starting.", "limitsTeam": "Team accounts can have up to 5 active machines for each paid seat.", "limitsMax": "Machines larger than 8 GB need cmux Max. Max machines go up to 32 GB and 16 vCPUs.", + "limitsOversize": "A machine larger than your plan allows is locked. You can list and delete it, but you cannot open it, run commands on it, resume it, or resize it until you upgrade.", "limitsPricing": "See the pricing page for current prices. There is no metering and no overage billing.", "resizeTitle": "Resize", "resizeDesc": "You can make a machine larger without data loss. Right-click the machine and choose Resize machine, or use cmux vm resize. Resize can only grow a machine. Disk grows in 4 GB steps up to 256 GB, memory up to 32 GB, and CPU up to 16 vCPU. Your plan sets the real maximum.", diff --git a/web/messages/ja.json b/web/messages/ja.json index 1ba68756761b..3cd1385d8308 100644 --- a/web/messages/ja.json +++ b/web/messages/ja.json @@ -1799,7 +1799,7 @@ }, { "label": "最大の Cloud VM", - "free": "8 GB RAM", + "free": "false", "pro": "8 GB RAM", "max": "32 GB RAM", "team": "8 GB RAM", @@ -1904,7 +1904,7 @@ }, { "q": "Max では何が追加されますか?", - "a": "Max は月払いで $200/月です。Pro のすべてを含み、最大 5 台の Cloud VM を利用でき、各 VM は最大 16 vCPU と 32 GB RAM です。Pro、Team、Free のマシンは最大 4 vCPU と 8 GB RAM です。" + "a": "Max は月払いで $200/月です。Pro のすべてを含み、最大 5 台の Cloud VM を利用でき、各 VM は最大 16 vCPU と 32 GB RAM です。Pro と Team のマシンは最大 4 vCPU と 8 GB RAM です。Free には Cloud VM は含まれません。" }, { "q": "cmux Vault とは何ですか?", @@ -4277,6 +4277,7 @@ "limitsPaid": "ProおよびMaxアカウントでは、アクティブなマシンを最大5台まで持てます。実行中または起動中のマシンがアクティブとして数えられます。", "limitsTeam": "Teamアカウントでは、有料シート1つにつきアクティブなマシンを最大5台まで持てます。", "limitsMax": "8 GBを超えるマシンにはcmux Maxが必要です。Maxのマシンは最大32 GB、16 vCPUまで使えます。", + "limitsOversize": "プランの上限より大きいマシンはロックされます。一覧表示と削除はできますが、アップグレードするまで開く、コマンドを実行する、再開する、サイズを変更することはできません。", "limitsPricing": "現在の価格は料金ページを参照してください。従量課金や超過料金はありません。", "resizeTitle": "サイズ変更", "resizeDesc": "データを失わずにマシンを大きくできます。マシンを右クリックして「マシンのサイズを変更」を選ぶか、cmux vm resize を使います。サイズ変更は拡大のみです。ディスクは4 GB単位で最大256 GB、メモリは最大32 GB、CPUは最大16 vCPUまで拡大できます。実際の上限はプランによって決まります。", diff --git a/web/scripts/cloud-vm/freeProvisioningAudit.mjs b/web/scripts/cloud-vm/freeProvisioningAudit.mjs index de6d5de0e628..495fa3ca8de4 100644 --- a/web/scripts/cloud-vm/freeProvisioningAudit.mjs +++ b/web/scripts/cloud-vm/freeProvisioningAudit.mjs @@ -19,6 +19,7 @@ function normalized(value) { /** Same decision the runtime makes: does this env open free-plan provisioning? */ export function isFreeProvisioningAllowed(env) { + if (env.VERCEL_ENV === "production") return false; const allow = env[FREE_PROVISIONING_ALLOW_KEY]; if (allow !== undefined) return TRUTHY.has(normalized(allow)); const legacy = env[FREE_PROVISIONING_LEGACY_KEY]; diff --git a/web/scripts/stripe/provision-catalog.sh b/web/scripts/stripe/provision-catalog.sh index af91c3cc65c2..face09d5c5f8 100755 --- a/web/scripts/stripe/provision-catalog.sh +++ b/web/scripts/stripe/provision-catalog.sh @@ -369,6 +369,21 @@ echo "Resolved Max product." >&2 team_product_id="$(canonical_product "cmux-team-monthly" "cmux Team" "team")" echo "Resolved Team product." >&2 +# Checkout shows the product description. Keep it on the plan limits in +# web/services/vms/machineSpec.ts and entitlements.ts (5 VMs per seat; +# 4 vCPU / 8 GB each, 16 vCPU / 32 GB on Max). Updating a description is +# idempotent, so every run converges on this copy. +ensure_product_description() { + local product_id="$1" + local description="$2" + stripe_post "/products/${product_id}" \ + --data-urlencode "description=${description}" >/dev/null + echo "Set description for ${product_id}." >&2 +} +ensure_product_description "$pro_product_id" "5 Cloud VMs with 4 vCPUs and 8 GB RAM each, plus the cmux iOS app." +ensure_product_description "$max_product_id" "Everything in Pro, with 5 Cloud VMs of up to 16 vCPUs and 32 GB RAM each." +ensure_product_description "$team_product_id" "Per seat: 5 Cloud VMs with 4 vCPUs and 8 GB RAM each, the cmux iOS app, and priority support." + # Current catalog (web/services/billing/plans.ts). Stripe Price amounts are # immutable, so each price change mints a new lookup key carrying the amount. ensure_price "$pro_product_id" "cmux-pro-monthly-50" "5000" "month" "cmux Pro Monthly" diff --git a/web/services/vms/README.md b/web/services/vms/README.md index f3daaf69ed01..d71a3451b3e9 100644 --- a/web/services/vms/README.md +++ b/web/services/vms/README.md @@ -644,7 +644,7 @@ machine (no env, no rule, still no secret) and must never be set in production. The usage ledger is in Postgres. VM create pricing gates can use Stack Auth payment items, but free-plan create credits are opt-in. Configure `CMUX_VM_PLAN_FREE_CREATE_CREDIT_ITEM_ID` only when the free plan should consume a prepaid create-credit bucket. When enabled, the create workflow records a one-time local grant row, seeds the configured Stack Auth item credits once per billing team, reserves one create credit only for a newly inserted row, calls the provider, and refunds the credit if provisioning fails before a usable VM exists. -Plan limits are team-based. Stack Auth personal teams should stay enabled for both dev/staging and production projects (`createTeamOnSignUp` / `teams.createPersonalTeamOnSignUp`). New VM rows store `billing_team_id` and `billing_plan_id`; the free plan allows zero active VMs by default and remains at zero regardless of stale free-limit env values while the paid-plan gate is on. A deliberate `CMUX_VM_ALLOW_FREE_PROVISIONING=1` escape hatch re-enables the configured free allowance for local demos or a controlled rollback; Go is a $10/month personal starter plan with one active 2 vCPU / 4 GiB / 16 GB VM and two saved VM records. It includes 40 VM-hours per Stripe billing period. PostgreSQL runtime records commit with VM state changes, and an account-level lock limits Go to two retained VMs in total, with one active. Freestyle lifetime runtime caps enforce the remaining allowance and block restarts until cmux grants a new allowance. A minute job reconciles exhausted machines. Go disk growth beyond 16 GiB is refused; Pro and Max get the allowance sold on /pricing, 5 active machines per billing team, multiplied by the Team subscription's paid seats (`cmuxSeats` in the team's Stack metadata, written from the Stripe quantity) so "5 per paid seat" holds for the whole team (`PAID_MAX_ACTIVE_VMS_DEFAULT`; `maxActiveVms` in entitlements and the list response). New machines use validated Freestyle base snapshots from 4 GiB RAM / 16 GB disk through 32 GiB RAM / 128 GB disk, including the 24 GiB / 96 GB intermediate size. The 64 GiB snapshot stays in the manifest but no plan sells it. The default is 8 GiB RAM and 32 GB disk. Free, Pro, Team, and Founder's plans may start machines up to 4 vCPU / 8 GiB; the 16, 24, and 32 GiB sizes (up to 16 vCPU) require the Max plan (`maxMemoryMbForPlan`, `lockedMemoryOptionsMbForPlan`). The list response names the locked sizes and the upgrade plan, and a create with a locked size returns `402 vm_memory_requires_plan` rather than coercing to a smaller machine. Each machine has its own CPU, memory, and disk. The repository enforces only the machine-count allowance under the billing-team lock; resource metadata supports per-machine fork, snapshot, and resize recovery. Disk growth is independent, grow-only, and capped at 256 GiB in 4 GiB steps. The Freestyle driver applies the default at create (`CMUX_VM_DISK_MB` overrides it), and the resize API reads provider stats before and after the provider confirms the change. Destroyed VMs do not count against a limit; pausing frees the active slot, while Go still counts the retained VM toward its saved limit. Paid plan activation should write a readable plan id such as `pro` into Stack Auth team read-only metadata (`cmuxVmPlan`) or equivalent billing sync metadata. Paid-plan `CMUX_VM_PLAN__MAX_ACTIVE_VMS`, `CMUX_VM_PAID_MAX_ACTIVE_VMS`, and `CMUX_VM_SHARED_CPU_LIMIT_ENABLED` are retired and ignored. The paid allowance lives in code; `CMUX_VM_CREATE_ENABLED=0` remains the provisioning incident control. Paid plans only consume Stack Auth create credits when `CMUX_VM_PLAN__CREATE_CREDIT_ITEM_ID` or the global `CMUX_VM_CREATE_CREDIT_ITEM_ID` is configured. +Plan limits are team-based. Stack Auth personal teams should stay enabled for both dev/staging and production projects (`createTeamOnSignUp` / `teams.createPersonalTeamOnSignUp`). New VM rows store `billing_team_id` and `billing_plan_id`; the free plan allows zero active VMs by default and remains at zero regardless of stale free-limit env values while the paid-plan gate is on. A deliberate `CMUX_VM_ALLOW_FREE_PROVISIONING=1` escape hatch re-enables the configured free allowance for local demos and dev-backend stacks; it is ignored when `VERCEL_ENV=production`, so production never gives a free account a machine; Go is a $10/month personal starter plan with one active 2 vCPU / 4 GiB / 16 GB VM and two saved VM records. It includes 40 VM-hours per Stripe billing period. PostgreSQL runtime records commit with VM state changes, and an account-level lock limits Go to two retained VMs in total, with one active. Freestyle lifetime runtime caps enforce the remaining allowance and block restarts until cmux grants a new allowance. A minute job reconciles exhausted machines. Go disk growth beyond 16 GiB is refused; Pro and Max get the allowance sold on /pricing, 5 active machines per billing team, multiplied by the Team subscription's paid seats (`cmuxSeats` in the team's Stack metadata, written from the Stripe quantity) so "5 per paid seat" holds for the whole team (`PAID_MAX_ACTIVE_VMS_DEFAULT`; `maxActiveVms` in entitlements and the list response). New machines use validated Freestyle base snapshots from 4 GiB RAM / 16 GB disk through 32 GiB RAM / 128 GB disk, including the 24 GiB / 96 GB intermediate size. The 64 GiB snapshot stays in the manifest but no plan sells it. The default is 8 GiB RAM and 32 GB disk. Free, Pro, Team, and Founder's plans may start machines up to 4 vCPU / 8 GiB; the 16, 24, and 32 GiB sizes (up to 16 vCPU) require the Max plan (`maxMemoryMbForPlan`, `lockedMemoryOptionsMbForPlan`). Access verbs (attach, exec, ssh, scp, ports, resume, resize, fork) also refuse an existing machine whose recorded memory or vCPU is above the caller's current plan (`requireMachineFitsPlan`); list, status, rename, and delete keep working. The list response names the locked sizes and the upgrade plan, and a create with a locked size returns `402 vm_memory_requires_plan` rather than coercing to a smaller machine. Each machine has its own CPU, memory, and disk. The repository enforces only the machine-count allowance under the billing-team lock; resource metadata supports per-machine fork, snapshot, and resize recovery. Disk growth is independent, grow-only, and capped at 256 GiB in 4 GiB steps. The Freestyle driver applies the default at create (`CMUX_VM_DISK_MB` overrides it), and the resize API reads provider stats before and after the provider confirms the change. Destroyed VMs do not count against a limit; pausing frees the active slot, while Go still counts the retained VM toward its saved limit. Paid plan activation should write a readable plan id such as `pro` into Stack Auth team read-only metadata (`cmuxVmPlan`) or equivalent billing sync metadata. Paid-plan `CMUX_VM_PLAN__MAX_ACTIVE_VMS`, `CMUX_VM_PAID_MAX_ACTIVE_VMS`, and `CMUX_VM_SHARED_CPU_LIMIT_ENABLED` are retired and ignored. The paid allowance lives in code; `CMUX_VM_CREATE_ENABLED=0` remains the provisioning incident control. Paid plans only consume Stack Auth create credits when `CMUX_VM_PLAN__CREATE_CREDIT_ITEM_ID` or the global `CMUX_VM_CREATE_CREDIT_ITEM_ID` is configured. ### The free limit is the paywall moment diff --git a/web/services/vms/entitlements.ts b/web/services/vms/entitlements.ts index 5a002aea7e38..75c7a25a5cdf 100644 --- a/web/services/vms/entitlements.ts +++ b/web/services/vms/entitlements.ts @@ -209,9 +209,9 @@ export function maxMemoryMbForPlan( if (normalized === MAX_PLAN_ID) return MAX_PLAN_MAX_MEMORY_MB; if (normalized === GO_PLAN_ID) return GO_PLAN_MAX_MEMORY_MB; if (normalized === "free") { - // The free machine is the product demo: the same computer Pro gets, not a - // cut-down teaser. The paywall is the 7-day access window and the machine - // count, never the machine's usefulness. + // Free accounts get no machine in production (isVmFreeProvisioningAllowed). + // Where an operator opens free provisioning for a demo or dev stack, the + // machine is the same size Pro gets. return Math.min(ceiling, positiveInteger( env.CMUX_VM_FREE_MAX_MEMORY_MB ?? String(PLAN_MAX_MEMORY_MB), "CMUX_VM_FREE_MAX_MEMORY_MB", @@ -394,6 +394,10 @@ export function isVmProGateEnforced( export function isVmFreeProvisioningAllowed( env: Record = process.env, ): boolean { + // Free accounts get no Cloud machine in production, trial or otherwise. + // The escape hatch exists for local, preview, and dev-backend stacks only, + // so no production env value can reopen it. + if (env.VERCEL_ENV === "production") return false; // The new name is authoritative when present. A value must be explicitly // truthy; typos and explicit false values fail closed. if (env.CMUX_VM_ALLOW_FREE_PROVISIONING !== undefined) { diff --git a/web/services/vms/workflows.ts b/web/services/vms/workflows.ts index 91d5b5220b4f..ea8262d1857b 100644 --- a/web/services/vms/workflows.ts +++ b/web/services/vms/workflows.ts @@ -90,6 +90,7 @@ import { maxDiskMbForPlan, maxMemoryMbForPlan, maxVcpusForPlan, + VM_PLAN_MEMORY_MB_PER_VCPU, vmFreeAccessWindowDays, } from "./entitlements"; import { getGoVmUsage, GO_INCLUDED_VM_HOURS } from "./goUsage"; @@ -907,6 +908,21 @@ function requireMemoryPlan(planId: string, memoryMb: number | null) { return Effect.void; } +/** + * A machine larger than the caller's plan (created before a plan change, or + * on a plan the caller left) stays listed and deletable, but access verbs + * refuse it. CPU above the plan counts as the ladder memory that carries it. + * Rows without recorded resources are left to the create-time checks. + */ +function requireMachineFitsPlan(planId: string, metadata: Record) { + if (!hasVmResourceReservationMetadata(metadata)) return Effect.void; + const shape = vmResourceReservationFromMetadata(metadata); + const maxMemoryMb = maxMemoryMbForPlan(planId); + if (shape.memoryMb <= maxMemoryMb && shape.vcpus <= maxVcpusForPlan(planId)) return Effect.void; + const memoryMb = Math.max(shape.memoryMb, shape.vcpus * VM_PLAN_MEMORY_MB_PER_VCPU); + return Effect.fail(new VmMemoryPlanError({ planId, memoryMb, maxMemoryMb })); +} + function requestedCreateMemory(input: { memoryMb?: number; imageSize?: { memoryMb: number }; resourceReservation?: { memoryMb: number } }) { return Math.max(input.memoryMb ?? 0, input.imageSize?.memoryMb ?? 0, input.resourceReservation?.memoryMb ?? 0); } @@ -4374,6 +4390,9 @@ function requireAccessibleUserVm(input: ExistingVmAccessInput) { } vm = { ...vm, providerMetadata: { ...vm.providerMetadata, [GO_PAUSE_INTENT_KEY]: null } }; } + if (input.callerPlanId && isPaidVmPlan(input.callerPlanId)) { + yield* requireMachineFitsPlan(input.callerPlanId, vm.providerMetadata); + } if (isVmFreeAccessExpired(input.callerPlanId, vm.createdAt ?? undefined)) { return yield* Effect.fail(new VmFreeAccessExpiredError({ vmId: input.providerVmId, diff --git a/web/tests/cloud-vm-env-audit.test.ts b/web/tests/cloud-vm-env-audit.test.ts index e9d1d30073ec..9fbff7494118 100644 --- a/web/tests/cloud-vm-env-audit.test.ts +++ b/web/tests/cloud-vm-env-audit.test.ts @@ -460,6 +460,8 @@ describe("free-provisioning override audit", () => { if (allow !== undefined) env.CMUX_VM_ALLOW_FREE_PROVISIONING = allow; if (legacy !== undefined) env.CMUX_VM_REQUIRE_PRO = legacy; expect(isFreeProvisioningAllowed(env)).toBe(isVmFreeProvisioningAllowed(env)); + const production = { ...env, VERCEL_ENV: "production" }; + expect(isFreeProvisioningAllowed(production)).toBe(isVmFreeProvisioningAllowed(production)); } } }); diff --git a/web/tests/pro-pricing.test.ts b/web/tests/pro-pricing.test.ts index 49709995fcef..f566b3c2bd90 100644 --- a/web/tests/pro-pricing.test.ts +++ b/web/tests/pro-pricing.test.ts @@ -165,9 +165,11 @@ describe("VM defaults and pricing copy", () => { const row = messages.pricing.compare.rows.find(row => row.label === largestLabel); expect(row).toBeDefined(); expect(row!.max).toBe("32 GB RAM"); - for (const plan of ["free", "pro", "team"] as const) { + for (const plan of ["pro", "team"] as const) { expect(row![plan]).toBe("8 GB RAM"); } + // Free accounts include no Cloud VM at all. + expect(row!.free).toBe("false"); for (const row of messages.pricing.compare.rows) { expect(typeof row.max).toBe("string"); } diff --git a/web/tests/stripe-provision-catalog.test.ts b/web/tests/stripe-provision-catalog.test.ts index 148d0b1c8b80..36fe907fba91 100644 --- a/web/tests/stripe-provision-catalog.test.ts +++ b/web/tests/stripe-provision-catalog.test.ts @@ -103,6 +103,18 @@ describe("Stripe catalog provisioning", () => { ).toBe(true); }); + test("sets the checkout description of each plan to the Cloud VM limits", async () => { + const result = await runProvision("test", "valid"); + + expect(result.exitCode).toBe(0); + const description = (productId: string) => result.calls + .find((call) => call.args.includes(`https://api.stripe.com/v1/products/${productId}`) && call.args.includes("POST")) + ?.args.find((argument) => argument.startsWith("description=")); + expect(description("prod_pro")).toBe("description=5 Cloud VMs with 4 vCPUs and 8 GB RAM each, plus the cmux iOS app."); + expect(description("prod_max")).toBe("description=Everything in Pro, with 5 Cloud VMs of up to 16 vCPUs and 32 GB RAM each."); + expect(description("prod_team")).toBe("description=Per seat: 5 Cloud VMs with 4 vCPUs and 8 GB RAM each, the cmux iOS app, and priority support."); + }); + test("provisions the monthly-only Max price and the Pro/Max plan switch portal", async () => { const result = await runProvision("test", "valid"); @@ -512,6 +524,8 @@ if (url.endsWith("/prices") && !isPost) { ? "prod_new_go" : "prod_new_team", }); +} else if (url.includes("/products/prod_") && isPost) { + respond({ id: url.split("/").at(-1) }); } else if (url.endsWith("/billing_portal/configurations") && !isPost) { if (args.includes("is_default=true")) { respond({ diff --git a/web/tests/vm-max-memory-workflow.test.ts b/web/tests/vm-max-memory-workflow.test.ts index fb46d4bd7ec1..3008bfd09208 100644 --- a/web/tests/vm-max-memory-workflow.test.ts +++ b/web/tests/vm-max-memory-workflow.test.ts @@ -4,7 +4,7 @@ import * as Layer from "effect/Layer"; import { VmRepository, type VmRepositoryShape } from "../services/vms/repository"; import { VmProviderGateway, type VmProviderGatewayShape } from "../services/vms/providerGateway"; import { VmBillingGateway, noOpVmBillingGateway } from "../services/vms/billingGateway"; -import { createVm, forkVm, restoreVm } from "../services/vms/workflows"; +import { createVm, forkVm, restoreVm, resumeVm } from "../services/vms/workflows"; import { vmWorkflowErrorCause, VmProviderOperationError } from "../services/vms/errors"; test("create, fork, and restore reject a 64 GB machine on Pro before provisioning", async () => { @@ -18,7 +18,7 @@ test("create, fork, and restore reject a 64 GB machine on Pro before provisionin } as unknown as VmRepositoryShape; const providers = { getStats: () => Effect.succeed({ memoryTotalMb: 65536, cpus: 16, diskTotalMb: 131072 }) } as unknown as VmProviderGatewayShape; const layer = Layer.mergeAll(Layer.succeed(VmRepository, repo), Layer.succeed(VmProviderGateway, providers), Layer.succeed(VmBillingGateway, noOpVmBillingGateway())); - const caller = { userId: "user", billingCustomerType: "team" as const, billingTeamId: "team", billingPlanId: "pro", maxActiveVms: 50 }; + const caller = { userId: "user", billingCustomerType: "team" as const, billingTeamId: "team", billingPlanId: "pro", maxActiveVms: 5 }; for (const program of [ createVm({ ...caller, provider: "freestyle", image: "snapshot", memoryMb: 65536 }).pipe(Effect.asVoid), forkVm({ ...caller, teamIds: ["team"], providerVmId: "vm" }).pipe(Effect.asVoid), @@ -62,7 +62,7 @@ test("a gateway fork method cannot override the provider capability", async () = } as unknown as VmProviderGatewayShape; const layer = Layer.mergeAll(Layer.succeed(VmRepository, repo), Layer.succeed(VmProviderGateway, provider), Layer.succeed(VmBillingGateway, noOpVmBillingGateway())); await Effect.runPromiseExit(forkVm({ userId: "u", billingCustomerType: "user", billingTeamId: "u", billingPlanId: "pro", - maxActiveVms: 50, providerVmId: "vm" }).pipe(Effect.provide(layer))); + maxActiveVms: 5, providerVmId: "vm" }).pipe(Effect.provide(layer))); expect(snapshots).toBe(1); expect(forks).toBe(0); expect(creates).toBe(0); @@ -77,7 +77,7 @@ test("Pro cannot bypass the memory gate with unknown snapshot or fork dimensions } as unknown as VmRepositoryShape; const layer = Layer.mergeAll(Layer.succeed(VmRepository, repo), Layer.succeed(VmProviderGateway, {} as VmProviderGatewayShape), Layer.succeed(VmBillingGateway, noOpVmBillingGateway())); - const caller = { userId: "u", billingCustomerType: "user" as const, billingTeamId: "u", billingPlanId: "pro", maxActiveVms: 50 }; + const caller = { userId: "u", billingCustomerType: "user" as const, billingTeamId: "u", billingPlanId: "pro", maxActiveVms: 5 }; for (const program of [ forkVm({ ...caller, providerVmId: "vm" }).pipe(Effect.asVoid), restoreVm({ ...caller, provider: "freestyle", snapshotId: "snapshot" }).pipe(Effect.asVoid), @@ -92,3 +92,29 @@ test("Pro cannot bypass the memory gate with unknown snapshot or fork dimensions } } }); + +test("access verbs refuse a machine larger than the caller's current plan", async () => { + const run = async (callerPlanId: string, reservation: { memoryMb: number; vcpus: number; diskMb: number }) => { + const repo = { + findUserVm: () => Effect.succeed({ id: "row", userId: "u", billingTeamId: "u", ownerTeamId: "u", coderouterPoolId: null, status: "running", + provider: "freestyle", providerVmId: "vm", providerMetadata: { cmuxResourceReservation: reservation } }), + } as unknown as VmRepositoryShape; + // No resume/getStatus adapter: a machine that passes the plan gate + // answers "running" without any provider call. + const layer = Layer.mergeAll(Layer.succeed(VmRepository, repo), + Layer.succeed(VmProviderGateway, {} as VmProviderGatewayShape), Layer.succeed(VmBillingGateway, noOpVmBillingGateway())); + return Effect.runPromise(resumeVm({ userId: "u", billingTeamId: "u", providerVmId: "vm", maxActiveVms: 5, callerPlanId }) + .pipe(Effect.provide(layer))) + .then(() => null, (error) => vmWorkflowErrorCause(error)?._tag ?? "unknown"); + }; + // A 24 GB machine made under the old Pro ceiling is locked on Pro. + expect(await run("pro", { memoryMb: 24576, vcpus: 6, diskMb: 98304 })).toBe("VmMemoryPlanError"); + // CPU above the plan also locks an 8 GB machine. + expect(await run("pro", { memoryMb: 8192, vcpus: 6, diskMb: 32768 })).toBe("VmMemoryPlanError"); + expect(await run("team", { memoryMb: 16384, vcpus: 4, diskMb: 65536 })).toBe("VmMemoryPlanError"); + // A 64 GB machine is above every plan, Max included. + expect(await run("max", { memoryMb: 65536, vcpus: 16, diskMb: 131072 })).toBe("VmMemoryPlanError"); + // Machines inside the plan pass. + expect(await run("pro", { memoryMb: 8192, vcpus: 4, diskMb: 32768 })).toBeNull(); + expect(await run("max", { memoryMb: 32768, vcpus: 16, diskMb: 131072 })).toBeNull(); +}); diff --git a/web/tests/vm-pro-gate.test.ts b/web/tests/vm-pro-gate.test.ts index 4fc4a3c28a36..ced863758713 100644 --- a/web/tests/vm-pro-gate.test.ts +++ b/web/tests/vm-pro-gate.test.ts @@ -6,6 +6,7 @@ import { isVmFreeProvisioningAllowed, isVmProGateBlocked, isVmProGateEnforced, + maxActiveVmsForPlan, resolveVmEntitlements, } from "../services/vms/entitlements"; import { PRO_PLAN_ID } from "../services/billing/pro"; @@ -72,6 +73,21 @@ describe("Cloud VM Pro gate", () => { })).toBe(false); }); + test("production never provisions free machines, whatever the env says", () => { + for (const env of [ + { CMUX_VM_ALLOW_FREE_PROVISIONING: "1" }, + { CMUX_VM_REQUIRE_PRO: "0" }, + { CMUX_VM_ALLOW_FREE_PROVISIONING: "1", CMUX_VM_FREE_MAX_ACTIVE_VMS: "3", CMUX_VM_DEFAULT_PLAN: "pro" }, + ]) { + const production = { ...env, VERCEL_ENV: "production" }; + expect(isVmFreeProvisioningAllowed(production)).toBe(false); + expect(isVmProGateBlocked(ent("free"), production)).toBe(true); + expect(maxActiveVmsForPlan("free", production)).toBe(0); + // The same env still opens a preview or dev-backend stack. + expect(isVmFreeProvisioningAllowed({ ...env, VERCEL_ENV: "preview" })).toBe(true); + } + }); + test("the explicit free-provisioning switch never blocks any plan", () => { const env = { CMUX_VM_ALLOW_FREE_PROVISIONING: "1" }; expect(isVmProGateBlocked(ent("free"), env)).toBe(false); From adba7715522d7079efbcc809747daf1def9d10da Mon Sep 17 00:00:00 2001 From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:20:56 -0700 Subject: [PATCH 04/10] Debug socket: open the native pricing screen Adds debug.native_pricing.show so a tagged build can open and screenshot the native pricing screen without GUI automation. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../Debug/ControlCommandCoordinator+Debug.swift | 12 ++++++++++++ .../Coordinator/Debug/ControlDebugContext.swift | 3 +++ .../ControlCommandContextTestStubs+Debug.swift | 1 + Sources/TerminalController+ControlDebugContext.swift | 4 ++++ Sources/TerminalController+DebugMethodNames.swift | 1 + Sources/TerminalController.swift | 1 + 6 files changed, 22 insertions(+) diff --git a/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Debug/ControlCommandCoordinator+Debug.swift b/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Debug/ControlCommandCoordinator+Debug.swift index 580720573ab5..c61c2728dc75 100644 --- a/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Debug/ControlCommandCoordinator+Debug.swift +++ b/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Debug/ControlCommandCoordinator+Debug.swift @@ -38,6 +38,8 @@ extension ControlCommandCoordinator { return debugWorkspaceTodoChecklistAddField() case "debug.pro_welcome_checklist.show": return debugShowProWelcomeChecklist() + case "debug.native_pricing.show": + return debugShowNativePricing() case "debug.command_palette.toggle": return debugCommandPaletteEvent(.toggle, request.params) case "debug.command_palette.rename_tab.open": @@ -222,6 +224,16 @@ extension ControlCommandCoordinator { return .ok(.object(["shown": .bool(true)])) } + // MARK: - debug.native_pricing.show — show the native pricing screen + + func debugShowNativePricing() -> ControlCallResult { + guard let debugContext else { + return .err(code: "unavailable", message: "Control context unavailable", data: nil) + } + debugContext.controlDebugShowNativePricing() + return .ok(.object(["shown": .bool(true)])) + } + // MARK: - debug.textbox.* /// `debug.textbox.inline_fixture` — install the inline text-box fixture. diff --git a/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Debug/ControlDebugContext.swift b/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Debug/ControlDebugContext.swift index 695132ca8134..9fd6ed497b20 100644 --- a/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Debug/ControlDebugContext.swift +++ b/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Debug/ControlDebugContext.swift @@ -68,6 +68,9 @@ public protocol ControlDebugContext: AnyObject { /// `debug.pro_welcome_checklist.show`. func controlDebugShowProWelcomeChecklist() + /// Shows the native pricing screen for `debug.native_pricing.show`. + func controlDebugShowNativePricing() + /// Runs the shared v1 `is_terminal_focused` body for /// `debug.terminal.is_focused`. /// diff --git a/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandContextTestStubs+Debug.swift b/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandContextTestStubs+Debug.swift index 8a28f038414d..e83a975ee68a 100644 --- a/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandContextTestStubs+Debug.swift +++ b/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandContextTestStubs+Debug.swift @@ -16,6 +16,7 @@ extension ControlDebugContext { func controlDebugActivateApp() -> String { "ERROR: not implemented" } func controlDebugRequestWorkspaceTodoChecklistAddField() -> UUID? { nil } func controlDebugShowProWelcomeChecklist() {} + func controlDebugShowNativePricing() {} func controlDebugIsTerminalFocused(surfaceArgument: String) -> String { "ERROR: not implemented" } func controlDebugReadTerminalText(surfaceArgument: String) -> String { "ERROR: not implemented" } func controlDebugRenderStats(surfaceArgument: String) -> String { "ERROR: not implemented" } diff --git a/Sources/TerminalController+ControlDebugContext.swift b/Sources/TerminalController+ControlDebugContext.swift index 237be90d77f2..77a97a24d02e 100644 --- a/Sources/TerminalController+ControlDebugContext.swift +++ b/Sources/TerminalController+ControlDebugContext.swift @@ -84,6 +84,10 @@ extension TerminalController: ControlDebugContext { ProWelcomeChecklistPresenter.present() } + func controlDebugShowNativePricing() { + ProUpgradePresenter.presentNativePricingPreview() + } + func controlDebugIsTerminalFocused(surfaceArgument: String) -> String { isTerminalFocused(surfaceArgument) } diff --git a/Sources/TerminalController+DebugMethodNames.swift b/Sources/TerminalController+DebugMethodNames.swift index d04ef07f826c..592ae05f01fd 100644 --- a/Sources/TerminalController+DebugMethodNames.swift +++ b/Sources/TerminalController+DebugMethodNames.swift @@ -13,6 +13,7 @@ extension TerminalController { "debug.app.activate", "debug.workspace_todo.checklist_add_field", "debug.pro_welcome_checklist.show", + "debug.native_pricing.show", "debug.command_palette.toggle", "debug.command_palette.rename_tab.open", "debug.command_palette.visible", diff --git a/Sources/TerminalController.swift b/Sources/TerminalController.swift index 31b51865c7ff..c72449dd2626 100644 --- a/Sources/TerminalController.swift +++ b/Sources/TerminalController.swift @@ -400,6 +400,7 @@ class TerminalController { "notification.open", "notification.jump_to_unread", "debug.command_palette.toggle", "debug.pro_welcome_checklist.show", + "debug.native_pricing.show", "debug.notification.focus", "debug.app.activate", "debug.cloudtree.spacing", "debug.right_sidebar.focus", From 842ce5e93c7316fe44d7da193bbbbd0e3d76b31d Mon Sep 17 00:00:00 2001 From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:25:26 -0700 Subject: [PATCH 05/10] Pricing: drop the stale 50-VM line from the native Max card The catalog value for pricing.native.max.feature.pro still said "Everything in Pro: 50 Cloud VMs" in nine locales. A new test fails if any native pricing or Pro settings string sells 50 VMs, 24/64 GB, a trial, or the retired annual price. Co-Authored-By: Claude Opus 5.5 (1M context) --- Resources/Localizable.xcstrings | 18 +++++++++--------- web/tests/pro-pricing.test.ts | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 056cff936b26..c4f030f9e354 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -520199,55 +520199,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "Everything in Pro: 50 Cloud VMs, unlimited workspaces, the iOS app" + "value": "Unlimited workspaces and the iOS app" } }, "de": { "stringUnit": { "state": "translated", - "value": "Alles aus Pro: 50 Cloud-VMs, unbegrenzte Arbeitsbereiche, die iOS-App" + "value": "Unbegrenzte Arbeitsbereiche und die iOS-App" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Tout Pro : 50 VM Cloud, espaces de travail illimités, application iOS" + "value": "Espaces de travail illimités et application iOS" } }, "ar": { "stringUnit": { "state": "translated", - "value": "كل ما في Pro: 50 جهازاً سحابياً، ومساحات عمل غير محدودة، وتطبيق iOS" + "value": "مساحات عمل غير محدودة وتطبيق iOS" } }, "es": { "stringUnit": { "state": "translated", - "value": "Todo Pro: 50 máquinas virtuales Cloud, espacios de trabajo ilimitados y la app iOS" + "value": "Espacios de trabajo ilimitados y la app iOS" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "包含 Pro 所有功能:50 台雲端 VM、無限工作區、iOS 應用程式" + "value": "無限工作區與 iOS 應用程式" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "包含 Pro 所有功能:50 台云端 VM、无限工作区、iOS 应用" + "value": "无限工作区与 iOS 应用" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Pro의 모든 기능: Cloud VM 50대, 무제한 작업 공간, iOS 앱" + "value": "무제한 작업 공간과 iOS 앱" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Pro の全機能:50 台の Cloud VM、無制限のワークスペース、iOS アプリ" + "value": "無制限のワークスペースと iOS アプリ" } } } diff --git a/web/tests/pro-pricing.test.ts b/web/tests/pro-pricing.test.ts index f566b3c2bd90..dcdf79a3b9d8 100644 --- a/web/tests/pro-pricing.test.ts +++ b/web/tests/pro-pricing.test.ts @@ -195,6 +195,22 @@ describe("VM defaults and pricing copy", () => { } }); + test("no native pricing string in any locale sells the retired limits or a free trial", () => { + const catalog = JSON.parse(readFileSync(new URL("../../Resources/Localizable.xcstrings", import.meta.url), "utf8")); + const stale: string[] = []; + for (const [key, entry] of Object.entries(catalog.strings as Record }>)) { + if (!key.startsWith("pricing.native.") && !key.startsWith("settings.account.pro.")) continue; + for (const [locale, localization] of Object.entries(entry.localizations ?? {})) { + const value = localization.stringUnit?.value ?? ""; + if (/(? { const catalog = JSON.parse(readFileSync(new URL("../../Resources/Localizable.xcstrings", import.meta.url), "utf8")); for (const key of ["pricing.native.pro.feature.hours", "pricing.native.team.feature.compute", "pricing.native.sizes.body"]) { From b5bd7bfd414d52f80a732010879bbc58c67bad4f Mon Sep 17 00:00:00 2001 From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:46:39 -0700 Subject: [PATCH 06/10] Tests: keep the sort test independent of the Pro size ceiling Co-Authored-By: Claude Opus 5.5 (1M context) --- cmuxTests/NewMachineModelTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmuxTests/NewMachineModelTests.swift b/cmuxTests/NewMachineModelTests.swift index 1686852d4043..aac726f152c2 100644 --- a/cmuxTests/NewMachineModelTests.swift +++ b/cmuxTests/NewMachineModelTests.swift @@ -196,7 +196,7 @@ struct NewMachineModelTests { @Test func serverOptionsAreSortedAndDeduplicated() { let plan = MachinePlanSnapshot(activeCount: 0, maxActiveVms: 50, planId: "pro") - let (model, _) = makeModel(plan: plan, memoryOptionsMb: [16384, 8192, 8192]) + let (model, _) = makeModel(plan: plan, memoryOptionsMb: [16384, 8192, 8192], lockedMemoryOptionsMb: []) #expect(model.memoryOptions == [8192, 16384]) #expect(model.memoryMb == 8192) } From 06af66420e1bb9f50ddb980ecc48e79b5a405135 Mon Sep 17 00:00:00 2001 From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com> Date: Thu, 1 Oct 2026 17:34:17 -0700 Subject: [PATCH 07/10] Settings: state Pro VM resources, drop cmux AI Co-Authored-By: Claude Opus 5.5 (1M context) --- .../Account/ProUpgradeCard.swift | 2 +- Resources/Localizable.xcstrings | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Account/ProUpgradeCard.swift b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Account/ProUpgradeCard.swift index c63666912d6b..7647f3066d12 100644 --- a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Account/ProUpgradeCard.swift +++ b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Account/ProUpgradeCard.swift @@ -70,7 +70,7 @@ struct ProUpgradeCard: View { } return String( localized: "settings.account.pro.subtitle", - defaultValue: "5 Cloud VMs, the iOS app, and cmux AI. $50/month." + defaultValue: "Up to 5 Cloud VMs, up to 4 vCPUs and 8 GB RAM per VM, and the iOS app. $50/month." ) } diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index b3133a6b676b..fbc610cc48c5 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -291219,55 +291219,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "5 Cloud VMs, the iOS app, and cmux AI. $50/month." + "value": "Up to 5 Cloud VMs, up to 4 vCPUs and 8 GB RAM per VM, and the iOS app. $50/month." } }, "ja": { "stringUnit": { "state": "translated", - "value": "Cloud VM 5 台、iOSアプリ、cmux AI。月額$50。" + "value": "最大 5 台の Cloud VM(VM あたり最大 4 vCPU・8 GB RAM)と iOS アプリ。月額$50。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "5 台云端虚拟机、iOS 应用与 cmux AI。每月 $50。" + "value": "最多 5 台云端虚拟机(每台最多 4 个虚拟 CPU 和 8 GB 内存)与 iOS 应用。每月 $50。" } }, "de": { "stringUnit": { "state": "translated", - "value": "5 Cloud-VMs, die iOS-App und cmux AI. 50 $/Monat." + "value": "Bis zu 5 Cloud-VMs mit bis zu 4 vCPUs und 8 GB RAM pro VM sowie die iOS-App. 50 $/Monat." } }, "fr": { "stringUnit": { "state": "translated", - "value": "5 VM cloud, l’application iOS et l’IA cmux. 50 $/mois." + "value": "Jusqu’à 5 VM cloud, jusqu’à 4 vCPU et 8 Go de RAM par VM, et l’application iOS. 50 $/mois." } }, "ar": { "stringUnit": { "state": "translated", - "value": "5 أجهزة افتراضية سحابية، وتطبيق iOS، ومساعد cmux الذكي. 50$ شهريًا." + "value": "ما يصل إلى 5 أجهزة افتراضية سحابية، بحد أقصى 4 وحدات معالجة مركزية افتراضية و8 جيجابايت من الذاكرة لكل جهاز، وتطبيق iOS. 50$ شهريًا." } }, "es": { "stringUnit": { "state": "translated", - "value": "5 VM en la nube, la aplicación para iOS y cmux AI. $50 al mes." + "value": "Hasta 5 VM en la nube, con hasta 4 vCPU y 8 GB de RAM por VM, y la aplicación para iOS. $50 al mes." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "5 台雲端虛擬機、iOS 應用程式和 cmux AI。每月 50 美元。" + "value": "最多 5 台雲端虛擬機(每台最多 4 個虛擬 CPU 與 8 GB 記憶體)與 iOS 應用程式。每月 50 美元。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 VM 5개, iOS 앱 및 cmux AI. 월 $50." + "value": "최대 5개의 클라우드 VM(VM당 최대 vCPU 4개, RAM 8 GB)과 iOS 앱. 월 $50." } } } From 3845fd43298a2e092378356482ead4a7faee27ee Mon Sep 17 00:00:00 2001 From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com> Date: Fri, 2 Oct 2026 00:17:48 -0700 Subject: [PATCH 08/10] Merge main; keep main's xcstrings layout so only the pricing keys change Co-Authored-By: Claude Opus 5.5 --- Resources/Localizable.xcstrings | 22402 +++++++++++++++--------------- 1 file changed, 11201 insertions(+), 11201 deletions(-) diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index cd2ac45251d3..3e536d75271a 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -1,710 +1,651 @@ { "sourceLanguage": "en", "strings": { - "cli.session.help": { + "browser.omnibar.accessibilityLabel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux session restore [--list] [--session ]...\n\nReopen Claude sessions that were running when cmux last quit unexpectedly.\ncmux finds them in the agent journal, skips any that are running or already\nopen, and resumes each in its own workspace through the launcher that started\nit.\n\nWithout --session, restore acts only after an unexpected quit.\n\nOptions:\n --list Show the sessions without restoring them.\n --session Restore only this session (repeatable)." + "value": "Address and search bar" } }, "de": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux session restore [--list] [--session ]...\n\nÖffnet Claude-Sitzungen erneut, die liefen, als cmux zuletzt unerwartet beendet wurde.\ncmux findet sie im Agent-Journal, überspringt laufende oder bereits geöffnete\nund setzt jede in einem eigenen Workspace\nüber den Launcher fort, der sie gestartet hat.\n\nOhne --session stellt restore nur nach einem unerwarteten Beenden wieder her.\n\nOptionen:\n --list Sitzungen anzeigen, ohne sie wiederherzustellen.\n --session Nur diese Sitzung wiederherstellen (wiederholbar)." + "value": "Adress- und Suchleiste" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux session restore [--list] [--session ]...\n\nRouvre les sessions Claude en cours lorsque cmux s’est fermé de façon inattendue.\ncmux les trouve dans le journal des agents, ignore celles qui tournent ou sont déjà\nouvertes, et reprend chacune dans son propre espace de travail via le lanceur qui l’a\ndémarrée.\n\nSans --session, restore n’agit qu’après une fermeture inattendue.\n\nOptions :\n --list Afficher les sessions sans les restaurer.\n --session Restaurer uniquement cette session (répétable)." + "value": "Barre d’adresse et de recherche" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux session restore [--list] [--session ]...\n\nيعيد فتح جلسات Claude التي كانت قيد التشغيل عندما أُغلق cmux بشكل غير متوقع آخر مرة.\nيعثر cmux عليها في سجل الوكيل، ويتخطى ما يعمل منها أو المفتوح بالفعل،\nويستأنف كل جلسة في مساحة عمل خاصة بها\nعبر المشغّل الذي بدأها.\n\nبدون --session، لا تعمل الاستعادة إلا بعد إغلاق غير متوقع.\n\nالخيارات:\n --list عرض الجلسات دون استعادتها.\n --session استعادة هذه الجلسة فقط (قابل للتكرار)." + "value": "شريط العنوان والبحث" } }, "es": { "stringUnit": { "state": "translated", - "value": "Uso: cmux session restore [--list] [--session ]...\n\nVuelve a abrir las sesiones de Claude que estaban en ejecución cuando cmux se cerró inesperadamente.\ncmux las encuentra en el diario de agentes, omite las que están en ejecución o ya\nabiertas, y reanuda cada una en su propio espacio de trabajo mediante el lanzador que\nla inició.\n\nSin --session, restore solo actúa tras un cierre inesperado.\n\nOpciones:\n --list Mostrar las sesiones sin restaurarlas.\n --session Restaurar solo esta sesión (repetible)." + "value": "Barra de direcciones y búsqueda" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "用法: cmux session restore [--list] [--session ]...\n\n重新開啟 cmux 上次意外結束時仍在執行的 Claude 工作階段。\ncmux 會從代理日誌中找出它們,略過仍在執行或已開啟的工作階段,\n並透過原本啟動它的啟動器\n在各自的工作區中繼續。\n\n未指定 --session 時,restore 只會在意外結束後執行。\n\n選項:\n --list 只列出工作階段,不還原。\n --session 只還原此工作階段(可重複)。" + "value": "網址與搜尋列" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用法: cmux session restore [--list] [--session ]...\n\n重新打开 cmux 上次意外退出时仍在运行的 Claude 会话。\ncmux 会从代理日志中找到它们,跳过仍在运行或已打开的会话,\n并通过最初启动它的启动器\n在各自的工作区中继续。\n\n未指定 --session 时,restore 只会在意外退出后执行。\n\n选项:\n --list 只列出会话,不恢复。\n --session 只恢复此会话(可重复)。" + "value": "地址和搜索栏" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용법: cmux session restore [--list] [--session ]...\n\ncmux가 마지막으로 예기치 않게 종료될 때 실행 중이던 Claude 세션을 다시 엽니다.\ncmux는 에이전트 저널에서 세션을 찾고, 실행 중이거나 이미 열려 있는 세션은 건너뛰며,\n각 세션을 시작한 런처를 통해\n자체 워크스페이스에서 이어갑니다.\n\n--session이 없으면 restore는 예기치 않은 종료 후에만 동작합니다.\n\n옵션:\n --list 복원하지 않고 세션만 표시합니다.\n --session 이 세션만 복원합니다(반복 가능)." + "value": "주소 및 검색 막대" } }, "ja": { "stringUnit": { "state": "translated", - "value": "使用法: cmux session restore [--list] [--session ]...\n\ncmux が前回予期せず終了したときに実行中だった Claude セッションを再び開きます。\ncmux はエージェントジャーナルからセッションを見つけ、実行中または既に開いている\nものはスキップし、それぞれを起動したランチャー経由で\n専用のワークスペースで再開します。\n\n--session を指定しない場合、restore は予期しない終了の後にのみ動作します。\n\nオプション:\n --list 復元せずにセッションを表示します。\n --session このセッションのみ復元します(複数指定可)。" + "value": "アドレスと検索バー" } } } }, - "cli.session.error.expectedRestore": { + "cli.remotes.error.invalidArguments": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session: expected 'restore' (see cmux help session)" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "session: 'restore' erwartet (siehe cmux help session)" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "session : « restore » attendu (voir cmux help session)" + "value": "%@: invalid arguments." } }, "ar": { "stringUnit": { "state": "translated", - "value": "session: كان المتوقع 'restore' (راجع cmux help session)" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "session: se esperaba 'restore' (consulta cmux help session)" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "session:應為 'restore'(請參閱 cmux help session)" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "session:应为 'restore'(请参阅 cmux help session)" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "session: 'restore'가 필요합니다(cmux help session 참조)" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "session: 'restore' が必要です(cmux help session を参照)" - } - } - } - }, - "cli.session.error.sessionRequiresId": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "session restore: --session requires an id" + "value": "%@: وسيطات غير صالحة." } }, "de": { "stringUnit": { "state": "translated", - "value": "session restore: --session erfordert eine ID" + "value": "%@: ungültige Argumente." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session restore : --session nécessite un identifiant" + "value": "%@: argumentos no válidos." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "session restore: يتطلب --session معرّفًا" + "value": "%@ : arguments non valides." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "session restore: --session requiere un id" + "value": "%@:引数が無効です。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "session restore:--session 需要一個 ID" + "value": "%@: 잘못된 인수입니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session restore:--session 需要一个 ID" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "session restore: --session에는 ID가 필요합니다" + "value": "%@:无效的参数。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session restore: --session には ID が必要です" + "value": "%@:無效的引數。" } } } }, - "cli.session.error.unknownArgument": { + "cli.remotes.error.unexpectedArgument": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session restore: unknown argument '%@'" + "value": "%1$@: unexpected argument '%2$@'." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "session restore: unbekanntes Argument '%@'" + "value": "%1$@: وسيطة غير متوقعة '%2$@'." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "session restore : argument inconnu « %@ »" + "value": "%1$@: unerwartetes Argument '%2$@'." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "session restore: وسيط غير معروف '%@'" + "value": "%1$@: argumento inesperado '%2$@'." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "session restore: argumento desconocido '%@'" + "value": "%1$@ : argument inattendu '%2$@'." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session restore:未知的參數 '%@'" + "value": "%1$@:予期しない引数 '%2$@' です。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session restore:未知参数 '%@'" + "value": "%1$@: 예상하지 못한 인수 '%2$@'입니다." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session restore: 알 수 없는 인수 '%@'" + "value": "%1$@:意外的参数 '%2$@'。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session restore: 不明な引数 '%@'" + "value": "%1$@:非預期的引數 '%2$@'。" } } } }, - "cli.session.list.empty": { + "cli.remotes.error.unknownFlag": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No agent sessions to restore." + "value": "%1$@: unknown flag '%2$@'." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Keine Agent-Sitzungen zum Wiederherstellen." + "value": "%1$@: خيار غير معروف '%2$@'." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Aucune session d’agent à restaurer." + "value": "%1$@: unbekannte Option '%2$@'." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "لا توجد جلسات وكيل لاستعادتها." + "value": "%1$@: opción desconocida '%2$@'." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "No hay sesiones de agente para restaurar." + "value": "%1$@ : option inconnue '%2$@'." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "沒有可還原的代理工作階段。" + "value": "%1$@:不明なオプション '%2$@' です。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "没有可恢复的代理会话。" + "value": "%1$@: 알 수 없는 옵션 '%2$@'입니다." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "복원할 에이전트 세션이 없습니다." + "value": "%1$@:未知的选项 '%2$@'。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "復元するエージェントセッションはありません。" + "value": "%1$@:未知的選項 '%2$@'。" } } } }, - "cli.session.restore.cleanQuit": { + "projectPanel.reload": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No agent sessions restored: cmux last quit normally. To restore one anyway, pass --session from --list." + "value": "Reload Project" } }, "de": { "stringUnit": { "state": "translated", - "value": "Keine Agent-Sitzungen wiederhergestellt: cmux wurde zuletzt normal beendet. Um trotzdem eine wiederherzustellen, übergib --session aus --list." + "value": "Projekt neu laden" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucune session d’agent restaurée : cmux s’est fermé normalement la dernière fois. Pour en restaurer une quand même, passez --session depuis --list." + "value": "Recharger le projet" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لم تتم استعادة أي جلسات وكيل: أُغلق cmux بشكل طبيعي آخر مرة. لاستعادة جلسة على أي حال، مرّر --session من --list." + "value": "إعادة تحميل المشروع" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se restauró ninguna sesión de agente: cmux se cerró normalmente la última vez. Para restaurar una de todos modos, pasa --session de --list." + "value": "Recargar proyecto" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "未還原任何代理工作階段:cmux 上次是正常結束。若仍要還原,請傳入 --list 中的 --session 。" + "value": "重新載入專案" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "未恢复任何代理会话:cmux 上次是正常退出。若仍要恢复,请传入 --list 中的 --session 。" + "value": "重新加载项目" } }, "ko": { "stringUnit": { "state": "translated", - "value": "복원된 에이전트 세션이 없습니다. cmux가 마지막에 정상적으로 종료되었습니다. 그래도 복원하려면 --list에서 확인한 --session 를 전달하세요." + "value": "프로젝트 다시 불러오기" } }, "ja": { "stringUnit": { "state": "translated", - "value": "エージェントセッションは復元されませんでした。cmux は前回正常に終了しています。それでも復元する場合は、--list の --session を指定してください。" + "value": "プロジェクトを再読み込み" } } } }, - "cli.session.restore.empty": { + "projectPanel.reloadErrors": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No agent sessions restored." + "value": "Reload returned errors: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Keine Agent-Sitzungen wiederhergestellt." + "value": "Beim Neuladen sind Fehler aufgetreten: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucune session d’agent restaurée." + "value": "Le rechargement a renvoyé des erreurs : %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لم تتم استعادة أي جلسات وكيل." + "value": "أعادت إعادة التحميل أخطاء: %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se restauró ninguna sesión de agente." + "value": "La recarga devolvió errores: %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "未還原任何代理工作階段。" + "value": "重新載入時發生錯誤:%@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "未恢复任何代理会话。" + "value": "重新加载时出现错误:%@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "복원된 에이전트 세션이 없습니다." + "value": "다시 불러오기 중 오류 발생: %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "エージェントセッションは復元されませんでした。" + "value": "再読み込みでエラーが発生しました: %@" } } } }, - "cli.session.restore.done": { + "projectPanel.dismissReloadErrors": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Agent sessions restored: %lld" + "value": "Dismiss Errors" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wiederhergestellte Agent-Sitzungen: %lld" + "value": "Fehler ausblenden" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Sessions d’agent restaurées : %lld" + "value": "Ignorer les erreurs" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جلسات الوكيل المستعادة: %lld" + "value": "تجاهل الأخطاء" } }, "es": { "stringUnit": { "state": "translated", - "value": "Sesiones de agente restauradas: %lld" + "value": "Descartar errores" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已還原的代理工作階段:%lld" + "value": "關閉錯誤" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已恢复的代理会话:%lld" + "value": "关闭错误" } }, "ko": { "stringUnit": { "state": "translated", - "value": "복원된 에이전트 세션: %lld" + "value": "오류 닫기" } }, "ja": { "stringUnit": { "state": "translated", - "value": "復元したエージェントセッション: %lld" + "value": "エラーを閉じる" } } } }, - "agentRecovery.alert.title": { + "projectPanel.scheme": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Restore agent sessions?" + "value": "Scheme" } }, "de": { "stringUnit": { "state": "translated", - "value": "Agent-Sitzungen wiederherstellen?" + "value": "Schema" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Restaurer les sessions d’agent ?" + "value": "Schéma" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هل تريد استعادة جلسات الوكيل؟" + "value": "المخطط" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Restaurar las sesiones de agente?" + "value": "Esquema" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "要還原代理工作階段嗎?" + "value": "方案" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "要恢复代理会话吗?" + "value": "方案" } }, "ko": { "stringUnit": { "state": "translated", - "value": "에이전트 세션을 복원할까요?" + "value": "스킴" } }, "ja": { "stringUnit": { "state": "translated", - "value": "エージェントセッションを復元しますか?" + "value": "スキーム" } } } }, - "agentRecovery.alert.message": { + "projectPanel.configuration": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux quit unexpectedly while agent sessions were running. Sessions to restore: %lld. Each one reopens in its own workspace and resumes where it left off." + "value": "Configuration" } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux wurde unerwartet beendet, während Agent-Sitzungen liefen. Wiederherzustellende Sitzungen: %lld. Jede wird in einem eigenen Workspace geöffnet und dort fortgesetzt, wo sie aufgehört hat." + "value": "Konfiguration" } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux s’est fermé de façon inattendue pendant que des sessions d’agent étaient en cours. Sessions à restaurer : %lld. Chacune rouvre dans son propre espace de travail et reprend là où elle s’était arrêtée." + "value": "Configuration de build" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أُغلق cmux بشكل غير متوقع أثناء تشغيل جلسات الوكيل. الجلسات المطلوب استعادتها: %lld. تُفتح كل جلسة في مساحة عمل خاصة بها وتُستأنف من حيث توقفت." + "value": "التكوين" } }, "es": { "stringUnit": { "state": "translated", - "value": "cmux se cerró inesperadamente mientras había sesiones de agente en ejecución. Sesiones por restaurar: %lld. Cada una se abre en su propio espacio de trabajo y continúa donde se quedó." + "value": "Configuración" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux 在代理工作階段執行時意外結束。要還原的工作階段:%lld。每個工作階段都會在各自的工作區重新開啟,並從中斷處繼續。" + "value": "組態" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 在代理会话运行时意外退出。要恢复的会话:%lld。每个会话都会在各自的工作区重新打开,并从中断处继续。" + "value": "配置" } }, "ko": { "stringUnit": { "state": "translated", - "value": "에이전트 세션이 실행 중일 때 cmux가 예기치 않게 종료되었습니다. 복원할 세션: %lld. 각 세션은 자체 워크스페이스에서 다시 열리고 중단된 곳에서 이어집니다." + "value": "구성" } }, "ja": { "stringUnit": { "state": "translated", - "value": "エージェントセッションの実行中に cmux が予期せず終了しました。復元するセッション: %lld。各セッションは専用のワークスペースで再び開き、中断したところから再開します。" + "value": "構成" } } } }, - "agentRecovery.alert.restore": { + "projectPanel.loadingFormat": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Restore Agent Sessions" + "value": "Loading %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Agent-Sitzungen wiederherstellen" + "value": "%@ wird geladen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Restaurer les sessions d’agent" + "value": "Chargement de %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "استعادة جلسات الوكيل" + "value": "جارٍ تحميل %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Restaurar sesiones de agente" + "value": "Cargando %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "還原代理工作階段" + "value": "正在載入 %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "恢复代理会话" + "value": "正在加载 %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "에이전트 세션 복원" + "value": "%@ 불러오는 중" } }, "ja": { "stringUnit": { "state": "translated", - "value": "エージェントセッションを復元" + "value": "%@ を読み込み中" } } } }, - "agentRecovery.alert.notNow": { + "projectPanel.failedFormat": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Not Now" + "value": "Failed: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nicht jetzt" + "value": "Fehlgeschlagen: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Pas maintenant" + "value": "Échec : %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ليس الآن" + "value": "فشل: %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ahora no" + "value": "Error: %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "稍後" + "value": "失敗:%@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "以后再说" + "value": "失败:%@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "나중에" + "value": "실패: %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "後で" + "value": "失敗: %@" } } } @@ -2986,6 +2927,131 @@ } } }, + "cloudPane.attachment.reason.staleDaemon": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "this Cloud machine is running an older terminal runtime; upgrade it, then retry" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "auf dieser Cloud-Maschine läuft eine ältere Terminal-Laufzeit; aktualisiere sie und versuche es erneut" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "cette machine Cloud utilise une ancienne version du moteur de terminal ; mettez-la à jour, puis réessayez" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يعمل على جهاز Cloud هذا إصدار أقدم من تشغيل الطرفية؛ حدّث الجهاز ثم أعد المحاولة" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "esta máquina de Cloud usa un runtime de terminal antiguo; actualízala y vuelve a intentarlo" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "這台 Cloud 機器執行較舊的終端機執行環境;請先升級,再重試" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "这台 Cloud 机器运行较旧的终端运行时;请先升级,再重试" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "이 Cloud 머신은 이전 터미널 런타임을 실행 중입니다. 업그레이드한 후 다시 시도하세요" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "この Cloud マシンでは古いターミナルランタイムが実行されています。アップグレードしてから再試行してください" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "ova Cloud mašina koristi starije izvršno okruženje terminala; nadogradite je pa pokušajte ponovo" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "denne Cloud-maskine kører en ældre terminalruntime; opgrader den, og prøv igen" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "questa macchina Cloud esegue un runtime del terminale meno recente; aggiornala e riprova" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ម៉ាស៊ីន Cloud នេះកំពុងដំណើរការ runtime ស្ថានីយចាស់ជាងនេះ; ធ្វើបច្ចុប្បន្នភាព រួចព្យាយាមម្ដងទៀត" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "denne Cloud-maskinen kjører en eldre terminalruntime; oppgrader den og prøv igjen" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "ta maszyna Cloud korzysta ze starszego środowiska uruchomieniowego terminala; zaktualizuj ją i spróbuj ponownie" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "esta máquina Cloud está executando um runtime de terminal antigo; atualize-a e tente novamente" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "на этой Cloud-машине используется старая среда выполнения терминала; обновите её и повторите попытку" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "เครื่อง Cloud นี้กำลังใช้รันไทม์เทอร์มินัลรุ่นเก่า โปรดอัปเกรดแล้วลองอีกครั้ง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "bu Cloud makinesi daha eski bir terminal çalışma zamanı kullanıyor; yükseltip tekrar deneyin" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "на цій Cloud-машині працює старіше середовище термінала; оновіть її та повторіть спробу" + } + } + } + }, "cloudTree.error.terminalAttachTimedOut": { "extractionState": "manual", "localizations": { @@ -176875,6 +176941,71 @@ } } }, + "dialog.close.dontAskAgain": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Don’t ask again" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "لا تسأل مرة أخرى" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Nicht mehr fragen" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "No volver a preguntar" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Ne plus demander" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "今後確認しない" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "다시 묻지 않기" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Більше не запитувати" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "不再询问" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "不再詢問" + } + } + } + }, "dialog.closeAnchor.message.lone": { "extractionState": "manual", "localizations": { @@ -228567,6 +228698,65 @@ } } }, + "globalSearch.kind.terminal": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Terminal" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ターミナル" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "터미널" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "طرفية" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "終端" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "终端" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Terminal" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Terminal" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Terminal" + } + } + } + }, "globalSearch.kind.title": { "extractionState": "manual", "localizations": { @@ -230664,6 +230854,131 @@ } } }, + "machines.agent.pi": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + } + } + }, "machines.auth.checking": { "extractionState": "manual", "localizations": { @@ -235525,6 +235840,256 @@ } } }, + "cloudTree.group.cloudMachines": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud Machines" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Cloud-Maschinen" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Machines cloud" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "أجهزة سحابية" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Máquinas en la nube" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "雲端機器" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "云端机器" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "클라우드 머신" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クラウドマシン" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Mašine u oblaku" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Cloud-maskiner" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Macchine cloud" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ម៉ាស៊ីនលើពពក" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Skymaskiner" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Maszyny w chmurze" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Máquinas na nuvem" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Облачные машины" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "เครื่องคลาวด์" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bulut makineleri" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Хмарні машини" + } + } + } + }, + "cloudTree.group.devices": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "My Devices" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Meine Geräte" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Mes appareils" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "أجهزتي" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Mis dispositivos" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "我的裝置" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "我的设备" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "내 기기" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "マイデバイス" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Moji uređaji" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Mine enheder" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "I miei dispositivi" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ឧបករណ៍របស់ខ្ញុំ" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Mine enheter" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Moje urządzenia" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Meus dispositivos" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Мои устройства" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "อุปกรณ์ของฉัน" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Cihazlarım" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Мої пристрої" + } + } + } + }, "machines.operation.checkpoint": { "extractionState": "manual", "localizations": { @@ -237920,6 +238485,419 @@ } } }, + "machines.listUnavailable.stale": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Machine list unavailable — showing last known" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Maschinenliste nicht verfügbar – zeige letzten bekannten Stand" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Liste des machines indisponible — affichage des dernières informations connues" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "قائمة الأجهزة غير متاحة — يتم عرض آخر حالة معروفة" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Lista de máquinas no disponible — se muestra el último estado conocido" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "無法取得機器清單 — 顯示上次已知的狀態" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "机器列表不可用 —— 显示的是最后已知状态" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "머신 목록을 사용할 수 없음 — 마지막으로 확인된 상태 표시 중" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "マシン一覧を取得できません — 最後の状態を表示中" + } + } + } + }, + "machines.listUnavailable.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Your machines are unchanged. cmux couldn’t load the list from the Cloud service and retries on its own." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Deine Maschinen sind unverändert. cmux konnte die Liste nicht vom Cloud-Dienst laden und versucht es selbstständig erneut." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Vos machines ne sont pas modifiées. cmux n’a pas pu charger la liste depuis le service Cloud et va réessayer automatiquement." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "لم تتغير أجهزتك. تعذر على cmux تحميل القائمة من الخدمة السحابية، وسيعيد المحاولة تلقائيًا." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Tus máquinas no han cambiado. cmux no pudo cargar la lista desde el servicio de la nube y volverá a intentarlo automáticamente." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "您的機器沒有任何變動。cmux 無法從雲端服務載入清單,會自動重試。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "你的机器没有任何变化。cmux 无法从云端服务加载列表,会自动重试。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "머신은 변경되지 않았습니다. cmux가 클라우드 서비스에서 목록을 불러오지 못했으며 자동으로 다시 시도합니다." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "マシンは変更されていません。cmux はクラウドサービスから一覧を読み込めませんでした。自動的に再試行します。" + } + } + } + }, + "machines.listUnavailable.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Can’t load the machine list" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Maschinenliste kann nicht geladen werden" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Impossible de charger la liste des machines" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تعذر تحميل قائمة الأجهزة" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "No se puede cargar la lista de máquinas" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "無法載入機器清單" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无法加载机器列表" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "머신 목록을 불러올 수 없습니다" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "マシン一覧を読み込めません" + } + } + } + }, + "machines.offline.stale": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Offline — showing last known" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Offline – zeige letzten bekannten Stand" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Hors ligne — affichage des dernières informations connues" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "غير متصل — يتم عرض آخر حالة معروفة" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Sin conexión — se muestra el último estado conocido" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "離線 — 顯示上次已知的狀態" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "离线 —— 显示的是最后已知状态" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "오프라인 — 마지막으로 확인된 상태 표시 중" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "オフライン — 最後の状態を表示中" + } + } + } + }, + "machines.offline.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud machines load when this Mac is back online." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Cloud-Maschinen werden geladen, sobald dieser Mac wieder online ist." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Les machines Cloud se chargeront dès que ce Mac sera de nouveau en ligne." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "سيتم تحميل الأجهزة السحابية عندما يعود جهاز Mac هذا إلى الاتصال بالإنترنت." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Las máquinas en la nube se cargarán cuando este Mac vuelva a estar en línea." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "這台 Mac 恢復連線後,就會載入雲端機器。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "这台 Mac 恢复联网后,就会加载云端机器。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "이 Mac이 다시 온라인 상태가 되면 클라우드 머신을 불러옵니다." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "この Mac がオンラインに戻ると Cloud マシンを読み込みます。" + } + } + } + }, + "machines.offline.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Waiting for network" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Warte auf Netzwerk" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "En attente du réseau" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "في انتظار الشبكة" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Esperando la red" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "正在等待網路" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "正在等待网络" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "네트워크 대기 중" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ネットワークを待機中" + } + } + } + }, + "machines.reconnecting.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Reconnecting to Cloud…" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Verbindung zur Cloud wird wiederhergestellt…" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Reconnexion au Cloud…" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "جارٍ إعادة الاتصال بالسحابة…" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Reconectando con la nube…" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "正在重新連線至雲端…" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "正在重新连接云端…" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "클라우드에 다시 연결하는 중…" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クラウドに再接続中…" + } + } + } + }, "markdown.copyConfirm.html": { "extractionState": "manual", "localizations": { @@ -260645,6 +261623,381 @@ } } }, + "cli.auth.status.teamNotLoaded": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": " team: not loaded" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": " チーム: 未読み込み" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": " 团队: 未加载" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": " Team: nicht geladen" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": " équipe: non chargée" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": " الفريق: لم يتم تحميله" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": " equipo: no cargado" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": " 團隊: 未載入" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": " 팀: 로드되지 않음" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": " tim: nije učitan" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": " team: ikke indlæst" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": " team: non caricato" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": " ក្រុម៖ មិនទាន់បានផ្ទុក" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": " team: ikke lastet" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": " zespół: nie załadowano" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": " equipe: não carregada" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": " команда: не загружена" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": " ทีม: ยังไม่ได้โหลด" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": " ekip: yüklenmedi" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": " команда: не завантажена" + } + } + } + }, + "cli.auth.status.teamNotLoadedRetrying": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": " team: not loaded (retrying)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": " チーム: 未読み込み(再試行中)" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": " 团队: 未加载(正在重试)" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": " Team: nicht geladen (wird erneut versucht)" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": " équipe: non chargée (nouvel essai)" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": " الفريق: لم يتم تحميله (جارٍ إعادة المحاولة)" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": " equipo: no cargado (reintentando)" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": " 團隊: 未載入(重試中)" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": " 팀: 로드되지 않음 (재시도 중)" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": " tim: nije učitan (ponovni pokušaj)" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": " team: ikke indlæst (prøver igen)" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": " team: non caricato (nuovo tentativo)" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": " ក្រុម៖ មិនទាន់បានផ្ទុក (កំពុងព្យាយាមម្ដងទៀត)" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": " team: ikke lastet (prøver igjen)" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": " zespół: nie załadowano (ponawianie próby)" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": " equipe: não carregada (tentando novamente)" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": " команда: не загружена (повторная попытка)" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": " ทีม: ยังไม่ได้โหลด (กำลังลองอีกครั้ง)" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": " ekip: yüklenmedi (yeniden deneniyor)" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": " команда: не завантажена (повторна спроба)" + } + } + } + }, + "mobile.pairing.error.teamUnavailable": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Could not load your cmux team. Check your internet connection, then try again." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "cmux チームを読み込めませんでした。インターネット接続を確認してから、もう一度お試しください。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无法加载你的 cmux 团队。请检查网络连接,然后重试。" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Dein cmux-Team konnte nicht geladen werden. Prüfe deine Internetverbindung und versuche es erneut." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Impossible de charger votre équipe cmux. Vérifiez votre connexion Internet, puis réessayez." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تعذّر تحميل فريق cmux الخاص بك. تحقّق من اتصالك بالإنترنت، ثم حاول مرة أخرى." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "No se pudo cargar tu equipo de cmux. Comprueba tu conexión a internet e inténtalo de nuevo." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "無法載入你的 cmux 團隊。請檢查網路連線,然後再試一次。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "cmux 팀을 불러올 수 없습니다. 인터넷 연결을 확인한 후 다시 시도하세요." + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Nije moguće učitati vaš cmux tim. Provjerite internetsku vezu i pokušajte ponovo." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Din cmux-team kunne ikke indlæses. Kontrollér din internetforbindelse, og prøv igen." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Impossibile caricare il tuo team cmux. Controlla la connessione Internet e riprova." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "មិនអាចផ្ទុកក្រុម cmux របស់អ្នកបានទេ។ សូមពិនិត្យការតភ្ជាប់អ៊ីនធឺណិត ហើយព្យាយាមម្ដងទៀត។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Kunne ikke laste inn cmux-teamet ditt. Kontroller internettilkoblingen, og prøv igjen." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Nie udało się załadować Twojego zespołu cmux. Sprawdź połączenie z internetem i spróbuj ponownie." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Não foi possível carregar sua equipe cmux. Verifique sua conexão com a internet e tente novamente." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не удалось загрузить вашу команду cmux. Проверьте подключение к интернету и попробуйте ещё раз." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ไม่สามารถโหลดทีม cmux ของคุณได้ ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตแล้วลองอีกครั้ง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "cmux ekibiniz yüklenemedi. İnternet bağlantınızı kontrol edip tekrar deneyin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Не вдалося завантажити вашу команду cmux. Перевірте підключення до інтернету й спробуйте ще раз." + } + } + } +}, "mobile.pairing.error.noTicket": { "extractionState": "manual", "localizations": { @@ -271521,65 +272874,6 @@ } } }, - "pricing.native.free.feature.history": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Local session history" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ローカルセッション履歴" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "本地会话历史" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Lokaler Sitzungsverlauf" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Historique de session local" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "سجل جلسات محلي" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Historial de sesiones locales" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "本地工作階段歷程紀錄" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "로컬 세션 기록" - } - } - } - }, "pricing.native.free.feature.terminal": { "extractionState": "manual", "localizations": { @@ -292107,6 +293401,596 @@ } } }, + "settings.app.accentColor": { + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "لون التمييز" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Boja naglaska" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Accentfarve" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Akzentfarbe" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Accent Color" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Color de acento" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Couleur d’accentuation" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Colore di evidenziazione" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクセントカラー" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "강조 색상" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Aksentfarge" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Kolor akcentu" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Cor de destaque" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Цвет акцента" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "สีเน้น" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Vurgu Rengi" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Колір акценту" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "强调色" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "強調色" + } + } + } + }, + "settings.app.accentColor.cmux": { + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "أزرق cmux" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "cmux plava" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "cmux-blå" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "cmux-Blau" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "cmux Blue" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Azul de cmux" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Bleu cmux" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Blu cmux" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "cmux ブルー" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "cmux 파란색" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "cmux-blå" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Niebieski cmux" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Azul do cmux" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Синий cmux" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "สีน้ำเงิน cmux" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "cmux Mavisi" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Синій cmux" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "cmux 蓝" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "cmux 藍" + } + } + } + }, + "settings.app.accentColor.subtitle": { + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "لون مساحة العمل المحددة وحلقة التنبيه وحالة الوكيل وإبرازات cmux الأخرى. يتبع خيار النظام لون التمييز في macOS." + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Boja odabranog radnog prostora, prstena pažnje, statusa agenta i ostalih cmux istaknutih elemenata. Sistem prati boju naglaska macOS-a." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Farve for det valgte arbejdsområde, opmærksomhedsringen, agentstatus og andre cmux-fremhævninger. System følger macOS-accentfarven." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Farbe des ausgewählten Workspace, des Aufmerksamkeitsrings, des Agentenstatus und anderer cmux-Hervorhebungen. „Systemfarbe“ folgt der macOS-Akzentfarbe." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Color of the selected workspace, attention ring, agent status, and other cmux highlights. System follows the macOS accent color." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Color del espacio de trabajo seleccionado, el anillo de atención, el estado del agente y otros resaltados de cmux. Sistema sigue el color de acento de macOS." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Couleur de l’espace de travail sélectionné, de l’anneau d’attention, de l’état de l’agent et des autres mises en évidence de cmux. Système suit la couleur d’accentuation de macOS." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Colore dell’area di lavoro selezionata, dell’anello di attenzione, dello stato dell’agente e degli altri elementi evidenziati di cmux. Sistema segue il colore di evidenziazione di macOS." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "選択中のワークスペース、注意リング、エージェントの状態など、cmux のハイライトの色です。「システム」は macOS のアクセントカラーに従います。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "선택한 워크스페이스, 주의 링, 에이전트 상태 등 cmux 강조 표시의 색상입니다. 시스템은 macOS 강조 색상을 따릅니다." + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Farge for det valgte arbeidsområdet, oppmerksomhetsringen, agentstatus og andre cmux-uthevinger. System følger macOS-aksentfargen." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Kolor wybranego obszaru roboczego, pierścienia uwagi, stanu agenta i innych wyróżnień cmux. Systemowy podąża za kolorem akcentu macOS." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Cor do espaço de trabalho selecionado, do anel de atenção, do status do agente e de outros destaques do cmux. Sistema segue a cor de destaque do macOS." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Цвет выбранного рабочего пространства, кольца внимания, статуса агента и других выделений cmux. «Системный» следует цвету акцента macOS." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "สีของพื้นที่ทำงานที่เลือก วงแจ้งเตือน สถานะเอเจนต์ และไฮไลต์อื่นๆ ของ cmux ตัวเลือกระบบจะใช้สีเน้นของ macOS" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Seçili çalışma alanı, dikkat halkası, ajan durumu ve diğer cmux vurgularının rengi. Sistem, macOS vurgu rengini izler." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Колір вибраного робочого простору, кільця уваги, статусу агента та інших виділень cmux. «Системний» використовує колір акценту macOS." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "所选工作区、提醒环、代理状态和其他 cmux 高亮的颜色。“系统”跟随 macOS 强调色。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "所選工作區、提醒環、代理狀態和其他 cmux 醒目提示的顏色。「系統」跟隨 macOS 強調色。" + } + } + } + }, + "settings.app.accentColor.system": { + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "النظام" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Sistem" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "System" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Systemfarbe" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "System" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Sistema" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Système" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Sistema" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "システム" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "시스템" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "System" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Systemowy" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Sistema" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Системный" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ระบบ" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Sistem" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Системний" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "系统" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "系統" + } + } + } + }, + "settings.app.accentColor.systemToggle": { + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "لون التمييز للنظام" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Sistemska boja naglaska" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Systemets accentfarve" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "System-Akzentfarbe" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "System Accent Color" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Color de acento del sistema" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Couleur d’accentuation du système" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Colore di evidenziazione di sistema" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "システムのアクセントカラー" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "시스템 강조 색상" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Systemets aksentfarge" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Systemowy kolor akcentu" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Cor de destaque do sistema" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Системный цвет акцента" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "สีเน้นของระบบ" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Sistem Vurgu Rengi" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Системний колір акценту" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "系统强调色" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "系統強調色" + } + } + } + }, "settings.app.appearance": { "extractionState": "manual", "localizations": { @@ -337913,124 +339797,6 @@ } } }, - "settings.notifications.soundWhenFocused.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Play the notification sound even when the pane that notified is already focused. When off, a focused pane shows its ring without a sound." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "شغّل صوت الإشعار حتى عندما تكون اللوحة التي أرسلت الإشعار في موضع التركيز بالفعل. عند إيقافه، تعرض اللوحة المُركَّز عليها حلقتها دون صوت." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Den Benachrichtigungston auch abspielen, wenn der benachrichtigende Bereich bereits fokussiert ist. Wenn aus, zeigt ein fokussierter Bereich seinen Ring ohne Ton." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Reproduce el sonido de notificación incluso cuando el panel que notificó ya tiene el foco. Si está desactivado, un panel con foco muestra su anillo sin sonido." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Jouer le son de notification même lorsque le panneau à l’origine de la notification a déjà le focus. Désactivé, un panneau actif affiche son anneau sans son." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "通知を送ったペインがすでにフォーカスされている場合でも通知音を鳴らします。オフの場合、フォーカス中のペインは音を鳴らさずにリングを表示します。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "알림을 보낸 패널이 이미 포커스된 상태여도 알림음을 재생합니다. 끄면 포커스된 패널은 소리 없이 링만 표시합니다." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "即使发出通知的窗格已处于焦点状态,也播放通知声音。关闭时,处于焦点的窗格会显示光环但不发出声音。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "即使發出通知的窗格已在焦點中,也播放通知聲音。關閉時,焦點中的窗格會顯示光環但不發出聲音。" - } - } - } - }, - "settings.notifications.soundWhenFocused.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Sound for Focused Pane" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "صوت للوحة المُركَّز عليها" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Ton für fokussierten Bereich" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Sonido para el panel con foco" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Son pour le panneau actif" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "フォーカス中のペインの通知音" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "포커스된 패널 소리" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "焦点窗格的声音" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "焦點窗格的聲音" - } - } - } - }, "settings.notifications.soundOverrides.subtitle": { "extractionState": "manual", "localizations": { @@ -344794,6 +346560,124 @@ } } }, + "settings.search.alias.setting.app.accent-color": { + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue لون التمييز أزرق النظام" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue boja naglaska plava sistem" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue accentfarve blå system" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue Akzentfarbe blau System" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue color de acento azul sistema" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue couleur d’accentuation bleu système" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue colore di evidenziazione blu sistema" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue アクセントカラー 青 システム" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue 강조 색상 파란색 시스템" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue aksentfarge blå system" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue kolor akcentu niebieski systemowy" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue cor de destaque azul sistema" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue цвет акцента синий системный" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue สีเน้น สีน้ำเงิน ระบบ" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue vurgu rengi mavi sistem" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue колір акценту синій системний" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue 强调色 蓝色 系统" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue 強調色 藍色 系統" + } + } + } + }, "settings.search.alias.setting.app.appearance": { "extractionState": "manual", "localizations": { @@ -549385,127 +551269,297 @@ } } }, - "machines.agent.pi": { + "terminal.passwordInput.indicator": { "extractionState": "manual", "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "إدخال كلمة المرور" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Passworteingabe" + } + }, "en": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "Password input" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Entrada de contraseña" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Saisie du mot de passe" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "パスワード入力" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "비밀번호 입력" } }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "密码输入" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "密碼輸入" + } + } + } + }, + "settings.terminal.showPasswordInputIndicator": { + "extractionState": "manual", + "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "مؤشر إدخال كلمة المرور" } }, - "bs": { + "de": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "Anzeige für Passworteingabe" } }, - "da": { + "en": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "Password Input Indicator" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Indicador de entrada de contraseña" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Indicateur de saisie du mot de passe" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "パスワード入力インジケーター" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "비밀번호 입력 표시" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "密码输入指示器" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "密碼輸入指示器" + } + } + } + }, + "settings.terminal.showPasswordInputDots": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "إظهار نقاط للأحرف المكتوبة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "Punkte für eingegebene Zeichen anzeigen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Show Typed Password Dots" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "Mostrar puntos por los caracteres escritos" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "Afficher des points pour les caractères saisis" } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "入力したパスワードのドットを表示" } }, - "km": { + "ko": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "입력한 비밀번호 점 표시" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示已输入的密码圆点" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "顯示已輸入的密碼圓點" + } + } + } + }, + "settings.search.alias.setting.terminal.password-input-indicator": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt كلمة المرور إدخال مؤشر قفل" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt passwort eingabe anzeige schloss" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt contraseña entrada indicador candado eco" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt mot de passe saisie indicateur cadenas écho" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt パスワード 入力 インジケーター 鍵 エコー" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt 비밀번호 입력 표시 자물쇠 에코" } }, - "nb": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt 密码 输入 指示器 锁 回显" } }, - "pl": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt 密碼 輸入 指示器 鎖頭 回顯" + } + } + } + }, + "settings.search.alias.setting.terminal.password-input-dots": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt كلمة المرور نقاط أحرف" } }, - "pt-BR": { + "de": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt passwort punkte zeichen anzahl" } }, - "ru": { + "en": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt" } }, - "th": { + "es": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt contraseña puntos caracteres" } }, - "tr": { + "fr": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt mot de passe points caractères" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt パスワード ドット 文字" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt 비밀번호 점 문자" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt 密码 圆点 字符" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Pi" + "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt 密碼 圓點 字元" } } } @@ -549982,1605 +552036,6 @@ } } }, - "globalSearch.kind.terminal": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Terminal" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ターミナル" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "터미널" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "طرفية" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "終端" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "终端" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Terminal" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Terminal" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Terminal" - } - } - } - }, - "terminal.passwordInput.indicator": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "إدخال كلمة المرور" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Passworteingabe" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Password input" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Entrada de contraseña" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisie du mot de passe" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "パスワード入力" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "비밀번호 입력" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "密码输入" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "密碼輸入" - } - } - } - }, - "settings.terminal.showPasswordInputIndicator": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "مؤشر إدخال كلمة المرور" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Anzeige für Passworteingabe" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Password Input Indicator" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Indicador de entrada de contraseña" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Indicateur de saisie du mot de passe" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "パスワード入力インジケーター" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "비밀번호 입력 표시" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "密码输入指示器" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "密碼輸入指示器" - } - } - } - }, - "settings.terminal.showPasswordInputDots": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "إظهار نقاط للأحرف المكتوبة" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Punkte für eingegebene Zeichen anzeigen" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Show Typed Password Dots" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Mostrar puntos por los caracteres escritos" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Afficher des points pour les caractères saisis" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "入力したパスワードのドットを表示" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "입력한 비밀번호 점 표시" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "显示已输入的密码圆点" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "顯示已輸入的密碼圓點" - } - } - } - }, - "settings.search.alias.setting.terminal.password-input-indicator": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt كلمة المرور إدخال مؤشر قفل" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt passwort eingabe anzeige schloss" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt contraseña entrada indicador candado eco" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt mot de passe saisie indicateur cadenas écho" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt パスワード 入力 インジケーター 鍵 エコー" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt 비밀번호 입력 표시 자물쇠 에코" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt 密码 输入 指示器 锁 回显" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputIndicator password input indicator secure input echo off lock badge sudo ssh passwd gpg prompt 密碼 輸入 指示器 鎖頭 回顯" - } - } - } - }, - "settings.search.alias.setting.terminal.password-input-dots": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt كلمة المرور نقاط أحرف" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt passwort punkte zeichen anzahl" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt contraseña puntos caracteres" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt mot de passe points caractères" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt パスワード ドット 文字" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt 비밀번호 점 문자" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt 密码 圆点 字符" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "terminal.showPasswordInputDots password dots typed characters count bullets feedback sudo ssh prompt 密碼 圓點 字元" - } - } - } - }, - "browser.omnibar.accessibilityLabel": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Address and search bar" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Adress- und Suchleiste" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Barre d’adresse et de recherche" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "شريط العنوان والبحث" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Barra de direcciones y búsqueda" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "網址與搜尋列" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "地址和搜索栏" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "주소 및 검색 막대" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アドレスと検索バー" - } - } - } - }, - "projectPanel.reload": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Reload Project" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Projekt neu laden" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Recharger le projet" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "إعادة تحميل المشروع" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Recargar proyecto" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "重新載入專案" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "重新加载项目" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "프로젝트 다시 불러오기" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "プロジェクトを再読み込み" - } - } - } - }, - "projectPanel.reloadErrors": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Reload returned errors: %@" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Beim Neuladen sind Fehler aufgetreten: %@" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Le rechargement a renvoyé des erreurs : %@" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "أعادت إعادة التحميل أخطاء: %@" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "La recarga devolvió errores: %@" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "重新載入時發生錯誤:%@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "重新加载时出现错误:%@" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다시 불러오기 중 오류 발생: %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "再読み込みでエラーが発生しました: %@" - } - } - } - }, - "projectPanel.dismissReloadErrors": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Dismiss Errors" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Fehler ausblenden" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Ignorer les erreurs" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تجاهل الأخطاء" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Descartar errores" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "關閉錯誤" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "关闭错误" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "오류 닫기" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "エラーを閉じる" - } - } - } - }, - "projectPanel.scheme": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Scheme" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Schema" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Schéma" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "المخطط" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Esquema" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "方案" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "方案" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "스킴" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "スキーム" - } - } - } - }, - "projectPanel.configuration": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Configuration" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Konfiguration" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Configuration de build" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "التكوين" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Configuración" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "組態" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "配置" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "구성" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "構成" - } - } - } - }, - "projectPanel.loadingFormat": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Loading %@" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "%@ wird geladen" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Chargement de %@" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "جارٍ تحميل %@" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cargando %@" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "正在載入 %@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "正在加载 %@" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%@ 불러오는 중" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%@ を読み込み中" - } - } - } - }, - "projectPanel.failedFormat": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Failed: %@" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Fehlgeschlagen: %@" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Échec : %@" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "فشل: %@" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Error: %@" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "失敗:%@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "失败:%@" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "실패: %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "失敗: %@" - } - } - } - }, - "dialog.close.dontAskAgain": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Don’t ask again" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "لا تسأل مرة أخرى" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Nicht mehr fragen" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "No volver a preguntar" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Ne plus demander" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "今後確認しない" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다시 묻지 않기" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Більше не запитувати" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "不再询问" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "不再詢問" - } - } - } - }, - "settings.app.accentColor": { - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "لون التمييز" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Boja naglaska" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Accentfarve" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Akzentfarbe" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Accent Color" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Color de acento" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Couleur d’accentuation" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Colore di evidenziazione" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アクセントカラー" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "강조 색상" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Aksentfarge" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Kolor akcentu" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Cor de destaque" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Цвет акцента" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "สีเน้น" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Vurgu Rengi" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Колір акценту" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "强调色" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "強調色" - } - } - } - }, - "settings.app.accentColor.cmux": { - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "أزرق cmux" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "cmux plava" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "cmux-blå" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "cmux-Blau" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "cmux Blue" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Azul de cmux" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Bleu cmux" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Blu cmux" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux ブルー" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "cmux 파란색" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "cmux-blå" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Niebieski cmux" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Azul do cmux" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Синий cmux" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "สีน้ำเงิน cmux" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "cmux Mavisi" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Синій cmux" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "cmux 蓝" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "cmux 藍" - } - } - } - }, - "settings.app.accentColor.subtitle": { - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "لون مساحة العمل المحددة وحلقة التنبيه وحالة الوكيل وإبرازات cmux الأخرى. يتبع خيار النظام لون التمييز في macOS." - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Boja odabranog radnog prostora, prstena pažnje, statusa agenta i ostalih cmux istaknutih elemenata. Sistem prati boju naglaska macOS-a." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Farve for det valgte arbejdsområde, opmærksomhedsringen, agentstatus og andre cmux-fremhævninger. System følger macOS-accentfarven." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Farbe des ausgewählten Workspace, des Aufmerksamkeitsrings, des Agentenstatus und anderer cmux-Hervorhebungen. „Systemfarbe“ folgt der macOS-Akzentfarbe." - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Color of the selected workspace, attention ring, agent status, and other cmux highlights. System follows the macOS accent color." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Color del espacio de trabajo seleccionado, el anillo de atención, el estado del agente y otros resaltados de cmux. Sistema sigue el color de acento de macOS." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Couleur de l’espace de travail sélectionné, de l’anneau d’attention, de l’état de l’agent et des autres mises en évidence de cmux. Système suit la couleur d’accentuation de macOS." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Colore dell’area di lavoro selezionata, dell’anello di attenzione, dello stato dell’agente e degli altri elementi evidenziati di cmux. Sistema segue il colore di evidenziazione di macOS." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "選択中のワークスペース、注意リング、エージェントの状態など、cmux のハイライトの色です。「システム」は macOS のアクセントカラーに従います。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "선택한 워크스페이스, 주의 링, 에이전트 상태 등 cmux 강조 표시의 색상입니다. 시스템은 macOS 강조 색상을 따릅니다." - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Farge for det valgte arbeidsområdet, oppmerksomhetsringen, agentstatus og andre cmux-uthevinger. System følger macOS-aksentfargen." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Kolor wybranego obszaru roboczego, pierścienia uwagi, stanu agenta i innych wyróżnień cmux. Systemowy podąża za kolorem akcentu macOS." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Cor do espaço de trabalho selecionado, do anel de atenção, do status do agente e de outros destaques do cmux. Sistema segue a cor de destaque do macOS." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Цвет выбранного рабочего пространства, кольца внимания, статуса агента и других выделений cmux. «Системный» следует цвету акцента macOS." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "สีของพื้นที่ทำงานที่เลือก วงแจ้งเตือน สถานะเอเจนต์ และไฮไลต์อื่นๆ ของ cmux ตัวเลือกระบบจะใช้สีเน้นของ macOS" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Seçili çalışma alanı, dikkat halkası, ajan durumu ve diğer cmux vurgularının rengi. Sistem, macOS vurgu rengini izler." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Колір вибраного робочого простору, кільця уваги, статусу агента та інших виділень cmux. «Системний» використовує колір акценту macOS." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "所选工作区、提醒环、代理状态和其他 cmux 高亮的颜色。“系统”跟随 macOS 强调色。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "所選工作區、提醒環、代理狀態和其他 cmux 醒目提示的顏色。「系統」跟隨 macOS 強調色。" - } - } - } - }, - "settings.app.accentColor.system": { - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "النظام" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Sistem" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "System" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Systemfarbe" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "System" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Sistema" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Système" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Sistema" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "システム" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "시스템" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "System" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Systemowy" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Sistema" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Системный" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "ระบบ" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Sistem" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Системний" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "系统" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "系統" - } - } - } - }, - "settings.app.accentColor.systemToggle": { - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "لون التمييز للنظام" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Sistemska boja naglaska" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Systemets accentfarve" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "System-Akzentfarbe" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "System Accent Color" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Color de acento del sistema" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Couleur d’accentuation du système" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Colore di evidenziazione di sistema" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "システムのアクセントカラー" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "시스템 강조 색상" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Systemets aksentfarge" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Systemowy kolor akcentu" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Cor de destaque do sistema" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Системный цвет акцента" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "สีเน้นของระบบ" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Sistem Vurgu Rengi" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Системний колір акценту" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "系统强调色" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "系統強調色" - } - } - } - }, - "settings.search.alias.setting.app.accent-color": { - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue لون التمييز أزرق النظام" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue boja naglaska plava sistem" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue accentfarve blå system" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue Akzentfarbe blau System" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue color de acento azul sistema" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue couleur d’accentuation bleu système" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue colore di evidenziazione blu sistema" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue アクセントカラー 青 システム" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue 강조 색상 파란색 시스템" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue aksentfarge blå system" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue kolor akcentu niebieski systemowy" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue cor de destaque azul sistema" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue цвет акцента синий системный" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue สีเน้น สีน้ำเงิน ระบบ" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue vurgu rengi mavi sistem" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue колір акценту синій системний" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue 强调色 蓝色 系统" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue 強調色 藍色 系統" - } - } - } - }, "command.shortcutKeymap.title": { "extractionState": "manual", "localizations": { @@ -566927,669 +567382,6 @@ } } }, - "cloudTree.group.cloudMachines": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cloud Machines" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Cloud-Maschinen" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Machines cloud" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "أجهزة سحابية" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Máquinas en la nube" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "雲端機器" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "云端机器" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "클라우드 머신" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "クラウドマシン" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Mašine u oblaku" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Cloud-maskiner" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Macchine cloud" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ម៉ាស៊ីនលើពពក" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Skymaskiner" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Maszyny w chmurze" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Máquinas na nuvem" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Облачные машины" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "เครื่องคลาวด์" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Bulut makineleri" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Хмарні машини" - } - } - } - }, - "cloudTree.group.devices": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "My Devices" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Meine Geräte" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Mes appareils" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "أجهزتي" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Mis dispositivos" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "我的裝置" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "我的设备" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "내 기기" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "マイデバイス" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Moji uređaji" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Mine enheder" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "I miei dispositivi" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ឧបករណ៍របស់ខ្ញុំ" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Mine enheter" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Moje urządzenia" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Meus dispositivos" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Мои устройства" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "อุปกรณ์ของฉัน" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Cihazlarım" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Мої пристрої" - } - } - } - }, - "machines.listUnavailable.stale": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Machine list unavailable — showing last known" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Maschinenliste nicht verfügbar – zeige letzten bekannten Stand" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Liste des machines indisponible — affichage des dernières informations connues" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قائمة الأجهزة غير متاحة — يتم عرض آخر حالة معروفة" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Lista de máquinas no disponible — se muestra el último estado conocido" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "無法取得機器清單 — 顯示上次已知的狀態" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "机器列表不可用 —— 显示的是最后已知状态" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "머신 목록을 사용할 수 없음 — 마지막으로 확인된 상태 표시 중" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "マシン一覧を取得できません — 最後の状態を表示中" - } - } - } - }, - "machines.listUnavailable.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Your machines are unchanged. cmux couldn’t load the list from the Cloud service and retries on its own." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Deine Maschinen sind unverändert. cmux konnte die Liste nicht vom Cloud-Dienst laden und versucht es selbstständig erneut." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Vos machines ne sont pas modifiées. cmux n’a pas pu charger la liste depuis le service Cloud et va réessayer automatiquement." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "لم تتغير أجهزتك. تعذر على cmux تحميل القائمة من الخدمة السحابية، وسيعيد المحاولة تلقائيًا." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Tus máquinas no han cambiado. cmux no pudo cargar la lista desde el servicio de la nube y volverá a intentarlo automáticamente." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "您的機器沒有任何變動。cmux 無法從雲端服務載入清單,會自動重試。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "你的机器没有任何变化。cmux 无法从云端服务加载列表,会自动重试。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "머신은 변경되지 않았습니다. cmux가 클라우드 서비스에서 목록을 불러오지 못했으며 자동으로 다시 시도합니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "マシンは変更されていません。cmux はクラウドサービスから一覧を読み込めませんでした。自動的に再試行します。" - } - } - } - }, - "machines.listUnavailable.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Can’t load the machine list" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Maschinenliste kann nicht geladen werden" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Impossible de charger la liste des machines" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تعذر تحميل قائمة الأجهزة" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "No se puede cargar la lista de máquinas" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "無法載入機器清單" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "无法加载机器列表" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "머신 목록을 불러올 수 없습니다" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "マシン一覧を読み込めません" - } - } - } - }, - "machines.offline.stale": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Offline — showing last known" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Offline – zeige letzten bekannten Stand" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Hors ligne — affichage des dernières informations connues" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "غير متصل — يتم عرض آخر حالة معروفة" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Sin conexión — se muestra el último estado conocido" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "離線 — 顯示上次已知的狀態" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "离线 —— 显示的是最后已知状态" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "오프라인 — 마지막으로 확인된 상태 표시 중" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オフライン — 最後の状態を表示中" - } - } - } - }, - "machines.offline.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cloud machines load when this Mac is back online." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Cloud-Maschinen werden geladen, sobald dieser Mac wieder online ist." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Les machines Cloud se chargeront dès que ce Mac sera de nouveau en ligne." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "سيتم تحميل الأجهزة السحابية عندما يعود جهاز Mac هذا إلى الاتصال بالإنترنت." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Las máquinas en la nube se cargarán cuando este Mac vuelva a estar en línea." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "這台 Mac 恢復連線後,就會載入雲端機器。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "这台 Mac 恢复联网后,就会加载云端机器。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이 Mac이 다시 온라인 상태가 되면 클라우드 머신을 불러옵니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "この Mac がオンラインに戻ると Cloud マシンを読み込みます。" - } - } - } - }, - "machines.offline.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Waiting for network" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Warte auf Netzwerk" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "En attente du réseau" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "في انتظار الشبكة" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Esperando la red" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "正在等待網路" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "正在等待网络" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "네트워크 대기 중" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ネットワークを待機中" - } - } - } - }, - "machines.reconnecting.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Reconnecting to Cloud…" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Verbindung zur Cloud wird wiederhergestellt…" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Reconnexion au Cloud…" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "جارٍ إعادة الاتصال بالسحابة…" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Reconectando con la nube…" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "正在重新連線至雲端…" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "正在重新连接云端…" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "클라우드에 다시 연결하는 중…" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "クラウドに再接続中…" - } - } - } - }, "devices.link.error.notDiscoverable": { "extractionState": "manual", "localizations": { @@ -568465,381 +568257,6 @@ } } }, - "cli.auth.status.teamNotLoaded": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": " team: not loaded" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": " チーム: 未読み込み" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": " 团队: 未加载" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": " Team: nicht geladen" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": " équipe: non chargée" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": " الفريق: لم يتم تحميله" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": " equipo: no cargado" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": " 團隊: 未載入" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": " 팀: 로드되지 않음" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": " tim: nije učitan" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": " team: ikke indlæst" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": " team: non caricato" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": " ក្រុម៖ មិនទាន់បានផ្ទុក" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": " team: ikke lastet" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": " zespół: nie załadowano" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": " equipe: não carregada" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": " команда: не загружена" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": " ทีม: ยังไม่ได้โหลด" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": " ekip: yüklenmedi" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": " команда: не завантажена" - } - } - } - }, - "cli.auth.status.teamNotLoadedRetrying": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": " team: not loaded (retrying)" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": " チーム: 未読み込み(再試行中)" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": " 团队: 未加载(正在重试)" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": " Team: nicht geladen (wird erneut versucht)" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": " équipe: non chargée (nouvel essai)" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": " الفريق: لم يتم تحميله (جارٍ إعادة المحاولة)" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": " equipo: no cargado (reintentando)" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": " 團隊: 未載入(重試中)" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": " 팀: 로드되지 않음 (재시도 중)" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": " tim: nije učitan (ponovni pokušaj)" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": " team: ikke indlæst (prøver igen)" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": " team: non caricato (nuovo tentativo)" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": " ក្រុម៖ មិនទាន់បានផ្ទុក (កំពុងព្យាយាមម្ដងទៀត)" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": " team: ikke lastet (prøver igjen)" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": " zespół: nie załadowano (ponawianie próby)" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": " equipe: não carregada (tentando novamente)" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": " команда: не загружена (повторная попытка)" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": " ทีม: ยังไม่ได้โหลด (กำลังลองอีกครั้ง)" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": " ekip: yüklenmedi (yeniden deneniyor)" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": " команда: не завантажена (повторна спроба)" - } - } - } - }, - "mobile.pairing.error.teamUnavailable": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Could not load your cmux team. Check your internet connection, then try again." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux チームを読み込めませんでした。インターネット接続を確認してから、もう一度お試しください。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "无法加载你的 cmux 团队。请检查网络连接,然后重试。" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Dein cmux-Team konnte nicht geladen werden. Prüfe deine Internetverbindung und versuche es erneut." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Impossible de charger votre équipe cmux. Vérifiez votre connexion Internet, puis réessayez." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تعذّر تحميل فريق cmux الخاص بك. تحقّق من اتصالك بالإنترنت، ثم حاول مرة أخرى." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "No se pudo cargar tu equipo de cmux. Comprueba tu conexión a internet e inténtalo de nuevo." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "無法載入你的 cmux 團隊。請檢查網路連線,然後再試一次。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "cmux 팀을 불러올 수 없습니다. 인터넷 연결을 확인한 후 다시 시도하세요." - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Nije moguće učitati vaš cmux tim. Provjerite internetsku vezu i pokušajte ponovo." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Din cmux-team kunne ikke indlæses. Kontrollér din internetforbindelse, og prøv igen." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Impossibile caricare il tuo team cmux. Controlla la connessione Internet e riprova." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "មិនអាចផ្ទុកក្រុម cmux របស់អ្នកបានទេ។ សូមពិនិត្យការតភ្ជាប់អ៊ីនធឺណិត ហើយព្យាយាមម្ដងទៀត។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Kunne ikke laste inn cmux-teamet ditt. Kontroller internettilkoblingen, og prøv igjen." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Nie udało się załadować Twojego zespołu cmux. Sprawdź połączenie z internetem i spróbuj ponownie." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Não foi possível carregar sua equipe cmux. Verifique sua conexão com a internet e tente novamente." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Не удалось загрузить вашу команду cmux. Проверьте подключение к интернету и попробуйте ещё раз." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "ไม่สามารถโหลดทีม cmux ของคุณได้ ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตแล้วลองอีกครั้ง" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "cmux ekibiniz yüklenemedi. İnternet bağlantınızı kontrol edip tekrar deneyin." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Не вдалося завантажити вашу команду cmux. Перевірте підключення до інтернету й спробуйте ще раз." - } - } - } -}, "command.newPaneAutoLayout.title": { "extractionState": "manual", "localizations": { @@ -570529,5165 +569946,5275 @@ } } }, - "settings.betaFeatures.conversationSidebar": { + "cli.session.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Conversation Sidebar" + "value": "Usage: cmux session restore [--list] [--session ]...\n\nReopen Claude sessions that were running when cmux last quit unexpectedly.\ncmux finds them in the agent journal, skips any that are running or already\nopen, and resumes each in its own workspace through the launcher that started\nit.\n\nWithout --session, restore acts only after an unexpected quit.\n\nOptions:\n --list Show the sessions without restoring them.\n --session Restore only this session (repeatable)." } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "会話サイドバー" + "value": "Verwendung: cmux session restore [--list] [--session ]...\n\nÖffnet Claude-Sitzungen erneut, die liefen, als cmux zuletzt unerwartet beendet wurde.\ncmux findet sie im Agent-Journal, überspringt laufende oder bereits geöffnete\nund setzt jede in einem eigenen Workspace\nüber den Launcher fort, der sie gestartet hat.\n\nOhne --session stellt restore nur nach einem unerwarteten Beenden wieder her.\n\nOptionen:\n --list Sitzungen anzeigen, ohne sie wiederherzustellen.\n --session Nur diese Sitzung wiederherstellen (wiederholbar)." } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "对话侧边栏" + "value": "Utilisation : cmux session restore [--list] [--session ]...\n\nRouvre les sessions Claude en cours lorsque cmux s’est fermé de façon inattendue.\ncmux les trouve dans le journal des agents, ignore celles qui tournent ou sont déjà\nouvertes, et reprend chacune dans son propre espace de travail via le lanceur qui l’a\ndémarrée.\n\nSans --session, restore n’agit qu’après une fermeture inattendue.\n\nOptions :\n --list Afficher les sessions sans les restaurer.\n --session Restaurer uniquement cette session (répétable)." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Konversations-Seitenleiste" + "value": "الاستخدام: cmux session restore [--list] [--session ]...\n\nيعيد فتح جلسات Claude التي كانت قيد التشغيل عندما أُغلق cmux بشكل غير متوقع آخر مرة.\nيعثر cmux عليها في سجل الوكيل، ويتخطى ما يعمل منها أو المفتوح بالفعل،\nويستأنف كل جلسة في مساحة عمل خاصة بها\nعبر المشغّل الذي بدأها.\n\nبدون --session، لا تعمل الاستعادة إلا بعد إغلاق غير متوقع.\n\nالخيارات:\n --list عرض الجلسات دون استعادتها.\n --session استعادة هذه الجلسة فقط (قابل للتكرار)." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Barre latérale des conversations" + "value": "Uso: cmux session restore [--list] [--session ]...\n\nVuelve a abrir las sesiones de Claude que estaban en ejecución cuando cmux se cerró inesperadamente.\ncmux las encuentra en el diario de agentes, omite las que están en ejecución o ya\nabiertas, y reanuda cada una en su propio espacio de trabajo mediante el lanzador que\nla inició.\n\nSin --session, restore solo actúa tras un cierre inesperado.\n\nOpciones:\n --list Mostrar las sesiones sin restaurarlas.\n --session Restaurar solo esta sesión (repetible)." } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "الشريط الجانبي للمحادثات" + "value": "用法: cmux session restore [--list] [--session ]...\n\n重新開啟 cmux 上次意外結束時仍在執行的 Claude 工作階段。\ncmux 會從代理日誌中找出它們,略過仍在執行或已開啟的工作階段,\n並透過原本啟動它的啟動器\n在各自的工作區中繼續。\n\n未指定 --session 時,restore 只會在意外結束後執行。\n\n選項:\n --list 只列出工作階段,不還原。\n --session 只還原此工作階段(可重複)。" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Barra lateral de conversaciones" + "value": "用法: cmux session restore [--list] [--session ]...\n\n重新打开 cmux 上次意外退出时仍在运行的 Claude 会话。\ncmux 会从代理日志中找到它们,跳过仍在运行或已打开的会话,\n并通过最初启动它的启动器\n在各自的工作区中继续。\n\n未指定 --session 时,restore 只会在意外退出后执行。\n\n选项:\n --list 只列出会话,不恢复。\n --session 只恢复此会话(可重复)。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "對話側邊欄" + "value": "사용법: cmux session restore [--list] [--session ]...\n\ncmux가 마지막으로 예기치 않게 종료될 때 실행 중이던 Claude 세션을 다시 엽니다.\ncmux는 에이전트 저널에서 세션을 찾고, 실행 중이거나 이미 열려 있는 세션은 건너뛰며,\n각 세션을 시작한 런처를 통해\n자체 워크스페이스에서 이어갑니다.\n\n--session이 없으면 restore는 예기치 않은 종료 후에만 동작합니다.\n\n옵션:\n --list 복원하지 않고 세션만 표시합니다.\n --session 이 세션만 복원합니다(반복 가능)." } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "대화 사이드바" + "value": "使用法: cmux session restore [--list] [--session ]...\n\ncmux が前回予期せず終了したときに実行中だった Claude セッションを再び開きます。\ncmux はエージェントジャーナルからセッションを見つけ、実行中または既に開いている\nものはスキップし、それぞれを起動したランチャー経由で\n専用のワークスペースで再開します。\n\n--session を指定しない場合、restore は予期しない終了の後にのみ動作します。\n\nオプション:\n --list 復元せずにセッションを表示します。\n --session このセッションのみ復元します(複数指定可)。" } } } }, - "settings.betaFeatures.conversationSidebar.subtitleOff": { + "cli.session.error.expectedRestore": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Hides Conversations while preserving existing agent sessions." + "value": "session: expected 'restore' (see cmux help session)" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "既存のエージェントセッションを保持したまま、「会話」を非表示にします。" + "value": "session: 'restore' erwartet (siehe cmux help session)" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "隐藏“对话”,同时保留现有智能体会话。" + "value": "session : « restore » attendu (voir cmux help session)" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Blendet „Konversationen“ aus und behält vorhandene Agent-Sitzungen bei." + "value": "session: كان المتوقع 'restore' (راجع cmux help session)" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Masque les conversations tout en conservant les sessions d’agent existantes." + "value": "session: se esperaba 'restore' (consulta cmux help session)" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "يخفي «المحادثات» مع الاحتفاظ بجلسات الوكيل الحالية." + "value": "session:應為 'restore'(請參閱 cmux help session)" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Oculta Conversaciones y conserva las sesiones de agente existentes." + "value": "session:应为 'restore'(请参阅 cmux help session)" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "隱藏「對話」,同時保留現有代理程式工作階段。" + "value": "session: 'restore'가 필요합니다(cmux help session 참조)" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "기존 에이전트 세션은 유지하면서 대화를 숨깁니다." + "value": "session: 'restore' が必要です(cmux help session を参照)" } } } }, - "settings.betaFeatures.conversationSidebar.subtitleOn": { + "cli.session.error.sessionRequiresId": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shows Conversations in the left sidebar picker." + "value": "session restore: --session requires an id" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "左側サイドバーの選択メニューに「会話」を表示します。" + "value": "session restore: --session erfordert eine ID" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "在左侧边栏选择器中显示“对话”。" + "value": "session restore : --session nécessite un identifiant" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Zeigt „Konversationen“ im Auswahlmenü der linken Seitenleiste an." + "value": "session restore: يتطلب --session معرّفًا" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Affiche les conversations dans le sélecteur de la barre latérale gauche." + "value": "session restore: --session requiere un id" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "يعرض «المحادثات» في منتقي الشريط الجانبي الأيسر." + "value": "session restore:--session 需要一個 ID" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Muestra Conversaciones en el selector de la barra lateral izquierda." + "value": "session restore:--session 需要一个 ID" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "在左側側邊欄選取器中顯示「對話」。" + "value": "session restore: --session에는 ID가 필요합니다" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "왼쪽 사이드바 선택기에 대화를 표시합니다." + "value": "session restore: --session には ID が必要です" } } } }, - "sidebar.provider.conversations.subtitle": { + "cli.session.error.unknownArgument": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Coding-agent sessions" + "value": "session restore: unknown argument '%@'" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "コーディングエージェントのセッション" + "value": "session restore: unbekanntes Argument '%@'" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "编码智能体会话" + "value": "session restore : argument inconnu « %@ »" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Sitzungen von Coding-Agenten" + "value": "session restore: وسيط غير معروف '%@'" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Sessions d’agents de programmation" + "value": "session restore: argumento desconocido '%@'" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "جلسات وكلاء البرمجة" + "value": "session restore:未知的參數 '%@'" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Sesiones de agentes de programación" + "value": "session restore:未知参数 '%@'" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "程式設計代理程式工作階段" + "value": "session restore: 알 수 없는 인수 '%@'" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "코딩 에이전트 세션" + "value": "session restore: 不明な引数 '%@'" } } } }, - "sidebar.provider.conversations.title": { + "cli.session.list.empty": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Conversations" + "value": "No agent sessions to restore." } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "会話" + "value": "Keine Agent-Sitzungen zum Wiederherstellen." } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "对话" + "value": "Aucune session d’agent à restaurer." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Konversationen" + "value": "لا توجد جلسات وكيل لاستعادتها." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Discussions" + "value": "No hay sesiones de agente para restaurar." } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "المحادثات" + "value": "沒有可還原的代理工作階段。" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Conversaciones" + "value": "没有可恢复的代理会话。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "對話" + "value": "복원할 에이전트 세션이 없습니다." } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "대화" + "value": "復元するエージェントセッションはありません。" } } } }, - "featureFlags.conversationSidebar.title": { + "cli.session.restore.cleanQuit": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Multi-provider conversation sidebar" + "value": "No agent sessions restored: cmux last quit normally. To restore one anyway, pass --session from --list." } }, "de": { "stringUnit": { "state": "translated", - "value": "Multi-Provider-Konversationsseitenleiste" + "value": "Keine Agent-Sitzungen wiederhergestellt: cmux wurde zuletzt normal beendet. Um trotzdem eine wiederherzustellen, übergib --session aus --list." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Barre latérale de conversations multi-fournisseurs" + "value": "Aucune session d’agent restaurée : cmux s’est fermé normalement la dernière fois. Pour en restaurer une quand même, passez --session depuis --list." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الشريط الجانبي للمحادثات متعددة المزوّدين" + "value": "لم تتم استعادة أي جلسات وكيل: أُغلق cmux بشكل طبيعي آخر مرة. لاستعادة جلسة على أي حال، مرّر --session من --list." } }, "es": { "stringUnit": { "state": "translated", - "value": "Barra lateral de conversaciones de varios proveedores" + "value": "No se restauró ninguna sesión de agente: cmux se cerró normalmente la última vez. Para restaurar una de todos modos, pasa --session de --list." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "多提供者對話側邊欄" + "value": "未還原任何代理工作階段:cmux 上次是正常結束。若仍要還原,請傳入 --list 中的 --session 。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "多提供商对话侧边栏" + "value": "未恢复任何代理会话:cmux 上次是正常退出。若仍要恢复,请传入 --list 中的 --session 。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다중 제공자 대화 사이드바" + "value": "복원된 에이전트 세션이 없습니다. cmux가 마지막에 정상적으로 종료되었습니다. 그래도 복원하려면 --list에서 확인한 --session 를 전달하세요." } }, "ja": { "stringUnit": { "state": "translated", - "value": "複数プロバイダーの会話サイドバー" + "value": "エージェントセッションは復元されませんでした。cmux は前回正常に終了しています。それでも復元する場合は、--list の --session を指定してください。" } } } }, - "featureFlags.conversationSidebar.description": { + "cli.session.restore.empty": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Enables the opt-in sidebar for conversations from multiple coding-agent providers." + "value": "No agent sessions restored." } }, "de": { "stringUnit": { "state": "translated", - "value": "Aktiviert die optionale Seitenleiste für Unterhaltungen von mehreren Coding-Agent-Anbietern." + "value": "Keine Agent-Sitzungen wiederhergestellt." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Active la barre latérale facultative pour les conversations provenant de plusieurs fournisseurs d’agents de codage." + "value": "Aucune session d’agent restaurée." } }, "ar": { "stringUnit": { "state": "translated", - "value": "يمكّن الشريط الجانبي الاختياري للمحادثات من مزوّدي وكلاء برمجة متعدّدين." + "value": "لم تتم استعادة أي جلسات وكيل." } }, "es": { "stringUnit": { "state": "translated", - "value": "Activa la barra lateral opcional para conversaciones de varios proveedores de agentes de programación." + "value": "No se restauró ninguna sesión de agente." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "啟用可選的側邊欄,顯示來自多個程式設計代理程式提供者的對話。" + "value": "未還原任何代理工作階段。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "启用可选的侧边栏,显示来自多个编程代理提供商的对话。" + "value": "未恢复任何代理会话。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "여러 코딩 에이전트 제공자의 대화를 위한 선택적 사이드바를 활성화합니다." + "value": "복원된 에이전트 세션이 없습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "複数のコーディングエージェントプロバイダーの会話を表示するオプトインのサイドバーを有効にします。" + "value": "エージェントセッションは復元されませんでした。" } } } }, - "cloud.ports.vpnOff.explanation": { + "cli.session.restore.done": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ports open in cmux without setup. To use private addresses in other apps, set up Cloud VPN." + "value": "Agent sessions restored: %lld" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ports lassen sich in cmux ohne Einrichtung öffnen. Richte Cloud-VPN ein, um private Adressen in anderen Apps zu verwenden." + "value": "Wiederhergestellte Agent-Sitzungen: %lld" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les ports s’ouvrent dans cmux sans configuration. Pour utiliser les adresses privées dans d’autres apps, configurez le VPN Cloud." + "value": "Sessions d’agent restaurées : %lld" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تُفتح المنافذ في cmux دون إعداد. لاستخدام العناوين الخاصة في التطبيقات الأخرى، أعدّ Cloud VPN." + "value": "جلسات الوكيل المستعادة: %lld" } }, "es": { "stringUnit": { "state": "translated", - "value": "Los puertos se abren en cmux sin configuración. Para usar direcciones privadas en otras apps, configura Cloud VPN." + "value": "Sesiones de agente restauradas: %lld" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無需設定即可在 cmux 中開啟連接埠。如要在其他 App 使用私有位址,請設定 Cloud VPN。" + "value": "已還原的代理工作階段:%lld" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无需设置即可在 cmux 中打开端口。要在其他应用中使用私有地址,请设置云 VPN。" + "value": "已恢复的代理会话:%lld" } }, "ko": { "stringUnit": { "state": "translated", - "value": "별도 설정 없이 cmux에서 포트를 열 수 있습니다. 다른 앱에서 비공개 주소를 사용하려면 Cloud VPN을 설정하세요." + "value": "복원된 에이전트 세션: %lld" } }, "ja": { "stringUnit": { "state": "translated", - "value": "設定なしで cmux 内のポートを開けます。他のアプリでプライベートアドレスを使うには、Cloud VPN を設定してください。" - } - }, - "bs": { - "stringUnit": { - "state": "needs_review", - "value": "Portovi se otvaraju u cmux-u bez podešavanja. Za korištenje privatnih adresa u drugim aplikacijama podesite Cloud VPN." - } - }, - "da": { - "stringUnit": { - "state": "needs_review", - "value": "Porte åbnes i cmux uden opsætning. Opsæt Cloud VPN for at bruge private adresser i andre apps." + "value": "復元したエージェントセッション: %lld" } - }, - "it": { + } + } + }, + "agentRecovery.alert.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { - "state": "needs_review", - "value": "Le porte si aprono in cmux senza configurazione. Per usare gli indirizzi privati in altre app, configura Cloud VPN." + "state": "translated", + "value": "Restore agent sessions?" } }, - "km": { + "de": { "stringUnit": { - "state": "needs_review", - "value": "ច្រកអាចបើកក្នុង cmux ដោយមិនចាំបាច់រៀបចំ។ ដើម្បីប្រើអាសយដ្ឋានឯកជនក្នុងកម្មវិធីផ្សេងទៀត សូមរៀបចំ Cloud VPN។" + "state": "translated", + "value": "Agent-Sitzungen wiederherstellen?" } }, - "nb": { + "fr": { "stringUnit": { - "state": "needs_review", - "value": "Porter åpnes i cmux uten oppsett. Sett opp Cloud VPN for å bruke private adresser i andre apper." + "state": "translated", + "value": "Restaurer les sessions d’agent ?" } }, - "pl": { + "ar": { "stringUnit": { - "state": "needs_review", - "value": "Porty otwierają się w cmux bez konfiguracji. Aby używać prywatnych adresów w innych aplikacjach, skonfiguruj Cloud VPN." + "state": "translated", + "value": "هل تريد استعادة جلسات الوكيل؟" } }, - "pt-BR": { + "es": { "stringUnit": { - "state": "needs_review", - "value": "As portas abrem no cmux sem configuração. Para usar endereços privados em outros apps, configure o Cloud VPN." + "state": "translated", + "value": "¿Restaurar las sesiones de agente?" } }, - "ru": { + "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "Порты открываются в cmux без настройки. Чтобы использовать приватные адреса в других приложениях, настройте Cloud VPN." + "state": "translated", + "value": "要還原代理工作階段嗎?" } }, - "th": { + "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "เปิดพอร์ตใน cmux ได้โดยไม่ต้องตั้งค่า หากต้องการใช้ที่อยู่ส่วนตัวในแอปอื่น ให้ตั้งค่า Cloud VPN" + "state": "translated", + "value": "要恢复代理会话吗?" } }, - "tr": { + "ko": { "stringUnit": { - "state": "needs_review", - "value": "Bağlantı noktaları cmux içinde kurulum gerektirmeden açılır. Diğer uygulamalarda özel adresleri kullanmak için Cloud VPN’i kurun." + "state": "translated", + "value": "에이전트 세션을 복원할까요?" } }, - "uk": { + "ja": { "stringUnit": { - "state": "needs_review", - "value": "Порти відкриваються в cmux без налаштування. Щоб використовувати приватні адреси в інших застосунках, налаштуйте Cloud VPN." + "state": "translated", + "value": "エージェントセッションを復元しますか?" } } } }, - "cloud.ports.vpnOff.title": { + "agentRecovery.alert.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Optional: Cloud VPN" + "value": "cmux quit unexpectedly while agent sessions were running. Sessions to restore: %lld. Each one reopens in its own workspace and resumes where it left off." } }, "de": { "stringUnit": { "state": "translated", - "value": "Optional: Cloud-VPN" + "value": "cmux wurde unerwartet beendet, während Agent-Sitzungen liefen. Wiederherzustellende Sitzungen: %lld. Jede wird in einem eigenen Workspace geöffnet und dort fortgesetzt, wo sie aufgehört hat." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Facultatif : VPN Cloud" + "value": "cmux s’est fermé de façon inattendue pendant que des sessions d’agent étaient en cours. Sessions à restaurer : %lld. Chacune rouvre dans son propre espace de travail et reprend là où elle s’était arrêtée." } }, "ar": { "stringUnit": { "state": "translated", - "value": "اختياري: Cloud VPN" + "value": "أُغلق cmux بشكل غير متوقع أثناء تشغيل جلسات الوكيل. الجلسات المطلوب استعادتها: %lld. تُفتح كل جلسة في مساحة عمل خاصة بها وتُستأنف من حيث توقفت." } }, "es": { "stringUnit": { "state": "translated", - "value": "Opcional: Cloud VPN" + "value": "cmux se cerró inesperadamente mientras había sesiones de agente en ejecución. Sesiones por restaurar: %lld. Cada una se abre en su propio espacio de trabajo y continúa donde se quedó." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選用:Cloud VPN" + "value": "cmux 在代理工作階段執行時意外結束。要還原的工作階段:%lld。每個工作階段都會在各自的工作區重新開啟,並從中斷處繼續。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "可选:云 VPN" + "value": "cmux 在代理会话运行时意外退出。要恢复的会话:%lld。每个会话都会在各自的工作区重新打开,并从中断处继续。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "선택 사항: Cloud VPN" + "value": "에이전트 세션이 실행 중일 때 cmux가 예기치 않게 종료되었습니다. 복원할 세션: %lld. 각 세션은 자체 워크스페이스에서 다시 열리고 중단된 곳에서 이어집니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "任意:Cloud VPN" - } - }, - "bs": { - "stringUnit": { - "state": "needs_review", - "value": "Opcionalno: Cloud VPN" - } - }, - "da": { - "stringUnit": { - "state": "needs_review", - "value": "Valgfrit: Cloud VPN" + "value": "エージェントセッションの実行中に cmux が予期せず終了しました。復元するセッション: %lld。各セッションは専用のワークスペースで再び開き、中断したところから再開します。" } - }, - "it": { + } + } + }, + "agentRecovery.alert.restore": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { - "state": "needs_review", - "value": "Facoltativo: Cloud VPN" + "state": "translated", + "value": "Restore Agent Sessions" } }, - "km": { + "de": { "stringUnit": { - "state": "needs_review", - "value": "ជាជម្រើស៖ Cloud VPN" + "state": "translated", + "value": "Agent-Sitzungen wiederherstellen" } }, - "nb": { + "fr": { "stringUnit": { - "state": "needs_review", - "value": "Valgfritt: Cloud VPN" + "state": "translated", + "value": "Restaurer les sessions d’agent" } }, - "pl": { + "ar": { "stringUnit": { - "state": "needs_review", - "value": "Opcjonalnie: Cloud VPN" + "state": "translated", + "value": "استعادة جلسات الوكيل" } }, - "pt-BR": { + "es": { "stringUnit": { - "state": "needs_review", - "value": "Opcional: Cloud VPN" + "state": "translated", + "value": "Restaurar sesiones de agente" } }, - "ru": { + "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "Необязательно: Cloud VPN" + "state": "translated", + "value": "還原代理工作階段" } }, - "th": { + "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "ตัวเลือกเพิ่มเติม: Cloud VPN" + "state": "translated", + "value": "恢复代理会话" } }, - "tr": { + "ko": { "stringUnit": { - "state": "needs_review", - "value": "İsteğe bağlı: Cloud VPN" + "state": "translated", + "value": "에이전트 세션 복원" } }, - "uk": { + "ja": { "stringUnit": { - "state": "needs_review", - "value": "Необов’язково: Cloud VPN" + "state": "translated", + "value": "エージェントセッションを復元" } } } }, - "cloud.vpn.setup.address.body": { + "agentRecovery.alert.notNow": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Each machine has its own private IP. Two machines may both expose port 3000, for example 10.40.0.10:3000 and 10.40.0.11:3000. Right-click a Cloud port and choose Copy Private Address URL after connecting. These addresses are private, not public share links." + "value": "Not Now" } }, "de": { "stringUnit": { "state": "translated", - "value": "Jede Maschine hat eine eigene private IP. Zwei Maschinen können beide Port 3000 verwenden, etwa 10.40.0.10:3000 und 10.40.0.11:3000. Klicken Sie nach dem Verbinden mit der rechten Maustaste auf einen Cloud-Port und wählen Sie URL der privaten Adresse kopieren. Diese Adressen sind privat und keine öffentlichen Freigabelinks." + "value": "Nicht jetzt" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Chaque machine a sa propre IP privée. Deux machines peuvent utiliser le port 3000, par exemple 10.40.0.10:3000 et 10.40.0.11:3000. Après connexion, faites un clic droit sur un port Cloud et choisissez Copier l’URL de l’adresse privée. Ces adresses sont privées, ce ne sont pas des liens publics de partage." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cada máquina tiene su propia IP privada. Dos máquinas pueden usar el puerto 3000, como 10.40.0.10:3000 y 10.40.0.11:3000. Después de conectar, haz clic derecho en un puerto Cloud y elige Copiar URL de dirección privada. Estas direcciones son privadas, no enlaces públicos para compartir." + "value": "Pas maintenant" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "各マシンには個別のプライベートIPがあります。2台のマシンがどちらもポート3000を使えます(例:10.40.0.10:3000と10.40.0.11:3000)。接続後にCloudポートを右クリックし、「プライベートアドレスURLをコピー」を選びます。これらはプライベートアドレスで、公開共有リンクではありません。" + "value": "ليس الآن" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "每台机器都有自己的私有 IP。两台机器可以同时使用端口 3000,例如 10.40.0.10:3000 和 10.40.0.11:3000。连接后右键点击 Cloud 端口,选择“复制私有地址 URL”。这些地址是私有地址,不是公开分享链接。" + "value": "Ahora no" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "每台機器都有自己的私有 IP。兩台機器可以同時使用連接埠 3000,例如 10.40.0.10:3000 和 10.40.0.11:3000。連線後對 Cloud 連接埠按右鍵,選擇「複製私有位址 URL」。這些位址是私有位址,不是公開分享連結。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "각 머신에는 고유한 비공개 IP가 있습니다. 두 머신 모두 포트 3000을 사용할 수 있습니다(예: 10.40.0.10:3000 및 10.40.0.11:3000). 연결 후 Cloud 포트를 오른쪽 클릭하고 비공개 주소 URL 복사를 선택하세요. 이 주소는 비공개이며 공개 공유 링크가 아닙니다." + "value": "稍後" } }, - "ar": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "لكل جهاز عنوان IP خاص به. يمكن لجهازين استخدام المنفذ 3000، مثل 10.40.0.10:3000 و10.40.0.11:3000. بعد الاتصال، انقر بزر الماوس الأيمن على منفذ Cloud واختر نسخ رابط العنوان الخاص. هذه عناوين خاصة وليست روابط مشاركة عامة." + "value": "以后再说" } }, - "bs": { + "ko": { "stringUnit": { "state": "translated", - "value": "Svaka mašina ima svoju privatnu IP adresu. Dvije mašine mogu koristiti port 3000, na primjer 10.40.0.10:3000 i 10.40.0.11:3000. Nakon povezivanja kliknite desnim dugmetom na Cloud port i izaberite Kopiraj URL privatne adrese. Ovo su privatne adrese, a ne javne veze za dijeljenje." + "value": "나중에" } }, - "da": { + "ja": { "stringUnit": { "state": "translated", - "value": "Hver maskine har sin egen private IP. To maskiner kan begge bruge port 3000, f.eks. 10.40.0.10:3000 og 10.40.0.11:3000. Højreklik på en Cloud-port efter tilslutning, og vælg Kopiér URL til privat adresse. Adresserne er private, ikke offentlige delelinks." + "value": "後で" } - }, - "it": { + } + } + }, + "settings.notifications.soundWhenFocused.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Ogni macchina ha il proprio IP privato. Due macchine possono usare entrambe la porta 3000, ad esempio 10.40.0.10:3000 e 10.40.0.11:3000. Dopo la connessione fai clic destro su una porta Cloud e scegli Copia URL indirizzo privato. Sono indirizzi privati, non link pubblici." + "value": "Play the notification sound even when the pane that notified is already focused. When off, a focused pane shows its ring without a sound." } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ម៉ាស៊ីននីមួយៗមាន IP ឯកជនផ្ទាល់ខ្លួន។ ម៉ាស៊ីនពីរអាចប្រើច្រក 3000 ដូចគ្នា ឧទាហរណ៍ 10.40.0.10:3000 និង 10.40.0.11:3000។ បន្ទាប់ពីភ្ជាប់ ចុចខាងស្តាំលើច្រក Cloud ហើយជ្រើស ចម្លង URL អាសយដ្ឋានឯកជន។ ទាំងនេះជាអាសយដ្ឋានឯកជន មិនមែនតំណចែករំលែកសាធារណៈទេ។" + "value": "شغّل صوت الإشعار حتى عندما تكون اللوحة التي أرسلت الإشعار في موضع التركيز بالفعل. عند إيقافه، تعرض اللوحة المُركَّز عليها حلقتها دون صوت." } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Hver maskin har sin egen private IP. To maskiner kan bruke port 3000, for eksempel 10.40.0.10:3000 og 10.40.0.11:3000. Høyreklikk en Cloud-port etter tilkobling og velg Kopier URL for privat adresse. Adressene er private, ikke offentlige delingslenker." + "value": "Den Benachrichtigungston auch abspielen, wenn der benachrichtigende Bereich bereits fokussiert ist. Wenn aus, zeigt ein fokussierter Bereich seinen Ring ohne Ton." } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Każda maszyna ma własny prywatny adres IP. Dwie maszyny mogą używać portu 3000, na przykład 10.40.0.10:3000 i 10.40.0.11:3000. Po połączeniu kliknij prawym przyciskiem port Cloud i wybierz Kopiuj URL prywatnego adresu. To prywatne adresy, nie publiczne linki udostępniania." + "value": "Reproduce el sonido de notificación incluso cuando el panel que notificó ya tiene el foco. Si está desactivado, un panel con foco muestra su anillo sin sonido." } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cada máquina tem seu próprio IP privado. Duas máquinas podem usar a porta 3000, por exemplo 10.40.0.10:3000 e 10.40.0.11:3000. Depois de conectar, clique com o botão direito em uma porta Cloud e escolha Copiar URL do endereço privado. Esses endereços são privados, não links públicos de compartilhamento." + "value": "Jouer le son de notification même lorsque le panneau à l’origine de la notification a déjà le focus. Désactivé, un panneau actif affiche son anneau sans son." } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "У каждой машины свой частный IP. Две машины могут использовать порт 3000, например 10.40.0.10:3000 и 10.40.0.11:3000. После подключения щёлкните правой кнопкой мыши порт Cloud и выберите Скопировать URL частного адреса. Это частные адреса, а не публичные ссылки." + "value": "通知を送ったペインがすでにフォーカスされている場合でも通知音を鳴らします。オフの場合、フォーカス中のペインは音を鳴らさずにリングを表示します。" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "แต่ละเครื่องมี IP ส่วนตัวของตนเอง สองเครื่องสามารถใช้พอร์ต 3000 ได้ เช่น 10.40.0.10:3000 และ 10.40.0.11:3000 หลังเชื่อมต่อ คลิกขวาที่พอร์ต Cloud แล้วเลือกคัดลอก URL ที่อยู่ส่วนตัว ที่อยู่เหล่านี้เป็นส่วนตัว ไม่ใช่ลิงก์สาธารณะ" + "value": "알림을 보낸 패널이 이미 포커스된 상태여도 알림음을 재생합니다. 끄면 포커스된 패널은 소리 없이 링만 표시합니다." } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Her makinenin kendi özel IP’si vardır. İki makine 3000 bağlantı noktasını kullanabilir; örneğin 10.40.0.10:3000 ve 10.40.0.11:3000. Bağlandıktan sonra bir Cloud portuna sağ tıklayın ve Özel Adres URL’sini Kopyala’yı seçin. Bunlar özel adreslerdir, herkese açık paylaşım bağlantıları değildir." + "value": "即使发出通知的窗格已处于焦点状态,也播放通知声音。关闭时,处于焦点的窗格会显示光环但不发出声音。" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Кожна машина має власну приватну IP-адресу. Дві машини можуть використовувати порт 3000, наприклад 10.40.0.10:3000 і 10.40.0.11:3000. Після підключення клацніть правою кнопкою миші порт Cloud і виберіть Копіювати URL приватної адреси. Це приватні адреси, а не публічні посилання для спільного доступу." + "value": "即使發出通知的窗格已在焦點中,也播放通知聲音。關閉時,焦點中的窗格會顯示光環但不發出聲音。" } } } }, - "cloud.vpn.setup.cancel": { + "settings.notifications.soundWhenFocused.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cancel" + "value": "Sound for Focused Pane" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Abbrechen" + "value": "صوت للوحة المُركَّز عليها" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Annuler" + "value": "Ton für fokussierten Bereich" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cancelar" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "キャンセル" + "value": "Sonido para el panel con foco" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "Son pour le panneau actif" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "フォーカス中のペインの通知音" } }, "ko": { "stringUnit": { "state": "translated", - "value": "취소" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "إلغاء" + "value": "포커스된 패널 소리" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Otkaži" + "value": "焦点窗格的声音" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Annuller" + "value": "焦點窗格的聲音" } - }, - "it": { + } + } + }, + "cli.restore.notice.routedLauncherUnavailable": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Annulla" + "value": "restore: this session was started through the routed launcher '%@', which is not on PATH. Resuming the agent directly instead." } }, - "km": { + "ja": { "stringUnit": { "state": "translated", - "value": "បោះបង់" + "value": "restore: このセッションはルーティングされたランチャー「%@」経由で開始されましたが、PATH にありません。代わりにエージェントを直接再開します。" } }, - "nb": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Avbryt" + "value": "restore:此会话是通过路由启动器“%@”启动的,但它不在 PATH 中。将改为直接恢复该代理。" } }, - "pl": { + "de": { "stringUnit": { "state": "translated", - "value": "Anuluj" + "value": "restore: Diese Sitzung wurde über den weitergeleiteten Launcher „%@“ gestartet, der nicht im PATH liegt. Der Agent wird stattdessen direkt fortgesetzt." } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "restore : cette session a été lancée via le lanceur routé « %@ », qui est introuvable dans le PATH. Reprise directe de l'agent à la place." } }, - "ru": { + "ar": { "stringUnit": { "state": "translated", - "value": "Отменить" + "value": "restore: بدأت هذه الجلسة عبر المشغّل الموجَّه '%@'، وهو غير موجود في PATH. سيتم استئناف الوكيل مباشرةً بدلاً من ذلك." } }, - "th": { + "es": { "stringUnit": { "state": "translated", - "value": "ยกเลิก" + "value": "restore: esta sesión se inició mediante el lanzador enrutado '%@', que no está en el PATH. Se reanudará el agente directamente." } }, - "tr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "İptal" + "value": "restore:此工作階段是透過路由啟動器「%@」啟動的,但它不在 PATH 中。將改為直接繼續該代理程式。" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Скасувати" + "value": "restore: 이 세션은 라우팅된 런처 '%@'를 통해 시작되었지만 PATH에 없습니다. 대신 에이전트를 직접 재개합니다." } } } }, - "cloud.vpn.setup.connect": { + "settings.app.reorderOnNotification.mode.agentActivity": { "extractionState": "manual", "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Connect Cloud VPN" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Cloud-VPN verbinden" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Connecter le VPN Cloud" - } - }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Conectar VPN de Cloud" + "value": "نشاط الوكيل" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "Cloud VPNに接続" + "value": "Aktivnost agenata" } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "连接 Cloud VPN" + "value": "Agentaktivitet" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "連接 Cloud VPN" + "value": "Agentenaktivität" } }, - "ko": { + "en": { "stringUnit": { "state": "translated", - "value": "Cloud VPN 연결" + "value": "Agent Activity" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "توصيل VPN الخاص بـ Cloud" + "value": "Actividad de agentes" } }, - "bs": { + "fr": { "stringUnit": { "state": "translated", - "value": "Poveži Cloud VPN" + "value": "Activité des agents" } }, - "da": { + "it": { "stringUnit": { "state": "translated", - "value": "Forbind Cloud VPN" + "value": "Attività degli agenti" } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "Connetti VPN Cloud" + "value": "エージェントのアクティビティ" } }, - "km": { + "ko": { "stringUnit": { "state": "translated", - "value": "ភ្ជាប់ Cloud VPN" + "value": "에이전트 활동" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Koble til Cloud VPN" + "value": "Agentaktivitet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Połącz z Cloud VPN" + "value": "Aktywność agentów" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Conectar Cloud VPN" + "value": "Atividade dos agentes" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Подключить Cloud VPN" + "value": "Активность агентов" } }, "th": { "stringUnit": { "state": "translated", - "value": "เชื่อมต่อ Cloud VPN" + "value": "กิจกรรมของเอเจนต์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Cloud VPN’e bağlan" + "value": "Ajan etkinliği" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Підключити Cloud VPN" - } - } - } - }, - "cloud.vpn.setup.connected": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Connected" + "value": "Активність агентів" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Verbunden" + "value": "代理活动" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Connecté" + "value": "代理活動" } - }, - "es": { + } + } + }, + "settings.app.reorderOnNotification.mode.notifications": { + "extractionState": "manual", + "localizations": { + "ar": { "stringUnit": { "state": "translated", - "value": "Conectada" + "value": "الإشعارات" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "接続済み" + "value": "Obavještenja" } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "已连接" + "value": "Notifikationer" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "已連線" + "value": "Benachrichtigungen" } }, - "ko": { + "en": { "stringUnit": { "state": "translated", - "value": "연결됨" + "value": "Notifications" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "متصل" + "value": "Notificaciones" } }, - "bs": { + "fr": { "stringUnit": { "state": "translated", - "value": "Povezano" + "value": "Sur notification" } }, - "da": { + "it": { "stringUnit": { "state": "translated", - "value": "Forbundet" + "value": "Notifiche" } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "Connessa" + "value": "通知" } }, - "km": { + "ko": { "stringUnit": { "state": "translated", - "value": "បានភ្ជាប់" + "value": "알림" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Tilkoblet" + "value": "Varsler" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Połączono" + "value": "Powiadomienia" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Conectada" + "value": "Notificações" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Подключено" + "value": "Уведомления" } }, "th": { "stringUnit": { "state": "translated", - "value": "เชื่อมต่อแล้ว" + "value": "การแจ้งเตือน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bağlandı" + "value": "Bildirimler" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Підключено" - } - } - } - }, - "cloud.vpn.setup.disconnect": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Disconnect" + "value": "Сповіщення" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Trennen" + "value": "通知" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Déconnecter" + "value": "通知" } - }, - "es": { + } + } + }, + "settings.app.reorderOnNotification.mode.off": { + "extractionState": "manual", + "localizations": { + "ar": { "stringUnit": { "state": "translated", - "value": "Desconectar" + "value": "إيقاف" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "切断" + "value": "Isključeno" } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "断开连接" + "value": "Fra" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "中斷連線" + "value": "Aus" } }, - "ko": { + "en": { "stringUnit": { "state": "translated", - "value": "연결 해제" + "value": "Off" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "قطع الاتصال" + "value": "Desactivado" } }, - "bs": { + "fr": { "stringUnit": { "state": "translated", - "value": "Prekini vezu" + "value": "Désactivé" } }, - "da": { + "it": { "stringUnit": { "state": "translated", - "value": "Afbryd" + "value": "Disattivato" } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "Disconnetti" + "value": "オフ" } }, - "km": { + "ko": { "stringUnit": { "state": "translated", - "value": "ផ្តាច់" + "value": "끔" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Koble fra" + "value": "Av" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Rozłącz" + "value": "Wyłączone" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desconectar" + "value": "Desativado" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Отключить" + "value": "Выкл." } }, "th": { "stringUnit": { "state": "translated", - "value": "ตัดการเชื่อมต่อ" + "value": "ปิด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bağlantıyı kes" + "value": "Kapalı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Від’єднати" - } - } - } - }, - "cloud.vpn.setup.entry.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Optional private IP access for other apps" + "value": "Вимкнено" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Optionaler Zugriff auf private IPs für andere Apps" + "value": "关闭" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Accès facultatif aux IP privées pour les autres apps" + "value": "關閉" } - }, - "es": { + } + } + }, + "settings.app.reorderOnNotification.modeSubtitle": { + "extractionState": "manual", + "localizations": { + "ar": { "stringUnit": { "state": "translated", - "value": "Acceso opcional a IP privadas para otras apps" + "value": "ينقل مساحات العمل إلى الأعلى عندما تتلقى إشعارًا. مع نشاط الوكيل، ينقلها أيضًا عندما ترسل مطالبة أو ينهي وكيل دورة أو يحتاج إلى إدخال أو يفشل، لكن ليس أبدًا أثناء وجود المؤشر فوق الشريط الجانبي. الإيقاف يحافظ على ثبات مواضع الاختصارات." } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "ほかのアプリからプライベートIPへアクセスする任意の設定" + "value": "Pomjera radne prostore na vrh kada prime obavještenje. Aktivnost agenata ih pomjera i kada pošaljete upit ili agent završi potez, treba unos ili ne uspije, ali nikad dok je pokazivač iznad bočne trake. Isključeno čuva stabilne pozicije prečica." } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "为其他应用提供可选的私有 IP 访问" + "value": "Flytter arbejdsområder til toppen, når de modtager en notifikation. Agentaktivitet flytter dem også, når du sender en prompt eller en agent afslutter en tur, har brug for input eller fejler, men aldrig mens markøren er over sidepanelet. Fra holder genvejspositionerne stabile." } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "為其他 App 提供選用的私有 IP 存取" + "value": "Verschiebt Workspaces nach oben, wenn sie eine Benachrichtigung erhalten. Mit Agentenaktivität auch dann, wenn Sie einen Prompt senden oder ein Agent einen Durchlauf beendet, eine Eingabe braucht oder fehlschlägt, aber nie, während der Zeiger über der Seitenleiste ist. Aus hält die Positionen der Tastenkürzel stabil." } }, - "ko": { + "en": { "stringUnit": { "state": "translated", - "value": "다른 앱의 비공개 IP 접근을 위한 선택 설정" + "value": "Move workspaces to the top when they receive a notification. Agent Activity also moves them when you send a prompt or an agent finishes a turn, needs input, or fails, but never while you point at the sidebar. Off keeps shortcut positions stable." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "وصول اختياري إلى عناوين IP الخاصة للتطبيقات الأخرى" + "value": "Mueve los espacios de trabajo arriba cuando reciben una notificación. Con Actividad de agentes, también cuando envías un prompt o un agente termina un turno, necesita una respuesta o falla, pero nunca mientras el puntero está sobre la barra lateral. Desactivado mantiene estables las posiciones de los atajos." } }, - "bs": { + "fr": { "stringUnit": { "state": "translated", - "value": "Opcionalni pristup privatnim IP adresama za druge aplikacije" + "value": "Place les espaces de travail en haut lorsqu’ils reçoivent une notification. Avec Activité des agents, aussi lorsque vous envoyez un prompt ou qu’un agent termine un tour, attend une saisie ou échoue, mais jamais pendant que le pointeur survole la barre latérale. Désactivé garde les positions des raccourcis stables." } }, - "da": { + "it": { "stringUnit": { "state": "translated", - "value": "Valgfri privat IP-adgang for andre apps" + "value": "Sposta gli spazi di lavoro in cima quando ricevono una notifica. Attività degli agenti li sposta anche quando invii un prompt o un agente termina un turno, attende un input o fallisce, ma mai mentre il puntatore è sulla barra laterale. Disattivato mantiene stabili le posizioni delle scorciatoie." } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "Accesso facoltativo agli IP privati per altre app" + "value": "通知を受け取ったワークスペースを先頭に移動します。「エージェントのアクティビティ」では、プロンプトを送信したときや、エージェントがターンを終えたとき、入力を待っているとき、失敗したときにも移動しますが、ポインタがサイドバー上にある間は移動しません。「オフ」ではショートカットの位置が変わりません。" } }, - "km": { + "ko": { "stringUnit": { "state": "translated", - "value": "ចូលប្រើ IP ឯកជនសម្រាប់កម្មវិធីផ្សេងៗជាជម្រើស" + "value": "알림을 받으면 워크스페이스를 맨 위로 옮깁니다. 에이전트 활동을 선택하면 프롬프트를 보내거나 에이전트가 턴을 마치거나 입력이 필요하거나 실패할 때도 옮기지만, 포인터가 사이드바 위에 있을 때는 옮기지 않습니다. 끔은 단축키 위치를 고정합니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Valgfri privat IP-tilgang for andre apper" + "value": "Flytter arbeidsområder til toppen når de mottar et varsel. Agentaktivitet flytter dem også når du sender en ledetekst eller en agent fullfører en runde, trenger input eller feiler, men aldri mens pekeren er over sidefeltet. Av holder snarveisposisjonene stabile." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Opcjonalny dostęp innych aplikacji do prywatnych adresów IP" + "value": "Przenosi obszary robocze na górę, gdy otrzymają powiadomienie. Aktywność agentów przenosi je także, gdy wyślesz prompt lub agent zakończy turę, potrzebuje danych lub zakończy się błędem, ale nigdy, gdy wskaźnik jest nad paskiem bocznym. Wyłączone zachowuje stałe pozycje skrótów." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Acesso opcional a IPs privados para outros apps" + "value": "Move os espaços de trabalho para o topo quando recebem uma notificação. Atividade dos agentes também os move quando você envia um prompt ou um agente termina um turno, precisa de uma resposta ou falha, mas nunca enquanto o ponteiro está sobre a barra lateral. Desativado mantém as posições dos atalhos estáveis." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Необязательный доступ других приложений к частным IP" + "value": "Перемещает рабочие области наверх, когда они получают уведомление. «Активность агентов» также перемещает их, когда вы отправляете запрос или агент завершает ход, ждёт ввода или завершается с ошибкой, но никогда, пока указатель находится над боковой панелью. «Выкл.» сохраняет позиции сочетаний клавиш." } }, "th": { "stringUnit": { "state": "translated", - "value": "การเข้าถึง IP ส่วนตัวสำหรับแอปอื่นแบบไม่บังคับ" + "value": "ย้ายเวิร์กสเปซขึ้นด้านบนเมื่อได้รับการแจ้งเตือน กิจกรรมของเอเจนต์จะย้ายเมื่อคุณส่งพรอมต์หรือเอเจนต์จบรอบ ต้องการข้อมูล หรือล้มเหลวด้วย แต่จะไม่ย้ายขณะที่ตัวชี้อยู่เหนือแถบด้านข้าง ปิดจะคงตำแหน่งของทางลัดไว้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Diğer uygulamalar için isteğe bağlı özel IP erişimi" + "value": "Bildirim aldıklarında çalışma alanlarını en üste taşır. Ajan etkinliği, bir istem gönderdiğinizde, bir ajan turunu bitirdiğinde, girdi beklediğinde veya başarısız olduğunda da taşır, ancak işaretçi kenar çubuğunun üzerindeyken asla taşımaz. Kapalı, kısayol konumlarını sabit tutar." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Необов’язковий доступ інших програм до приватних IP" - } - } - } - }, - "cloud.vpn.setup.failed": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Needs attention" + "value": "Переміщує робочі області вгору, коли вони отримують сповіщення. «Активність агентів» також переміщує їх, коли ви надсилаєте запит або агент завершує хід, чекає на введення або завершується з помилкою, але ніколи, поки вказівник над бічною панеллю. «Вимкнено» зберігає позиції скорочень." } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Aktion erforderlich" + "value": "工作区收到通知时移到顶部。选择“代理活动”时,你发送提示词或代理完成一轮、需要输入或失败时也会移动,但指针停在侧边栏上时绝不移动。关闭可让快捷键位置保持不变。" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Action requise" + "value": "工作區收到通知時移到頂部。選擇「代理活動」時,你送出提示詞或代理完成一輪、需要輸入或失敗時也會移動,但指標停在側邊欄上時絕不移動。關閉可讓快捷鍵位置保持不變。" } - }, - "es": { + } + } + }, + "agent.claude.stopFailure.body.generic": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Requiere atención" + "value": "Claude Code stopped on an API error" } }, "ja": { "stringUnit": { "state": "translated", - "value": "対応が必要" + "value": "Claude Code は API エラーで停止しました" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "需要处理" + "value": "Claude Code 因 API 错误而停止" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "需要處理" + "value": "Claude Code wurde wegen eines API-Fehlers gestoppt" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "조치 필요" + "value": "Claude Code s'est arrêté sur une erreur d'API" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يتطلب إجراءً" + "value": "توقف Claude Code بسبب خطأ في واجهة API" } }, - "bs": { + "es": { "stringUnit": { "state": "translated", - "value": "Potrebna pažnja" + "value": "Claude Code se detuvo por un error de la API" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Kræver opmærksomhed" + "value": "Claude Code 因 API 錯誤而停止" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Richiede attenzione" + "value": "Claude Code가 API 오류로 중지되었습니다" + } + } + } + }, + "agent.claude.stopFailure.status.apiError": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "API error" } }, - "km": { + "ja": { "stringUnit": { "state": "translated", - "value": "ត្រូវការការយកចិត្តទុកដាក់" + "value": "API エラー" } }, - "nb": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Krever handling" + "value": "API 错误" } }, - "pl": { + "de": { "stringUnit": { "state": "translated", - "value": "Wymaga uwagi" + "value": "API-Fehler" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Requer atenção" + "value": "Erreur d'API" } }, - "ru": { + "ar": { "stringUnit": { "state": "translated", - "value": "Требуется действие" + "value": "خطأ في واجهة API" } }, - "th": { + "es": { "stringUnit": { "state": "translated", - "value": "ต้องดำเนินการ" + "value": "Error de la API" } }, - "tr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "İlgilenilmeli" + "value": "API 錯誤" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Потрібна увага" + "value": "API 오류" } } } }, - "cloud.vpn.setup.off": { + "agent.claude.stopFailure.status.authentication": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Off" + "value": "Auth error" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Aus" + "value": "認証エラー" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Désactivé" + "value": "认证错误" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Desactivada" + "value": "Authentifizierungsfehler" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "オフ" + "value": "Erreur d'authentification" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "已关闭" + "value": "خطأ في المصادقة" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Error de autenticación" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已關閉" + "value": "驗證錯誤" } }, "ko": { "stringUnit": { "state": "translated", - "value": "꺼짐" + "value": "인증 오류" + } + } + } + }, + "agent.claude.stopFailure.status.billing": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Billing error" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "متوقف" + "value": "請求エラー" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Isključeno" + "value": "账单错误" } }, - "da": { + "de": { "stringUnit": { "state": "translated", - "value": "Fra" + "value": "Abrechnungsfehler" } }, - "it": { + "fr": { "stringUnit": { "state": "translated", - "value": "Disattivata" + "value": "Erreur de facturation" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "បិទ" + "value": "خطأ في الفوترة" } }, - "nb": { + "es": { "stringUnit": { "state": "translated", - "value": "Av" + "value": "Error de facturación" } }, - "pl": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Wyłączona" + "value": "帳單錯誤" } }, - "pt-BR": { + "ko": { "stringUnit": { "state": "translated", - "value": "Desativada" + "value": "결제 오류" + } + } + } + }, + "agent.claude.stopFailure.status.connectionDropped": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Connection dropped" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Выключено" + "value": "接続が切断されました" } }, - "th": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ปิด" + "value": "连接已断开" } }, - "tr": { + "de": { "stringUnit": { "state": "translated", - "value": "Kapalı" + "value": "Verbindung abgebrochen" } }, - "uk": { + "fr": { "stringUnit": { "state": "translated", - "value": "Вимкнено" + "value": "Connexion interrompue" } - } - } - }, - "cloud.vpn.setup.openUnavailable": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ar": { "stringUnit": { "state": "translated", - "value": "Cloud VPN setup is unavailable" + "value": "انقطع الاتصال" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Cloud-VPN-Einrichtung ist nicht verfügbar" + "value": "Conexión perdida" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "La configuration du VPN Cloud est indisponible" + "value": "連線已中斷" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "La configuración de VPN de Cloud no está disponible" + "value": "연결 끊김" + } + } + } + }, + "agent.claude.stopFailure.status.outputLimit": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Output limit" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Cloud VPN設定は利用できません" + "value": "出力上限" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud VPN 设置不可用" + "value": "输出上限" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "無法使用 Cloud VPN 設定" + "value": "Ausgabelimit" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud VPN 설정을 사용할 수 없습니다" + "value": "Limite de sortie" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إعداد VPN الخاص بـ Cloud غير متاح" + "value": "حد المخرجات" } }, - "bs": { + "es": { "stringUnit": { "state": "translated", - "value": "Podešavanje Cloud VPN-a nije dostupno" + "value": "Límite de salida" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VPN-opsætning er ikke tilgængelig" + "value": "輸出上限" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "La configurazione VPN Cloud non è disponibile" + "value": "출력 한도" + } + } + } + }, + "agent.claude.stopFailure.status.overloaded": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "API overloaded" } }, - "km": { + "ja": { "stringUnit": { "state": "translated", - "value": "ការរៀបចំ Cloud VPN មិនអាចប្រើបាន" + "value": "API 過負荷" } }, - "nb": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud VPN-oppsett er ikke tilgjengelig" + "value": "API 过载" } }, - "pl": { + "de": { "stringUnit": { "state": "translated", - "value": "Konfiguracja Cloud VPN jest niedostępna" + "value": "API überlastet" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "A configuração do Cloud VPN não está disponível" + "value": "API surchargée" } }, - "ru": { + "ar": { "stringUnit": { "state": "translated", - "value": "Настройка Cloud VPN недоступна" + "value": "واجهة API محمّلة فوق طاقتها" } }, - "th": { + "es": { "stringUnit": { "state": "translated", - "value": "การตั้งค่า Cloud VPN ไม่พร้อมใช้งาน" + "value": "API sobrecargada" } }, - "tr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VPN kurulumu kullanılamıyor" + "value": "API 過載" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Налаштування Cloud VPN недоступне" + "value": "API 과부하" } } } }, - "cloud.vpn.setup.permission.body": { + "agent.claude.stopFailure.status.rateLimited": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The VPN software is included in cmux. You do not need another app. macOS may require your password or Touch ID during approval." + "value": "Rate limited" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "レート制限中" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已限速" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die VPN-Software ist in cmux enthalten. Sie brauchen keine weitere App. macOS kann bei der Genehmigung Ihr Passwort oder Touch ID verlangen." + "value": "Ratenbegrenzt" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le logiciel VPN est inclus dans cmux. Aucune autre app n’est nécessaire. macOS peut demander votre mot de passe ou Touch ID lors de l’autorisation." + "value": "Limite de requêtes atteinte" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تم تقييد المعدل" } }, "es": { "stringUnit": { "state": "translated", - "value": "El software VPN está incluido en cmux. No necesitas otra app. macOS puede solicitar tu contraseña o Touch ID durante la autorización." + "value": "Límite de frecuencia alcanzado" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "已限速" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "속도 제한됨" + } + } + } + }, + "agent.claude.stopFailure.status.usageLimit": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Usage limit" } }, "ja": { "stringUnit": { "state": "translated", - "value": "VPNソフトウェアはcmuxに含まれています。別のアプリは不要です。承認時にmacOSがパスワードまたはTouch IDを求めることがあります。" + "value": "使用量の上限" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 已包含 VPN 软件,无需其他应用。批准时,macOS 可能要求您输入密码或使用触控 ID。" + "value": "用量上限" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux 已包含 VPN 軟體,不需要其他 App。核准時,macOS 可能要求您輸入密碼或使用 Touch ID。" + "value": "Nutzungslimit" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "VPN 소프트웨어는 cmux에 포함되어 있습니다. 다른 앱은 필요하지 않습니다. 승인 시 macOS에서 암호 또는 Touch ID를 요청할 수 있습니다." + "value": "Limite d'utilisation" } }, "ar": { "stringUnit": { "state": "translated", - "value": "برنامج VPN مضمن في cmux. لا تحتاج إلى تطبيق آخر. قد يطلب macOS كلمة المرور أو Touch ID أثناء الموافقة." + "value": "حد الاستخدام" } }, - "bs": { + "es": { "stringUnit": { "state": "translated", - "value": "VPN softver je uključen u cmux. Nije potrebna druga aplikacija. macOS može zatražiti lozinku ili Touch ID tokom odobravanja." + "value": "Límite de uso" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "VPN-softwaren er inkluderet i cmux. Du behøver ingen anden app. macOS kan bede om din adgangskode eller Touch ID under godkendelsen." + "value": "用量上限" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Il software VPN è incluso in cmux. Non serve un’altra app. macOS potrebbe chiedere la password o Touch ID durante l’autorizzazione." + "value": "사용량 한도" + } + } + } + }, + "agent.claude.stopFailure.status.usageLimitResets": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Usage limit, resets %@" } }, - "km": { + "ja": { "stringUnit": { "state": "translated", - "value": "កម្មវិធី VPN មាននៅក្នុង cmux។ អ្នកមិនត្រូវការកម្មវិធីផ្សេងទៀតទេ។ macOS អាចស្នើពាក្យសម្ងាត់ ឬ Touch ID ក្នុងពេលអនុម័ត។" + "value": "使用量の上限、%@ にリセット" } }, - "nb": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "VPN-programvaren er inkludert i cmux. Du trenger ingen annen app. macOS kan be om passord eller Touch ID under godkjenningen." + "value": "用量上限,%@ 重置" } }, - "pl": { + "de": { "stringUnit": { "state": "translated", - "value": "Oprogramowanie VPN jest zawarte w cmux. Nie potrzebujesz innej aplikacji. macOS może poprosić o hasło lub Touch ID podczas zatwierdzania." + "value": "Nutzungslimit, Reset %@" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "O software VPN vem incluído no cmux. Você não precisa de outro app. O macOS pode pedir sua senha ou Touch ID durante a aprovação." + "value": "Limite d'utilisation, réinitialisation %@" } }, - "ru": { + "ar": { "stringUnit": { "state": "translated", - "value": "VPN-программа уже входит в cmux. Другие приложения не нужны. Во время подтверждения macOS может запросить пароль или Touch ID." + "value": "حد الاستخدام، يُعاد التعيين %@" } }, - "th": { + "es": { "stringUnit": { "state": "translated", - "value": "ซอฟต์แวร์ VPN รวมอยู่ใน cmux แล้ว ไม่ต้องใช้แอปอื่น macOS อาจขอรหัสผ่านหรือ Touch ID ระหว่างการอนุมัติ" + "value": "Límite de uso, se restablece %@" } }, - "tr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "VPN yazılımı cmux içinde bulunur. Başka bir uygulama gerekmez. macOS onay sırasında parolanızı veya Touch ID’yi isteyebilir." + "value": "用量上限,%@ 重設" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Програмне забезпечення VPN входить до cmux. Інша програма не потрібна. Під час схвалення macOS може попросити пароль або Touch ID." + "value": "사용량 한도, %@에 초기화" } } } }, - "cloud.vpn.setup.status.title": { + "sidebar.extensions.action.noSpaceForPane": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Private network status" + "value": "No space for new pane" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Status des privaten Netzwerks" + "value": "لا توجد مساحة للوحة جديدة" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "État du réseau privé" + "value": "Kein Platz für einen neuen Bereich" } }, "es": { "stringUnit": { "state": "translated", - "value": "Estado de la red privada" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "プライベートネットワークの状態" + "value": "No hay espacio para un panel nuevo" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "私有网络状态" + "value": "Pas de place pour un nouveau panneau" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "私有網路狀態" + "value": "新しいペインを置く場所がありません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "비공개 네트워크 상태" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "حالة الشبكة الخاصة" + "value": "새 창을 위한 공간이 없습니다" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Status privatne mreže" + "value": "没有空间容纳新窗格" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Status for privat netværk" + "value": "沒有空間容納新窗格" } - }, - "it": { + } + } + }, + "cli.focus.defaultHelp": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Stato della rete privata" + "value": "Default: focus when run interactively, stay in the background when run by an agent or script." } }, - "km": { + "ja": { "stringUnit": { "state": "translated", - "value": "ស្ថានភាពបណ្តាញឯកជន" + "value": "既定: 対話的に実行した場合はフォーカスし、エージェントやスクリプトから実行した場合はバックグラウンドのままにします。" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Status for privat nettverk" + "value": "Standard: bei interaktiver Ausführung fokussieren, bei Ausführung durch einen Agenten oder ein Skript im Hintergrund bleiben." } }, - "pl": { + "fr": { "stringUnit": { "state": "translated", - "value": "Stan sieci prywatnej" + "value": "Par défaut : prend le focus en exécution interactive, reste en arrière-plan quand un agent ou un script l’exécute." } }, - "pt-BR": { + "ar": { "stringUnit": { "state": "translated", - "value": "Status da rede privada" + "value": "الافتراضي: التركيز عند التشغيل التفاعلي، والبقاء في الخلفية عند التشغيل بواسطة وكيل أو برنامج نصي." } }, - "ru": { + "es": { "stringUnit": { "state": "translated", - "value": "Состояние частной сети" + "value": "Predeterminado: enfoca al ejecutarse de forma interactiva y se queda en segundo plano cuando lo ejecuta un agente o un script." } }, - "th": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "สถานะเครือข่ายส่วนตัว" + "value": "預設:互動執行時取得焦點;由代理程式或指令稿執行時保持在背景。" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Özel ağ durumu" + "value": "默认:交互式运行时获得焦点;由代理或脚本运行时保持在后台。" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Стан приватної мережі" + "value": "기본값: 대화형으로 실행하면 포커스를 가져오고, 에이전트나 스크립트가 실행하면 백그라운드에 머뭅니다." } } } }, - "cloud.vpn.setup.title": { + "cli.help.openFocusFlags": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "Focus:\n --focus Switch to the new workspace\n --no-focus Open it in the background" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Cloud-VPN" + "value": "フォーカス:\n --focus 新しいワークスペースに切り替えます\n --no-focus バックグラウンドで開きます" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "VPN Cloud" + "value": "Fokus:\n --focus Zum neuen Workspace wechseln\n --no-focus Im Hintergrund öffnen" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "VPN de Cloud" + "value": "Focus :\n --focus Bascule vers le nouvel espace de travail\n --no-focus L’ouvre en arrière-plan" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "クラウドVPN" + "value": "التركيز:\n --focus ينتقل إلى مساحة العمل الجديدة\n --no-focus يفتحها في الخلفية" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "云端 VPN" + "value": "Foco:\n --focus Cambia al nuevo espacio de trabajo\n --no-focus Lo abre en segundo plano" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "雲端 VPN" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "클라우드 VPN" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "شبكة Cloud الخاصة" + "value": "焦點:\n --focus 切換到新的工作區\n --no-focus 在背景開啟" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "焦点:\n --focus 切换到新的工作区\n --no-focus 在后台打开" } }, - "da": { + "ko": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "포커스:\n --focus 새 워크스페이스로 전환합니다\n --no-focus 백그라운드에서 엽니다" } - }, - "it": { + } + } + }, + "settings.app.compactAgentStatus": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "VPN Cloud" + "value": "Compact Agent Status" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "حالة الوكيل المختصرة" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "Kompakter Agentenstatus" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "Estado de agente compacto" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "Statut d’agent compact" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "エージェント状態のコンパクト表示" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "간결한 에이전트 상태" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "精简代理状态" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "精簡代理狀態" } } } }, - "cloud.vpn.setup.unavailable": { + "settings.app.compactAgentStatus.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This copy of cmux does not include a signed VPN extension. Use a cmux release with Cloud VPN support. Cloud terminals, Ports, and Desktop remain available without the VPN." + "value": "Show a workspace's agent, unread and pull request state as one colored icon before the title instead of separate rows. Hover the icon for details." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Diese cmux-Version enthält keine signierte VPN-Erweiterung. Verwenden Sie eine cmux-Version mit Cloud-VPN-Unterstützung. Cloud-Terminals, Ports und Desktop bleiben ohne VPN verfügbar." + "value": "إظهار حالة الوكيل والعناصر غير المقروءة وطلب السحب لمساحة العمل كأيقونة ملونة واحدة قبل العنوان بدلاً من صفوف منفصلة. مرّر المؤشر فوق الأيقونة لعرض التفاصيل." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Cette copie de cmux ne contient pas d’extension VPN signée. Utilisez une version de cmux qui prend en charge le VPN Cloud. Les terminaux Cloud, Ports et Bureau restent disponibles sans VPN." + "value": "Agenten-, Ungelesen- und Pull-Request-Status eines Workspace als ein farbiges Symbol vor dem Titel anzeigen statt in eigenen Zeilen. Details erscheinen, wenn du den Zeiger über das Symbol bewegst." } }, "es": { "stringUnit": { "state": "translated", - "value": "Esta copia de cmux no incluye una extensión VPN firmada. Usa una versión de cmux compatible con VPN de Cloud. Los terminales Cloud, Puertos y Escritorio siguen disponibles sin VPN." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このcmuxには署名済みのVPN機能拡張が含まれていません。Cloud VPN対応のcmuxリリースを使用してください。Cloudのターミナル、ポート、デスクトップはVPNなしでも使えます。" + "value": "Mostrar el estado del agente, lo no leído y la pull request de un espacio de trabajo como un único icono de color antes del título, en lugar de filas separadas. Pasa el cursor sobre el icono para ver los detalles." } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "此 cmux 副本未包含已签名的 VPN 扩展。请使用支持 Cloud VPN 的 cmux 版本。Cloud 终端、端口和桌面无需 VPN 仍可使用。" + "value": "Afficher l’état de l’agent, des éléments non lus et de la pull request d’un espace de travail sous forme d’une seule icône colorée avant le titre, au lieu de lignes distinctes. Survolez l’icône pour voir les détails." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "此 cmux 副本未包含已簽署的 VPN 延伸功能。請使用支援 Cloud VPN 的 cmux 版本。Cloud 終端機、連接埠和桌面不需要 VPN 仍可使用。" + "value": "ワークスペースのエージェント、未読、プルリクエストの状態を、個別の行ではなくタイトルの前の色付きアイコン1つで示します。詳細はアイコンにポインタを合わせると表示されます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 cmux에는 서명된 VPN 확장이 포함되어 있지 않습니다. Cloud VPN을 지원하는 cmux 릴리스를 사용하세요. Cloud 터미널, 포트 및 데스크탑은 VPN 없이도 사용할 수 있습니다." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "لا تتضمن هذه النسخة من cmux امتداد VPN موقعًا. استخدم إصدار cmux يدعم VPN الخاص بـ Cloud. تظل طرفيات Cloud والمنافذ وسطح المكتب متاحة بدون VPN." + "value": "워크스페이스의 에이전트, 읽지 않음, 풀 리퀘스트 상태를 별도의 줄이 아니라 제목 앞의 색상 아이콘 하나로 나타냅니다. 자세한 내용은 아이콘 위에 포인터를 올려 확인하세요." } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ova kopija cmux-a nema potpisani VPN dodatak. Koristite cmux izdanje sa Cloud VPN podrškom. Cloud terminali, portovi i radna površina ostaju dostupni bez VPN-a." + "value": "用标题前的单个彩色图标表示工作区的代理、未读和拉取请求状态,而不是各自占一行。将指针悬停在图标上可查看详细信息。" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Denne cmux-kopi indeholder ikke en signeret VPN-udvidelse. Brug en cmux-udgave med Cloud VPN-understøttelse. Cloud-terminaler, porte og skrivebord er stadig tilgængelige uden VPN." + "value": "以標題前的單一彩色圖示表示工作區的代理、未讀與拉取請求狀態,而非各自佔一行。將游標移到圖示上可查看詳細資訊。" } - }, - "it": { + } + } + }, + "settings.search.alias.setting.app.compact-agent-status": { + "extractionState": "manual", + "localizations": { + "ar": { "stringUnit": { "state": "translated", - "value": "Questa copia di cmux non include un’estensione VPN firmata. Usa una versione di cmux con supporto Cloud VPN. Terminali Cloud, porte e desktop restano disponibili senza VPN." + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex مختصر وكيل حالة أيقونة سطر العنوان" } }, - "km": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux ច្បាប់នេះមិនមានផ្នែកបន្ថែម VPN ដែលបានចុះហត្ថលេខាទេ។ ប្រើកំណែ cmux ដែលគាំទ្រ Cloud VPN។ Terminal, Ports និង Desktop របស់ Cloud នៅតែប្រើបានដោយគ្មាន VPN។" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex kompakt Agent Status Symbol Titelzeile" } }, - "nb": { + "en": { "stringUnit": { "state": "translated", - "value": "Denne cmux-kopien har ingen signert VPN-utvidelse. Bruk en cmux-versjon med Cloud VPN-støtte. Cloud-terminaler, porter og skrivebord er tilgjengelige uten VPN." + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Ta kopia cmux nie zawiera podpisanego rozszerzenia VPN. Użyj wydania cmux z obsługą Cloud VPN. Terminale Cloud, porty i pulpit pozostają dostępne bez VPN." + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex compacto agente estado icono línea de título" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Esta cópia do cmux não inclui uma extensão VPN assinada. Use uma versão do cmux com suporte a Cloud VPN. Terminais Cloud, portas e área de trabalho continuam disponíveis sem VPN." + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex compact agent statut icône ligne de titre" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "В этой копии cmux нет подписанного VPN-расширения. Используйте выпуск cmux с поддержкой Cloud VPN. Cloud-терминалы, порты и рабочий стол доступны без VPN." + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex コンパクト エージェント 状態 アイコン タイトル行" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux รุ่นนี้ไม่มีส่วนขยาย VPN ที่ลงนามแล้ว ใช้รุ่น cmux ที่รองรับ Cloud VPN เทอร์มินัล Cloud พอร์ต และเดสก์ท็อปยังใช้ได้โดยไม่ต้องมี VPN" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 간결 에이전트 상태 아이콘 제목 줄" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Bu cmux kopyasında imzalı VPN uzantısı bulunmuyor. Cloud VPN destekli bir cmux sürümü kullanın. Cloud terminalleri, portlar ve masaüstü VPN olmadan da kullanılabilir." + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精简 代理 状态 图标 标题行" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Ця копія cmux не містить підписаного VPN-розширення. Використовуйте випуск cmux із підтримкою Cloud VPN. Cloud-термінали, порти й робочий стіл доступні без VPN." + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精簡 代理 狀態 圖示 標題列" } } } }, - "cloud.vpn.setup.waiting": { + "sidebar.agentStatus.glyph.tooltip": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Waiting" + "value": "%1$@: %2$@" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Warten" + "value": "%1$@: %2$@" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "En attente" + "value": "%1$@: %2$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "En espera" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "待機中" + "value": "%1$@: %2$@" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "等待中" + "value": "%1$@ : %2$@" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "等待中" + "value": "%1$@:%2$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "대기 중" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قيد الانتظار" + "value": "%1$@: %2$@" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Čekanje" + "value": "%1$@:%2$@" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Venter" + "value": "%1$@:%2$@" } - }, - "it": { + } + } + }, + "sidebar.compactStatus.profile": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "In attesa" + "value": "Profile" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "កំពុងរង់ចាំ" + "value": "الملف الشخصي" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Venter" + "value": "Profil" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Oczekiwanie" + "value": "Perfil" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Aguardando" + "value": "Profil" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ожидание" + "value": "プロファイル" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "กำลังรอ" + "value": "프로필" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Bekliyor" + "value": "配置文件" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Очікування" + "value": "設定檔" } } } }, - "cloudTree.ports.action.wake": { + "shortcut.sizeTerminalToMyWindow.label": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Wake Machine" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Maschine aktivieren" + "value": "Size Terminal to My Window" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Réveiller la machine" + "value": "ضبط حجم الطرفية على نافذتي" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إيقاظ الجهاز" + "value": "Terminal an mein Fenster anpassen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Activar máquina" + "value": "Ajustar la terminal a mi ventana" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "喚醒機器" + "value": "Adapter le terminal à ma fenêtre" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "唤醒机器" + "value": "ターミナルを自分のウィンドウに合わせる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "머신 깨우기" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "マシンを起動" + "value": "터미널을 내 창 크기에 맞추기" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Probudi mašinu" + "value": "让终端适配我的窗口" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Væk maskine" + "value": "讓終端機符合我的視窗大小" } - }, - "it": { + } + } + }, + "command.terminalDisconnectOtherClients.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Riattiva macchina" + "value": "Disconnect Other Terminal Clients…" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ដាស់ម៉ាស៊ីន" + "value": "قطع اتصال عملاء الطرفية الآخرين…" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Vekk maskin" + "value": "Andere Terminal-Clients trennen…" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Wybudź maszynę" + "value": "Desconectar otros clientes de la terminal…" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Despertar máquina" + "value": "Déconnecter les autres clients du terminal…" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Разбудить машину" + "value": "他のターミナルクライアントを切断…" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ปลุกเครื่อง" + "value": "다른 터미널 클라이언트 연결 끊기…" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Makineyi uyandır" + "value": "断开其他终端客户端…" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Розбудити машину" + "value": "中斷其他終端機用戶端的連線…" } } } }, - "cloudTree.ports.asleep.detail": { + "command.terminalShowSizePanel.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Wake the machine to check its services. cmux’s in-app forwarding does not need Cloud VPN." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Aktivieren Sie die Maschine, um ihre Dienste zu prüfen. Die Weiterleitung in cmux benötigt kein Cloud-VPN." + "value": "Show Terminal Size Panel" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Réveillez la machine pour vérifier ses services. Le transfert intégré à cmux ne nécessite pas de VPN Cloud." + "value": "إظهار لوحة حجم الطرفية" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "أيقظ الجهاز لفحص خدماته. لا تحتاج إعادة التوجيه داخل cmux إلى Cloud VPN." + "value": "Terminalgrößen-Bereich anzeigen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Activa la máquina para comprobar sus servicios. El reenvío integrado de cmux no necesita Cloud VPN." + "value": "Mostrar el panel de tamaño de la terminal" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "喚醒機器以檢查其服務。cmux 的應用程式內轉送不需要 Cloud VPN。" + "value": "Afficher le panneau de taille du terminal" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "唤醒机器以检查其服务。cmux 的应用内转发无需 Cloud VPN。" + "value": "ターミナルサイズパネルを表示" } }, "ko": { "stringUnit": { "state": "translated", - "value": "머신을 깨워 서비스를 확인하세요. cmux 앱 내 전달에는 Cloud VPN이 필요하지 않습니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "マシンを起動してサービスを確認してください。cmux のアプリ内転送に Cloud VPN は不要です。" + "value": "터미널 크기 패널 보기" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Probudite mašinu da provjerite njene servise. Prosljeđivanje unutar cmux-a ne treba Cloud VPN." + "value": "显示终端大小面板" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Væk maskinen for at kontrollere dens tjenester. Videresendelse i cmux kræver ikke Cloud VPN." + "value": "顯示終端機大小面板" } - }, - "it": { + } + } + }, + "command.terminalSizeToMyWindow.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Riattiva la macchina per controllarne i servizi. L’inoltro all’interno di cmux non richiede la VPN Cloud." + "value": "Size Terminal to My Window" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ដាស់ម៉ាស៊ីនដើម្បីពិនិត្យសេវាកម្មរបស់វា។ ការបញ្ជូនបន្តនៅក្នុង cmux មិនត្រូវការ Cloud VPN ទេ។" + "value": "ضبط حجم الطرفية على نافذتي" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Vekk maskinen for å sjekke tjenestene. Videresending i cmux trenger ikke Cloud VPN." + "value": "Terminal an mein Fenster anpassen" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Wybudź maszynę, aby sprawdzić jej usługi. Przekierowywanie w cmux nie wymaga Cloud VPN." + "value": "Ajustar la terminal a mi ventana" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Desperte a máquina para verificar os serviços. O encaminhamento dentro do cmux não precisa do Cloud VPN." + "value": "Adapter le terminal à ma fenêtre" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Разбудите машину, чтобы проверить её службы. Перенаправлению внутри cmux Cloud VPN не нужен." + "value": "ターミナルを自分のウィンドウに合わせる" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ปลุกเครื่องเพื่อตรวจสอบบริการ การส่งต่อภายใน cmux ไม่ต้องใช้ Cloud VPN" + "value": "터미널을 내 창 크기에 맞추기" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Hizmetlerini denetlemek için makineyi uyandırın. cmux içi yönlendirme Cloud VPN gerektirmez." + "value": "让终端适配我的窗口" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Розбудіть машину, щоб перевірити її служби. Перенаправлення всередині cmux не потребує Cloud VPN." + "value": "讓終端機符合我的視窗大小" } } } }, - "cloudTree.ports.available.title": { + "terminalSharing.detached.hostShutdown": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Listening services" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Lauschende Dienste" + "value": "The terminal host shut down at %@." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Services en écoute" + "value": "توقف مضيف الطرفية في %@." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "الخدمات المستمعة" + "value": "Der Terminal-Host wurde um %@ beendet." } }, "es": { "stringUnit": { "state": "translated", - "value": "Servicios en escucha" + "value": "El host de la terminal se detuvo a las %@." } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "監聽中的服務" + "value": "L’hôte du terminal s’est arrêté à %@." } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "监听中的服务" + "value": "ターミナルホストが %@ に終了しました。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "수신 대기 서비스" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "待ち受け中のサービス" + "value": "터미널 호스트가 %@에 종료되었습니다." } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Servisi koji slušaju" + "value": "终端主机已于 %@ 关闭。" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Lyttende tjenester" + "value": "終端機主機已於 %@ 關閉。" } - }, - "it": { + } + } + }, + "terminalSharing.detached.network": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Servizi in ascolto" + "value": "The network dropped." } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "សេវាកម្មដែលកំពុងស្តាប់" + "value": "انقطع اتصال الشبكة." } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Lyttende tjenester" + "value": "Die Netzwerkverbindung wurde unterbrochen." } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Nasłuchujące usługi" + "value": "Se perdió la conexión de red." } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Serviços em escuta" + "value": "La connexion réseau a été interrompue." } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Прослушивающие службы" + "value": "ネットワーク接続が切れました。" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "บริการที่กำลังรับฟัง" + "value": "네트워크 연결이 끊어졌습니다." } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Dinleyen hizmetler" + "value": "网络连接已中断。" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Служби, що прослуховують" + "value": "網路連線中斷。" } } } }, - "cloudTree.ports.binding.detail": { + "terminalSharing.detached.reattach": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux’s browser route connects to 127.0.0.1 on the machine. Bind the service to 127.0.0.1 or 0.0.0.0, then refresh. Turning on Cloud VPN does not change this route." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Die Browser-Verbindung von cmux verwendet 127.0.0.1 auf der Maschine. Binden Sie den Dienst an 127.0.0.1 oder 0.0.0.0 und aktualisieren Sie. Cloud-VPN ändert diese Route nicht." + "value": "Reattach" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Le navigateur cmux se connecte à 127.0.0.1 sur la machine. Liez le service à 127.0.0.1 ou 0.0.0.0, puis actualisez. Activer le VPN Cloud ne change pas cette route." + "value": "إعادة الإرفاق" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يتصل مسار متصفح cmux بالعنوان 127.0.0.1 على الجهاز. اربط الخدمة بالعنوان 127.0.0.1 أو 0.0.0.0 ثم حدّث. تشغيل Cloud VPN لا يغير هذا المسار." + "value": "Erneut verbinden" } }, "es": { "stringUnit": { "state": "translated", - "value": "La ruta del navegador de cmux conecta a 127.0.0.1 en la máquina. Enlaza el servicio a 127.0.0.1 o 0.0.0.0 y actualiza. Activar Cloud VPN no cambia esta ruta." + "value": "Volver a conectar" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux 的瀏覽器路徑會連線到機器上的 127.0.0.1。請將服務繫結至 127.0.0.1 或 0.0.0.0 後重新整理。開啟 Cloud VPN 不會改變此路徑。" + "value": "Se reconnecter" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux 的浏览器路由连接到机器上的 127.0.0.1。请将服务绑定到 127.0.0.1 或 0.0.0.0 后刷新。开启 Cloud VPN 不会改变此路由。" + "value": "再接続" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux 브라우저 경로는 머신의 127.0.0.1에 연결합니다. 서비스를 127.0.0.1 또는 0.0.0.0에 바인딩한 후 새로 고치세요. Cloud VPN을 켜도 이 경로는 바뀌지 않습니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux のブラウザはマシン上の 127.0.0.1 に接続します。サービスを 127.0.0.1 または 0.0.0.0 にバインドして更新してください。Cloud VPN を有効にしてもこの経路は変わりません。" + "value": "다시 연결" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ruta preglednika u cmux-u povezuje se na 127.0.0.1 na mašini. Vežite servis na 127.0.0.1 ili 0.0.0.0, zatim osvježite. Uključivanje Cloud VPN-a ne mijenja ovu rutu." + "value": "重新连接" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux’ browserrute forbinder til 127.0.0.1 på maskinen. Bind tjenesten til 127.0.0.1 eller 0.0.0.0, og opdater derefter. Aktivering af Cloud VPN ændrer ikke denne rute." + "value": "重新連接" } - }, - "it": { + } + } + }, + "terminalSharing.detached.reattachAsViewer": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Il percorso del browser di cmux si connette a 127.0.0.1 sulla macchina. Associa il servizio a 127.0.0.1 o 0.0.0.0, quindi aggiorna. L’attivazione della VPN Cloud non modifica questo percorso." + "value": "Reattach as Viewer" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ផ្លូវកម្មវិធីរុករករបស់ cmux ភ្ជាប់ទៅ 127.0.0.1 នៅលើម៉ាស៊ីន។ ចងសេវាកម្មទៅ 127.0.0.1 ឬ 0.0.0.0 រួចផ្ទុកឡើងវិញ។ ការបើក Cloud VPN មិនផ្លាស់ប្តូរផ្លូវនេះទេ។" + "value": "إعادة الإرفاق كمشاهد" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux sin nettleserrute kobler til 127.0.0.1 på maskinen. Bind tjenesten til 127.0.0.1 eller 0.0.0.0, og oppdater deretter. Å slå på Cloud VPN endrer ikke denne ruten." + "value": "Als Zuschauer erneut verbinden" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Trasa przeglądarki cmux łączy się z 127.0.0.1 na maszynie. Powiąż usługę z 127.0.0.1 lub 0.0.0.0, a następnie odśwież. Włączenie Cloud VPN nie zmienia tej trasy." + "value": "Volver a conectar como espectador" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "A rota de navegador do cmux se conecta a 127.0.0.1 na máquina. Vincule o serviço a 127.0.0.1 ou 0.0.0.0 e atualize. Ativar o Cloud VPN não altera essa rota." + "value": "Se reconnecter en lecture seule" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Браузерный маршрут cmux подключается к 127.0.0.1 на машине. Привяжите службу к 127.0.0.1 или 0.0.0.0, затем обновите. Включение Cloud VPN не меняет этот маршрут." + "value": "閲覧者として再接続" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "เส้นทางเบราว์เซอร์ของ cmux เชื่อมต่อกับ 127.0.0.1 บนเครื่อง ผูกบริการกับ 127.0.0.1 หรือ 0.0.0.0 แล้วรีเฟรช การเปิด Cloud VPN ไม่ได้เปลี่ยนเส้นทางนี้" + "value": "보기 전용으로 다시 연결" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux’un tarayıcı yolu makinedeki 127.0.0.1 adresine bağlanır. Hizmeti 127.0.0.1 veya 0.0.0.0 adresine bağlayın, ardından yenileyin. Cloud VPN’i açmak bu yolu değiştirmez." + "value": "以查看者身份重新连接" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Браузерний маршрут cmux підключається до 127.0.0.1 на машині. Прив’яжіть службу до 127.0.0.1 або 0.0.0.0, потім оновіть. Увімкнення Cloud VPN не змінює цей маршрут." + "value": "以檢視者身分重新連接" } } } }, - "cloudTree.ports.binding.title": { + "terminalSharing.detached.reattachAsViewer.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Services use another interface" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Dienste verwenden eine andere Schnittstelle" + "value": "Reattach without changing the terminal size" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Les services utilisent une autre interface" + "value": "إعادة الإرفاق دون تغيير حجم الطرفية" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تستخدم الخدمات واجهة أخرى" + "value": "Erneut verbinden, ohne die Terminalgröße zu ändern" } }, "es": { "stringUnit": { "state": "translated", - "value": "Los servicios usan otra interfaz" + "value": "Volver a conectar sin cambiar el tamaño de la terminal" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "服務使用其他介面" + "value": "Se reconnecter sans modifier la taille du terminal" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "服务使用其他接口" + "value": "ターミナルサイズを変えずに再接続" } }, "ko": { "stringUnit": { "state": "translated", - "value": "서비스가 다른 인터페이스를 사용함" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "サービスが別のインターフェイスを使用しています" + "value": "터미널 크기를 바꾸지 않고 다시 연결" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Servisi koriste drugi interfejs" + "value": "重新连接但不更改终端大小" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Tjenester bruger en anden grænseflade" + "value": "重新連接但不變更終端機大小" } - }, - "it": { + } + } + }, + "terminalSharing.detached.someone": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "I servizi usano un’altra interfaccia" + "value": "Someone" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "សេវាកម្មប្រើចំណុចប្រទាក់ផ្សេង" + "value": "شخص ما" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Tjenester bruker et annet grensesnitt" + "value": "Jemand" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Usługi używają innego interfejsu" + "value": "Alguien" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Os serviços usam outra interface" + "value": "Quelqu’un" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Службы используют другой интерфейс" + "value": "誰か" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "บริการใช้อินเทอร์เฟซอื่น" + "value": "누군가" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Hizmetler başka bir arabirim kullanıyor" + "value": "有人" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Служби використовують інший інтерфейс" + "value": "有人" } } } }, - "cloudTree.ports.empty.noService": { + "terminalSharing.detached.superseded": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Start a web server on this machine, then refresh." + "value": "Another window of this Mac replaced this one at %@." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "استبدلت نافذة أخرى على جهاز Mac هذا هذه النافذة في %@." } }, "de": { "stringUnit": { "state": "translated", - "value": "Starte einen Webserver auf diesem Rechner und aktualisiere dann die Liste." + "value": "Ein anderes Fenster dieses Macs hat dieses um %@ ersetzt." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Démarrez un serveur web sur cette machine, puis actualisez." + "value": "Otra ventana de este Mac reemplazó a esta a las %@." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "شغّل خادم ويب على هذا الجهاز، ثم حدّث القائمة." + "value": "Une autre fenêtre de ce Mac a remplacé celle-ci à %@." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Inicia un servidor web en esta máquina y luego actualiza." + "value": "このMacの別のウィンドウが %@ にこのウィンドウを置き換えました。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "在這台機器上啟動網頁伺服器,然後重新整理。" + "value": "이 Mac의 다른 창이 %@에 이 창을 대체했습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在此机器上启动网页服务器,然后刷新。" + "value": "这台 Mac 的另一个窗口已于 %@ 替换此窗口。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 머신에서 웹 서버를 시작한 다음 새로 고치세요." + "value": "這台 Mac 的另一個視窗已於 %@ 取代此視窗。" + } + } + } + }, + "terminalSharing.participant.personDevice": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このマシンで Web サーバーを起動してから、更新してください。" + "value": "%1$@ · %2$@" } - }, - "bs": { + } + } + }, + "terminalSharing.device.browser": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { - "state": "needs_review", - "value": "Pokrenite web server na ovoj mašini, zatim osvježite." + "state": "translated", + "value": "Browser" } }, - "da": { + "ar": { "stringUnit": { - "state": "needs_review", - "value": "Start en webserver på denne maskine, og opdater derefter." + "state": "translated", + "value": "المتصفح" } }, - "it": { + "de": { "stringUnit": { - "state": "needs_review", - "value": "Avvia un server web su questa macchina, poi aggiorna." + "state": "translated", + "value": "Browser" } }, - "km": { + "es": { "stringUnit": { - "state": "needs_review", - "value": "ចាប់ផ្តើមម៉ាស៊ីនមេបណ្តាញនៅលើម៉ាស៊ីននេះ រួចផ្ទុកឡើងវិញ។" + "state": "translated", + "value": "Navegador" } }, - "nb": { + "fr": { "stringUnit": { - "state": "needs_review", - "value": "Start en webserver på denne maskinen, og oppdater deretter." + "state": "translated", + "value": "Navigateur" } }, - "pl": { + "ja": { "stringUnit": { - "state": "needs_review", - "value": "Uruchom serwer WWW na tej maszynie, a następnie odśwież." + "state": "translated", + "value": "ブラウザ" } }, - "pt-BR": { + "ko": { "stringUnit": { - "state": "needs_review", - "value": "Inicie um servidor web nesta máquina e atualize." + "state": "translated", + "value": "브라우저" } }, - "ru": { + "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "Запустите веб-сервер на этой машине, затем обновите список." + "state": "translated", + "value": "浏览器" } }, - "th": { + "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "เริ่มเว็บเซิร์ฟเวอร์บนเครื่องนี้ แล้วรีเฟรช" + "state": "translated", + "value": "瀏覽器" } - }, - "tr": { + } + } + }, + "terminalSharing.device.ipad": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { - "state": "needs_review", - "value": "Bu makinede bir web sunucusu başlatın, ardından yenileyin." + "state": "translated", + "value": "iPad" } }, - "uk": { + "ja": { "stringUnit": { - "state": "needs_review", - "value": "Запустіть вебсервер на цій машині, а потім оновіть список." + "state": "translated", + "value": "iPad" } } } }, - "cloudTree.ports.hub.detail": { + "terminalSharing.device.iphone": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This build cannot start cmux’s authenticated Cloud forward. Update cmux, then retry." + "value": "iPhone" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Dieser Build kann die authentifizierte Cloud-Weiterleitung von cmux nicht starten. Aktualisieren Sie cmux und versuchen Sie es erneut." + "value": "iPhone" } - }, - "fr": { + } + } + }, + "terminalSharing.device.mac": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Cette version ne peut pas démarrer le transfert Cloud authentifié de cmux. Mettez cmux à jour, puis réessayez." + "value": "Mac" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "لا يمكن لهذا الإصدار بدء إعادة توجيه Cloud الموثّقة من cmux. حدّث cmux ثم أعد المحاولة." + "value": "Mac" + } + } + } + }, + "terminalSharing.device.tui": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Terminal client" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Esta compilación no puede iniciar el reenvío autenticado de Cloud de cmux. Actualiza cmux y vuelve a intentarlo." + "value": "عميل طرفية" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "此版本無法啟動 cmux 的已驗證 Cloud 轉送。請更新 cmux 後重試。" + "value": "Terminal-Client" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "此版本无法启动 cmux 的已验证 Cloud 转发。请更新 cmux 后重试。" + "value": "Cliente de terminal" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "이 빌드에서는 cmux 인증 Cloud 전달을 시작할 수 없습니다. cmux를 업데이트한 후 다시 시도하세요." + "value": "Client terminal" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このビルドでは cmux の認証済み Cloud 転送を開始できません。cmux を更新して再試行してください。" + "value": "ターミナルクライアント" } }, - "bs": { + "ko": { "stringUnit": { "state": "translated", - "value": "Ova verzija ne može pokrenuti autentificirano Cloud prosljeđivanje cmux-a. Ažurirajte cmux, zatim pokušajte ponovo." + "value": "터미널 클라이언트" } }, - "da": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Denne build kan ikke starte cmux’ godkendte Cloud-videresendelse. Opdater cmux, og prøv igen." + "value": "终端客户端" } }, - "it": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Questa build non può avviare l’inoltro Cloud autenticato di cmux. Aggiorna cmux, quindi riprova." + "value": "終端機用戶端" + } + } + } + }, + "terminalSharing.device.unknown": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Device" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "កំណែនេះមិនអាចចាប់ផ្តើមការបញ្ជូនបន្ត Cloud ដែលបានផ្ទៀងផ្ទាត់របស់ cmux បានទេ។ ធ្វើបច្ចុប្បន្នភាព cmux រួចព្យាយាមម្តងទៀត។" + "value": "جهاز" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Denne versjonen kan ikke starte cmux sin autentiserte Cloud-videresending. Oppdater cmux, og prøv igjen." + "value": "Gerät" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Ta kompilacja nie może uruchomić uwierzytelnionego przekierowania Cloud w cmux. Zaktualizuj cmux i spróbuj ponownie." + "value": "Dispositivo" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Esta versão não consegue iniciar o encaminhamento Cloud autenticado do cmux. Atualize o cmux e tente novamente." + "value": "Appareil" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Эта сборка не может запустить аутентифицированное перенаправление Cloud в cmux. Обновите cmux и повторите попытку." + "value": "デバイス" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "บิลด์นี้ไม่สามารถเริ่มการส่งต่อ Cloud ที่ยืนยันตัวตนแล้วของ cmux ได้ อัปเดต cmux แล้วลองอีกครั้ง" + "value": "기기" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Bu derleme cmux’un kimliği doğrulanmış Cloud yönlendirmesini başlatamıyor. cmux’u güncelleyin, ardından yeniden deneyin." + "value": "设备" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Ця збірка не може запустити автентифіковане перенаправлення Cloud у cmux. Оновіть cmux і повторіть спробу." + "value": "裝置" } } } }, - "cloudTree.ports.link.detail": { + "terminalSharing.owner.held": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Port discovery could not connect to this machine. Existing cmux ports may still work. Refresh to reconnect; Cloud VPN is not required." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Die Porterkennung konnte diese Maschine nicht erreichen. Bereits geöffnete cmux-Ports funktionieren möglicherweise weiter. Aktualisieren Sie zum erneuten Verbinden; Cloud-VPN ist nicht erforderlich." + "value": "Held size" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "La découverte des ports n’a pas pu se connecter à cette machine. Les ports cmux existants peuvent encore fonctionner. Actualisez pour reconnecter ; le VPN Cloud n’est pas nécessaire." + "value": "حجم محتفظ به" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تعذر اتصال اكتشاف المنافذ بهذا الجهاز. قد تظل منافذ cmux الحالية تعمل. حدّث لإعادة الاتصال؛ Cloud VPN غير مطلوب." + "value": "Beibehaltene Größe" } }, "es": { "stringUnit": { "state": "translated", - "value": "El descubrimiento de puertos no pudo conectar con esta máquina. Los puertos de cmux existentes pueden seguir funcionando. Actualiza para reconectar; Cloud VPN no es necesario." + "value": "Tamaño conservado" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "連接埠探索無法連線到此機器。現有 cmux 連接埠可能仍可使用。請重新整理以重新連線;不需要 Cloud VPN。" + "value": "Taille conservée" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "端口发现无法连接到此机器。现有 cmux 端口可能仍可使用。请刷新以重新连接;无需 Cloud VPN。" + "value": "保持されたサイズ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포트 검색이 이 머신에 연결하지 못했습니다. 기존 cmux 포트는 계속 작동할 수 있습니다. 새로 고쳐 다시 연결하세요. Cloud VPN은 필요하지 않습니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ポート検出がこのマシンに接続できませんでした。既存の cmux ポートは引き続き動作する可能性があります。更新して再接続してください。Cloud VPN は不要です。" + "value": "유지된 크기" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Otkrivanje portova nije se moglo povezati s ovom mašinom. Postojeći cmux portovi možda i dalje rade. Osvježite za ponovno povezivanje; Cloud VPN nije potreban." + "value": "保留的大小" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Portregistrering kunne ikke oprette forbindelse til denne maskine. Eksisterende cmux-porte virker muligvis stadig. Opdater for at genoprette forbindelsen; Cloud VPN er ikke påkrævet." + "value": "保留的大小" } - }, - "it": { + } + } + }, + "terminalSharing.owner.largest": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Il rilevamento delle porte non è riuscito a connettersi a questa macchina. Le porte cmux esistenti potrebbero funzionare ancora. Aggiorna per riconnetterti; la VPN Cloud non è necessaria." + "value": "Largest window" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ការស្វែងរកច្រកមិនអាចភ្ជាប់ទៅម៉ាស៊ីននេះបានទេ។ ច្រក cmux ដែលមានស្រាប់អាចនៅតែដំណើរការ។ ផ្ទុកឡើងវិញដើម្បីភ្ជាប់ម្តងទៀត; មិនត្រូវការ Cloud VPN ទេ។" + "value": "أكبر نافذة" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Portoppdagelse kunne ikke koble til denne maskinen. Eksisterende cmux-porter kan fortsatt fungere. Oppdater for å koble til på nytt; Cloud VPN er ikke nødvendig." + "value": "Größtes Fenster" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Wykrywanie portów nie mogło połączyć się z tą maszyną. Istniejące porty cmux mogą nadal działać. Odśwież, aby połączyć ponownie; Cloud VPN nie jest wymagany." + "value": "Ventana más grande" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "A descoberta de portas não conseguiu se conectar a esta máquina. As portas existentes do cmux ainda podem funcionar. Atualize para reconectar; o Cloud VPN não é necessário." + "value": "Plus grande fenêtre" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Обнаружению портов не удалось подключиться к этой машине. Существующие порты cmux могут по-прежнему работать. Обновите, чтобы переподключиться; Cloud VPN не требуется." + "value": "最大のウィンドウ" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "การค้นหาพอร์ตไม่สามารถเชื่อมต่อกับเครื่องนี้ได้ พอร์ต cmux ที่มีอยู่อาจยังใช้งานได้ รีเฟรชเพื่อเชื่อมต่อใหม่ ไม่จำเป็นต้องใช้ Cloud VPN" + "value": "가장 큰 창" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Port keşfi bu makineye bağlanamadı. Mevcut cmux portları hâlâ çalışıyor olabilir. Yeniden bağlanmak için yenileyin; Cloud VPN gerekmez." + "value": "最大的窗口" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Виявленню портів не вдалося підключитися до цієї машини. Наявні порти cmux можуть і далі працювати. Оновіть, щоб підключитися знову; Cloud VPN не потрібен." + "value": "最大的視窗" } } } }, - "cloudTree.ports.link.title": { + "terminalSharing.owner.shared": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud link unavailable" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Cloud-Verbindung nicht verfügbar" + "value": "Shared size" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Connexion Cloud indisponible" + "value": "حجم مشترك" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "اتصال Cloud غير متاح" + "value": "Gemeinsame Größe" } }, "es": { "stringUnit": { "state": "translated", - "value": "Conexión de Cloud no disponible" + "value": "Tamaño compartido" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud 連線無法使用" + "value": "Taille partagée" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "Cloud 连接不可用" + "value": "共有サイズ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Cloud 연결을 사용할 수 없음" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Cloud 接続を利用できません" + "value": "공유 크기" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud veza nije dostupna" + "value": "共享大小" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud-forbindelse utilgængelig" + "value": "共用大小" } - }, - "it": { + } + } + }, + "terminalSharing.owner.smallest": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Collegamento Cloud non disponibile" + "value": "Fits everyone" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "តំណ Cloud មិនអាចប្រើបាន" + "value": "يناسب الجميع" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Cloud-tilkobling utilgjengelig" + "value": "Passt für alle" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Połączenie Cloud niedostępne" + "value": "Se ajusta a todos" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Conexão Cloud indisponível" + "value": "Convient à tous" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Связь с Cloud недоступна" + "value": "全員に合わせる" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ลิงก์ Cloud ไม่พร้อมใช้งาน" + "value": "모두에게 맞춤" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud bağlantısı kullanılamıyor" + "value": "适合所有人" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Зв’язок із Cloud недоступний" + "value": "符合所有人" } } } }, - "cloudTree.ports.loading.detail": { + "terminalSharing.participant.thisMac": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Checking services through cmux’s authenticated Cloud link. No system VPN is needed." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Dienste werden über die authentifizierte Cloud-Verbindung von cmux geprüft. Ein System-VPN ist nicht erforderlich." + "value": "This Mac" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Vérification des services via la connexion Cloud authentifiée de cmux. Aucun VPN système n’est nécessaire." + "value": "جهاز Mac هذا" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جارٍ فحص الخدمات عبر اتصال Cloud الموثّق من cmux. لا حاجة إلى VPN النظام." + "value": "Dieser Mac" } }, "es": { "stringUnit": { "state": "translated", - "value": "Comprobando servicios mediante la conexión autenticada de Cloud de cmux. No se necesita una VPN del sistema." + "value": "Este Mac" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "正在透過 cmux 的已驗證 Cloud 連線檢查服務。不需要系統 VPN。" + "value": "Ce Mac" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "正在通过 cmux 的已验证 Cloud 连接检查服务。无需系统 VPN。" + "value": "このMac" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux의 인증된 Cloud 연결로 서비스를 확인하고 있습니다. 시스템 VPN은 필요하지 않습니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux の認証済み Cloud 接続でサービスを確認しています。システム VPN は不要です。" + "value": "이 Mac" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Provjera servisa putem autentificirane Cloud veze cmux-a. Sistemski VPN nije potreban." + "value": "这台 Mac" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Kontrollerer tjenester via cmux’ godkendte Cloud-forbindelse. Der kræves ingen system-VPN." + "value": "這台 Mac" } - }, - "it": { + } + } + }, + "terminalSharing.owner.possessiveDevice": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Controllo dei servizi tramite il collegamento Cloud autenticato di cmux. Non serve una VPN di sistema." + "value": "%1$@'s %2$@" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "កំពុងពិនិត្យសេវាកម្មតាមរយៈតំណ Cloud ដែលបានផ្ទៀងផ្ទាត់របស់ cmux។ មិនត្រូវការ VPN របស់ប្រព័ន្ធទេ។" + "value": "%1$@ · %2$@" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Sjekker tjenester via cmux sin autentiserte Cloud-tilkobling. Ingen system-VPN er nødvendig." + "value": "%1$@ · %2$@" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Sprawdzanie usług przez uwierzytelnione połączenie Cloud w cmux. Systemowa sieć VPN nie jest potrzebna." + "value": "%1$@ · %2$@" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Verificando serviços pela conexão Cloud autenticada do cmux. Nenhuma VPN do sistema é necessária." + "value": "%1$@ · %2$@" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Проверка служб через аутентифицированную связь cmux с Cloud. Системный VPN не нужен." + "value": "%1$@の%2$@" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "กำลังตรวจสอบบริการผ่านลิงก์ Cloud ที่ยืนยันตัวตนแล้วของ cmux ไม่ต้องใช้ VPN ของระบบ" + "value": "%1$@의 %2$@" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Hizmetler cmux’un kimliği doğrulanmış Cloud bağlantısı üzerinden denetleniyor. Sistem VPN’i gerekmez." + "value": "%1$@的%2$@" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Перевірка служб через автентифікований зв’язок cmux із Cloud. Системний VPN не потрібен." + "value": "%1$@的%2$@" } } } }, - "cloudTree.ports.loopback.detail": { + "terminalSharing.owner.fixedShort": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "These services open in cmux without Cloud VPN. They listen on the machine’s loopback address, so other apps cannot reach them through its private IP, even with VPN connected." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Diese Dienste lassen sich in cmux ohne Cloud-VPN öffnen. Sie lauschen auf der Loopback-Adresse der Maschine. Andere Apps erreichen sie daher auch mit VPN nicht über deren private IP." + "value": "Fixed" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Ces services s’ouvrent dans cmux sans VPN Cloud. Ils écoutent sur l’adresse locale de la machine : les autres apps ne peuvent pas y accéder via son IP privée, même avec le VPN." + "value": "ثابت" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تُفتح هذه الخدمات داخل cmux دون Cloud VPN. وهي تستمع على عنوان الواجهة المحلية للجهاز، لذا لا تستطيع التطبيقات الأخرى الوصول إليها عبر عنوان IP الخاص به حتى مع اتصال VPN." + "value": "Fest" } }, "es": { "stringUnit": { "state": "translated", - "value": "Estos servicios se abren en cmux sin Cloud VPN. Escuchan en la dirección de bucle local de la máquina, por lo que otras apps no pueden acceder por su IP privada, incluso con la VPN conectada." + "value": "Fijo" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "這些服務可在 cmux 中開啟,不需要 Cloud VPN。它們在機器的迴路位址上監聽,因此即使已連線 VPN,其他 App 也無法透過其私人 IP 存取。" + "value": "Fixe" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "这些服务可在 cmux 中打开,无需 Cloud VPN。它们监听机器的回环地址,因此即使已连接 VPN,其他应用也无法通过其专用 IP 访问。" + "value": "固定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 서비스는 Cloud VPN 없이 cmux에서 열립니다. 머신의 루프백 주소에서 수신 대기하므로 VPN에 연결해도 다른 앱은 비공개 IP로 접근할 수 없습니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "これらのサービスは Cloud VPN なしで cmux から開けます。マシンのループバックアドレスで待ち受けるため、VPN 接続中でも他のアプリからプライベート IP 経由ではアクセスできません。" + "value": "고정" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ovi servisi se otvaraju u cmux-u bez Cloud VPN-a. Slušaju na loopback adresi mašine, pa ih druge aplikacije ne mogu dosegnuti preko njene privatne IP adrese, čak ni uz povezan VPN." + "value": "固定" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Disse tjenester åbnes i cmux uden Cloud VPN. De lytter på maskinens loopback-adresse, så andre apps kan ikke nå dem via dens private IP, heller ikke med VPN forbundet." + "value": "固定" } - }, - "it": { + } + } + }, + "terminalSharing.tab.tooltip": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Questi servizi si aprono in cmux senza VPN Cloud. Sono in ascolto sull’indirizzo di loopback della macchina, quindi le altre app non possono raggiungerli tramite il suo IP privato, nemmeno con la VPN connessa." + "value": "Size set by %1$@ · %2$@" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "សេវាកម្មទាំងនេះបើកនៅក្នុង cmux ដោយមិនត្រូវការ Cloud VPN។ ពួកវាស្តាប់នៅលើអាសយដ្ឋាន loopback របស់ម៉ាស៊ីន ដូច្នេះកម្មវិធីផ្សេងទៀតមិនអាចចូលដល់ពួកវាតាមរយៈ IP ឯកជនរបស់វាបានទេ ទោះបីភ្ជាប់ VPN ក៏ដោយ។" + "value": "الحجم يحدده %1$@ · %2$@" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Disse tjenestene åpnes i cmux uten Cloud VPN. De lytter på maskinens loopback-adresse, så andre apper kan ikke nå dem via den private IP-adressen, selv med VPN tilkoblet." + "value": "Größe festgelegt von %1$@ · %2$@" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Te usługi otwierają się w cmux bez Cloud VPN. Nasłuchują na adresie pętli zwrotnej maszyny, więc inne aplikacje nie mogą do nich dotrzeć przez jej prywatny adres IP, nawet przy połączonym VPN." + "value": "Tamaño definido por %1$@ · %2$@" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Esses serviços abrem no cmux sem o Cloud VPN. Eles escutam no endereço de loopback da máquina, então outros apps não conseguem alcançá-los pelo IP privado dela, mesmo com a VPN conectada." + "value": "Taille définie par %1$@ · %2$@" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Эти службы открываются в cmux без Cloud VPN. Они прослушивают loopback-адрес машины, поэтому другие приложения не могут обратиться к ним через её частный IP даже при подключённом VPN." + "value": "%1$@がサイズを設定 · %2$@" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "บริการเหล่านี้เปิดใน cmux ได้โดยไม่ต้องใช้ Cloud VPN บริการรับฟังบนที่อยู่ loopback ของเครื่อง แอปอื่นจึงเข้าถึงผ่าน IP ส่วนตัวของเครื่องไม่ได้ แม้จะเชื่อมต่อ VPN แล้วก็ตาม" + "value": "크기 설정: %1$@ · %2$@" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Bu hizmetler cmux’ta Cloud VPN olmadan açılır. Makinenin geri döngü adresinde dinledikleri için diğer uygulamalar, VPN bağlıyken bile makinenin özel IP’si üzerinden onlara ulaşamaz." + "value": "尺寸由%1$@设定 · %2$@" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Ці служби відкриваються в cmux без Cloud VPN. Вони прослуховують loopback-адресу машини, тому інші застосунки не можуть дістатися до них через її приватну IP-адресу, навіть із підключеним VPN." + "value": "尺寸由%1$@設定 · %2$@" } } } }, - "cloudTree.ports.loopback.title": { + "terminalSharing.panel.sizeLabel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Loopback services available" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Loopback-Dienste verfügbar" + "value": "Size" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Services locaux disponibles" + "value": "الحجم" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "خدمات الواجهة المحلية متاحة" + "value": "Größe" } }, "es": { "stringUnit": { "state": "translated", - "value": "Servicios de bucle local disponibles" + "value": "Tamaño" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "可使用迴路服務" + "value": "Taille" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "回环服务可用" + "value": "サイズ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "루프백 서비스 사용 가능" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ループバックのサービスを利用できます" + "value": "크기" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Dostupni loopback servisi" + "value": "尺寸" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Loopback-tjenester tilgængelige" + "value": "尺寸" } - }, - "it": { + } + } + }, + "terminalSharing.sizeMode.latest": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Servizi di loopback disponibili" + "value": "Follow Latest" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "មានសេវាកម្ម loopback" + "value": "اتباع الأحدث" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Loopback-tjenester tilgjengelige" + "value": "Letzter Eingabe folgen" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Dostępne usługi pętli zwrotnej" + "value": "Seguir la última entrada" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Serviços de loopback disponíveis" + "value": "Suivre la dernière saisie" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Доступны loopback-службы" + "value": "最新の入力に合わせる" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "มีบริการ loopback พร้อมใช้งาน" + "value": "최근 입력 따르기" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Geri döngü hizmetleri kullanılabilir" + "value": "跟随最新输入" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Доступні loopback-служби" + "value": "跟隨最新輸入" } } } }, - "cloudTree.ports.notRequested.title": { + "terminalSharing.sizeMode.smallest": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ports not checked yet" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Ports noch nicht geprüft" + "value": "Fit Everyone" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Ports pas encore vérifiés" + "value": "ملاءمة الجميع" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "لم يتم فحص المنافذ بعد" + "value": "Allen anpassen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Puertos aún sin comprobar" + "value": "Ajustar a todos" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "尚未檢查連接埠" + "value": "Adapter à tous" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "尚未检查端口" + "value": "全員に合わせる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "아직 포트를 확인하지 않음" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ポートは未確認です" + "value": "모두에게 맞추기" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Portovi još nisu provjereni" + "value": "适合所有人" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Porte er ikke kontrolleret endnu" + "value": "適合所有人" } - }, - "it": { + } + } + }, + "terminalSharing.sizeMode.largest": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Porte non ancora controllate" + "value": "Largest Window" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "មិនទាន់បានពិនិត្យច្រកនៅឡើយ" + "value": "أكبر نافذة" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Porter er ikke sjekket ennå" + "value": "Größtes Fenster" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Porty nie zostały jeszcze sprawdzone" + "value": "Ventana más grande" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Portas ainda não verificadas" + "value": "Plus grande fenêtre" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Порты ещё не проверены" + "value": "最大のウインドウ" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ยังไม่ได้ตรวจสอบพอร์ต" + "value": "가장 큰 윈도우" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Portlar henüz denetlenmedi" + "value": "最大窗口" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Порти ще не перевірено" + "value": "最大視窗" } } } }, - "cloudTree.ports.privateAddress": { + "terminalSharing.sizeMode.priority": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Private address unavailable" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Private Adresse nicht verfügbar" + "value": "Priority" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Adresse privée indisponible" + "value": "الأولوية" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "العنوان الخاص غير متاح" + "value": "Priorität" } }, "es": { "stringUnit": { "state": "translated", - "value": "Dirección privada no disponible" + "value": "Prioridad" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "私人位址無法使用" + "value": "Priorité" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "专用地址不可用" + "value": "優先順位" } }, "ko": { "stringUnit": { "state": "translated", - "value": "비공개 주소를 사용할 수 없음" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "プライベートアドレスを利用できません" + "value": "우선순위" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Privatna adresa nije dostupna" + "value": "优先级" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Privat adresse utilgængelig" + "value": "優先順序" } - }, - "it": { + } + } + }, + "terminalSharing.sizeMode.fixed": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Indirizzo privato non disponibile" + "value": "Fixed" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "អាសយដ្ឋានឯកជនមិនអាចប្រើបាន" + "value": "ثابت" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Privat adresse utilgjengelig" + "value": "Fest" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Adres prywatny niedostępny" + "value": "Fijo" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Endereço privado indisponível" + "value": "Fixe" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Частный адрес недоступен" + "value": "固定" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ไม่มีที่อยู่ส่วนตัว" + "value": "고정" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Özel adres kullanılamıyor" + "value": "固定" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Приватна адреса недоступна" + "value": "固定" } } } }, - "cloudTree.ports.privateAddress.detail": { + "terminalSharing.panel.setsSize": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux’s authenticated route needs this machine’s private address. Refresh to retrieve it. Turning on Cloud VPN does not assign a missing address." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Die authentifizierte Route von cmux benötigt die private Adresse dieser Maschine. Aktualisieren Sie, um sie abzurufen. Cloud-VPN weist keine fehlende Adresse zu." + "value": "sets size" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "La route authentifiée de cmux nécessite l’adresse privée de cette machine. Actualisez pour la récupérer. Activer le VPN Cloud n’attribue pas d’adresse manquante." + "value": "يحدد الحجم" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يحتاج مسار cmux الموثّق إلى العنوان الخاص لهذا الجهاز. حدّث لاسترجاعه. تشغيل Cloud VPN لا يعيّن عنوانًا مفقودًا." + "value": "legt Größe fest" } }, "es": { "stringUnit": { "state": "translated", - "value": "La ruta autenticada de cmux necesita la dirección privada de esta máquina. Actualiza para obtenerla. Activar Cloud VPN no asigna una dirección que falta." + "value": "define el tamaño" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux 的已驗證路徑需要此機器的私人位址。請重新整理以取得位址。開啟 Cloud VPN 不會指派缺少的位址。" + "value": "définit la taille" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux 的已验证路由需要此机器的专用地址。请刷新以获取地址。开启 Cloud VPN 不会分配缺失的地址。" + "value": "サイズを設定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux의 인증된 경로에는 이 머신의 비공개 주소가 필요합니다. 새로 고쳐 주소를 가져오세요. Cloud VPN을 켜도 누락된 주소가 할당되지는 않습니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux の認証済み経路にはこのマシンのプライベートアドレスが必要です。更新して取得してください。Cloud VPN を有効にしても不足しているアドレスは割り当てられません。" + "value": "크기 설정" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Autentificirana ruta cmux-a treba privatnu adresu ove mašine. Osvježite da je preuzmete. Uključivanje Cloud VPN-a ne dodjeljuje adresu koja nedostaje." + "value": "设定尺寸" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux’ godkendte rute kræver denne maskines private adresse. Opdater for at hente den. Aktivering af Cloud VPN tildeler ikke en manglende adresse." + "value": "設定尺寸" } - }, - "it": { + } + } + }, + "terminalSharing.panel.notCounted": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Il percorso autenticato di cmux richiede l’indirizzo privato di questa macchina. Aggiorna per recuperarlo. L’attivazione della VPN Cloud non assegna un indirizzo mancante." + "value": "not counted" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ផ្លូវដែលបានផ្ទៀងផ្ទាត់របស់ cmux ត្រូវការអាសយដ្ឋានឯកជនរបស់ម៉ាស៊ីននេះ។ ផ្ទុកឡើងវិញដើម្បីទាញយកវា។ ការបើក Cloud VPN មិនផ្តល់អាសយដ្ឋានដែលបាត់ទេ។" + "value": "غير محتسب" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux sin autentiserte rute trenger denne maskinens private adresse. Oppdater for å hente den. Å slå på Cloud VPN tildeler ikke en manglende adresse." + "value": "nicht gezählt" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Uwierzytelniona trasa cmux wymaga prywatnego adresu tej maszyny. Odśwież, aby go pobrać. Włączenie Cloud VPN nie przypisuje brakującego adresu." + "value": "no cuenta" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "A rota autenticada do cmux precisa do endereço privado desta máquina. Atualize para obtê-lo. Ativar o Cloud VPN não atribui um endereço ausente." + "value": "non compté" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Аутентифицированному маршруту cmux нужен частный адрес этой машины. Обновите, чтобы получить его. Включение Cloud VPN не назначает отсутствующий адрес." + "value": "カウント対象外" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "เส้นทางที่ยืนยันตัวตนแล้วของ cmux ต้องใช้ที่อยู่ส่วนตัวของเครื่องนี้ รีเฟรชเพื่อดึงข้อมูล การเปิด Cloud VPN ไม่ได้กำหนดที่อยู่ที่ขาดหายไป" + "value": "계산 안 됨" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux’un kimliği doğrulanmış yolu bu makinenin özel adresine ihtiyaç duyar. Adresi almak için yenileyin. Cloud VPN’i açmak eksik bir adres atamaz." + "value": "不计入" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Автентифікованому маршруту cmux потрібна приватна адреса цієї машини. Оновіть, щоб отримати її. Увімкнення Cloud VPN не призначає відсутню адресу." + "value": "不計入" } } } }, - "cloudTree.ports.routeNote": { + "terminalSharing.panel.rowOptions": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux forwards ports without Cloud VPN. Web browsers and other Mac apps need Cloud VPN to reach services bound to the machine’s private address." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "cmux leitet Ports ohne Cloud-VPN weiter. Webbrowser und andere Mac-Apps benötigen Cloud-VPN, um Dienste an der privaten Adresse der Maschine zu erreichen." + "value": "Options for %@" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux transfère les ports sans VPN Cloud. Les navigateurs web et les autres apps Mac ont besoin du VPN Cloud pour atteindre les services liés à l’adresse privée de la machine." + "value": "خيارات %@" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يعيد cmux توجيه المنافذ دون Cloud VPN. تحتاج متصفحات الويب وتطبيقات Mac الأخرى إلى Cloud VPN للوصول إلى الخدمات المرتبطة بالعنوان الخاص للجهاز." + "value": "Optionen für %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "cmux reenvía puertos sin Cloud VPN. Los navegadores web y otras apps de Mac necesitan Cloud VPN para acceder a servicios enlazados a la dirección privada de la máquina." + "value": "Opciones de %@" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux 可轉送連接埠,不需要 Cloud VPN。網頁瀏覽器和其他 Mac App 需要 Cloud VPN,才能存取繫結至機器私人位址的服務。" + "value": "Options pour %@" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux 可转发端口,无需 Cloud VPN。网页浏览器和其他 Mac 应用需要 Cloud VPN,才能访问绑定到机器专用地址的服务。" + "value": "%@のオプション" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux는 Cloud VPN 없이 포트를 전달합니다. 웹 브라우저 및 다른 Mac 앱이 머신의 비공개 주소에 바인딩된 서비스에 접근하려면 Cloud VPN이 필요합니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux は Cloud VPN なしでポートを転送します。Web ブラウザやその他の Mac アプリからマシンのプライベートアドレスにバインドされたサービスにアクセスするには Cloud VPN が必要です。" + "value": "%@ 옵션" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux prosljeđuje portove bez Cloud VPN-a. Web preglednicima i drugim Mac aplikacijama potreban je Cloud VPN za pristup servisima vezanim za privatnu adresu mašine." + "value": "%@的选项" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux videresender porte uden Cloud VPN. Webbrowsere og andre Mac-apps skal bruge Cloud VPN for at nå tjenester, der er bundet til maskinens private adresse." + "value": "%@的選項" } - }, - "it": { + } + } + }, + "terminalSharing.panel.disconnectOthersButton": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "cmux inoltra le porte senza VPN Cloud. I browser web e le altre app per Mac hanno bisogno della VPN Cloud per raggiungere i servizi associati all’indirizzo privato della macchina." + "value": "Disconnect Others" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux បញ្ជូនបន្តច្រកដោយមិនត្រូវការ Cloud VPN។ កម្មវិធីរុករកបណ្តាញ និងកម្មវិធី Mac ផ្សេងទៀតត្រូវការ Cloud VPN ដើម្បីចូលដល់សេវាកម្មដែលចងទៅអាសយដ្ឋានឯកជនរបស់ម៉ាស៊ីន។" + "value": "قطع اتصال الآخرين" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux videresender porter uten Cloud VPN. Nettlesere og andre Mac-apper trenger Cloud VPN for å nå tjenester som er bundet til maskinens private adresse." + "value": "Andere trennen" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux przekierowuje porty bez Cloud VPN. Przeglądarki internetowe i inne aplikacje na Maca potrzebują Cloud VPN, aby dotrzeć do usług powiązanych z prywatnym adresem maszyny." + "value": "Desconectar a los demás" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "O cmux encaminha portas sem o Cloud VPN. Navegadores e outros apps do Mac precisam do Cloud VPN para acessar serviços vinculados ao endereço privado da máquina." + "value": "Déconnecter les autres" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux перенаправляет порты без Cloud VPN. Веб-браузерам и другим приложениям Mac нужен Cloud VPN, чтобы обращаться к службам, привязанным к частному адресу машины." + "value": "他の接続を切断" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux ส่งต่อพอร์ตได้โดยไม่ต้องใช้ Cloud VPN เว็บเบราว์เซอร์และแอป Mac อื่นๆ ต้องใช้ Cloud VPN เพื่อเข้าถึงบริการที่ผูกกับที่อยู่ส่วนตัวของเครื่อง" + "value": "다른 연결 끊기" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux, portları Cloud VPN olmadan yönlendirir. Web tarayıcıları ve diğer Mac uygulamaları, makinenin özel adresine bağlı hizmetlere ulaşmak için Cloud VPN’e ihtiyaç duyar." + "value": "断开其他连接" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux перенаправляє порти без Cloud VPN. Веббраузерам та іншим застосункам Mac потрібен Cloud VPN, щоб звертатися до служб, прив’язаних до приватної адреси машини." + "value": "中斷其他連線" } } } }, - "cloudTree.ports.setupVPN": { + "terminalSharing.detached.titleShort": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Set Up VPN…" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "VPN einrichten…" + "value": "Detached" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Configurer le VPN…" + "value": "تم الفصل" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إعداد VPN…" + "value": "Getrennt" } }, "es": { "stringUnit": { "state": "translated", - "value": "Configurar VPN…" + "value": "Desconectado" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "設定 VPN…" + "value": "Détaché" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "设置 VPN…" + "value": "切断されました" } }, "ko": { "stringUnit": { "state": "translated", - "value": "VPN 설정…" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "VPN を設定…" + "value": "분리됨" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Postavi VPN…" + "value": "已分离" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Konfigurer VPN…" + "value": "已分離" } - }, - "it": { + } + } + }, + "terminalSharing.detached.byMessageShort": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Configura VPN…" + "value": "%1$@ disconnected this Mac at %2$@." } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "រៀបចំ VPN…" + "value": "قطع %1$@ اتصال هذا الـMac في %2$@." } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Konfigurer VPN…" + "value": "%1$@ hat diesen Mac um %2$@ getrennt." } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Skonfiguruj VPN…" + "value": "%1$@ desconectó este Mac a las %2$@." } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Configurar VPN…" + "value": "%1$@ a déconnecté ce Mac à %2$@." } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Настроить VPN…" + "value": "%1$@が%2$@にこのMacを切断しました。" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ตั้งค่า VPN…" + "value": "%1$@이(가) %2$@에 이 Mac의 연결을 끊었습니다." } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "VPN’i Kur…" + "value": "%1$@于%2$@断开了这台Mac的连接。" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Налаштувати VPN…" + "value": "%1$@於%2$@中斷了這台Mac的連線。" } } } }, - "cloudTree.ports.stale": { + "terminalSharing.chip.hiddenColumns": { "extractionState": "manual", "localizations": { "en": { - "stringUnit": { - "state": "translated", - "value": "Port list may be out of date" + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld col hidden" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld cols hidden" + } + } + } + } + }, + "ar": { + "variations": { + "plural": { + "zero": { + "stringUnit": { + "state": "translated", + "value": "لا أعمدة مخفية (%ld)" + } + }, + "one": { + "stringUnit": { + "state": "translated", + "value": "عمود واحد مخفي (%ld)" + } + }, + "two": { + "stringUnit": { + "state": "translated", + "value": "عمودان مخفيان (%ld)" + } + }, + "few": { + "stringUnit": { + "state": "translated", + "value": "%ld أعمدة مخفية" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%ld عمودًا مخفيًا" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld عمود مخفي" + } + } + } } }, "de": { - "stringUnit": { - "state": "translated", - "value": "Portliste möglicherweise veraltet" + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld Spalte ausgeblendet" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld Spalten ausgeblendet" + } + } + } + } + }, + "es": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld columna oculta" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%ld de columnas ocultas" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld columnas ocultas" + } + } + } } }, "fr": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld colonne masquée" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%ld de colonnes masquées" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld colonnes masquées" + } + } + } + } + }, + "ja": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld列が非表示" + } + } + } + } + }, + "ko": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld열 숨겨짐" + } + } + } + } + }, + "zh-Hans": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "隐藏 %ld 列" + } + } + } + } + }, + "zh-Hant": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "隱藏 %ld 欄" + } + } + } + } + } + } + }, + "terminalSharing.panel.cancel": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "La liste des ports peut être obsolète" + "value": "Cancel" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قد تكون قائمة المنافذ قديمة" + "value": "إلغاء" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "La lista de puertos puede estar desactualizada" + "value": "Abbrechen" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "連接埠清單可能已過時" + "value": "Cancelar" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "端口列表可能已过期" + "value": "Annuler" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "포트 목록이 오래되었을 수 있음" + "value": "キャンセル" } }, - "ja": { + "ko": { "stringUnit": { "state": "translated", - "value": "ポートリストが古い可能性があります" + "value": "취소" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Lista portova je možda zastarjela" + "value": "取消" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Portlisten er muligvis forældet" + "value": "取消" } - }, - "it": { + } + } + }, + "terminalSharing.panel.disconnectOthers.confirm": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "L’elenco delle porte potrebbe non essere aggiornato" + "value": "Disconnect all other clients?" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "បញ្ជីច្រកអាចហួសសម័យ" + "value": "هل تريد قطع اتصال جميع العملاء الآخرين؟" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Portlisten kan være utdatert" + "value": "Alle anderen Clients trennen?" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Lista portów może być nieaktualna" + "value": "¿Desconectar todos los demás clientes?" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "A lista de portas pode estar desatualizada" + "value": "Déconnecter tous les autres clients ?" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Список портов может быть устаревшим" + "value": "他のすべてのクライアントを切断しますか?" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "รายการพอร์ตอาจไม่เป็นปัจจุบัน" + "value": "다른 모든 클라이언트의 연결을 끊을까요?" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Port listesi güncel olmayabilir" + "value": "要断开其他所有客户端吗?" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Список портів може бути застарілим" + "value": "要中斷其他所有用戶端的連線嗎?" } } } }, - "cloudTree.ports.stale.detail": { + "terminalSharing.panel.disconnectOthers.confirmButton": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The last scan could not be refreshed. Listed services may have changed; refresh to check again. cmux forwarding does not need Cloud VPN." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Der letzte Scan konnte nicht aktualisiert werden. Die aufgeführten Dienste könnten sich geändert haben. Aktualisieren Sie erneut. Die cmux-Weiterleitung benötigt kein Cloud-VPN." + "value": "Disconnect" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "La dernière analyse n’a pas pu être actualisée. Les services listés peuvent avoir changé ; actualisez pour vérifier. Le transfert cmux ne nécessite pas de VPN Cloud." + "value": "قطع الاتصال" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تعذر تحديث آخر فحص. ربما تغيرت الخدمات المدرجة؛ حدّث للفحص مجددًا. لا تحتاج إعادة توجيه cmux إلى Cloud VPN." + "value": "Trennen" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudo actualizar el último escaneo. Los servicios listados pueden haber cambiado; actualiza para comprobarlos. El reenvío de cmux no necesita Cloud VPN." + "value": "Desconectar" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "無法重新整理上次掃描結果。列出的服務可能已變更;請重新整理以再次檢查。cmux 轉送不需要 Cloud VPN。" + "value": "Déconnecter" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "无法刷新上次扫描结果。列出的服务可能已更改;请刷新以再次检查。cmux 转发无需 Cloud VPN。" + "value": "切断" } }, "ko": { "stringUnit": { "state": "translated", - "value": "마지막 검색 결과를 새로 고치지 못했습니다. 나열된 서비스가 변경되었을 수 있으니 새로 고쳐 확인하세요. cmux 전달에는 Cloud VPN이 필요하지 않습니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "前回のスキャンを更新できませんでした。表示されたサービスが変わっている可能性があります。更新して再確認してください。cmux の転送に Cloud VPN は不要です。" + "value": "연결 끊기" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Posljednje skeniranje nije se moglo osvježiti. Navedeni servisi su se možda promijenili; osvježite da ponovo provjerite. Prosljeđivanje u cmux-u ne treba Cloud VPN." + "value": "断开连接" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Den seneste scanning kunne ikke opdateres. De viste tjenester kan have ændret sig; opdater for at kontrollere igen. Videresendelse i cmux kræver ikke Cloud VPN." + "value": "中斷連線" } - }, - "it": { + } + } + }, + "terminalSharing.panel.fixedColumns": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Non è stato possibile aggiornare l’ultima scansione. I servizi elencati potrebbero essere cambiati; aggiorna per controllare di nuovo. L’inoltro di cmux non richiede la VPN Cloud." + "value": "Columns" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "មិនអាចផ្ទុកការស្កេនចុងក្រោយឡើងវិញបានទេ។ សេវាកម្មដែលបានរាយអាចបានផ្លាស់ប្តូរ; ផ្ទុកឡើងវិញដើម្បីពិនិត្យម្តងទៀត។ ការបញ្ជូនបន្តរបស់ cmux មិនត្រូវការ Cloud VPN ទេ។" + "value": "الأعمدة" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Den siste skanningen kunne ikke oppdateres. De oppførte tjenestene kan ha endret seg; oppdater for å sjekke på nytt. Videresending i cmux trenger ikke Cloud VPN." + "value": "Spalten" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Nie udało się odświeżyć ostatniego skanowania. Wymienione usługi mogły się zmienić; odśwież, aby sprawdzić ponownie. Przekierowywanie w cmux nie wymaga Cloud VPN." + "value": "Columnas" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Não foi possível atualizar a última verificação. Os serviços listados podem ter mudado; atualize para verificar de novo. O encaminhamento do cmux não precisa do Cloud VPN." + "value": "Colonnes" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Не удалось обновить последнее сканирование. Перечисленные службы могли измениться; обновите, чтобы проверить снова. Перенаправлению cmux Cloud VPN не нужен." + "value": "列" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ไม่สามารถรีเฟรชการสแกนครั้งล่าสุดได้ บริการที่แสดงอาจเปลี่ยนไปแล้ว รีเฟรชเพื่อตรวจสอบอีกครั้ง การส่งต่อของ cmux ไม่ต้องใช้ Cloud VPN" + "value": "열" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Son tarama yenilenemedi. Listelenen hizmetler değişmiş olabilir; yeniden denetlemek için yenileyin. cmux yönlendirmesi Cloud VPN gerektirmez." + "value": "列数" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Не вдалося оновити останнє сканування. Перелічені служби могли змінитися; оновіть, щоб перевірити знову. Перенаправлення cmux не потребує Cloud VPN." + "value": "欄數" } } } }, - "cloudTree.ports.unavailable.detail": { + "terminalSharing.panel.fixedRows": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The port scan failed; this does not mean no service is listening. Existing cmux ports may still work. Refresh to retry; Cloud VPN is not required." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Der Portscan ist fehlgeschlagen; das bedeutet nicht, dass kein Dienst lauscht. Vorhandene cmux-Ports funktionieren möglicherweise weiter. Aktualisieren Sie; Cloud-VPN ist nicht erforderlich." + "value": "Rows" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "L’analyse des ports a échoué ; cela ne signifie pas qu’aucun service n’écoute. Les ports cmux existants peuvent encore fonctionner. Actualisez pour réessayer ; le VPN Cloud n’est pas nécessaire." + "value": "الصفوف" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "فشل فحص المنافذ؛ هذا لا يعني عدم وجود خدمة تستمع. قد تظل منافذ cmux الحالية تعمل. حدّث للمحاولة مجددًا؛ Cloud VPN غير مطلوب." + "value": "Zeilen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Falló el escaneo de puertos; no significa que no haya servicios en escucha. Los puertos de cmux existentes pueden seguir funcionando. Actualiza para reintentar; Cloud VPN no es necesario." + "value": "Filas" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "連接埠掃描失敗;這不代表沒有服務正在監聽。現有 cmux 連接埠可能仍可使用。請重新整理以重試;不需要 Cloud VPN。" + "value": "Lignes" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "端口扫描失败;这并不代表没有服务正在监听。现有 cmux 端口可能仍可使用。请刷新以重试;无需 Cloud VPN。" + "value": "行" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포트 검색이 실패했지만 수신 대기 서비스가 없다는 뜻은 아닙니다. 기존 cmux 포트는 계속 작동할 수 있습니다. 새로 고쳐 다시 시도하세요. Cloud VPN은 필요하지 않습니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ポートスキャンが失敗しましたが、サービスが待ち受けていないとは限りません。既存の cmux ポートは引き続き動作する可能性があります。更新して再試行してください。Cloud VPN は不要です。" + "value": "행" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Skeniranje portova nije uspjelo; to ne znači da nijedan servis ne sluša. Postojeći cmux portovi možda i dalje rade. Osvježite za ponovni pokušaj; Cloud VPN nije potreban." + "value": "行数" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Portscanningen mislykkedes; det betyder ikke, at ingen tjeneste lytter. Eksisterende cmux-porte virker muligvis stadig. Opdater for at prøve igen; Cloud VPN er ikke påkrævet." + "value": "列數" } - }, - "it": { + } + } + }, + "terminalSharing.panel.unavailable": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "La scansione delle porte non è riuscita; ciò non significa che nessun servizio sia in ascolto. Le porte cmux esistenti potrebbero funzionare ancora. Aggiorna per riprovare; la VPN Cloud non è necessaria." + "value": "This terminal is not shared." } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ការស្កេនច្រកបានបរាជ័យ; នេះមិនមានន័យថាគ្មានសេវាកម្មណាកំពុងស្តាប់ទេ។ ច្រក cmux ដែលមានស្រាប់អាចនៅតែដំណើរការ។ ផ្ទុកឡើងវិញដើម្បីព្យាយាមម្តងទៀត; មិនត្រូវការ Cloud VPN ទេ។" + "value": "هذه الطرفية غير مشتركة." } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Portskanningen mislyktes; det betyr ikke at ingen tjeneste lytter. Eksisterende cmux-porter kan fortsatt fungere. Oppdater for å prøve igjen; Cloud VPN er ikke nødvendig." + "value": "Dieses Terminal wird nicht geteilt." } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Skanowanie portów nie powiodło się; nie oznacza to, że żadna usługa nie nasłuchuje. Istniejące porty cmux mogą nadal działać. Odśwież, aby spróbować ponownie; Cloud VPN nie jest wymagany." + "value": "Esta terminal no está compartida." } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "A verificação de portas falhou; isso não significa que nenhum serviço esteja em escuta. As portas existentes do cmux ainda podem funcionar. Atualize para tentar de novo; o Cloud VPN não é necessário." + "value": "Ce terminal n’est pas partagé." } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Сканирование портов не удалось; это не значит, что ни одна служба не прослушивает порты. Существующие порты cmux могут по-прежнему работать. Обновите, чтобы повторить; Cloud VPN не требуется." + "value": "このターミナルは共有されていません。" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "การสแกนพอร์ตล้มเหลว ไม่ได้หมายความว่าไม่มีบริการที่กำลังรับฟัง พอร์ต cmux ที่มีอยู่อาจยังใช้งานได้ รีเฟรชเพื่อลองอีกครั้ง ไม่จำเป็นต้องใช้ Cloud VPN" + "value": "이 터미널은 공유되지 않았습니다." } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Port taraması başarısız oldu; bu, dinleyen bir hizmet olmadığı anlamına gelmez. Mevcut cmux portları hâlâ çalışıyor olabilir. Yeniden denemek için yenileyin; Cloud VPN gerekmez." + "value": "此终端未共享。" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Сканування портів не вдалося; це не означає, що жодна служба не прослуховує. Наявні порти cmux можуть і далі працювати. Оновіть, щоб повторити; Cloud VPN не потрібен." + "value": "此終端機未共用。" } } } }, - "cloudTree.ports.unsupported": { + "terminalSharing.panel.counts": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ports are not supported by this provider." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Ports werden von diesem Anbieter nicht unterstützt." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Les ports ne sont pas pris en charge par ce fournisseur." + "value": "Counts toward size" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا يدعم هذا الموفر المنافذ." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Este proveedor no admite puertos." + "value": "يُحتسب في الحجم" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "此提供者不支援連接埠。" + "value": "Zählt für die Größe" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "此提供商不支持端口。" + "value": "Cuenta para el tamaño" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "이 제공자는 포트를 지원하지 않습니다." + "value": "Compte pour la taille" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このプロバイダーはポートをサポートしていません。" + "value": "サイズに反映" } }, - "bs": { + "ko": { "stringUnit": { "state": "translated", - "value": "Ovaj pružalac ne podržava portove." + "value": "크기에 반영" } }, - "da": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Porte understøttes ikke af denne udbyder." + "value": "计入大小" } }, - "it": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Le porte non sono supportate da questo provider." + "value": "計入大小" + } + } + } + }, + "terminalSharing.panel.disconnect": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Disconnect" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "អ្នកផ្តល់សេវានេះមិនគាំទ្រច្រកទេ។" + "value": "قطع الاتصال" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Porter støttes ikke av denne leverandøren." + "value": "Trennen" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Ten dostawca nie obsługuje portów." + "value": "Desconectar" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Este provedor não oferece suporte a portas." + "value": "Déconnecter" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Этот провайдер не поддерживает порты." + "value": "切断" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ผู้ให้บริการนี้ไม่รองรับพอร์ต" + "value": "연결 끊기" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Bu sağlayıcı portları desteklemiyor." + "value": "断开连接" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Цей постачальник не підтримує порти." + "value": "中斷連線" } } } }, - "cloudTree.ports.unsupported.detail": { + "cli.sshPtyAttach.launchAcknowledgementTimeoutRetry": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This provider has no supported in-app port route. Open a shell to access the service inside the machine. Cloud VPN does not add provider support." + "value": "[cmux] cmux did not acknowledge the SSH launch; retrying %s in %ss." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Anbieter unterstützt keine Portverbindung in der App. Öffnen Sie eine Shell, um innerhalb der Maschine auf den Dienst zuzugreifen. Cloud-VPN fügt keine Anbieterunterstützung hinzu." + "value": "[cmux] cmux hat den SSH-Start nicht bestätigt; neuer Versuch %s in %ss." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce fournisseur ne prend pas en charge les ports dans l’app. Ouvrez un shell pour accéder au service dans la machine. Le VPN Cloud n’ajoute pas cette prise en charge." + "value": "[cmux] cmux n’a pas confirmé le démarrage SSH ; nouvelle tentative %s dans %ss." } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا يدعم هذا الموفر مسار منافذ داخل التطبيق. افتح صدفة للوصول إلى الخدمة داخل الجهاز. لا يضيف Cloud VPN دعمًا للموفر." + "value": "[cmux] لم يؤكد cmux بدء SSH؛ ستتم إعادة المحاولة %s خلال %s ث." } }, "es": { "stringUnit": { "state": "translated", - "value": "Este proveedor no admite una ruta de puertos dentro de la app. Abre una shell para acceder al servicio dentro de la máquina. Cloud VPN no añade soporte al proveedor." + "value": "[cmux] cmux no confirmó el inicio de SSH; reintentando %s en %ss." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此提供者不支援應用程式內連接埠路徑。請開啟 Shell 以在機器內存取服務。Cloud VPN 不會新增提供者支援。" + "value": "[cmux] cmux 未確認 SSH 啟動;將在第 %s 次於 %s 秒後重試。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此提供商不支持应用内端口路由。请打开 Shell 以在机器内部访问服务。Cloud VPN 不会添加提供商支持。" + "value": "[cmux] cmux 未确认 SSH 启动;将在第 %s 次于 %s 秒后重试。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 제공자는 앱 내 포트 경로를 지원하지 않습니다. 셸을 열어 머신 내부의 서비스에 접근하세요. Cloud VPN으로 제공자 지원이 추가되지는 않습니다." + "value": "[cmux] cmux가 SSH 시작을 확인하지 못했습니다. %s번째로 %s초 후 다시 시도합니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "このプロバイダーはアプリ内のポート経路に対応していません。シェルを開き、マシン内でサービスにアクセスしてください。Cloud VPN を有効にしても対応は追加されません。" + "value": "[cmux] cmux が SSH の起動を確認できないため、%s 回目を %s 秒後に再試行します。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovaj pružalac nema podržanu rutu portova unutar aplikacije. Otvorite shell da pristupite servisu unutar mašine. Cloud VPN ne dodaje podršku pružaoca." + "value": "[cmux] cmux nije potvrdio SSH pokretanje; ponovni pokušaj %s za %ss." } }, "da": { "stringUnit": { "state": "translated", - "value": "Denne udbyder har ingen understøttet portrute i appen. Åbn en shell for at få adgang til tjenesten inde i maskinen. Cloud VPN tilføjer ikke understøttelse for udbyderen." + "value": "[cmux] cmux bekræftede ikke SSH-starten; prøver igen %s om %ss." } }, "it": { "stringUnit": { "state": "translated", - "value": "Questo provider non ha un percorso delle porte supportato nell’app. Apri una shell per accedere al servizio all’interno della macchina. La VPN Cloud non aggiunge il supporto del provider." + "value": "[cmux] cmux non ha confermato l’avvio SSH; nuovo tentativo %s tra %ss." } }, "km": { "stringUnit": { "state": "translated", - "value": "អ្នកផ្តល់សេវានេះគ្មានផ្លូវច្រកក្នុងកម្មវិធីដែលគាំទ្រទេ។ បើក shell ដើម្បីចូលប្រើសេវាកម្មនៅខាងក្នុងម៉ាស៊ីន។ Cloud VPN មិនបន្ថែមការគាំទ្រអ្នកផ្តល់សេវាទេ។" + "value": "[cmux] cmux មិនបានបញ្ជាក់ការចាប់ផ្តើម SSH ទេ; កំពុងព្យាយាមម្តងទៀត %s ក្នុងរយៈពេល %ss។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Denne leverandøren har ingen støttet portrute i appen. Åpne et skall for å få tilgang til tjenesten inne i maskinen. Cloud VPN legger ikke til støtte for leverandøren." + "value": "[cmux] cmux bekreftet ikke SSH-oppstarten; prøver på nytt %s om %ss." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ten dostawca nie ma obsługiwanej trasy portów w aplikacji. Otwórz powłokę, aby uzyskać dostęp do usługi wewnątrz maszyny. Cloud VPN nie dodaje obsługi dostawcy." + "value": "[cmux] cmux nie potwierdził uruchomienia SSH; ponawianie próby %s za %ss." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Este provedor não tem uma rota de portas compatível no app. Abra um shell para acessar o serviço dentro da máquina. O Cloud VPN não adiciona suporte ao provedor." + "value": "[cmux] o cmux não confirmou o início do SSH; tentando novamente %s em %ss." } }, "ru": { "stringUnit": { "state": "translated", - "value": "У этого провайдера нет поддерживаемого маршрута портов в приложении. Откройте оболочку, чтобы получить доступ к службе внутри машины. Cloud VPN не добавляет поддержку провайдера." + "value": "[cmux] cmux не подтвердил запуск SSH; повторная попытка %s через %ss." } }, "th": { "stringUnit": { "state": "translated", - "value": "ผู้ให้บริการนี้ไม่มีเส้นทางพอร์ตในแอปที่รองรับ เปิดเชลล์เพื่อเข้าถึงบริการภายในเครื่อง Cloud VPN ไม่ได้เพิ่มการรองรับผู้ให้บริการ" + "value": "[cmux] cmux ไม่ยืนยันการเริ่มต้น SSH; กำลังลองใหม่ครั้งที่ %s ในอีก %s วินาที" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu sağlayıcının desteklenen bir uygulama içi port yolu yok. Makinenin içindeki hizmete erişmek için bir kabuk açın. Cloud VPN sağlayıcı desteği eklemez." + "value": "[cmux] cmux SSH başlatmasını onaylamadı; %s saniye içinde %s. deneme yapılıyor." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Цей постачальник не має підтримуваного маршруту портів у застосунку. Відкрийте оболонку, щоб отримати доступ до служби всередині машини. Cloud VPN не додає підтримку постачальника." + "value": "[cmux] cmux не підтвердив запуск SSH; повторна спроба %s через %s с." } } } @@ -575928,9823 +575455,9883 @@ } } }, - "agent.claude.stopFailure.body.generic": { + "terminal.clipboardReadConfirmation.deny": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Claude Code stopped on an API error" + "value": "Deny" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "Claude Code は API エラーで停止しました" + "value": "رفض" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "Claude Code 因 API 错误而停止" + "value": "Ablehnen" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Claude Code wurde wegen eines API-Fehlers gestoppt" + "value": "Denegar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Claude Code s'est arrêté sur une erreur d'API" + "value": "Refuser" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "توقف Claude Code بسبب خطأ في واجهة API" + "value": "拒否" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Claude Code se detuvo por un error de la API" + "value": "거부" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "拒绝" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Claude Code 因 API 錯誤而停止" + "value": "拒絕" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "Claude Code가 API 오류로 중지되었습니다" + "value": "Odbij" } - } - } - }, - "agent.claude.stopFailure.status.apiError": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "API error" + "value": "Afvis" } }, - "ja": { + "it": { "stringUnit": { "state": "translated", - "value": "API エラー" + "value": "Nega" } }, - "zh-Hans": { + "km": { "stringUnit": { "state": "translated", - "value": "API 错误" + "value": "បដិសេធ" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "API-Fehler" + "value": "Avslå" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Erreur d'API" + "value": "Odmów" } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "خطأ في واجهة API" + "value": "Negar" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Error de la API" + "value": "Запретить" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "API 錯誤" + "value": "ปฏิเสธ" } }, - "ko": { + "tr": { "stringUnit": { "state": "translated", - "value": "API 오류" + "value": "Reddet" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Заборонити" } } } }, - "agent.claude.stopFailure.status.authentication": { + "terminal.clipboardReadConfirmation.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Auth error" + "value": "A program in this terminal wants to read your clipboard. Allow it only if you trust the program." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "認証エラー" + "value": "يريد برنامج في هذه الطرفية قراءة الحافظة. اسمح بذلك فقط إذا كنت تثق بالبرنامج." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "认证错误" + "value": "Ein Programm in diesem Terminal möchte deine Zwischenablage lesen. Erlaube es nur, wenn du dem Programm vertraust." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Authentifizierungsfehler" + "value": "Un programa de esta terminal quiere leer tu portapapeles. Permítelo solo si confías en el programa." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Erreur d'authentification" + "value": "Un programme de ce terminal veut lire votre presse-papiers. Ne l’autorisez que si vous faites confiance à ce programme." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "خطأ في المصادقة" + "value": "このターミナルのプログラムがクリップボードを読み取ろうとしています。信頼できるプログラムの場合にのみ許可してください。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Error de autenticación" + "value": "이 터미널의 프로그램이 클립보드를 읽으려고 합니다. 프로그램을 신뢰할 수 있을 때만 허용하세요." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此终端中的程序想要读取你的剪贴板。只有在你信任该程序时才允许。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "驗證錯誤" + "value": "此終端機中的程式想要讀取你的剪貼簿。只有在你信任該程式時才允許。" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "인증 오류" + "value": "Program u ovom terminalu želi čitati vaš međuspremnik. Dozvolite samo ako vjerujete programu." } - } - } - }, - "agent.claude.stopFailure.status.billing": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Billing error" + "value": "Et program i denne terminal vil læse din udklipsholder. Tillad det kun, hvis du har tillid til programmet." } }, - "ja": { + "it": { "stringUnit": { "state": "translated", - "value": "請求エラー" + "value": "Un programma in questo terminale vuole leggere gli appunti. Consentilo solo se ti fidi del programma." } }, - "zh-Hans": { + "km": { "stringUnit": { "state": "translated", - "value": "账单错误" + "value": "កម្មវិធីក្នុងស្ថានីយនេះចង់អានក្ដារតម្បៀតខ្ទាស់របស់អ្នក។ អនុញ្ញាតតែបើអ្នកទុកចិត្តកម្មវិធីនេះ។" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Abrechnungsfehler" + "value": "Et program i denne terminalen vil lese utklippstavlen din. Tillat det bare hvis du stoler på programmet." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Erreur de facturation" + "value": "Program w tym terminalu chce odczytać schowek. Zezwól tylko, jeśli ufasz temu programowi." } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "خطأ في الفوترة" + "value": "Um programa neste terminal quer ler sua área de transferência. Permita somente se você confiar no programa." } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Error de facturación" + "value": "Программа в этом терминале хочет прочитать буфер обмена. Разрешайте только программам, которым доверяете." } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "帳單錯誤" + "value": "โปรแกรมในเทอร์มินัลนี้ต้องการอ่านคลิปบอร์ดของคุณ อนุญาตเฉพาะเมื่อคุณเชื่อถือโปรแกรมนี้" } }, - "ko": { + "tr": { "stringUnit": { "state": "translated", - "value": "결제 오류" + "value": "Bu terminaldeki bir program panonuzu okumak istiyor. Yalnızca programa güveniyorsanız izin verin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Програма в цьому терміналі хоче прочитати ваш буфер обміну. Дозволяйте, лише якщо довіряєте програмі." } } } }, - "agent.claude.stopFailure.status.connectionDropped": { + "terminal.clipboardReadConfirmation.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Connection dropped" + "value": "Allow Clipboard Access?" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "接続が切断されました" + "value": "السماح بالوصول إلى الحافظة؟" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "连接已断开" + "value": "Zugriff auf die Zwischenablage erlauben?" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Verbindung abgebrochen" + "value": "¿Permitir el acceso al portapapeles?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connexion interrompue" + "value": "Autoriser l’accès au presse-papiers ?" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "انقطع الاتصال" + "value": "クリップボードへのアクセスを許可しますか?" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Conexión perdida" + "value": "클립보드 접근을 허용하시겠습니까?" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "允许访问剪贴板?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "連線已中斷" + "value": "允許存取剪貼簿?" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "연결 끊김" + "value": "Dozvoliti pristup međuspremniku?" } - } - } - }, - "agent.claude.stopFailure.status.outputLimit": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Output limit" + "value": "Tillad adgang til udklipsholderen?" } }, - "ja": { + "it": { "stringUnit": { "state": "translated", - "value": "出力上限" + "value": "Consentire l'accesso agli appunti?" } }, - "zh-Hans": { + "km": { "stringUnit": { "state": "translated", - "value": "输出上限" + "value": "អនុញ្ញាតឱ្យចូលប្រើក្ដារតម្បៀតខ្ទាស់?" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Ausgabelimit" + "value": "Tillat tilgang til utklippstavlen?" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Limite de sortie" + "value": "Zezwolić na dostęp do schowka?" } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "حد المخرجات" + "value": "Permitir acesso à área de transferência?" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Límite de salida" + "value": "Разрешить доступ к буферу обмена?" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "輸出上限" + "value": "อนุญาตให้เข้าถึงคลิปบอร์ดหรือไม่?" } }, - "ko": { + "tr": { "stringUnit": { "state": "translated", - "value": "출력 한도" + "value": "Panoya erişime izin verilsin mi?" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Дозволити доступ до буфера обміну?" } } } }, - "agent.claude.stopFailure.status.overloaded": { + "notification.remoteRelay.hostFallback": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "API overloaded" + "value": "Remote host" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "API 過負荷" + "value": "مضيف بعيد" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "API 过载" + "value": "Remote-Host" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "API überlastet" + "value": "Host remoto" } }, "fr": { "stringUnit": { "state": "translated", - "value": "API surchargée" + "value": "Hôte distant" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "واجهة API محمّلة فوق طاقتها" + "value": "リモートホスト" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "API sobrecargada" + "value": "원격 호스트" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "远程主机" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "API 過載" + "value": "遠端主機" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "API 과부하" + "value": "Udaljeni host" } - } - } - }, - "agent.claude.stopFailure.status.rateLimited": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Rate limited" + "value": "Fjernvært" } }, - "ja": { + "it": { "stringUnit": { "state": "translated", - "value": "レート制限中" + "value": "Host remoto" } }, - "zh-Hans": { + "km": { "stringUnit": { "state": "translated", - "value": "已限速" + "value": "ម៉ាស៊ីនពីចម្ងាយ" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Ratenbegrenzt" + "value": "Ekstern vert" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Limite de requêtes atteinte" + "value": "Zdalny host" } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "تم تقييد المعدل" + "value": "Host remoto" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Límite de frecuencia alcanzado" + "value": "Удалённый хост" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "已限速" + "value": "โฮสต์ระยะไกล" } }, - "ko": { + "tr": { "stringUnit": { "state": "translated", - "value": "속도 제한됨" + "value": "Uzak ana bilgisayar" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Віддалений хост" } } } }, - "agent.claude.stopFailure.status.usageLimit": { + "notification.remoteRelay.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage limit" + "value": "%1$@: %2$@" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "使用量の上限" + "value": "%1$@: %2$@" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "用量上限" + "value": "%1$@: %2$@" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Nutzungslimit" + "value": "%1$@: %2$@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Limite d'utilisation" + "value": "%1$@: %2$@" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "حد الاستخدام" + "value": "%1$@: %2$@" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Límite de uso" + "value": "%1$@: %2$@" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%1$@: %2$@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "用量上限" + "value": "%1$@: %2$@" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "사용량 한도" + "value": "%1$@: %2$@" } - } - } - }, - "agent.claude.stopFailure.status.usageLimitResets": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Usage limit, resets %@" + "value": "%1$@: %2$@" } }, - "ja": { + "it": { "stringUnit": { "state": "translated", - "value": "使用量の上限、%@ にリセット" + "value": "%1$@: %2$@" } }, - "zh-Hans": { + "km": { "stringUnit": { "state": "translated", - "value": "用量上限,%@ 重置" + "value": "%1$@: %2$@" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Nutzungslimit, Reset %@" + "value": "%1$@: %2$@" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Limite d'utilisation, réinitialisation %@" + "value": "%1$@: %2$@" } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "حد الاستخدام، يُعاد التعيين %@" + "value": "%1$@: %2$@" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Límite de uso, se restablece %@" + "value": "%1$@: %2$@" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "用量上限,%@ 重設" + "value": "%1$@: %2$@" } }, - "ko": { + "tr": { "stringUnit": { "state": "translated", - "value": "사용량 한도, %@에 초기화" + "value": "%1$@: %2$@" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "%1$@: %2$@" } } } }, - "settings.app.reorderOnNotification.mode.agentActivity": { + "socket.mainActorHop.timeout.mayHaveRun": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "نشاط الوكيل" + "value": "cmux did not respond within 10 seconds after the command started, so its result is unknown. Check the effect before retrying." } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Aktivnost agenata" + "value": "コマンドの開始後 10 秒以内に cmux が応答しなかったため、結果は不明です。再試行する前に効果を確認してください。" } }, - "da": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Agentaktivitet" + "value": "命令开始后 10 秒内 cmux 没有响应,因此结果未知。请先确认效果再重试。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Agentenaktivität" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Agent Activity" + "value": "cmux hat innerhalb von 10 Sekunden nach dem Start des Befehls nicht geantwortet, das Ergebnis ist daher unbekannt. Prüfe die Auswirkung, bevor du es erneut versuchst." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Actividad de agentes" + "value": "cmux n’a pas répondu dans les 10 secondes suivant le démarrage de la commande, son résultat est donc inconnu. Vérifiez l’effet avant de réessayer." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Activité des agents" + "value": "لم يستجب cmux خلال 10 ثوانٍ بعد بدء الأمر، لذا فإن نتيجته غير معروفة. تحقق من الأثر قبل إعادة المحاولة." } }, - "it": { + "es": { "stringUnit": { "state": "translated", - "value": "Attività degli agenti" + "value": "cmux no respondió en los 10 segundos posteriores al inicio del comando, por lo que su resultado es desconocido. Comprueba el efecto antes de reintentar." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "エージェントのアクティビティ" + "value": "命令開始後 10 秒內 cmux 沒有回應,因此結果未知。請先確認效果再重試。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "에이전트 활동" + "value": "명령이 시작된 후 10초 안에 cmux가 응답하지 않아 결과를 알 수 없습니다. 다시 시도하기 전에 효과를 확인하세요." } - }, - "nb": { + } + } + }, + "socket.mainActorHop.timeout.notRun": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Agentaktivitet" + "value": "cmux did not respond within 10 seconds, so the command was not run. Retry in a moment." } }, - "pl": { + "ja": { "stringUnit": { "state": "translated", - "value": "Aktywność agentów" + "value": "cmux が 10 秒以内に応答しなかったため、コマンドは実行されませんでした。しばらくしてから再試行してください。" } }, - "pt-BR": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Atividade dos agentes" + "value": "cmux 在 10 秒内没有响应,因此未运行该命令。请稍后重试。" } }, - "ru": { + "de": { "stringUnit": { "state": "translated", - "value": "Активность агентов" + "value": "cmux hat innerhalb von 10 Sekunden nicht geantwortet, der Befehl wurde daher nicht ausgeführt. Versuche es gleich noch einmal." } }, - "th": { + "fr": { "stringUnit": { "state": "translated", - "value": "กิจกรรมของเอเจนต์" + "value": "cmux n’a pas répondu dans les 10 secondes, la commande n’a donc pas été exécutée. Réessayez dans un instant." } }, - "tr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Ajan etkinliği" + "value": "لم يستجب cmux خلال 10 ثوانٍ، لذا لم يتم تنفيذ الأمر. أعد المحاولة بعد لحظات." } }, - "uk": { + "es": { "stringUnit": { "state": "translated", - "value": "Активність агентів" + "value": "cmux no respondió en 10 segundos, por lo que el comando no se ejecutó. Reintenta en un momento." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "代理活动" + "value": "cmux 在 10 秒內沒有回應,因此未執行該命令。請稍後重試。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "代理活動" + "value": "cmux가 10초 안에 응답하지 않아 명령이 실행되지 않았습니다. 잠시 후 다시 시도하세요." } } } }, - "settings.app.reorderOnNotification.mode.notifications": { + "socket.overloaded.message": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "الإشعارات" + "value": "cmux is handling too many control-socket requests right now, so this one was not run. Retry in a moment." } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Obavještenja" + "value": "cmux は現在、制御ソケットの要求を処理しきれないため、この要求は実行されませんでした。しばらくしてから再試行してください。" } }, - "da": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Notifikationer" + "value": "cmux 当前正在处理过多的控制套接字请求,因此未运行此请求。请稍后重试。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Benachrichtigungen" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Notifications" + "value": "cmux verarbeitet gerade zu viele Control-Socket-Anfragen, diese wurde daher nicht ausgeführt. Versuche es gleich noch einmal." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Notificaciones" + "value": "cmux traite actuellement trop de requêtes du socket de contrôle, celle-ci n’a donc pas été exécutée. Réessayez dans un instant." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Sur notification" + "value": "يعالج cmux حاليًا عددًا كبيرًا جدًا من طلبات مقبس التحكم، لذا لم يتم تنفيذ هذا الطلب. أعد المحاولة بعد لحظات." } }, - "it": { + "es": { "stringUnit": { "state": "translated", - "value": "Notifiche" + "value": "cmux está gestionando demasiadas solicitudes del socket de control ahora mismo, por lo que esta no se ejecutó. Reintenta en un momento." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "cmux 目前正在處理過多的控制 socket 請求,因此未執行此請求。請稍後重試。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "알림" + "value": "cmux가 지금 너무 많은 제어 소켓 요청을 처리하고 있어 이 요청은 실행되지 않았습니다. 잠시 후 다시 시도하세요." } - }, - "nb": { + } + } + }, + "socket.request.cancelled": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Varsler" + "value": "Request was cancelled" } }, - "pl": { + "ja": { "stringUnit": { "state": "translated", - "value": "Powiadomienia" + "value": "リクエストはキャンセルされました" } }, - "pt-BR": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Notificações" + "value": "请求已取消" } }, - "ru": { + "de": { "stringUnit": { "state": "translated", - "value": "Уведомления" + "value": "Die Anfrage wurde abgebrochen" } }, - "th": { + "fr": { "stringUnit": { "state": "translated", - "value": "การแจ้งเตือน" + "value": "La requête a été annulée" } }, - "tr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Bildirimler" + "value": "تم إلغاء الطلب" } }, - "uk": { + "es": { "stringUnit": { "state": "translated", - "value": "Сповіщення" + "value": "Se canceló la solicitud" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "請求已取消" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "요청이 취소되었습니다" } } } }, - "settings.app.reorderOnNotification.mode.off": { + "socket.request.failedBeforeResult": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "إيقاف" + "value": "Request failed before returning a result" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Isključeno" + "value": "結果を返す前にリクエストが失敗しました" } }, - "da": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Fra" + "value": "请求在返回结果之前失败" } }, "de": { "stringUnit": { "state": "translated", - "value": "Aus" + "value": "Die Anfrage ist fehlgeschlagen, bevor ein Ergebnis zurückgegeben wurde" } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "Off" + "value": "La requête a échoué avant de renvoyer un résultat" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "فشل الطلب قبل إرجاع نتيجة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desactivado" + "value": "La solicitud falló antes de devolver un resultado" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Désactivé" + "value": "請求在傳回結果之前失敗" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Disattivato" + "value": "결과를 반환하기 전에 요청이 실패했습니다" + } + } + } + }, + "agent.codex.fork.notice.body": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "cmux could not identify the new fork session. Start the fork again from the parent pane." } }, "ja": { "stringUnit": { "state": "translated", - "value": "オフ" + "value": "cmux は新しいフォーク セッションを特定できませんでした。親ペインからもう一度フォークしてください。" } }, - "ko": { + "de": { "stringUnit": { "state": "translated", - "value": "끔" + "value": "cmux konnte die neue Fork-Sitzung nicht erkennen. Starten Sie den Fork erneut im übergeordneten Pane." } }, - "nb": { + "fr": { "stringUnit": { "state": "translated", - "value": "Av" + "value": "cmux n’a pas pu identifier la nouvelle session forkée. Relancez le fork depuis le volet parent." } }, - "pl": { + "ar": { "stringUnit": { "state": "translated", - "value": "Wyłączone" + "value": "تعذر على cmux تحديد جلسة التفريع الجديدة. ابدأ التفريع مرة أخرى من الجزء الأصلي." } }, - "pt-BR": { + "es": { "stringUnit": { "state": "translated", - "value": "Desativado" + "value": "cmux no pudo identificar la nueva sesión bifurcada. Inicia el fork de nuevo desde el panel principal." } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Выкл." + "value": "cmux 無法識別新的分支工作階段。請從父窗格重新開始分支。" } }, - "th": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ปิด" + "value": "cmux 无法识别新的分支会话。请从父窗格重新开始分支。" } }, - "tr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Kapalı" + "value": "cmux가 새 포크 세션을 식별하지 못했습니다. 부모 패널에서 포크를 다시 시작하세요." } }, - "uk": { + "bs": { "stringUnit": { "state": "translated", - "value": "Вимкнено" + "value": "cmux nije mogao prepoznati novu sesiju račvanja. Ponovo pokrenite račvanje iz nadređenog okna." } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "关闭" + "value": "cmux kunne ikke identificere den nye forgreningssession. Start forgreningen igen fra forældreruden." } }, - "zh-Hant": { + "it": { "stringUnit": { "state": "translated", - "value": "關閉" + "value": "cmux non ha potuto identificare la nuova sessione fork. Avvia di nuovo il fork dal riquadro principale." } - } - } - }, - "settings.app.reorderOnNotification.modeSubtitle": { - "extractionState": "manual", - "localizations": { - "ar": { + }, + "km": { "stringUnit": { "state": "translated", - "value": "ينقل مساحات العمل إلى الأعلى عندما تتلقى إشعارًا. مع نشاط الوكيل، ينقلها أيضًا عندما ترسل مطالبة أو ينهي وكيل دورة أو يحتاج إلى إدخال أو يفشل، لكن ليس أبدًا أثناء وجود المؤشر فوق الشريط الجانبي. الإيقاف يحافظ على ثبات مواضع الاختصارات." + "value": "cmux មិនអាចកំណត់អត្តសញ្ញាណសម័យ fork ថ្មីបានទេ។ ចាប់ផ្ដើម fork ម្ដងទៀតពីផ្ទាំងមេ។" } }, - "bs": { + "nb": { "stringUnit": { "state": "translated", - "value": "Pomjera radne prostore na vrh kada prime obavještenje. Aktivnost agenata ih pomjera i kada pošaljete upit ili agent završi potez, treba unos ili ne uspije, ali nikad dok je pokazivač iznad bočne trake. Isključeno čuva stabilne pozicije prečica." + "value": "cmux kunne ikke identifisere den nye forgreningsøkten. Start forgreningen på nytt fra den overordnede ruten." } }, - "da": { + "pl": { "stringUnit": { "state": "translated", - "value": "Flytter arbejdsområder til toppen, når de modtager en notifikation. Agentaktivitet flytter dem også, når du sender en prompt eller en agent afslutter en tur, har brug for input eller fejler, men aldrig mens markøren er over sidepanelet. Fra holder genvejspositionerne stabile." + "value": "cmux nie mógł zidentyfikować nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." } }, - "de": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Verschiebt Workspaces nach oben, wenn sie eine Benachrichtigung erhalten. Mit Agentenaktivität auch dann, wenn Sie einen Prompt senden oder ein Agent einen Durchlauf beendet, eine Eingabe braucht oder fehlschlägt, aber nie, während der Zeiger über der Seitenleiste ist. Aus hält die Positionen der Tastenkürzel stabil." + "value": "O cmux não conseguiu identificar a nova sessão bifurcada. Inicie o fork novamente no painel principal." } }, - "en": { + "ru": { "stringUnit": { "state": "translated", - "value": "Move workspaces to the top when they receive a notification. Agent Activity also moves them when you send a prompt or an agent finishes a turn, needs input, or fails, but never while you point at the sidebar. Off keeps shortcut positions stable." + "value": "cmux не удалось определить новый сеанс форка. Запустите форк снова из родительской панели." } }, - "es": { + "th": { "stringUnit": { "state": "translated", - "value": "Mueve los espacios de trabajo arriba cuando reciben una notificación. Con Actividad de agentes, también cuando envías un prompt o un agente termina un turno, necesita una respuesta o falla, pero nunca mientras el puntero está sobre la barra lateral. Desactivado mantiene estables las posiciones de los atajos." + "value": "cmux ไม่สามารถระบุเซสชันที่แยกใหม่ได้ เริ่มการแยกอีกครั้งจากบานหน้าต่างหลัก" } }, - "fr": { + "tr": { "stringUnit": { "state": "translated", - "value": "Place les espaces de travail en haut lorsqu’ils reçoivent une notification. Avec Activité des agents, aussi lorsque vous envoyez un prompt ou qu’un agent termine un tour, attend une saisie ou échoue, mais jamais pendant que le pointeur survole la barre latérale. Désactivé garde les positions des raccourcis stables." + "value": "cmux yeni fork oturumunu belirleyemedi. Fork'u üst panelden yeniden başlatın." } }, - "it": { + "uk": { "stringUnit": { "state": "translated", - "value": "Sposta gli spazi di lavoro in cima quando ricevono una notifica. Attività degli agenti li sposta anche quando invii un prompt o un agente termina un turno, attende un input o fallisce, ma mai mentre il puntatore è sulla barra laterale. Disattivato mantiene stabili le posizioni delle scorciatoie." + "value": "cmux не вдалося визначити новий сеанс форка. Запустіть форк ще раз із батьківської панелі." } - }, - "ja": { + } + } + }, + "agent.codex.fork.notice.parentClearFailed.body": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "通知を受け取ったワークスペースを先頭に移動します。「エージェントのアクティビティ」では、プロンプトを送信したときや、エージェントがターンを終えたとき、入力を待っているとき、失敗したときにも移動しますが、ポインタがサイドバー上にある間は移動しません。「オフ」ではショートカットの位置が変わりません。" + "value": "cmux could not safely detach the parent session, so the fork was not started. Retry the fork from the parent pane." } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "알림을 받으면 워크스페이스를 맨 위로 옮깁니다. 에이전트 활동을 선택하면 프롬프트를 보내거나 에이전트가 턴을 마치거나 입력이 필요하거나 실패할 때도 옮기지만, 포인터가 사이드바 위에 있을 때는 옮기지 않습니다. 끔은 단축키 위치를 고정합니다." + "value": "cmux は新しいフォーク セッションを安全にバインドできませんでした。親ペインからもう一度フォークしてください。" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Flytter arbeidsområder til toppen når de mottar et varsel. Agentaktivitet flytter dem også når du sender en ledetekst eller en agent fullfører en runde, trenger input eller feiler, men aldri mens pekeren er over sidefeltet. Av holder snarveisposisjonene stabile." + "value": "cmux konnte die neue Fork-Sitzung nicht sicher binden. Starten Sie den Fork erneut im übergeordneten Pane." } }, - "pl": { + "fr": { "stringUnit": { "state": "translated", - "value": "Przenosi obszary robocze na górę, gdy otrzymają powiadomienie. Aktywność agentów przenosi je także, gdy wyślesz prompt lub agent zakończy turę, potrzebuje danych lub zakończy się błędem, ale nigdy, gdy wskaźnik jest nad paskiem bocznym. Wyłączone zachowuje stałe pozycje skrótów." + "value": "cmux n’a pas pu lier la nouvelle session forkée en toute sécurité. Relancez le fork depuis le volet parent." } }, - "pt-BR": { + "ar": { "stringUnit": { "state": "translated", - "value": "Move os espaços de trabalho para o topo quando recebem uma notificação. Atividade dos agentes também os move quando você envia um prompt ou um agente termina um turno, precisa de uma resposta ou falha, mas nunca enquanto o ponteiro está sobre a barra lateral. Desativado mantém as posições dos atalhos estáveis." + "value": "تعذر على cmux ربط جلسة التفريع الجديدة بأمان. أعد بدء التفريع من الجزء الأصلي." } }, - "ru": { + "es": { "stringUnit": { "state": "translated", - "value": "Перемещает рабочие области наверх, когда они получают уведомление. «Активность агентов» также перемещает их, когда вы отправляете запрос или агент завершает ход, ждёт ввода или завершается с ошибкой, но никогда, пока указатель находится над боковой панелью. «Выкл.» сохраняет позиции сочетаний клавиш." + "value": "cmux no pudo vincular de forma segura la nueva sesión bifurcada. Inicia el fork de nuevo desde el panel principal." } }, - "th": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ย้ายเวิร์กสเปซขึ้นด้านบนเมื่อได้รับการแจ้งเตือน กิจกรรมของเอเจนต์จะย้ายเมื่อคุณส่งพรอมต์หรือเอเจนต์จบรอบ ต้องการข้อมูล หรือล้มเหลวด้วย แต่จะไม่ย้ายขณะที่ตัวชี้อยู่เหนือแถบด้านข้าง ปิดจะคงตำแหน่งของทางลัดไว้" + "value": "cmux 無法安全繫結新的分支工作階段。請從父窗格重新開始分支。" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Bildirim aldıklarında çalışma alanlarını en üste taşır. Ajan etkinliği, bir istem gönderdiğinizde, bir ajan turunu bitirdiğinde, girdi beklediğinde veya başarısız olduğunda da taşır, ancak işaretçi kenar çubuğunun üzerindeyken asla taşımaz. Kapalı, kısayol konumlarını sabit tutar." + "value": "cmux 无法安全绑定新的分支会话。请从父窗格重新开始分支。" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Переміщує робочі області вгору, коли вони отримують сповіщення. «Активність агентів» також переміщує їх, коли ви надсилаєте запит або агент завершує хід, чекає на введення або завершується з помилкою, але ніколи, поки вказівник над бічною панеллю. «Вимкнено» зберігає позиції скорочень." + "value": "cmux가 새 포크 세션을 안전하게 연결하지 못했습니다. 부모 패널에서 포크를 다시 시작하세요." } }, - "zh-Hans": { + "bs": { "stringUnit": { "state": "translated", - "value": "工作区收到通知时移到顶部。选择“代理活动”时,你发送提示词或代理完成一轮、需要输入或失败时也会移动,但指针停在侧边栏上时绝不移动。关闭可让快捷键位置保持不变。" + "value": "cmux nije mogao sigurno povezati novu sesiju račvanja. Ponovo pokrenite račvanje iz nadređenog okna." } }, - "zh-Hant": { + "da": { "stringUnit": { "state": "translated", - "value": "工作區收到通知時移到頂部。選擇「代理活動」時,你送出提示詞或代理完成一輪、需要輸入或失敗時也會移動,但指標停在側邊欄上時絕不移動。關閉可讓快捷鍵位置保持不變。" + "value": "cmux kunne ikke binde den nye forgreningssession sikkert. Start forgreningen igen fra forældreruden." } - } - } - }, - "cli.restore.notice.routedLauncherUnavailable": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "it": { "stringUnit": { "state": "translated", - "value": "restore: this session was started through the routed launcher '%@', which is not on PATH. Resuming the agent directly instead." + "value": "cmux non ha potuto associare in sicurezza la nuova sessione fork. Avvia di nuovo il fork dal riquadro principale." } }, - "ja": { + "km": { "stringUnit": { "state": "translated", - "value": "restore: このセッションはルーティングされたランチャー「%@」経由で開始されましたが、PATH にありません。代わりにエージェントを直接再開します。" + "value": "cmux មិនអាចភ្ជាប់សម័យ fork ថ្មីដោយសុវត្ថិភាពបានទេ។ ចាប់ផ្ដើម fork ម្ដងទៀតពីផ្ទាំងមេ។" } }, - "zh-Hans": { + "nb": { "stringUnit": { "state": "translated", - "value": "restore:此会话是通过路由启动器“%@”启动的,但它不在 PATH 中。将改为直接恢复该代理。" + "value": "cmux kunne ikke binde den nye forgreningsøkten på en trygg måte. Start forgreningen på nytt fra den overordnede ruten." } }, - "de": { + "pl": { "stringUnit": { "state": "translated", - "value": "restore: Diese Sitzung wurde über den weitergeleiteten Launcher „%@“ gestartet, der nicht im PATH liegt. Der Agent wird stattdessen direkt fortgesetzt." + "value": "cmux nie mógł bezpiecznie powiązać nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "restore : cette session a été lancée via le lanceur routé « %@ », qui est introuvable dans le PATH. Reprise directe de l'agent à la place." + "value": "O cmux não conseguiu vincular com segurança a nova sessão bifurcada. Inicie o fork novamente no painel principal." } }, - "ar": { + "ru": { "stringUnit": { "state": "translated", - "value": "restore: بدأت هذه الجلسة عبر المشغّل الموجَّه '%@'، وهو غير موجود في PATH. سيتم استئناف الوكيل مباشرةً بدلاً من ذلك." + "value": "cmux не удалось безопасно привязать новый сеанс форка. Запустите форк снова из родительской панели." } }, - "es": { + "th": { "stringUnit": { "state": "translated", - "value": "restore: esta sesión se inició mediante el lanzador enrutado '%@', que no está en el PATH. Se reanudará el agente directamente." + "value": "cmux ไม่สามารถผูกเซสชันที่แยกใหม่ได้อย่างปลอดภัย เริ่มการแยกอีกครั้งจากบานหน้าต่างหลัก" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "restore:此工作階段是透過路由啟動器「%@」啟動的,但它不在 PATH 中。將改為直接繼續該代理程式。" + "value": "cmux yeni fork oturumunu güvenli bir şekilde bağlayamadı. Fork'u üst panelden yeniden başlatın." } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "restore: 이 세션은 라우팅된 런처 '%@'를 통해 시작되었지만 PATH에 없습니다. 대신 에이전트를 직접 재개합니다." + "value": "cmux не вдалося безпечно прив’язати новий сеанс форка. Запустіть форк ще раз із батьківської панелі." } } } }, - "sidebar.extensions.action.noSpaceForPane": { + "agent.codex.fork.notice.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No space for new pane" + "value": "Fork unavailable" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "لا توجد مساحة للوحة جديدة" + "value": "フォークを利用できません" } }, "de": { "stringUnit": { "state": "translated", - "value": "Kein Platz für einen neuen Bereich" + "value": "Fork nicht verfügbar" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Fork indisponible" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "التفريع غير متاح" } }, "es": { "stringUnit": { "state": "translated", - "value": "No hay espacio para un panel nuevo" + "value": "Fork no disponible" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Pas de place pour un nouveau panneau" + "value": "無法使用分支" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新しいペインを置く場所がありません" + "value": "分支不可用" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 창을 위한 공간이 없습니다" + "value": "포크를 사용할 수 없음" } }, - "zh-Hans": { + "bs": { "stringUnit": { "state": "translated", - "value": "没有空间容纳新窗格" + "value": "Račvanje nije dostupno" } }, - "zh-Hant": { + "da": { "stringUnit": { "state": "translated", - "value": "沒有空間容納新窗格" + "value": "Fork ikke tilgængelig" } - } - } - }, - "cli.focus.defaultHelp": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "it": { "stringUnit": { "state": "translated", - "value": "Default: focus when run interactively, stay in the background when run by an agent or script." + "value": "Fork non disponibile" } }, - "ja": { + "km": { "stringUnit": { "state": "translated", - "value": "既定: 対話的に実行した場合はフォーカスし、エージェントやスクリプトから実行した場合はバックグラウンドのままにします。" + "value": "មិនអាចប្រើការបំបែកបាន" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Standard: bei interaktiver Ausführung fokussieren, bei Ausführung durch einen Agenten oder ein Skript im Hintergrund bleiben." + "value": "Fork utilgjengelig" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Par défaut : prend le focus en exécution interactive, reste en arrière-plan quand un agent ou un script l’exécute." + "value": "Fork niedostępny" } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "الافتراضي: التركيز عند التشغيل التفاعلي، والبقاء في الخلفية عند التشغيل بواسطة وكيل أو برنامج نصي." + "value": "Fork indisponível" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Predeterminado: enfoca al ejecutarse de forma interactiva y se queda en segundo plano cuando lo ejecuta un agente o un script." + "value": "Форк недоступен" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "預設:互動執行時取得焦點;由代理程式或指令稿執行時保持在背景。" + "value": "ไม่สามารถใช้การแยกสาขาได้" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "默认:交互式运行时获得焦点;由代理或脚本运行时保持在后台。" + "value": "Fork kullanılamıyor" } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "기본값: 대화형으로 실행하면 포커스를 가져오고, 에이전트나 스크립트가 실행하면 백그라운드에 머뭅니다." + "value": "Форк недоступний" } } } }, - "cli.help.openFocusFlags": { + "agent.codex.fork.notice.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Focus:\n --focus Switch to the new workspace\n --no-focus Open it in the background" + "value": "Agent fork" } }, "ja": { "stringUnit": { "state": "translated", - "value": "フォーカス:\n --focus 新しいワークスペースに切り替えます\n --no-focus バックグラウンドで開きます" + "value": "エージェントフォーク" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fokus:\n --focus Zum neuen Workspace wechseln\n --no-focus Im Hintergrund öffnen" + "value": "Agent-Fork" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Focus :\n --focus Bascule vers le nouvel espace de travail\n --no-focus L’ouvre en arrière-plan" + "value": "Fork d’agent" } }, "ar": { "stringUnit": { "state": "translated", - "value": "التركيز:\n --focus ينتقل إلى مساحة العمل الجديدة\n --no-focus يفتحها في الخلفية" + "value": "تفريع الوكيل" } }, "es": { "stringUnit": { "state": "translated", - "value": "Foco:\n --focus Cambia al nuevo espacio de trabajo\n --no-focus Lo abre en segundo plano" + "value": "Fork del agente" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "焦點:\n --focus 切換到新的工作區\n --no-focus 在背景開啟" + "value": "代理程式分支" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "焦点:\n --focus 切换到新的工作区\n --no-focus 在后台打开" + "value": "代理分支" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포커스:\n --focus 새 워크스페이스로 전환합니다\n --no-focus 백그라운드에서 엽니다" + "value": "에이전트 포크" } - } - } - }, - "settings.app.compactAgentStatus": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Compact Agent Status" + "value": "Račvanje agenta" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "حالة الوكيل المختصرة" + "value": "Agentfork" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Kompakter Agentenstatus" + "value": "Fork dell'agente" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Estado de agente compacto" + "value": "ការបំបែកភ្នាក់ងារ" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Statut d’agent compact" + "value": "Agentforgrening" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "エージェント状態のコンパクト表示" + "value": "Fork agenta" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "간결한 에이전트 상태" + "value": "Fork do agente" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "精简代理状态" + "value": "Форк агента" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "精簡代理狀態" + "value": "การแยกสาขาของเอเจนต์" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Ajan çatalı" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Форк агента" } } } }, - "settings.app.compactAgentStatus.subtitle": { + "socket.authTeam.committedStatusTimedOut": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show a workspace's agent, unread and pull request state as one colored icon before the title instead of separate rows. Hover the icon for details." + "value": "The team change was applied, but cmux did not report the updated status within 10 seconds. Run `cmux auth status` to confirm." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "إظهار حالة الوكيل والعناصر غير المقروءة وطلب السحب لمساحة العمل كأيقونة ملونة واحدة قبل العنوان بدلاً من صفوف منفصلة. مرّر المؤشر فوق الأيقونة لعرض التفاصيل." + "value": "チームの変更は適用されましたが、cmux は 10 秒以内に更新後のステータスを報告しませんでした。`cmux auth status` を実行して確認してください。" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Agenten-, Ungelesen- und Pull-Request-Status eines Workspace als ein farbiges Symbol vor dem Titel anzeigen statt in eigenen Zeilen. Details erscheinen, wenn du den Zeiger über das Symbol bewegst." + "value": "团队更改已应用,但 cmux 未能在 10 秒内报告更新后的状态。请运行 `cmux auth status` 确认。" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Mostrar el estado del agente, lo no leído y la pull request de un espacio de trabajo como un único icono de color antes del título, en lugar de filas separadas. Pasa el cursor sobre el icono para ver los detalles." + "value": "Die Teamänderung wurde übernommen, aber cmux hat den aktualisierten Status nicht innerhalb von 10 Sekunden gemeldet. Führe `cmux auth status` aus, um es zu prüfen." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher l’état de l’agent, des éléments non lus et de la pull request d’un espace de travail sous forme d’une seule icône colorée avant le titre, au lieu de lignes distinctes. Survolez l’icône pour voir les détails." + "value": "Le changement d’équipe a été appliqué, mais cmux n’a pas signalé le statut mis à jour dans les 10 secondes. Exécutez `cmux auth status` pour confirmer." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "ワークスペースのエージェント、未読、プルリクエストの状態を、個別の行ではなくタイトルの前の色付きアイコン1つで示します。詳細はアイコンにポインタを合わせると表示されます。" + "value": "تم تطبيق تغيير الفريق، لكن cmux لم يُبلّغ عن الحالة المحدّثة خلال 10 ثوانٍ. شغّل `cmux auth status` للتأكيد." } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "워크스페이스의 에이전트, 읽지 않음, 풀 리퀘스트 상태를 별도의 줄이 아니라 제목 앞의 색상 아이콘 하나로 나타냅니다. 자세한 내용은 아이콘 위에 포인터를 올려 확인하세요." + "value": "El cambio de equipo se aplicó, pero cmux no informó el estado actualizado en 10 segundos. Ejecuta `cmux auth status` para confirmarlo." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "用标题前的单个彩色图标表示工作区的代理、未读和拉取请求状态,而不是各自占一行。将指针悬停在图标上可查看详细信息。" + "value": "團隊變更已套用,但 cmux 未能在 10 秒內回報更新後的狀態。請執行 `cmux auth status` 確認。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "以標題前的單一彩色圖示表示工作區的代理、未讀與拉取請求狀態,而非各自佔一行。將游標移到圖示上可查看詳細資訊。" + "value": "팀 변경은 적용되었지만 cmux가 10초 안에 업데이트된 상태를 보고하지 않았습니다. `cmux auth status`를 실행해 확인하세요." } } } }, - "settings.search.alias.setting.app.compact-agent-status": { + "settings.mobile.browserTunnel.allowOtherHosts": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex مختصر وكيل حالة أيقونة سطر العنوان" + "value": "iOS Browser Reaches Other Hosts" } }, "de": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex kompakt Agent Status Symbol Titelzeile" + "value": "iOS-Browser erreicht andere Hosts" } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex" + "value": "Le navigateur iOS accède aux autres hôtes" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex compacto agente estado icono línea de título" + "value": "متصفح iOS يصل إلى مضيفين آخرين" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex compact agent statut icône ligne de titre" + "value": "El navegador de iOS accede a otros hosts" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex コンパクト エージェント 状態 アイコン タイトル行" + "value": "iOS 瀏覽器可連線至其他主機" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 간결 에이전트 상태 아이콘 제목 줄" + "value": "iOS 浏览器可访问其他主机" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精简 代理 状态 图标 标题行" + "value": "iOS 브라우저의 다른 호스트 접근" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精簡 代理 狀態 圖示 標題列" + "value": "iOSブラウザから他のホストに接続" } } } }, - "sidebar.agentStatus.glyph.tooltip": { + "settings.mobile.browserTunnel.allowOtherHosts.subtitleOn": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "The iOS browser can load LAN, VPN, and internet hosts through this Mac. Link-local and cloud metadata addresses never go through this Mac; the phone loads them itself." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Der iOS-Browser kann LAN-, VPN- und Internet-Hosts über diesen Mac laden. Link-Local- und Cloud-Metadatenadressen laufen nie über diesen Mac; das iPhone lädt sie selbst." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Le navigateur iOS peut charger des hôtes du réseau local, du VPN et d’Internet via ce Mac. Les adresses link-local et de métadonnées cloud ne passent jamais par ce Mac ; l’iPhone les charge lui-même." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "يمكن لمتصفح iOS تحميل مضيفي الشبكة المحلية وVPN والإنترنت عبر جهاز Mac هذا. لا تمر عناوين الارتباط المحلي وعناوين بيانات التعريف السحابية عبر جهاز Mac هذا أبدًا؛ يحمّلها iPhone بنفسه." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "%1$@ : %2$@" + "value": "El navegador de iOS puede cargar hosts de la red local, VPN e internet a través de este Mac. Las direcciones link-local y de metadatos en la nube nunca pasan por este Mac; el iPhone las carga por sí mismo." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@:%2$@" + "value": "iOS 瀏覽器可透過這台 Mac 載入區域網路、VPN 與網際網路主機。連結本機位址與雲端中繼資料位址絕不經過這台 Mac,由 iPhone 自行載入。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "iOS 浏览器可通过这台 Mac 加载局域网、VPN 和互联网主机。链路本地地址和云元数据地址绝不经过这台 Mac,由 iPhone 自行加载。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$@:%2$@" + "value": "iOS 브라우저가 이 Mac을 통해 LAN, VPN, 인터넷 호스트를 불러올 수 있습니다. 링크 로컬 및 클라우드 메타데이터 주소는 이 Mac을 거치지 않으며 iPhone이 직접 불러옵니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$@:%2$@" + "value": "iOSブラウザはこのMac経由でLAN、VPN、インターネット上のホストを読み込めます。リンクローカルとクラウドメタデータのアドレスはこのMacを経由せず、iPhoneが直接読み込みます。" } } } }, - "sidebar.compactStatus.profile": { + "settings.mobile.browserTunnel.allowOtherHosts.subtitleOff": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Profile" + "value": "The iOS browser reaches only this Mac's localhost through this Mac. Other sites load over the phone's own network." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "الملف الشخصي" + "value": "Der iOS-Browser erreicht über diesen Mac nur dessen localhost. Andere Websites werden über das eigene Netzwerk des Telefons geladen." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Profil" + "value": "Via ce Mac, le navigateur iOS n’accède qu’au localhost de ce Mac. Les autres sites se chargent via le réseau du téléphone." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Perfil" + "value": "لا يصل متصفح iOS عبر جهاز Mac هذا إلا إلى localhost الخاص به. تُحمَّل المواقع الأخرى عبر شبكة الهاتف نفسه." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Profil" + "value": "A través de este Mac, el navegador de iOS solo accede a su localhost. Los demás sitios se cargan con la red del propio teléfono." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "プロファイル" + "value": "iOS 瀏覽器只會透過這台 Mac 連線至它的 localhost。其他網站會透過手機本身的網路載入。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "프로필" + "value": "iOS 浏览器只会通过这台 Mac 访问它的 localhost。其他网站通过手机自身的网络加载。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "配置文件" + "value": "iOS 브라우저는 이 Mac을 통해 이 Mac의 localhost에만 접근합니다. 다른 사이트는 휴대폰 자체 네트워크로 불러옵니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "設定檔" + "value": "iOSブラウザがこのMac経由で接続するのは、このMacのlocalhostだけです。他のサイトは電話自身のネットワークで読み込みます。" } } } }, - "cli.sshPtyAttach.launchAcknowledgementTimeoutRetry": { + "settings.search.alias.setting.mobile.browserTunnelAllowOtherHosts": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux did not acknowledge the SSH launch; retrying %s in %ss." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security" } }, "de": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux hat den SSH-Start nicht bestätigt; neuer Versuch %s in %ss." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security mobil browser tunnel proxy lokales netzwerk hosts netzwerk sicherheit" } }, "fr": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux n’a pas confirmé le démarrage SSH ; nouvelle tentative %s dans %ss." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security mobile navigateur tunnel proxy réseau local hôtes réseau sécurité" } }, "ar": { "stringUnit": { "state": "translated", - "value": "[cmux] لم يؤكد cmux بدء SSH؛ ستتم إعادة المحاولة %s خلال %s ث." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security متصفح نفق وكيل شبكة محلية مضيفون شبكة أمان" } }, "es": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux no confirmó el inicio de SSH; reintentando %s en %ss." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security móvil navegador túnel proxy red local hosts red seguridad" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux 未確認 SSH 啟動;將在第 %s 次於 %s 秒後重試。" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 行動裝置 瀏覽器 通道 代理 區域網路 主機 網路 安全性" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux 未确认 SSH 启动;将在第 %s 次于 %s 秒后重试。" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 移动 浏览器 隧道 代理 局域网 主机 网络 安全" } }, "ko": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux가 SSH 시작을 확인하지 못했습니다. %s번째로 %s초 후 다시 시도합니다." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 모바일 브라우저 터널 프록시 로컬 네트워크 호스트 네트워크 보안" } }, "ja": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux が SSH の起動を確認できないため、%s 回目を %s 秒後に再試行します。" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux nije potvrdio SSH pokretanje; ponovni pokušaj %s za %ss." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux bekræftede ikke SSH-starten; prøver igen %s om %ss." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security モバイル ブラウザ トンネル プロキシ ローカルネットワーク ホスト ネットワーク セキュリティ" } - }, - "it": { + } + } + }, + "cli.browser.inputFiles.error.usage": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux non ha confermato l’avvio SSH; nuovo tentativo %s tra %ss." + "value": "set-input-files requires --selector and either --file (repeatable) or --clear" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux មិនបានបញ្ជាក់ការចាប់ផ្តើម SSH ទេ; កំពុងព្យាយាមម្តងទៀត %s ក្នុងរយៈពេល %ss។" + "value": "يتطلب set-input-files الخيار --selector مع --file (يمكن تكراره) أو --clear" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux bekreftet ikke SSH-oppstarten; prøver på nytt %s om %ss." + "value": "set-input-files benötigt --selector und entweder --file (wiederholbar) oder --clear" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux nie potwierdził uruchomienia SSH; ponawianie próby %s za %ss." + "value": "set-input-files requiere --selector y --file (repetible) o --clear" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "[cmux] o cmux não confirmou o início do SSH; tentando novamente %s em %ss." + "value": "set-input-files nécessite --selector et soit --file (répétable), soit --clear" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux не подтвердил запуск SSH; повторная попытка %s через %ss." + "value": "set-input-files には --selector と、--file (複数指定可)または --clear が必要です" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux ไม่ยืนยันการเริ่มต้น SSH; กำลังลองใหม่ครั้งที่ %s ในอีก %s วินาที" + "value": "set-input-files에는 --selector 와 --file (반복 가능) 또는 --clear가 필요합니다" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux SSH başlatmasını onaylamadı; %s saniye içinde %s. deneme yapılıyor." + "value": "set-input-files 需要 --selector ,以及 --file (可重复)或 --clear" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux не підтвердив запуск SSH; повторна спроба %s через %s с." + "value": "set-input-files 需要 --selector ,以及 --file (可重複)或 --clear" } } } }, - "cloudTree.port.openInCmux": { + "cli.browser.inputFiles.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open in cmux" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Select local files (up to 128 files, 32 MiB total) or clear the selection. Directory uploads are unsupported." } }, "ar": { "stringUnit": { "state": "translated", - "value": "فتح في cmux" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n اختر ملفات محلية (حتى 128 ملفًا بإجمالي 32 MiB) أو امسح الاختيار. رفع المجلدات غير مدعوم." } }, "de": { "stringUnit": { "state": "translated", - "value": "In cmux öffnen" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Lokale Dateien auswählen (bis zu 128 Dateien, insgesamt 32 MiB) oder die Auswahl leeren. Ordner-Uploads werden nicht unterstützt." } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir en cmux" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Selecciona archivos locales (hasta 128 archivos, 32 MiB en total) o borra la selección. No se admite subir carpetas." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir dans cmux" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Sélectionner des fichiers locaux (jusqu’à 128 fichiers, 32 MiB au total) ou effacer la sélection. L’envoi de dossiers n’est pas pris en charge." } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmuxで開く" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n ローカルファイルを選択(最大128個、合計32 MiB)するか、選択を解除します。ディレクトリのアップロードには対応していません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux에서 열기" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 로컬 파일을 선택하거나(최대 128개, 총 32 MiB) 선택을 지웁니다. 디렉터리 업로드는 지원되지 않습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在 cmux 中打开" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 选择本地文件(最多 128 个文件,总计 32 MiB)或清除选择。不支持上传目录。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "在 cmux 中開啟" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 選取本機檔案(最多 128 個檔案,總計 32 MiB)或清除選取。不支援上傳目錄。" } } } }, - "cloudTree.port.openInCmux.help": { + "browser.inputFiles.error.invalidTarget": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open in cmux. No VPN setup needed." + "value": "The selector must match a file input without directory selection" } }, "ar": { "stringUnit": { "state": "translated", - "value": "افتح في cmux. لا يلزم إعداد VPN." + "value": "يجب أن يطابق المحدد حقل إدخال ملفات لا يستخدم اختيار المجلدات" } }, "de": { "stringUnit": { "state": "translated", - "value": "In cmux öffnen. Keine VPN-Einrichtung nötig." + "value": "Der Selektor muss ein Dateieingabefeld ohne Ordnerauswahl treffen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir en cmux. No hace falta configurar una VPN." + "value": "El selector debe coincidir con un campo de archivos sin selección de carpetas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir dans cmux. Aucune configuration VPN nécessaire." + "value": "Le sélecteur doit correspondre à un champ de fichier sans sélection de dossier" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux で開きます。VPN の設定は不要です。" + "value": "セレクターはディレクトリ選択を使わないファイル入力欄に一致する必要があります" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux에서 열기. VPN 설정이 필요하지 않습니다." + "value": "선택자는 디렉터리 선택이 없는 파일 입력 요소와 일치해야 합니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在 cmux 中打开。无需设置 VPN。" + "value": "选择器必须匹配未启用目录选择的文件输入字段" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "在 cmux 中開啟。無需設定 VPN。" + "value": "選取器必須符合未啟用目錄選取的檔案輸入欄位" } } } }, - "cloudTree.port.title": { + "browser.inputFiles.error.multipleRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Port %@" + "value": "This file input does not allow multiple files" } }, "ar": { "stringUnit": { "state": "translated", - "value": "المنفذ %@" + "value": "لا يسمح حقل إدخال الملفات هذا باختيار عدة ملفات" } }, "de": { "stringUnit": { "state": "translated", - "value": "Port-Nr. %@" + "value": "Dieses Dateieingabefeld erlaubt nicht mehrere Dateien" } }, "es": { "stringUnit": { "state": "translated", - "value": "Puerto %@" + "value": "Este campo de archivos no permite seleccionar varios archivos" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Port n° %@" + "value": "Ce champ de fichier ne permet pas de sélectionner plusieurs fichiers" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ポート %@" + "value": "このファイル入力欄では複数のファイルを選択できません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포트 %@" + "value": "이 파일 입력 요소는 여러 파일을 허용하지 않습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "端口 %@" + "value": "此文件输入字段不允许选择多个文件" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "連接埠 %@" + "value": "此檔案輸入欄位不允許選取多個檔案" } } } }, - "cloudTree.placeholder.deviceOffline": { + "browser.inputFiles.error.cancelled": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Offline — its workspaces return when it does" + "value": "File upload preparation was cancelled" } }, "ar": { "stringUnit": { "state": "translated", - "value": "غير متصل — ستعود مساحات عمله عند اتصاله مجددًا" + "value": "تم إلغاء تجهيز الملفات للرفع" } }, "de": { "stringUnit": { "state": "translated", - "value": "Offline — die Arbeitsbereiche erscheinen wieder, sobald das Gerät online ist" + "value": "Die Vorbereitung des Datei-Uploads wurde abgebrochen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Sin conexión — sus espacios de trabajo volverán cuando se conecte" + "value": "Se canceló la preparación de los archivos para subir" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Hors ligne — ses espaces de travail réapparaîtront à sa reconnexion" + "value": "La préparation des fichiers à envoyer a été annulée" } }, "ja": { "stringUnit": { "state": "translated", - "value": "オフライン — 再接続するとワークスペースが戻ります" + "value": "ファイルのアップロード準備がキャンセルされました" } }, "ko": { "stringUnit": { "state": "translated", - "value": "오프라인 — 다시 연결되면 작업 공간이 돌아옵니다" + "value": "파일 업로드 준비가 취소되었습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "离线 — 重新连接后会恢复工作区" + "value": "已取消准备上传文件" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "離線 — 重新連線後會恢復工作區" + "value": "已取消準備上傳檔案" } } } }, - "socket.mainActorHop.timeout.mayHaveRun": { + "browser.inputFiles.error.invalidParameters": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux did not respond within 10 seconds after the command started, so its result is unknown. Check the effect before retrying." + "value": "set-input-files requires a selector and a files array of absolute paths" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "コマンドの開始後 10 秒以内に cmux が応答しなかったため、結果は不明です。再試行する前に効果を確認してください。" + "value": "يتطلب set-input-files محددًا ومصفوفة files تحتوي على مسارات مطلقة" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "命令开始后 10 秒内 cmux 没有响应,因此结果未知。请先确认效果再重试。" + "value": "set-input-files benötigt einen Selektor und ein files-Array mit absoluten Pfaden" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux hat innerhalb von 10 Sekunden nach dem Start des Befehls nicht geantwortet, das Ergebnis ist daher unbekannt. Prüfe die Auswirkung, bevor du es erneut versuchst." + "value": "set-input-files requiere un selector y una matriz files de rutas absolutas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux n’a pas répondu dans les 10 secondes suivant le démarrage de la commande, son résultat est donc inconnu. Vérifiez l’effet avant de réessayer." + "value": "set-input-files nécessite un sélecteur et un tableau files de chemins absolus" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "لم يستجب cmux خلال 10 ثوانٍ بعد بدء الأمر، لذا فإن نتيجته غير معروفة. تحقق من الأثر قبل إعادة المحاولة." + "value": "set-input-files にはセレクターと絶対パスを含む files 配列が必要です" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux no respondió en los 10 segundos posteriores al inicio del comando, por lo que su resultado es desconocido. Comprueba el efecto antes de reintentar." + "value": "set-input-files에는 선택자와 절대 경로로 구성된 files 배열이 필요합니다" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "命令開始後 10 秒內 cmux 沒有回應,因此結果未知。請先確認效果再重試。" + "value": "set-input-files 需要选择器及包含绝对路径的 files 数组" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "명령이 시작된 후 10초 안에 cmux가 응답하지 않아 결과를 알 수 없습니다. 다시 시도하기 전에 효과를 확인하세요." + "value": "set-input-files 需要選取器及包含絕對路徑的 files 陣列" } } } }, - "socket.mainActorHop.timeout.notRun": { + "browser.inputFiles.error.invalidSelection": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux did not respond within 10 seconds, so the command was not run. Retry in a moment." + "value": "Select at most 128 files using absolute paths" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux が 10 秒以内に応答しなかったため、コマンドは実行されませんでした。しばらくしてから再試行してください。" + "value": "اختر ما يصل إلى 128 ملفًا باستخدام مسارات مطلقة" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux 在 10 秒内没有响应,因此未运行该命令。请稍后重试。" + "value": "Wählen Sie höchstens 128 Dateien mit absoluten Pfaden aus" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux hat innerhalb von 10 Sekunden nicht geantwortet, der Befehl wurde daher nicht ausgeführt. Versuche es gleich noch einmal." + "value": "Selecciona como máximo 128 archivos mediante rutas absolutas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux n’a pas répondu dans les 10 secondes, la commande n’a donc pas été exécutée. Réessayez dans un instant." + "value": "Sélectionnez au maximum 128 fichiers avec des chemins absolus" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "لم يستجب cmux خلال 10 ثوانٍ، لذا لم يتم تنفيذ الأمر. أعد المحاولة بعد لحظات." + "value": "絶対パスで最大128個のファイルを選択してください" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux no respondió en 10 segundos, por lo que el comando no se ejecutó. Reintenta en un momento." + "value": "절대 경로를 사용하여 최대 128개의 파일을 선택하세요" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 在 10 秒內沒有回應,因此未執行該命令。請稍後重試。" + "value": "请使用绝对路径选择最多 128 个文件" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux가 10초 안에 응답하지 않아 명령이 실행되지 않았습니다. 잠시 후 다시 시도하세요." + "value": "請使用絕對路徑選取最多 128 個檔案" } } } }, - "socket.overloaded.message": { + "browser.inputFiles.error.timeout": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux is handling too many control-socket requests right now, so this one was not run. Retry in a moment." + "value": "Timed out preparing files for upload" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux は現在、制御ソケットの要求を処理しきれないため、この要求は実行されませんでした。しばらくしてから再試行してください。" + "value": "انتهت مهلة تجهيز الملفات للرفع" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux 当前正在处理过多的控制套接字请求,因此未运行此请求。请稍后重试。" + "value": "Zeitüberschreitung beim Vorbereiten der Dateien für den Upload" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux verarbeitet gerade zu viele Control-Socket-Anfragen, diese wurde daher nicht ausgeführt. Versuche es gleich noch einmal." + "value": "Se agotó el tiempo de preparación de los archivos para subir" } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux traite actuellement trop de requêtes du socket de contrôle, celle-ci n’a donc pas été exécutée. Réessayez dans un instant." + "value": "Le délai de préparation des fichiers à envoyer a été dépassé" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "يعالج cmux حاليًا عددًا كبيرًا جدًا من طلبات مقبس التحكم، لذا لم يتم تنفيذ هذا الطلب. أعد المحاولة بعد لحظات." + "value": "アップロードするファイルの準備がタイムアウトしました" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux está gestionando demasiadas solicitudes del socket de control ahora mismo, por lo que esta no se ejecutó. Reintenta en un momento." + "value": "업로드할 파일 준비 시간이 초과되었습니다" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 目前正在處理過多的控制 socket 請求,因此未執行此請求。請稍後重試。" + "value": "准备上传文件超时" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux가 지금 너무 많은 제어 소켓 요청을 처리하고 있어 이 요청은 실행되지 않았습니다. 잠시 후 다시 시도하세요." + "value": "準備上傳檔案逾時" } } } }, - "socket.request.cancelled": { + "browser.inputFiles.error.tooLarge": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Request was cancelled" + "value": "The combined upload must be no larger than 32 MiB" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "リクエストはキャンセルされました" + "value": "يجب ألا يتجاوز الحجم الإجمالي للملفات المرفوعة 32 MiB" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "请求已取消" + "value": "Die Uploads dürfen insgesamt nicht größer als 32 MiB sein" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Die Anfrage wurde abgebrochen" + "value": "El tamaño total de los archivos para subir no debe superar los 32 MiB" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La requête a été annulée" + "value": "La taille totale des fichiers à envoyer ne doit pas dépasser 32 MiB" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تم إلغاء الطلب" + "value": "アップロードするファイルの合計サイズは32 MiB以下にしてください" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Se canceló la solicitud" + "value": "전체 업로드 크기는 32 MiB를 초과할 수 없습니다" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "請求已取消" + "value": "上传文件的总大小不得超过 32 MiB" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "요청이 취소되었습니다" + "value": "上傳檔案的總大小不得超過 32 MiB" } } } }, - "socket.request.failedBeforeResult": { + "browser.inputFiles.error.unreadableFile": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Request failed before returning a result" + "value": "Every upload path must be a readable regular file" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "結果を返す前にリクエストが失敗しました" + "value": "يجب أن يشير كل مسار للرفع إلى ملف عادي قابل للقراءة" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "请求在返回结果之前失败" + "value": "Jeder Upload-Pfad muss auf eine lesbare reguläre Datei verweisen" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Die Anfrage ist fehlgeschlagen, bevor ein Ergebnis zurückgegeben wurde" + "value": "Cada ruta de subida debe apuntar a un archivo normal que se pueda leer" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La requête a échoué avant de renvoyer un résultat" + "value": "Chaque chemin à envoyer doit désigner un fichier ordinaire lisible" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "فشل الطلب قبل إرجاع نتيجة" + "value": "各アップロードパスは読み取り可能な通常ファイルである必要があります" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "La solicitud falló antes de devolver un resultado" + "value": "모든 업로드 경로는 읽을 수 있는 일반 파일이어야 합니다" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "請求在傳回結果之前失敗" + "value": "每个上传路径都必须指向可读取的普通文件" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "결과를 반환하기 전에 요청이 실패했습니다" + "value": "每個上傳路徑都必須指向可讀取的一般檔案" } } } }, - "agent.codex.fork.notice.body": { + "cloudTree.group.cloudMachines.usage": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux could not identify the new fork session. Start the fork again from the parent pane." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux は新しいフォーク セッションを特定できませんでした。親ペインからもう一度フォークしてください。" + "value": "%1$d/%2$d" } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux konnte die neue Fork-Sitzung nicht erkennen. Starten Sie den Fork erneut im übergeordneten Pane." + "value": "%1$d/%2$d" } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux n’a pas pu identifier la nouvelle session forkée. Relancez le fork depuis le volet parent." + "value": "%1$d/%2$d" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذر على cmux تحديد جلسة التفريع الجديدة. ابدأ التفريع مرة أخرى من الجزء الأصلي." + "value": "%1$d/%2$d" } }, "es": { "stringUnit": { "state": "translated", - "value": "cmux no pudo identificar la nueva sesión bifurcada. Inicia el fork de nuevo desde el panel principal." + "value": "%1$d/%2$d" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux 無法識別新的分支工作階段。請從父窗格重新開始分支。" + "value": "%1$d/%2$d" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 无法识别新的分支会话。请从父窗格重新开始分支。" + "value": "%1$d/%2$d" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux가 새 포크 세션을 식별하지 못했습니다. 부모 패널에서 포크를 다시 시작하세요." + "value": "%1$d/%2$d" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%1$d/%2$d" } }, "bs": { "stringUnit": { "state": "translated", - "value": "cmux nije mogao prepoznati novu sesiju račvanja. Ponovo pokrenite račvanje iz nadređenog okna." + "value": "%1$d/%2$d" } }, "da": { "stringUnit": { "state": "translated", - "value": "cmux kunne ikke identificere den nye forgreningssession. Start forgreningen igen fra forældreruden." + "value": "%1$d/%2$d" } }, "it": { "stringUnit": { "state": "translated", - "value": "cmux non ha potuto identificare la nuova sessione fork. Avvia di nuovo il fork dal riquadro principale." + "value": "%1$d/%2$d" } }, "km": { "stringUnit": { "state": "translated", - "value": "cmux មិនអាចកំណត់អត្តសញ្ញាណសម័យ fork ថ្មីបានទេ។ ចាប់ផ្ដើម fork ម្ដងទៀតពីផ្ទាំងមេ។" + "value": "%1$d/%2$d" } }, "nb": { "stringUnit": { "state": "translated", - "value": "cmux kunne ikke identifisere den nye forgreningsøkten. Start forgreningen på nytt fra den overordnede ruten." + "value": "%1$d/%2$d" } }, "pl": { "stringUnit": { "state": "translated", - "value": "cmux nie mógł zidentyfikować nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." + "value": "%1$d/%2$d" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O cmux não conseguiu identificar a nova sessão bifurcada. Inicie o fork novamente no painel principal." + "value": "%1$d/%2$d" } }, "ru": { "stringUnit": { "state": "translated", - "value": "cmux не удалось определить новый сеанс форка. Запустите форк снова из родительской панели." + "value": "%1$d/%2$d" } }, "th": { "stringUnit": { "state": "translated", - "value": "cmux ไม่สามารถระบุเซสชันที่แยกใหม่ได้ เริ่มการแยกอีกครั้งจากบานหน้าต่างหลัก" + "value": "%1$d/%2$d" } }, "tr": { "stringUnit": { "state": "translated", - "value": "cmux yeni fork oturumunu belirleyemedi. Fork'u üst panelden yeniden başlatın." + "value": "%1$d/%2$d" } }, "uk": { "stringUnit": { "state": "translated", - "value": "cmux не вдалося визначити новий сеанс форка. Запустіть форк ще раз із батьківської панелі." + "value": "%1$d/%2$d" } } } }, - "agent.codex.fork.notice.parentClearFailed.body": { + "cloud.ports.vpnOff.explanation": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux could not safely detach the parent session, so the fork was not started. Retry the fork from the parent pane." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux は新しいフォーク セッションを安全にバインドできませんでした。親ペインからもう一度フォークしてください。" + "value": "Ports open in cmux without setup. To use private addresses in other apps, set up Cloud VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux konnte die neue Fork-Sitzung nicht sicher binden. Starten Sie den Fork erneut im übergeordneten Pane." + "value": "Ports lassen sich in cmux ohne Einrichtung öffnen. Richte Cloud-VPN ein, um private Adressen in anderen Apps zu verwenden." } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux n’a pas pu lier la nouvelle session forkée en toute sécurité. Relancez le fork depuis le volet parent." + "value": "Les ports s’ouvrent dans cmux sans configuration. Pour utiliser les adresses privées dans d’autres apps, configurez le VPN Cloud." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذر على cmux ربط جلسة التفريع الجديدة بأمان. أعد بدء التفريع من الجزء الأصلي." + "value": "تُفتح المنافذ في cmux دون إعداد. لاستخدام العناوين الخاصة في التطبيقات الأخرى، أعدّ Cloud VPN." } }, "es": { "stringUnit": { "state": "translated", - "value": "cmux no pudo vincular de forma segura la nueva sesión bifurcada. Inicia el fork de nuevo desde el panel principal." + "value": "Los puertos se abren en cmux sin configuración. Para usar direcciones privadas en otras apps, configura Cloud VPN." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux 無法安全繫結新的分支工作階段。請從父窗格重新開始分支。" + "value": "無需設定即可在 cmux 中開啟連接埠。如要在其他 App 使用私有位址,請設定 Cloud VPN。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 无法安全绑定新的分支会话。请从父窗格重新开始分支。" + "value": "无需设置即可在 cmux 中打开端口。要在其他应用中使用私有地址,请设置云 VPN。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux가 새 포크 세션을 안전하게 연결하지 못했습니다. 부모 패널에서 포크를 다시 시작하세요." + "value": "별도 설정 없이 cmux에서 포트를 열 수 있습니다. 다른 앱에서 비공개 주소를 사용하려면 Cloud VPN을 설정하세요." } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux nije mogao sigurno povezati novu sesiju račvanja. Ponovo pokrenite račvanje iz nadređenog okna." + "value": "設定なしで cmux 内のポートを開けます。他のアプリでプライベートアドレスを使うには、Cloud VPN を設定してください。" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Portovi se otvaraju u cmux-u bez podešavanja. Za korištenje privatnih adresa u drugim aplikacijama podesite Cloud VPN." } }, "da": { "stringUnit": { - "state": "translated", - "value": "cmux kunne ikke binde den nye forgreningssession sikkert. Start forgreningen igen fra forældreruden." + "state": "needs_review", + "value": "Porte åbnes i cmux uden opsætning. Opsæt Cloud VPN for at bruge private adresser i andre apps." } }, "it": { "stringUnit": { - "state": "translated", - "value": "cmux non ha potuto associare in sicurezza la nuova sessione fork. Avvia di nuovo il fork dal riquadro principale." + "state": "needs_review", + "value": "Le porte si aprono in cmux senza configurazione. Per usare gli indirizzi privati in altre app, configura Cloud VPN." } }, "km": { "stringUnit": { - "state": "translated", - "value": "cmux មិនអាចភ្ជាប់សម័យ fork ថ្មីដោយសុវត្ថិភាពបានទេ។ ចាប់ផ្ដើម fork ម្ដងទៀតពីផ្ទាំងមេ។" + "state": "needs_review", + "value": "ច្រកអាចបើកក្នុង cmux ដោយមិនចាំបាច់រៀបចំ។ ដើម្បីប្រើអាសយដ្ឋានឯកជនក្នុងកម្មវិធីផ្សេងទៀត សូមរៀបចំ Cloud VPN។" } }, "nb": { "stringUnit": { - "state": "translated", - "value": "cmux kunne ikke binde den nye forgreningsøkten på en trygg måte. Start forgreningen på nytt fra den overordnede ruten." + "state": "needs_review", + "value": "Porter åpnes i cmux uten oppsett. Sett opp Cloud VPN for å bruke private adresser i andre apper." } }, "pl": { "stringUnit": { - "state": "translated", - "value": "cmux nie mógł bezpiecznie powiązać nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." + "state": "needs_review", + "value": "Porty otwierają się w cmux bez konfiguracji. Aby używać prywatnych adresów w innych aplikacjach, skonfiguruj Cloud VPN." } }, "pt-BR": { "stringUnit": { - "state": "translated", - "value": "O cmux não conseguiu vincular com segurança a nova sessão bifurcada. Inicie o fork novamente no painel principal." + "state": "needs_review", + "value": "As portas abrem no cmux sem configuração. Para usar endereços privados em outros apps, configure o Cloud VPN." } }, "ru": { "stringUnit": { - "state": "translated", - "value": "cmux не удалось безопасно привязать новый сеанс форка. Запустите форк снова из родительской панели." + "state": "needs_review", + "value": "Порты открываются в cmux без настройки. Чтобы использовать приватные адреса в других приложениях, настройте Cloud VPN." } }, "th": { "stringUnit": { - "state": "translated", - "value": "cmux ไม่สามารถผูกเซสชันที่แยกใหม่ได้อย่างปลอดภัย เริ่มการแยกอีกครั้งจากบานหน้าต่างหลัก" + "state": "needs_review", + "value": "เปิดพอร์ตใน cmux ได้โดยไม่ต้องตั้งค่า หากต้องการใช้ที่อยู่ส่วนตัวในแอปอื่น ให้ตั้งค่า Cloud VPN" } }, "tr": { "stringUnit": { - "state": "translated", - "value": "cmux yeni fork oturumunu güvenli bir şekilde bağlayamadı. Fork'u üst panelden yeniden başlatın." + "state": "needs_review", + "value": "Bağlantı noktaları cmux içinde kurulum gerektirmeden açılır. Diğer uygulamalarda özel adresleri kullanmak için Cloud VPN’i kurun." } }, "uk": { "stringUnit": { - "state": "translated", - "value": "cmux не вдалося безпечно прив’язати новий сеанс форка. Запустіть форк ще раз із батьківської панелі." + "state": "needs_review", + "value": "Порти відкриваються в cmux без налаштування. Щоб використовувати приватні адреси в інших застосунках, налаштуйте Cloud VPN." } } } }, - "agent.codex.fork.notice.subtitle": { + "cloud.ports.vpnOff.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fork unavailable" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "フォークを利用できません" + "value": "Optional: Cloud VPN" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fork nicht verfügbar" + "value": "Optional: Cloud-VPN" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fork indisponible" + "value": "Facultatif : VPN Cloud" } }, "ar": { "stringUnit": { "state": "translated", - "value": "التفريع غير متاح" + "value": "اختياري: Cloud VPN" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fork no disponible" + "value": "Opcional: Cloud VPN" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法使用分支" + "value": "選用:Cloud VPN" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "分支不可用" + "value": "可选:云 VPN" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포크를 사용할 수 없음" + "value": "선택 사항: Cloud VPN" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Račvanje nije dostupno" + "value": "任意:Cloud VPN" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Opcionalno: Cloud VPN" } }, "da": { "stringUnit": { - "state": "translated", - "value": "Fork ikke tilgængelig" + "state": "needs_review", + "value": "Valgfrit: Cloud VPN" } }, "it": { "stringUnit": { - "state": "translated", - "value": "Fork non disponibile" + "state": "needs_review", + "value": "Facoltativo: Cloud VPN" } }, "km": { "stringUnit": { - "state": "translated", - "value": "មិនអាចប្រើការបំបែកបាន" + "state": "needs_review", + "value": "ជាជម្រើស៖ Cloud VPN" } }, "nb": { "stringUnit": { - "state": "translated", - "value": "Fork utilgjengelig" + "state": "needs_review", + "value": "Valgfritt: Cloud VPN" } }, "pl": { "stringUnit": { - "state": "translated", - "value": "Fork niedostępny" + "state": "needs_review", + "value": "Opcjonalnie: Cloud VPN" } }, "pt-BR": { "stringUnit": { - "state": "translated", - "value": "Fork indisponível" + "state": "needs_review", + "value": "Opcional: Cloud VPN" } }, "ru": { "stringUnit": { - "state": "translated", - "value": "Форк недоступен" + "state": "needs_review", + "value": "Необязательно: Cloud VPN" } }, "th": { "stringUnit": { - "state": "translated", - "value": "ไม่สามารถใช้การแยกสาขาได้" + "state": "needs_review", + "value": "ตัวเลือกเพิ่มเติม: Cloud VPN" } }, "tr": { "stringUnit": { - "state": "translated", - "value": "Fork kullanılamıyor" + "state": "needs_review", + "value": "İsteğe bağlı: Cloud VPN" } }, "uk": { "stringUnit": { - "state": "translated", - "value": "Форк недоступний" + "state": "needs_review", + "value": "Необов’язково: Cloud VPN" } } } }, - "agent.codex.fork.notice.title": { + "cloud.vpn.setup.address.body": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Agent fork" + "value": "Each machine has its own private IP. Two machines may both expose port 3000, for example 10.40.0.10:3000 and 10.40.0.11:3000. Right-click a Cloud port and choose Copy Private Address URL after connecting. These addresses are private, not public share links." } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "エージェントフォーク" + "value": "Jede Maschine hat eine eigene private IP. Zwei Maschinen können beide Port 3000 verwenden, etwa 10.40.0.10:3000 und 10.40.0.11:3000. Klicken Sie nach dem Verbinden mit der rechten Maustaste auf einen Cloud-Port und wählen Sie URL der privaten Adresse kopieren. Diese Adressen sind privat und keine öffentlichen Freigabelinks." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Agent-Fork" + "value": "Chaque machine a sa propre IP privée. Deux machines peuvent utiliser le port 3000, par exemple 10.40.0.10:3000 et 10.40.0.11:3000. Après connexion, faites un clic droit sur un port Cloud et choisissez Copier l’URL de l’adresse privée. Ces adresses sont privées, ce ne sont pas des liens publics de partage." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Fork d’agent" + "value": "Cada máquina tiene su propia IP privada. Dos máquinas pueden usar el puerto 3000, como 10.40.0.10:3000 y 10.40.0.11:3000. Después de conectar, haz clic derecho en un puerto Cloud y elige Copiar URL de dirección privada. Estas direcciones son privadas, no enlaces públicos para compartir." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تفريع الوكيل" + "value": "各マシンには個別のプライベートIPがあります。2台のマシンがどちらもポート3000を使えます(例:10.40.0.10:3000と10.40.0.11:3000)。接続後にCloudポートを右クリックし、「プライベートアドレスURLをコピー」を選びます。これらはプライベートアドレスで、公開共有リンクではありません。" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Fork del agente" + "value": "每台机器都有自己的私有 IP。两台机器可以同时使用端口 3000,例如 10.40.0.10:3000 和 10.40.0.11:3000。连接后右键点击 Cloud 端口,选择“复制私有地址 URL”。这些地址是私有地址,不是公开分享链接。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "代理程式分支" + "value": "每台機器都有自己的私有 IP。兩台機器可以同時使用連接埠 3000,例如 10.40.0.10:3000 和 10.40.0.11:3000。連線後對 Cloud 連接埠按右鍵,選擇「複製私有位址 URL」。這些位址是私有位址,不是公開分享連結。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "代理分支" + "value": "각 머신에는 고유한 비공개 IP가 있습니다. 두 머신 모두 포트 3000을 사용할 수 있습니다(예: 10.40.0.10:3000 및 10.40.0.11:3000). 연결 후 Cloud 포트를 오른쪽 클릭하고 비공개 주소 URL 복사를 선택하세요. 이 주소는 비공개이며 공개 공유 링크가 아닙니다." } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "에이전트 포크" + "value": "لكل جهاز عنوان IP خاص به. يمكن لجهازين استخدام المنفذ 3000، مثل 10.40.0.10:3000 و10.40.0.11:3000. بعد الاتصال، انقر بزر الماوس الأيمن على منفذ Cloud واختر نسخ رابط العنوان الخاص. هذه عناوين خاصة وليست روابط مشاركة عامة." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Račvanje agenta" + "value": "Svaka mašina ima svoju privatnu IP adresu. Dvije mašine mogu koristiti port 3000, na primjer 10.40.0.10:3000 i 10.40.0.11:3000. Nakon povezivanja kliknite desnim dugmetom na Cloud port i izaberite Kopiraj URL privatne adrese. Ovo su privatne adrese, a ne javne veze za dijeljenje." } }, "da": { "stringUnit": { "state": "translated", - "value": "Agentfork" + "value": "Hver maskine har sin egen private IP. To maskiner kan begge bruge port 3000, f.eks. 10.40.0.10:3000 og 10.40.0.11:3000. Højreklik på en Cloud-port efter tilslutning, og vælg Kopiér URL til privat adresse. Adresserne er private, ikke offentlige delelinks." } }, "it": { "stringUnit": { "state": "translated", - "value": "Fork dell'agente" + "value": "Ogni macchina ha il proprio IP privato. Due macchine possono usare entrambe la porta 3000, ad esempio 10.40.0.10:3000 e 10.40.0.11:3000. Dopo la connessione fai clic destro su una porta Cloud e scegli Copia URL indirizzo privato. Sono indirizzi privati, non link pubblici." } }, "km": { "stringUnit": { "state": "translated", - "value": "ការបំបែកភ្នាក់ងារ" + "value": "ម៉ាស៊ីននីមួយៗមាន IP ឯកជនផ្ទាល់ខ្លួន។ ម៉ាស៊ីនពីរអាចប្រើច្រក 3000 ដូចគ្នា ឧទាហរណ៍ 10.40.0.10:3000 និង 10.40.0.11:3000។ បន្ទាប់ពីភ្ជាប់ ចុចខាងស្តាំលើច្រក Cloud ហើយជ្រើស ចម្លង URL អាសយដ្ឋានឯកជន។ ទាំងនេះជាអាសយដ្ឋានឯកជន មិនមែនតំណចែករំលែកសាធារណៈទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Agentforgrening" + "value": "Hver maskin har sin egen private IP. To maskiner kan bruke port 3000, for eksempel 10.40.0.10:3000 og 10.40.0.11:3000. Høyreklikk en Cloud-port etter tilkobling og velg Kopier URL for privat adresse. Adressene er private, ikke offentlige delingslenker." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Fork agenta" + "value": "Każda maszyna ma własny prywatny adres IP. Dwie maszyny mogą używać portu 3000, na przykład 10.40.0.10:3000 i 10.40.0.11:3000. Po połączeniu kliknij prawym przyciskiem port Cloud i wybierz Kopiuj URL prywatnego adresu. To prywatne adresy, nie publiczne linki udostępniania." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fork do agente" + "value": "Cada máquina tem seu próprio IP privado. Duas máquinas podem usar a porta 3000, por exemplo 10.40.0.10:3000 e 10.40.0.11:3000. Depois de conectar, clique com o botão direito em uma porta Cloud e escolha Copiar URL do endereço privado. Esses endereços são privados, não links públicos de compartilhamento." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Форк агента" + "value": "У каждой машины свой частный IP. Две машины могут использовать порт 3000, например 10.40.0.10:3000 и 10.40.0.11:3000. После подключения щёлкните правой кнопкой мыши порт Cloud и выберите Скопировать URL частного адреса. Это частные адреса, а не публичные ссылки." } }, "th": { "stringUnit": { "state": "translated", - "value": "การแยกสาขาของเอเจนต์" + "value": "แต่ละเครื่องมี IP ส่วนตัวของตนเอง สองเครื่องสามารถใช้พอร์ต 3000 ได้ เช่น 10.40.0.10:3000 และ 10.40.0.11:3000 หลังเชื่อมต่อ คลิกขวาที่พอร์ต Cloud แล้วเลือกคัดลอก URL ที่อยู่ส่วนตัว ที่อยู่เหล่านี้เป็นส่วนตัว ไม่ใช่ลิงก์สาธารณะ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ajan çatalı" + "value": "Her makinenin kendi özel IP’si vardır. İki makine 3000 bağlantı noktasını kullanabilir; örneğin 10.40.0.10:3000 ve 10.40.0.11:3000. Bağlandıktan sonra bir Cloud portuna sağ tıklayın ve Özel Adres URL’sini Kopyala’yı seçin. Bunlar özel adreslerdir, herkese açık paylaşım bağlantıları değildir." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Форк агента" + "value": "Кожна машина має власну приватну IP-адресу. Дві машини можуть використовувати порт 3000, наприклад 10.40.0.10:3000 і 10.40.0.11:3000. Після підключення клацніть правою кнопкою миші порт Cloud і виберіть Копіювати URL приватної адреси. Це приватні адреси, а не публічні посилання для спільного доступу." } } } }, - "socket.authTeam.committedStatusTimedOut": { + "cloud.vpn.setup.cancel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The team change was applied, but cmux did not report the updated status within 10 seconds. Run `cmux auth status` to confirm." + "value": "Cancel" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Abbrechen" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Annuler" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Cancelar" } }, "ja": { "stringUnit": { "state": "translated", - "value": "チームの変更は適用されましたが、cmux は 10 秒以内に更新後のステータスを報告しませんでした。`cmux auth status` を実行して確認してください。" + "value": "キャンセル" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "团队更改已应用,但 cmux 未能在 10 秒内报告更新后的状态。请运行 `cmux auth status` 确认。" + "value": "取消" } }, - "de": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Die Teamänderung wurde übernommen, aber cmux hat den aktualisierten Status nicht innerhalb von 10 Sekunden gemeldet. Führe `cmux auth status` aus, um es zu prüfen." + "value": "取消" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Le changement d’équipe a été appliqué, mais cmux n’a pas signalé le statut mis à jour dans les 10 secondes. Exécutez `cmux auth status` pour confirmer." + "value": "취소" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تم تطبيق تغيير الفريق، لكن cmux لم يُبلّغ عن الحالة المحدّثة خلال 10 ثوانٍ. شغّل `cmux auth status` للتأكيد." + "value": "إلغاء" } }, - "es": { + "bs": { "stringUnit": { "state": "translated", - "value": "El cambio de equipo se aplicó, pero cmux no informó el estado actualizado en 10 segundos. Ejecuta `cmux auth status` para confirmarlo." + "value": "Otkaži" } }, - "zh-Hant": { + "da": { "stringUnit": { "state": "translated", - "value": "團隊變更已套用,但 cmux 未能在 10 秒內回報更新後的狀態。請執行 `cmux auth status` 確認。" + "value": "Annuller" } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "팀 변경은 적용되었지만 cmux가 10초 안에 업데이트된 상태를 보고하지 않았습니다. `cmux auth status`를 실행해 확인하세요." + "value": "Annulla" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "បោះបង់" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Avbryt" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Anuluj" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Cancelar" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отменить" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ยกเลิก" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "İptal" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Скасувати" } } } }, - "settings.mobile.browserTunnel.allowOtherHosts": { + "cloud.vpn.setup.connect": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "iOS Browser Reaches Other Hosts" + "value": "Connect Cloud VPN" } }, "de": { "stringUnit": { "state": "translated", - "value": "iOS-Browser erreicht andere Hosts" + "value": "Cloud-VPN verbinden" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le navigateur iOS accède aux autres hôtes" + "value": "Connecter le VPN Cloud" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "متصفح iOS يصل إلى مضيفين آخرين" + "value": "Conectar VPN de Cloud" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "El navegador de iOS accede a otros hosts" + "value": "Cloud VPNに接続" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "iOS 瀏覽器可連線至其他主機" + "value": "连接 Cloud VPN" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "iOS 浏览器可访问其他主机" + "value": "連接 Cloud VPN" } }, "ko": { "stringUnit": { "state": "translated", - "value": "iOS 브라우저의 다른 호스트 접근" + "value": "Cloud VPN 연결" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "iOSブラウザから他のホストに接続" + "value": "توصيل VPN الخاص بـ Cloud" } - } - } - }, - "settings.mobile.browserTunnel.allowOtherHosts.subtitleOn": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "The iOS browser can load LAN, VPN, and internet hosts through this Mac. Link-local and cloud metadata addresses never go through this Mac; the phone loads them itself." + "value": "Poveži Cloud VPN" } }, - "de": { + "da": { "stringUnit": { "state": "translated", - "value": "Der iOS-Browser kann LAN-, VPN- und Internet-Hosts über diesen Mac laden. Link-Local- und Cloud-Metadatenadressen laufen nie über diesen Mac; das iPhone lädt sie selbst." + "value": "Forbind Cloud VPN" } }, - "fr": { + "it": { "stringUnit": { "state": "translated", - "value": "Le navigateur iOS peut charger des hôtes du réseau local, du VPN et d’Internet via ce Mac. Les adresses link-local et de métadonnées cloud ne passent jamais par ce Mac ; l’iPhone les charge lui-même." + "value": "Connetti VPN Cloud" } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "يمكن لمتصفح iOS تحميل مضيفي الشبكة المحلية وVPN والإنترنت عبر جهاز Mac هذا. لا تمر عناوين الارتباط المحلي وعناوين بيانات التعريف السحابية عبر جهاز Mac هذا أبدًا؛ يحمّلها iPhone بنفسه." + "value": "ភ្ជាប់ Cloud VPN" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "El navegador de iOS puede cargar hosts de la red local, VPN e internet a través de este Mac. Las direcciones link-local y de metadatos en la nube nunca pasan por este Mac; el iPhone las carga por sí mismo." + "value": "Koble til Cloud VPN" } }, - "zh-Hant": { + "pl": { "stringUnit": { "state": "translated", - "value": "iOS 瀏覽器可透過這台 Mac 載入區域網路、VPN 與網際網路主機。連結本機位址與雲端中繼資料位址絕不經過這台 Mac,由 iPhone 自行載入。" + "value": "Połącz z Cloud VPN" } }, - "zh-Hans": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "iOS 浏览器可通过这台 Mac 加载局域网、VPN 和互联网主机。链路本地地址和云元数据地址绝不经过这台 Mac,由 iPhone 自行加载。" + "value": "Conectar Cloud VPN" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "iOS 브라우저가 이 Mac을 통해 LAN, VPN, 인터넷 호스트를 불러올 수 있습니다. 링크 로컬 및 클라우드 메타데이터 주소는 이 Mac을 거치지 않으며 iPhone이 직접 불러옵니다." + "value": "Подключить Cloud VPN" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "iOSブラウザはこのMac経由でLAN、VPN、インターネット上のホストを読み込めます。リンクローカルとクラウドメタデータのアドレスはこのMacを経由せず、iPhoneが直接読み込みます。" + "value": "เชื่อมต่อ Cloud VPN" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Cloud VPN’e bağlan" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Підключити Cloud VPN" } } } }, - "settings.mobile.browserTunnel.allowOtherHosts.subtitleOff": { + "cloud.vpn.setup.connected": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The iOS browser reaches only this Mac's localhost through this Mac. Other sites load over the phone's own network." + "value": "Connected" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der iOS-Browser erreicht über diesen Mac nur dessen localhost. Andere Websites werden über das eigene Netzwerk des Telefons geladen." + "value": "Verbunden" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Via ce Mac, le navigateur iOS n’accède qu’au localhost de ce Mac. Les autres sites se chargent via le réseau du téléphone." + "value": "Connecté" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "لا يصل متصفح iOS عبر جهاز Mac هذا إلا إلى localhost الخاص به. تُحمَّل المواقع الأخرى عبر شبكة الهاتف نفسه." + "value": "Conectada" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "A través de este Mac, el navegador de iOS solo accede a su localhost. Los demás sitios se cargan con la red del propio teléfono." + "value": "接続済み" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "iOS 瀏覽器只會透過這台 Mac 連線至它的 localhost。其他網站會透過手機本身的網路載入。" + "value": "已连接" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "iOS 浏览器只会通过这台 Mac 访问它的 localhost。其他网站通过手机自身的网络加载。" + "value": "已連線" } }, "ko": { "stringUnit": { "state": "translated", - "value": "iOS 브라우저는 이 Mac을 통해 이 Mac의 localhost에만 접근합니다. 다른 사이트는 휴대폰 자체 네트워크로 불러옵니다." + "value": "연결됨" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "iOSブラウザがこのMac経由で接続するのは、このMacのlocalhostだけです。他のサイトは電話自身のネットワークで読み込みます。" + "value": "متصل" } - } - } - }, - "settings.search.alias.setting.mobile.browserTunnelAllowOtherHosts": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security" + "value": "Povezano" } }, - "de": { + "da": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security mobil browser tunnel proxy lokales netzwerk hosts netzwerk sicherheit" + "value": "Forbundet" } }, - "fr": { + "it": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security mobile navigateur tunnel proxy réseau local hôtes réseau sécurité" + "value": "Connessa" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "បានភ្ជាប់" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Tilkoblet" } }, - "ar": { + "pl": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security متصفح نفق وكيل شبكة محلية مضيفون شبكة أمان" + "value": "Połączono" } }, - "es": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security móvil navegador túnel proxy red local hosts red seguridad" + "value": "Conectada" } }, - "zh-Hant": { + "ru": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 行動裝置 瀏覽器 通道 代理 區域網路 主機 網路 安全性" + "value": "Подключено" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 移动 浏览器 隧道 代理 局域网 主机 网络 安全" + "value": "เชื่อมต่อแล้ว" } }, - "ko": { + "tr": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 모바일 브라우저 터널 프록시 로컬 네트워크 호스트 네트워크 보안" + "value": "Bağlandı" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security モバイル ブラウザ トンネル プロキシ ローカルネットワーク ホスト ネットワーク セキュリティ" + "value": "Підключено" } } } }, - "cloud.vpn.setup.heading": { + "cloud.vpn.setup.disconnect": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Use Cloud machines from any app" + "value": "Disconnect" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Maschinen aus jeder App verwenden" + "value": "Trennen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utiliser les machines Cloud depuis toute app" + "value": "Déconnecter" } }, "es": { "stringUnit": { "state": "translated", - "value": "Usar máquinas Cloud desde cualquier app" + "value": "Desconectar" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ほかのアプリからCloudマシンを使う" + "value": "切断" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "从任何应用使用 Cloud 机器" + "value": "断开连接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "從任何 App 使用 Cloud 機器" + "value": "中斷連線" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모든 앱에서 Cloud 머신 사용" + "value": "연결 해제" } }, "ar": { "stringUnit": { "state": "translated", - "value": "استخدام أجهزة Cloud من أي تطبيق" + "value": "قطع الاتصال" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Koristite Cloud mašine iz bilo koje aplikacije" + "value": "Prekini vezu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Brug Cloud-maskiner fra alle apps" + "value": "Afbryd" } }, "it": { "stringUnit": { "state": "translated", - "value": "Usa le macchine Cloud da qualsiasi app" + "value": "Disconnetti" } }, "km": { "stringUnit": { "state": "translated", - "value": "ប្រើម៉ាស៊ីន Cloud ពីកម្មវិធីណាមួយ" + "value": "ផ្តាច់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Bruk Cloud-maskiner fra alle apper" + "value": "Koble fra" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Używaj maszyn Cloud z dowolnej aplikacji" + "value": "Rozłącz" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Use máquinas Cloud em qualquer app" + "value": "Desconectar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Используйте Cloud-машины из любого приложения" + "value": "Отключить" } }, "th": { "stringUnit": { "state": "translated", - "value": "ใช้เครื่อง Cloud จากทุกแอป" + "value": "ตัดการเชื่อมต่อ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Cloud makinelerini her uygulamadan kullanın" + "value": "Bağlantıyı kes" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Використовуйте Cloud-машини з будь-якої програми" + "value": "Від’єднати" } } } }, - "cloud.vpn.setup.subtitle": { + "cloud.vpn.setup.entry.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Optional access to each VM's private address and original ports, such as 10.40.0.10:3000." + "value": "Optional private IP access for other apps" } }, "de": { "stringUnit": { "state": "translated", - "value": "Optionaler Zugriff auf die private Adresse und die ursprünglichen Ports jeder VM, etwa 10.40.0.10:3000." + "value": "Optionaler Zugriff auf private IPs für andere Apps" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Accès facultatif à chaque adresse privée et aux ports d’origine des VM, comme 10.40.0.10:3000." + "value": "Accès facultatif aux IP privées pour les autres apps" } }, "es": { "stringUnit": { "state": "translated", - "value": "Acceso opcional a la dirección privada y los puertos originales de cada VM, como 10.40.0.10:3000." + "value": "Acceso opcional a IP privadas para otras apps" } }, "ja": { "stringUnit": { "state": "translated", - "value": "各VMのプライベートアドレスと元のポート(例:10.40.0.10:3000)にアクセスするための任意の設定です。" + "value": "ほかのアプリからプライベートIPへアクセスする任意の設定" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "可选设置,用于访问每台 VM 的私有地址和原始端口,例如 10.40.0.10:3000。" + "value": "为其他应用提供可选的私有 IP 访问" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選用設定,可存取每台 VM 的私有位址和原始連接埠,例如 10.40.0.10:3000。" + "value": "為其他 App 提供選用的私有 IP 存取" } }, "ko": { "stringUnit": { "state": "translated", - "value": "각 VM의 비공개 주소와 원래 포트(예: 10.40.0.10:3000)에 접근하기 위한 선택 설정입니다." + "value": "다른 앱의 비공개 IP 접근을 위한 선택 설정" } }, "ar": { "stringUnit": { "state": "translated", - "value": "وصول اختياري إلى العنوان الخاص والمنافذ الأصلية لكل جهاز افتراضي، مثل 10.40.0.10:3000." + "value": "وصول اختياري إلى عناوين IP الخاصة للتطبيقات الأخرى" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Opcionalni pristup privatnoj adresi i izvornim portovima svake VM, na primjer 10.40.0.10:3000." + "value": "Opcionalni pristup privatnim IP adresama za druge aplikacije" } }, "da": { "stringUnit": { "state": "translated", - "value": "Valgfri adgang til hver VM’s private adresse og oprindelige porte, f.eks. 10.40.0.10:3000." + "value": "Valgfri privat IP-adgang for andre apps" } }, "it": { "stringUnit": { "state": "translated", - "value": "Accesso facoltativo all’indirizzo privato e alle porte originali di ogni VM, ad esempio 10.40.0.10:3000." + "value": "Accesso facoltativo agli IP privati per altre app" } }, "km": { "stringUnit": { "state": "translated", - "value": "ចូលប្រើអាសយដ្ឋានឯកជន និងច្រកដើមរបស់ VM នីមួយៗ ដូចជា 10.40.0.10:3000 ជាជម្រើស។" + "value": "ចូលប្រើ IP ឯកជនសម្រាប់កម្មវិធីផ្សេងៗជាជម្រើស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Valgfri tilgang til hver VMs private adresse og opprinnelige porter, som 10.40.0.10:3000." + "value": "Valgfri privat IP-tilgang for andre apper" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Opcjonalny dostęp do prywatnego adresu i oryginalnych portów każdej maszyny VM, na przykład 10.40.0.10:3000." + "value": "Opcjonalny dostęp innych aplikacji do prywatnych adresów IP" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Acesso opcional ao endereço privado e às portas originais de cada VM, como 10.40.0.10:3000." + "value": "Acesso opcional a IPs privados para outros apps" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Необязательный доступ к частному адресу и исходным портам каждой VM, например 10.40.0.10:3000." + "value": "Необязательный доступ других приложений к частным IP" } }, "th": { "stringUnit": { "state": "translated", - "value": "การเข้าถึงที่ไม่บังคับไปยังที่อยู่ส่วนตัวและพอร์ตเดิมของ VM แต่ละเครื่อง เช่น 10.40.0.10:3000" + "value": "การเข้าถึง IP ส่วนตัวสำหรับแอปอื่นแบบไม่บังคับ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Her VM’nin özel adresine ve özgün bağlantı noktalarına isteğe bağlı erişim; örneğin 10.40.0.10:3000." + "value": "Diğer uygulamalar için isteğe bağlı özel IP erişimi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Необов’язковий доступ до приватної адреси та початкових портів кожної VM, наприклад 10.40.0.10:3000." + "value": "Необов’язковий доступ інших програм до приватних IP" } } } }, - "cloud.vpn.setup.howItWorks.title": { + "cloud.vpn.setup.failed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "How it works" + "value": "Needs attention" } }, "de": { "stringUnit": { "state": "translated", - "value": "So funktioniert es" + "value": "Aktion erforderlich" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fonctionnement" + "value": "Action requise" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cómo funciona" + "value": "Requiere atención" } }, "ja": { "stringUnit": { "state": "translated", - "value": "仕組み" + "value": "対応が必要" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作原理" + "value": "需要处理" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "運作方式" + "value": "需要處理" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작동 방식" + "value": "조치 필요" } }, "ar": { "stringUnit": { "state": "translated", - "value": "طريقة العمل" + "value": "يتطلب إجراءً" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Kako radi" + "value": "Potrebna pažnja" } }, "da": { "stringUnit": { "state": "translated", - "value": "Sådan fungerer det" + "value": "Kræver opmærksomhed" } }, "it": { "stringUnit": { "state": "translated", - "value": "Come funziona" + "value": "Richiede attenzione" } }, "km": { "stringUnit": { "state": "translated", - "value": "របៀបដំណើរការ" + "value": "ត្រូវការការយកចិត្តទុកដាក់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Slik fungerer det" + "value": "Krever handling" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Jak to działa" + "value": "Wymaga uwagi" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Como funciona" + "value": "Requer atenção" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Как это работает" + "value": "Требуется действие" } }, "th": { "stringUnit": { "state": "translated", - "value": "วิธีการทำงาน" + "value": "ต้องดำเนินการ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Nasıl çalışır" + "value": "İlgilenilmeli" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Як це працює" + "value": "Потрібна увага" } } } }, - "cloud.vpn.setup.status.off": { + "cloud.vpn.setup.off": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Off. Your Cloud panes continue to work through cmux's built-in route." + "value": "Off" } }, "de": { "stringUnit": { "state": "translated", - "value": "Aus. Ihre Cloud-Bereiche funktionieren weiterhin über die integrierte Verbindung von cmux." + "value": "Aus" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Désactivé. Vos volets Cloud continuent de fonctionner via la connexion intégrée de cmux." + "value": "Désactivé" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desactivada. Tus paneles Cloud siguen funcionando mediante la conexión integrada de cmux." + "value": "Desactivada" } }, "ja": { "stringUnit": { "state": "translated", - "value": "オフ。Cloudペインは引き続きcmux内蔵の接続経路で動作します。" + "value": "オフ" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已关闭。Cloud 面板仍通过 cmux 内置连接工作。" + "value": "已关闭" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已關閉。Cloud 面板仍透過 cmux 內建連線運作。" + "value": "已關閉" } }, "ko": { "stringUnit": { "state": "translated", - "value": "꺼짐. Cloud 패널은 cmux의 내장 연결을 통해 계속 작동합니다." + "value": "꺼짐" } }, "ar": { "stringUnit": { "state": "translated", - "value": "متوقف. تستمر لوحات Cloud في العمل عبر اتصال cmux المضمن." + "value": "متوقف" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Isključeno. Cloud paneli i dalje rade preko ugrađene cmux veze." + "value": "Isključeno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fra. Dine Cloud-paneler fungerer stadig via cmux’ indbyggede forbindelse." + "value": "Fra" } }, "it": { "stringUnit": { "state": "translated", - "value": "Disattivata. I pannelli Cloud continuano a funzionare tramite la connessione integrata di cmux." + "value": "Disattivata" } }, "km": { "stringUnit": { "state": "translated", - "value": "បិទ។ ផ្ទាំង Cloud របស់អ្នកនៅតែដំណើរការតាមការភ្ជាប់ដែលមានស្រាប់របស់ cmux។" + "value": "បិទ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Av. Cloud-panelene dine fortsetter å fungere gjennom cmux sin innebygde forbindelse." + "value": "Av" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wyłączona. Panele Cloud nadal działają przez wbudowane połączenie cmux." + "value": "Wyłączona" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desativada. Seus painéis Cloud continuam funcionando pela conexão integrada do cmux." + "value": "Desativada" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выключено. Панели Cloud продолжают работать через встроенное соединение cmux." + "value": "Выключено" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดอยู่ แผง Cloud ยังคงทำงานผ่านการเชื่อมต่อในตัวของ cmux" + "value": "ปิด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kapalı. Cloud panelleriniz cmux’un yerleşik bağlantısıyla çalışmaya devam eder." + "value": "Kapalı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вимкнено. Панелі Cloud продовжують працювати через вбудоване з’єднання cmux." + "value": "Вимкнено" } } } }, - "cloud.vpn.setup.steps.title": { + "cloud.vpn.setup.openUnavailable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "First-time setup" + "value": "Cloud VPN setup is unavailable" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ersteinrichtung" + "value": "Cloud-VPN-Einrichtung ist nicht verfügbar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Première configuration" + "value": "La configuration du VPN Cloud est indisponible" } }, "es": { "stringUnit": { "state": "translated", - "value": "Configuración inicial" + "value": "La configuración de VPN de Cloud no está disponible" } }, "ja": { "stringUnit": { "state": "translated", - "value": "初回設定" + "value": "Cloud VPN設定は利用できません" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "首次设置" + "value": "Cloud VPN 设置不可用" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "首次設定" + "value": "無法使用 Cloud VPN 設定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "최초 설정" + "value": "Cloud VPN 설정을 사용할 수 없습니다" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الإعداد الأولي" + "value": "إعداد VPN الخاص بـ Cloud غير متاح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prvo podešavanje" + "value": "Podešavanje Cloud VPN-a nije dostupno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Første opsætning" + "value": "Cloud VPN-opsætning er ikke tilgængelig" } }, "it": { "stringUnit": { "state": "translated", - "value": "Prima configurazione" + "value": "La configurazione VPN Cloud non è disponibile" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការរៀបចំលើកដំបូង" + "value": "ការរៀបចំ Cloud VPN មិនអាចប្រើបាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Førstegangsoppsett" + "value": "Cloud VPN-oppsett er ikke tilgjengelig" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pierwsza konfiguracja" + "value": "Konfiguracja Cloud VPN jest niedostępna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Primeira configuração" + "value": "A configuração do Cloud VPN não está disponível" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Первая настройка" + "value": "Настройка Cloud VPN недоступна" } }, "th": { "stringUnit": { "state": "translated", - "value": "การตั้งค่าครั้งแรก" + "value": "การตั้งค่า Cloud VPN ไม่พร้อมใช้งาน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İlk kurulum" + "value": "Cloud VPN kurulumu kullanılamıyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перше налаштування" + "value": "Налаштування Cloud VPN недоступне" } } } }, - "cloud.vpn.setup.steps.extension": { + "cloud.vpn.setup.permission.body": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "1. Click Connect Cloud VPN. When macOS asks, allow the cmux network extension in System Settings." + "value": "The VPN software is included in cmux. You do not need another app. macOS may require your password or Touch ID during approval." } }, "de": { "stringUnit": { "state": "translated", - "value": "1. Klicken Sie auf Cloud-VPN verbinden. Erlauben Sie auf Aufforderung von macOS die cmux-Netzwerkerweiterung in den Systemeinstellungen." + "value": "Die VPN-Software ist in cmux enthalten. Sie brauchen keine weitere App. macOS kann bei der Genehmigung Ihr Passwort oder Touch ID verlangen." } }, "fr": { "stringUnit": { "state": "translated", - "value": "1. Cliquez sur Connecter le VPN Cloud. Lorsque macOS le demande, autorisez l’extension réseau cmux dans Réglages Système." + "value": "Le logiciel VPN est inclus dans cmux. Aucune autre app n’est nécessaire. macOS peut demander votre mot de passe ou Touch ID lors de l’autorisation." } }, "es": { "stringUnit": { "state": "translated", - "value": "1. Haz clic en Conectar VPN de Cloud. Cuando macOS lo solicite, permite la extensión de red de cmux en Ajustes del Sistema." + "value": "El software VPN está incluido en cmux. No necesitas otra app. macOS puede solicitar tu contraseña o Touch ID durante la autorización." } }, "ja": { "stringUnit": { "state": "translated", - "value": "1. 「Cloud VPNに接続」をクリックします。macOSに求められたら、システム設定でcmuxのネットワーク機能拡張を許可します。" + "value": "VPNソフトウェアはcmuxに含まれています。別のアプリは不要です。承認時にmacOSがパスワードまたはTouch IDを求めることがあります。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "1. 点击“连接 Cloud VPN”。macOS 提示时,在系统设置中允许 cmux 网络扩展。" + "value": "cmux 已包含 VPN 软件,无需其他应用。批准时,macOS 可能要求您输入密码或使用触控 ID。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "1. 按一下「連接 Cloud VPN」。macOS 提示時,請在系統設定中允許 cmux 網路延伸功能。" + "value": "cmux 已包含 VPN 軟體,不需要其他 App。核准時,macOS 可能要求您輸入密碼或使用 Touch ID。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "1. Cloud VPN 연결을 클릭합니다. macOS에서 요청하면 시스템 설정에서 cmux 네트워크 확장을 허용합니다." + "value": "VPN 소프트웨어는 cmux에 포함되어 있습니다. 다른 앱은 필요하지 않습니다. 승인 시 macOS에서 암호 또는 Touch ID를 요청할 수 있습니다." } }, "ar": { "stringUnit": { "state": "translated", - "value": "1. انقر على توصيل VPN الخاص بـ Cloud. عندما يطلب macOS ذلك، اسمح بامتداد شبكة cmux في إعدادات النظام." + "value": "برنامج VPN مضمن في cmux. لا تحتاج إلى تطبيق آخر. قد يطلب macOS كلمة المرور أو Touch ID أثناء الموافقة." } }, "bs": { "stringUnit": { "state": "translated", - "value": "1. Kliknite Poveži Cloud VPN. Kada macOS zatraži, dozvolite cmux mrežni dodatak u Postavkama sistema." + "value": "VPN softver je uključen u cmux. Nije potrebna druga aplikacija. macOS može zatražiti lozinku ili Touch ID tokom odobravanja." } }, "da": { "stringUnit": { "state": "translated", - "value": "1. Klik på Forbind Cloud VPN. Når macOS spørger, skal du tillade cmux-netværksudvidelsen i Systemindstillinger." + "value": "VPN-softwaren er inkluderet i cmux. Du behøver ingen anden app. macOS kan bede om din adgangskode eller Touch ID under godkendelsen." } }, "it": { "stringUnit": { "state": "translated", - "value": "1. Fai clic su Connetti VPN Cloud. Quando macOS lo richiede, consenti l’estensione di rete cmux nelle Impostazioni di Sistema." + "value": "Il software VPN è incluso in cmux. Non serve un’altra app. macOS potrebbe chiedere la password o Touch ID durante l’autorizzazione." } }, "km": { "stringUnit": { "state": "translated", - "value": "1. ចុច ភ្ជាប់ Cloud VPN។ ពេល macOS ស្នើ សូមអនុញ្ញាតផ្នែកបន្ថែមបណ្តាញ cmux ក្នុងការកំណត់ប្រព័ន្ធ។" + "value": "កម្មវិធី VPN មាននៅក្នុង cmux។ អ្នកមិនត្រូវការកម្មវិធីផ្សេងទៀតទេ។ macOS អាចស្នើពាក្យសម្ងាត់ ឬ Touch ID ក្នុងពេលអនុម័ត។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "1. Klikk Koble til Cloud VPN. Når macOS spør, tillat cmux-nettverksutvidelsen i Systeminnstillinger." + "value": "VPN-programvaren er inkludert i cmux. Du trenger ingen annen app. macOS kan be om passord eller Touch ID under godkjenningen." } }, "pl": { "stringUnit": { "state": "translated", - "value": "1. Kliknij Połącz z Cloud VPN. Gdy macOS poprosi, zezwól na rozszerzenie sieci cmux w Ustawieniach systemowych." + "value": "Oprogramowanie VPN jest zawarte w cmux. Nie potrzebujesz innej aplikacji. macOS może poprosić o hasło lub Touch ID podczas zatwierdzania." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "1. Clique em Conectar Cloud VPN. Quando o macOS pedir, permita a extensão de rede do cmux nos Ajustes do Sistema." + "value": "O software VPN vem incluído no cmux. Você não precisa de outro app. O macOS pode pedir sua senha ou Touch ID durante a aprovação." } }, "ru": { "stringUnit": { "state": "translated", - "value": "1. Нажмите Подключить Cloud VPN. Когда macOS попросит, разрешите сетевое расширение cmux в системных настройках." + "value": "VPN-программа уже входит в cmux. Другие приложения не нужны. Во время подтверждения macOS может запросить пароль или Touch ID." } }, "th": { "stringUnit": { "state": "translated", - "value": "1. คลิก เชื่อมต่อ Cloud VPN เมื่อ macOS ขอ ให้อนุญาตส่วนขยายเครือข่าย cmux ในการตั้งค่าระบบ" + "value": "ซอฟต์แวร์ VPN รวมอยู่ใน cmux แล้ว ไม่ต้องใช้แอปอื่น macOS อาจขอรหัสผ่านหรือ Touch ID ระหว่างการอนุมัติ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "1. Cloud VPN’e bağlan’a tıklayın. macOS istediğinde Sistem Ayarları’nda cmux ağ uzantısına izin verin." + "value": "VPN yazılımı cmux içinde bulunur. Başka bir uygulama gerekmez. macOS onay sırasında parolanızı veya Touch ID’yi isteyebilir." } }, "uk": { "stringUnit": { "state": "translated", - "value": "1. Натисніть Підключити Cloud VPN. Коли macOS попросить, дозвольте мережеве розширення cmux у Системних параметрах." + "value": "Програмне забезпечення VPN входить до cmux. Інша програма не потрібна. Під час схвалення macOS може попросити пароль або Touch ID." } } } }, - "cloud.vpn.setup.steps.settings": { + "cloud.vpn.setup.status.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open General > Login Items & Extensions > Network Extensions, then enable cmux." + "value": "Private network status" } }, "de": { "stringUnit": { "state": "translated", - "value": "Öffnen Sie Allgemein > Anmeldeobjekte & Erweiterungen > Netzwerkerweiterungen und aktivieren Sie cmux." + "value": "Status des privaten Netzwerks" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrez Général > Ouverture et extensions > Extensions réseau, puis activez cmux." + "value": "État du réseau privé" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abre General > Ítems de inicio y extensiones > Extensiones de red y activa cmux." + "value": "Estado de la red privada" } }, "ja": { "stringUnit": { "state": "translated", - "value": "「一般」>「ログイン項目と機能拡張」>「ネットワーク機能拡張」を開き、cmuxを有効にします。" + "value": "プライベートネットワークの状態" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开“通用”>“登录项与扩展”>“网络扩展”,然后启用 cmux。" + "value": "私有网络状态" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "打開「一般」>「登入項目與延伸功能」>「網路延伸功能」,然後啟用 cmux。" + "value": "私有網路狀態" } }, "ko": { "stringUnit": { "state": "translated", - "value": "일반 > 로그인 항목 및 확장 프로그램 > 네트워크 확장을 열고 cmux를 활성화합니다." + "value": "비공개 네트워크 상태" } }, "ar": { "stringUnit": { "state": "translated", - "value": "افتح عام > عناصر الدخول والامتدادات > امتدادات الشبكة، ثم فعّل cmux." + "value": "حالة الشبكة الخاصة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvorite Opšte > Stavke za prijavu i dodaci > Mrežni dodaci, pa omogućite cmux." + "value": "Status privatne mreže" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn Generelt > Loginemner og udvidelser > Netværksudvidelser, og aktivér cmux." + "value": "Status for privat netværk" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri Generali > Elementi login ed estensioni > Estensioni di rete, quindi abilita cmux." + "value": "Stato della rete privata" } }, "km": { "stringUnit": { "state": "translated", - "value": "បើក ទូទៅ > ធាតុចូល និងផ្នែកបន្ថែម > ផ្នែកបន្ថែមបណ្តាញ ហើយបើក cmux។" + "value": "ស្ថានភាពបណ្តាញឯកជន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne Generelt > Påloggingselementer og utvidelser > Nettverksutvidelser, og aktiver cmux." + "value": "Status for privat nettverk" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz Ogólne > Elementy logowania i rozszerzenia > Rozszerzenia sieciowe, a następnie włącz cmux." + "value": "Stan sieci prywatnej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abra Geral > Itens de Início e Extensões > Extensões de Rede e ative o cmux." + "value": "Status da rede privada" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Откройте Основные > Объекты входа и расширения > Сетевые расширения и включите cmux." + "value": "Состояние частной сети" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิด ทั่วไป > รายการเข้าสู่ระบบและส่วนขยาย > ส่วนขยายเครือข่าย แล้วเปิดใช้ cmux" + "value": "สถานะเครือข่ายส่วนตัว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Genel > Giriş Öğeleri ve Uzantılar > Ağ Uzantıları’nı açın ve cmux’u etkinleştirin." + "value": "Özel ağ durumu" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрийте Загальні > Об’єкти входу та розширення > Мережеві розширення й увімкніть cmux." + "value": "Стан приватної мережі" } } } }, - "cloud.vpn.setup.steps.settingsLegacy": { + "cloud.vpn.setup.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open Privacy & Security and allow the cmux extension." + "value": "Cloud VPN" } }, "de": { "stringUnit": { "state": "translated", - "value": "Öffnen Sie Datenschutz & Sicherheit und erlauben Sie die cmux-Erweiterung." + "value": "Cloud-VPN" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrez Confidentialité et sécurité et autorisez l’extension cmux." + "value": "VPN Cloud" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abre Privacidad y seguridad y permite la extensión de cmux." + "value": "VPN de Cloud" } }, "ja": { "stringUnit": { "state": "translated", - "value": "「プライバシーとセキュリティ」を開き、cmuxの機能拡張を許可します。" + "value": "クラウドVPN" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开“隐私与安全性”,然后允许 cmux 扩展。" + "value": "云端 VPN" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "打開「隱私權與安全性」,然後允許 cmux 延伸功能。" + "value": "雲端 VPN" } }, "ko": { "stringUnit": { "state": "translated", - "value": "개인정보 보호 및 보안을 열고 cmux 확장을 허용합니다." + "value": "클라우드 VPN" } }, "ar": { "stringUnit": { "state": "translated", - "value": "افتح الخصوصية والأمان واسمح بامتداد cmux." + "value": "شبكة Cloud الخاصة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvorite Privatnost i sigurnost i dozvolite cmux dodatak." + "value": "Cloud VPN" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn Anonymitet og sikkerhed, og tillad cmux-udvidelsen." + "value": "Cloud VPN" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri Privacy e sicurezza e consenti l’estensione cmux." + "value": "VPN Cloud" } }, "km": { "stringUnit": { "state": "translated", - "value": "បើក ឯកជនភាព និងសុវត្ថិភាព ហើយអនុញ្ញាតផ្នែកបន្ថែម cmux។" + "value": "Cloud VPN" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne Personvern og sikkerhet og tillat cmux-utvidelsen." + "value": "Cloud VPN" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz Prywatność i ochrona i zezwól na rozszerzenie cmux." + "value": "Cloud VPN" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abra Privacidade e Segurança e permita a extensão do cmux." + "value": "Cloud VPN" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Откройте Конфиденциальность и безопасность и разрешите расширение cmux." + "value": "Cloud VPN" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิด ความเป็นส่วนตัวและความปลอดภัย แล้วอนุญาตส่วนขยาย cmux" + "value": "Cloud VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Gizlilik ve Güvenlik’i açın ve cmux uzantısına izin verin." + "value": "Cloud VPN" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрийте Конфіденційність і безпека та дозвольте розширення cmux." + "value": "Cloud VPN" } } } }, - "cloud.vpn.setup.steps.configuration": { + "cloud.vpn.setup.unavailable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "2. Allow cmux to add a VPN configuration named cmux Cloud. This is a separate macOS permission." + "value": "This copy of cmux does not include a signed VPN extension. Use a cmux release with Cloud VPN support. Cloud terminals, Ports, and Desktop remain available without the VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "2. Erlauben Sie cmux, eine VPN-Konfiguration namens cmux Cloud hinzuzufügen. Dies ist eine separate macOS-Berechtigung." + "value": "Diese cmux-Version enthält keine signierte VPN-Erweiterung. Verwenden Sie eine cmux-Version mit Cloud-VPN-Unterstützung. Cloud-Terminals, Ports und Desktop bleiben ohne VPN verfügbar." } }, "fr": { "stringUnit": { "state": "translated", - "value": "2. Autorisez cmux à ajouter une configuration VPN nommée cmux Cloud. Il s’agit d’une autorisation macOS distincte." + "value": "Cette copie de cmux ne contient pas d’extension VPN signée. Utilisez une version de cmux qui prend en charge le VPN Cloud. Les terminaux Cloud, Ports et Bureau restent disponibles sans VPN." } }, "es": { "stringUnit": { "state": "translated", - "value": "2. Permite que cmux añada una configuración VPN llamada cmux Cloud. Este es un permiso independiente de macOS." + "value": "Esta copia de cmux no incluye una extensión VPN firmada. Usa una versión de cmux compatible con VPN de Cloud. Los terminales Cloud, Puertos y Escritorio siguen disponibles sin VPN." } }, "ja": { "stringUnit": { "state": "translated", - "value": "2. cmux Cloudという名前のVPN構成の追加を許可します。これは別のmacOS権限です。" + "value": "このcmuxには署名済みのVPN機能拡張が含まれていません。Cloud VPN対応のcmuxリリースを使用してください。Cloudのターミナル、ポート、デスクトップはVPNなしでも使えます。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "2. 允许 cmux 添加名为 cmux Cloud 的 VPN 配置。这是单独的 macOS 权限。" + "value": "此 cmux 副本未包含已签名的 VPN 扩展。请使用支持 Cloud VPN 的 cmux 版本。Cloud 终端、端口和桌面无需 VPN 仍可使用。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "2. 允許 cmux 加入名為 cmux Cloud 的 VPN 設定。這是另一項 macOS 權限。" + "value": "此 cmux 副本未包含已簽署的 VPN 延伸功能。請使用支援 Cloud VPN 的 cmux 版本。Cloud 終端機、連接埠和桌面不需要 VPN 仍可使用。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "2. cmux가 cmux Cloud라는 VPN 구성을 추가하도록 허용합니다. 이는 별도의 macOS 권한입니다." + "value": "이 cmux에는 서명된 VPN 확장이 포함되어 있지 않습니다. Cloud VPN을 지원하는 cmux 릴리스를 사용하세요. Cloud 터미널, 포트 및 데스크탑은 VPN 없이도 사용할 수 있습니다." } }, "ar": { "stringUnit": { "state": "translated", - "value": "2. اسمح لـ cmux بإضافة إعداد VPN باسم cmux Cloud. هذا إذن منفصل في macOS." + "value": "لا تتضمن هذه النسخة من cmux امتداد VPN موقعًا. استخدم إصدار cmux يدعم VPN الخاص بـ Cloud. تظل طرفيات Cloud والمنافذ وسطح المكتب متاحة بدون VPN." } }, "bs": { "stringUnit": { "state": "translated", - "value": "2. Dozvolite cmux-u da doda VPN konfiguraciju pod imenom cmux Cloud. Ovo je posebna macOS dozvola." + "value": "Ova kopija cmux-a nema potpisani VPN dodatak. Koristite cmux izdanje sa Cloud VPN podrškom. Cloud terminali, portovi i radna površina ostaju dostupni bez VPN-a." } }, "da": { "stringUnit": { "state": "translated", - "value": "2. Tillad cmux at tilføje en VPN-konfiguration med navnet cmux Cloud. Dette er en separat macOS-tilladelse." + "value": "Denne cmux-kopi indeholder ikke en signeret VPN-udvidelse. Brug en cmux-udgave med Cloud VPN-understøttelse. Cloud-terminaler, porte og skrivebord er stadig tilgængelige uden VPN." } }, "it": { "stringUnit": { "state": "translated", - "value": "2. Consenti a cmux di aggiungere una configurazione VPN chiamata cmux Cloud. È un’autorizzazione macOS separata." + "value": "Questa copia di cmux non include un’estensione VPN firmata. Usa una versione di cmux con supporto Cloud VPN. Terminali Cloud, porte e desktop restano disponibili senza VPN." } }, "km": { "stringUnit": { "state": "translated", - "value": "2. អនុញ្ញាតឱ្យ cmux បន្ថែមការកំណត់ VPN ឈ្មោះ cmux Cloud។ នេះជាសិទ្ធិ macOS ផ្សេងមួយ។" + "value": "cmux ច្បាប់នេះមិនមានផ្នែកបន្ថែម VPN ដែលបានចុះហត្ថលេខាទេ។ ប្រើកំណែ cmux ដែលគាំទ្រ Cloud VPN។ Terminal, Ports និង Desktop របស់ Cloud នៅតែប្រើបានដោយគ្មាន VPN។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "2. Tillat cmux å legge til en VPN-konfigurasjon kalt cmux Cloud. Dette er en separat macOS-tillatelse." + "value": "Denne cmux-kopien har ingen signert VPN-utvidelse. Bruk en cmux-versjon med Cloud VPN-støtte. Cloud-terminaler, porter og skrivebord er tilgjengelige uten VPN." } }, "pl": { "stringUnit": { "state": "translated", - "value": "2. Zezwól cmux dodać konfigurację VPN o nazwie cmux Cloud. To osobne uprawnienie macOS." + "value": "Ta kopia cmux nie zawiera podpisanego rozszerzenia VPN. Użyj wydania cmux z obsługą Cloud VPN. Terminale Cloud, porty i pulpit pozostają dostępne bez VPN." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "2. Permita que o cmux adicione uma configuração VPN chamada cmux Cloud. Esta é uma permissão separada do macOS." + "value": "Esta cópia do cmux não inclui uma extensão VPN assinada. Use uma versão do cmux com suporte a Cloud VPN. Terminais Cloud, portas e área de trabalho continuam disponíveis sem VPN." } }, "ru": { "stringUnit": { "state": "translated", - "value": "2. Разрешите cmux добавить VPN-конфигурацию с именем cmux Cloud. Это отдельное разрешение macOS." + "value": "В этой копии cmux нет подписанного VPN-расширения. Используйте выпуск cmux с поддержкой Cloud VPN. Cloud-терминалы, порты и рабочий стол доступны без VPN." } }, "th": { "stringUnit": { "state": "translated", - "value": "2. อนุญาตให้ cmux เพิ่มการกำหนดค่า VPN ชื่อ cmux Cloud นี่เป็นสิทธิ์ macOS แยกต่างหาก" + "value": "cmux รุ่นนี้ไม่มีส่วนขยาย VPN ที่ลงนามแล้ว ใช้รุ่น cmux ที่รองรับ Cloud VPN เทอร์มินัล Cloud พอร์ต และเดสก์ท็อปยังใช้ได้โดยไม่ต้องมี VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "2. cmux’un cmux Cloud adlı bir VPN yapılandırması eklemesine izin verin. Bu ayrı bir macOS iznidir." + "value": "Bu cmux kopyasında imzalı VPN uzantısı bulunmuyor. Cloud VPN destekli bir cmux sürümü kullanın. Cloud terminalleri, portlar ve masaüstü VPN olmadan da kullanılabilir." } }, "uk": { "stringUnit": { "state": "translated", - "value": "2. Дозвольте cmux додати конфігурацію VPN з назвою cmux Cloud. Це окремий дозвіл macOS." + "value": "Ця копія cmux не містить підписаного VPN-розширення. Використовуйте випуск cmux із підтримкою Cloud VPN. Cloud-термінали, порти й робочий стіл доступні без VPN." } } } }, - "cloud.vpn.setup.steps.return": { + "cloud.vpn.setup.waiting": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "3. Return to this pane. The connection continues automatically after approval. Disconnect here when finished. Quitting cmux or signing out also disconnects it." + "value": "Waiting" } }, "de": { "stringUnit": { "state": "translated", - "value": "3. Kehren Sie zu diesem Bereich zurück. Die Verbindung wird nach der Genehmigung automatisch fortgesetzt. Trennen Sie sie hier, wenn Sie fertig sind. Das Beenden von cmux oder Abmelden trennt sie ebenfalls." + "value": "Warten" } }, "fr": { "stringUnit": { "state": "translated", - "value": "3. Revenez à ce volet. La connexion reprend automatiquement après autorisation. Déconnectez-la ici lorsque vous avez terminé. Quitter cmux ou fermer la session la déconnecte aussi." + "value": "En attente" } }, "es": { "stringUnit": { "state": "translated", - "value": "3. Vuelve a este panel. La conexión continúa automáticamente tras la autorización. Desconéctala aquí cuando termines. Salir de cmux o cerrar sesión también la desconecta." + "value": "En espera" } }, "ja": { "stringUnit": { "state": "translated", - "value": "3. このペインに戻ります。承認後、接続は自動的に続行されます。使い終わったらここで切断してください。cmuxの終了やサインアウトでも切断されます。" + "value": "待機中" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "3. 返回此面板。批准后连接会自动继续。完成后可在此断开连接。退出 cmux 或退出登录也会断开连接。" + "value": "等待中" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "3. 返回此面板。核准後連線會自動繼續。完成後可在此中斷連線。結束 cmux 或登出也會中斷連線。" + "value": "等待中" } }, "ko": { "stringUnit": { "state": "translated", - "value": "3. 이 패널로 돌아옵니다. 승인 후 연결이 자동으로 계속됩니다. 사용을 마치면 여기에서 연결을 해제하세요. cmux를 종료하거나 로그아웃해도 연결이 해제됩니다." + "value": "대기 중" } }, "ar": { "stringUnit": { "state": "translated", - "value": "3. ارجع إلى هذه اللوحة. يستمر الاتصال تلقائيًا بعد الموافقة. اقطع الاتصال هنا عند الانتهاء. يؤدي إنهاء cmux أو تسجيل الخروج أيضًا إلى قطع الاتصال." + "value": "قيد الانتظار" } }, "bs": { "stringUnit": { "state": "translated", - "value": "3. Vratite se na ovaj panel. Veza se nastavlja automatski nakon odobrenja. Ovdje prekinite vezu kada završite. Izlazak iz cmux-a ili odjava takođe prekida vezu." + "value": "Čekanje" } }, "da": { "stringUnit": { "state": "translated", - "value": "3. Gå tilbage til dette panel. Forbindelsen fortsætter automatisk efter godkendelsen. Afbryd her, når du er færdig. Hvis du afslutter cmux eller logger ud, afbrydes forbindelsen også." + "value": "Venter" } }, "it": { "stringUnit": { "state": "translated", - "value": "3. Torna a questo pannello. La connessione continua automaticamente dopo l’autorizzazione. Disconnettila qui quando hai finito. Anche uscire da cmux o effettuare il logout la disconnette." + "value": "In attesa" } }, "km": { "stringUnit": { "state": "translated", - "value": "3. ត្រឡប់ទៅផ្ទាំងនេះ។ ការភ្ជាប់នឹងបន្តដោយស្វ័យប្រវត្តិបន្ទាប់ពីអនុម័ត។ ផ្តាច់នៅទីនេះពេលបញ្ចប់។ ការបិទ cmux ឬចាកចេញក៏ផ្តាច់ការភ្ជាប់ដែរ។" + "value": "កំពុងរង់ចាំ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "3. Gå tilbake til dette panelet. Forbindelsen fortsetter automatisk etter godkjenning. Koble fra her når du er ferdig. Avslutning av cmux eller utlogging kobler også fra." + "value": "Venter" } }, "pl": { "stringUnit": { "state": "translated", - "value": "3. Wróć do tego panelu. Połączenie będzie kontynuowane automatycznie po zatwierdzeniu. Po zakończeniu rozłącz je tutaj. Zamknięcie cmux lub wylogowanie również rozłączy połączenie." + "value": "Oczekiwanie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "3. Volte a este painel. A conexão continuará automaticamente após a aprovação. Desconecte aqui quando terminar. Sair do cmux ou encerrar a sessão também desconecta." + "value": "Aguardando" } }, "ru": { "stringUnit": { "state": "translated", - "value": "3. Вернитесь в эту панель. После подтверждения соединение продолжится автоматически. Завершив работу, отключите его здесь. Выход из cmux или системы также отключает соединение." + "value": "Ожидание" } }, "th": { "stringUnit": { "state": "translated", - "value": "3. กลับมาที่แผงนี้ การเชื่อมต่อจะดำเนินต่อโดยอัตโนมัติหลังการอนุมัติ ตัดการเชื่อมต่อที่นี่เมื่อเสร็จแล้ว การออกจาก cmux หรือออกจากระบบจะตัดการเชื่อมต่อด้วย" + "value": "กำลังรอ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "3. Bu panele dönün. Onaydan sonra bağlantı otomatik olarak devam eder. Bitirdiğinizde buradan bağlantıyı kesin. cmux’tan çıkmak veya oturumu kapatmak da bağlantıyı keser." + "value": "Bekliyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "3. Поверніться до цієї панелі. Після схвалення з’єднання продовжиться автоматично. Завершивши роботу, від’єднайте його тут. Вихід із cmux або системи також від’єднає з’єднання." + "value": "Очікування" } } } }, - "cloud.vpn.setup.address.title": { + "cloudTree.ports.action.wake": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Private addresses" + "value": "Wake Machine" } }, "de": { "stringUnit": { "state": "translated", - "value": "Private Adressen" + "value": "Maschine aktivieren" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Adresses privées" + "value": "Réveiller la machine" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Direcciones privadas" + "value": "إيقاظ الجهاز" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "プライベートアドレス" + "value": "Activar máquina" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "私有地址" + "value": "喚醒機器" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "私有位址" + "value": "唤醒机器" } }, "ko": { "stringUnit": { "state": "translated", - "value": "비공개 주소" + "value": "머신 깨우기" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "العناوين الخاصة" + "value": "マシンを起動" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Privatne adrese" + "value": "Probudi mašinu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Private adresser" + "value": "Væk maskine" } }, "it": { "stringUnit": { "state": "translated", - "value": "Indirizzi privati" + "value": "Riattiva macchina" } }, "km": { "stringUnit": { "state": "translated", - "value": "អាសយដ្ឋានឯកជន" + "value": "ដាស់ម៉ាស៊ីន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Private adresser" + "value": "Vekk maskin" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Prywatne adresy" + "value": "Wybudź maszynę" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Endereços privados" + "value": "Despertar máquina" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Частные адреса" + "value": "Разбудить машину" } }, "th": { "stringUnit": { "state": "translated", - "value": "ที่อยู่ส่วนตัว" + "value": "ปลุกเครื่อง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Özel adresler" + "value": "Makineyi uyandır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Приватні адреси" + "value": "Розбудити машину" } } } }, - "cloud.vpn.setup.openSettings": { + "cloudTree.ports.asleep.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open System Settings" + "value": "Wake the machine to check its services. cmux’s in-app forwarding does not need Cloud VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "Systemeinstellungen öffnen" + "value": "Aktivieren Sie die Maschine, um ihre Dienste zu prüfen. Die Weiterleitung in cmux benötigt kein Cloud-VPN." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir Réglages Système" + "value": "Réveillez la machine pour vérifier ses services. Le transfert intégré à cmux ne nécessite pas de VPN Cloud." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Abrir Ajustes del Sistema" + "value": "أيقظ الجهاز لفحص خدماته. لا تحتاج إعادة التوجيه داخل cmux إلى Cloud VPN." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "システム設定を開く" + "value": "Activa la máquina para comprobar sus servicios. El reenvío integrado de cmux no necesita Cloud VPN." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "打开系统设置" + "value": "喚醒機器以檢查其服務。cmux 的應用程式內轉送不需要 Cloud VPN。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打開系統設定" + "value": "唤醒机器以检查其服务。cmux 的应用内转发无需 Cloud VPN。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "시스템 설정 열기" + "value": "머신을 깨워 서비스를 확인하세요. cmux 앱 내 전달에는 Cloud VPN이 필요하지 않습니다." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "فتح إعدادات النظام" + "value": "マシンを起動してサービスを確認してください。cmux のアプリ内転送に Cloud VPN は不要です。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvori Postavke sistema" + "value": "Probudite mašinu da provjerite njene servise. Prosljeđivanje unutar cmux-a ne treba Cloud VPN." } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn Systemindstillinger" + "value": "Væk maskinen for at kontrollere dens tjenester. Videresendelse i cmux kræver ikke Cloud VPN." } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri Impostazioni di Sistema" + "value": "Riattiva la macchina per controllarne i servizi. L’inoltro all’interno di cmux non richiede la VPN Cloud." } }, "km": { "stringUnit": { "state": "translated", - "value": "បើកការកំណត់ប្រព័ន្ធ" + "value": "ដាស់ម៉ាស៊ីនដើម្បីពិនិត្យសេវាកម្មរបស់វា។ ការបញ្ជូនបន្តនៅក្នុង cmux មិនត្រូវការ Cloud VPN ទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne Systeminnstillinger" + "value": "Vekk maskinen for å sjekke tjenestene. Videresending i cmux trenger ikke Cloud VPN." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz Ustawienia systemowe" + "value": "Wybudź maszynę, aby sprawdzić jej usługi. Przekierowywanie w cmux nie wymaga Cloud VPN." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abrir Ajustes do Sistema" + "value": "Desperte a máquina para verificar os serviços. O encaminhamento dentro do cmux não precisa do Cloud VPN." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открыть системные настройки" + "value": "Разбудите машину, чтобы проверить её службы. Перенаправлению внутри cmux Cloud VPN не нужен." } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิดการตั้งค่าระบบ" + "value": "ปลุกเครื่องเพื่อตรวจสอบบริการ การส่งต่อภายใน cmux ไม่ต้องใช้ Cloud VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sistem Ayarlarını aç" + "value": "Hizmetlerini denetlemek için makineyi uyandırın. cmux içi yönlendirme Cloud VPN gerektirmez." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрити Системні параметри" + "value": "Розбудіть машину, щоб перевірити її служби. Перенаправлення всередині cmux не потребує Cloud VPN." } } } }, - "cli.browser.inputFiles.error.usage": { + "cloudTree.ports.available.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "set-input-files requires --selector and either --file (repeatable) or --clear" + "value": "Listening services" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يتطلب set-input-files الخيار --selector مع --file (يمكن تكراره) أو --clear" + "value": "Lauschende Dienste" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "set-input-files benötigt --selector und entweder --file (wiederholbar) oder --clear" + "value": "Services en écoute" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "الخدمات المستمعة" } }, "es": { "stringUnit": { "state": "translated", - "value": "set-input-files requiere --selector y --file (repetible) o --clear" + "value": "Servicios en escucha" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "set-input-files nécessite --selector et soit --file (répétable), soit --clear" + "value": "監聽中的服務" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "set-input-files には --selector と、--file (複数指定可)または --clear が必要です" + "value": "监听中的服务" } }, "ko": { "stringUnit": { "state": "translated", - "value": "set-input-files에는 --selector 와 --file (반복 가능) 또는 --clear가 필요합니다" + "value": "수신 대기 서비스" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要 --selector ,以及 --file (可重复)或 --clear" + "value": "待ち受け中のサービス" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要 --selector ,以及 --file (可重複)或 --clear" + "value": "Servisi koji slušaju" } - } - } - }, - "cli.browser.inputFiles.help": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Select local files (up to 128 files, 32 MiB total) or clear the selection. Directory uploads are unsupported." + "value": "Lyttende tjenester" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n اختر ملفات محلية (حتى 128 ملفًا بإجمالي 32 MiB) أو امسح الاختيار. رفع المجلدات غير مدعوم." + "value": "Servizi in ascolto" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Lokale Dateien auswählen (bis zu 128 Dateien, insgesamt 32 MiB) oder die Auswahl leeren. Ordner-Uploads werden nicht unterstützt." + "value": "សេវាកម្មដែលកំពុងស្តាប់" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Selecciona archivos locales (hasta 128 archivos, 32 MiB en total) o borra la selección. No se admite subir carpetas." + "value": "Lyttende tjenester" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Sélectionner des fichiers locaux (jusqu’à 128 fichiers, 32 MiB au total) ou effacer la sélection. L’envoi de dossiers n’est pas pris en charge." + "value": "Nasłuchujące usługi" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n ローカルファイルを選択(最大128個、合計32 MiB)するか、選択を解除します。ディレクトリのアップロードには対応していません。" + "value": "Serviços em escuta" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 로컬 파일을 선택하거나(최대 128개, 총 32 MiB) 선택을 지웁니다. 디렉터리 업로드는 지원되지 않습니다." + "value": "Прослушивающие службы" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 选择本地文件(最多 128 个文件,总计 32 MiB)或清除选择。不支持上传目录。" + "value": "บริการที่กำลังรับฟัง" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 選取本機檔案(最多 128 個檔案,總計 32 MiB)或清除選取。不支援上傳目錄。" + "value": "Dinleyen hizmetler" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Служби, що прослуховують" } } } }, - "browser.inputFiles.error.invalidTarget": { + "cloudTree.ports.binding.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The selector must match a file input without directory selection" + "value": "cmux’s browser route connects to 127.0.0.1 on the machine. Bind the service to 127.0.0.1 or 0.0.0.0, then refresh. Turning on Cloud VPN does not change this route." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يجب أن يطابق المحدد حقل إدخال ملفات لا يستخدم اختيار المجلدات" + "value": "Die Browser-Verbindung von cmux verwendet 127.0.0.1 auf der Maschine. Binden Sie den Dienst an 127.0.0.1 oder 0.0.0.0 und aktualisieren Sie. Cloud-VPN ändert diese Route nicht." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Der Selektor muss ein Dateieingabefeld ohne Ordnerauswahl treffen" + "value": "Le navigateur cmux se connecte à 127.0.0.1 sur la machine. Liez le service à 127.0.0.1 ou 0.0.0.0, puis actualisez. Activer le VPN Cloud ne change pas cette route." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يتصل مسار متصفح cmux بالعنوان 127.0.0.1 على الجهاز. اربط الخدمة بالعنوان 127.0.0.1 أو 0.0.0.0 ثم حدّث. تشغيل Cloud VPN لا يغير هذا المسار." } }, "es": { "stringUnit": { "state": "translated", - "value": "El selector debe coincidir con un campo de archivos sin selección de carpetas" + "value": "La ruta del navegador de cmux conecta a 127.0.0.1 en la máquina. Enlaza el servicio a 127.0.0.1 o 0.0.0.0 y actualiza. Activar Cloud VPN no cambia esta ruta." } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Le sélecteur doit correspondre à un champ de fichier sans sélection de dossier" + "value": "cmux 的瀏覽器路徑會連線到機器上的 127.0.0.1。請將服務繫結至 127.0.0.1 或 0.0.0.0 後重新整理。開啟 Cloud VPN 不會改變此路徑。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "セレクターはディレクトリ選択を使わないファイル入力欄に一致する必要があります" + "value": "cmux 的浏览器路由连接到机器上的 127.0.0.1。请将服务绑定到 127.0.0.1 或 0.0.0.0 后刷新。开启 Cloud VPN 不会改变此路由。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "선택자는 디렉터리 선택이 없는 파일 입력 요소와 일치해야 합니다" + "value": "cmux 브라우저 경로는 머신의 127.0.0.1에 연결합니다. 서비스를 127.0.0.1 또는 0.0.0.0에 바인딩한 후 새로 고치세요. Cloud VPN을 켜도 이 경로는 바뀌지 않습니다." } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "选择器必须匹配未启用目录选择的文件输入字段" + "value": "cmux のブラウザはマシン上の 127.0.0.1 に接続します。サービスを 127.0.0.1 または 0.0.0.0 にバインドして更新してください。Cloud VPN を有効にしてもこの経路は変わりません。" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "選取器必須符合未啟用目錄選取的檔案輸入欄位" + "value": "Ruta preglednika u cmux-u povezuje se na 127.0.0.1 na mašini. Vežite servis na 127.0.0.1 ili 0.0.0.0, zatim osvježite. Uključivanje Cloud VPN-a ne mijenja ovu rutu." } - } - } - }, - "browser.inputFiles.error.multipleRequired": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "This file input does not allow multiple files" + "value": "cmux’ browserrute forbinder til 127.0.0.1 på maskinen. Bind tjenesten til 127.0.0.1 eller 0.0.0.0, og opdater derefter. Aktivering af Cloud VPN ændrer ikke denne rute." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "لا يسمح حقل إدخال الملفات هذا باختيار عدة ملفات" + "value": "Il percorso del browser di cmux si connette a 127.0.0.1 sulla macchina. Associa il servizio a 127.0.0.1 o 0.0.0.0, quindi aggiorna. L’attivazione della VPN Cloud non modifica questo percorso." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Dieses Dateieingabefeld erlaubt nicht mehrere Dateien" + "value": "ផ្លូវកម្មវិធីរុករករបស់ cmux ភ្ជាប់ទៅ 127.0.0.1 នៅលើម៉ាស៊ីន។ ចងសេវាកម្មទៅ 127.0.0.1 ឬ 0.0.0.0 រួចផ្ទុកឡើងវិញ។ ការបើក Cloud VPN មិនផ្លាស់ប្តូរផ្លូវនេះទេ។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Este campo de archivos no permite seleccionar varios archivos" + "value": "cmux sin nettleserrute kobler til 127.0.0.1 på maskinen. Bind tjenesten til 127.0.0.1 eller 0.0.0.0, og oppdater deretter. Å slå på Cloud VPN endrer ikke denne ruten." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Ce champ de fichier ne permet pas de sélectionner plusieurs fichiers" + "value": "Trasa przeglądarki cmux łączy się z 127.0.0.1 na maszynie. Powiąż usługę z 127.0.0.1 lub 0.0.0.0, a następnie odśwież. Włączenie Cloud VPN nie zmienia tej trasy." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "このファイル入力欄では複数のファイルを選択できません" + "value": "A rota de navegador do cmux se conecta a 127.0.0.1 na máquina. Vincule o serviço a 127.0.0.1 ou 0.0.0.0 e atualize. Ativar o Cloud VPN não altera essa rota." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "이 파일 입력 요소는 여러 파일을 허용하지 않습니다" + "value": "Браузерный маршрут cmux подключается к 127.0.0.1 на машине. Привяжите службу к 127.0.0.1 или 0.0.0.0, затем обновите. Включение Cloud VPN не меняет этот маршрут." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "此文件输入字段不允许选择多个文件" + "value": "เส้นทางเบราว์เซอร์ของ cmux เชื่อมต่อกับ 127.0.0.1 บนเครื่อง ผูกบริการกับ 127.0.0.1 หรือ 0.0.0.0 แล้วรีเฟรช การเปิด Cloud VPN ไม่ได้เปลี่ยนเส้นทางนี้" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "此檔案輸入欄位不允許選取多個檔案" + "value": "cmux’un tarayıcı yolu makinedeki 127.0.0.1 adresine bağlanır. Hizmeti 127.0.0.1 veya 0.0.0.0 adresine bağlayın, ardından yenileyin. Cloud VPN’i açmak bu yolu değiştirmez." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Браузерний маршрут cmux підключається до 127.0.0.1 на машині. Прив’яжіть службу до 127.0.0.1 або 0.0.0.0, потім оновіть. Увімкнення Cloud VPN не змінює цей маршрут." } } } }, - "browser.inputFiles.error.cancelled": { + "cloudTree.ports.binding.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "File upload preparation was cancelled" + "value": "Services use another interface" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تم إلغاء تجهيز الملفات للرفع" + "value": "Dienste verwenden eine andere Schnittstelle" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Die Vorbereitung des Datei-Uploads wurde abgebrochen" + "value": "Les services utilisent une autre interface" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تستخدم الخدمات واجهة أخرى" } }, "es": { "stringUnit": { "state": "translated", - "value": "Se canceló la preparación de los archivos para subir" + "value": "Los servicios usan otra interfaz" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "La préparation des fichiers à envoyer a été annulée" + "value": "服務使用其他介面" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ファイルのアップロード準備がキャンセルされました" + "value": "服务使用其他接口" } }, "ko": { "stringUnit": { "state": "translated", - "value": "파일 업로드 준비가 취소되었습니다" + "value": "서비스가 다른 인터페이스를 사용함" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "已取消准备上传文件" + "value": "サービスが別のインターフェイスを使用しています" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "已取消準備上傳檔案" + "value": "Servisi koriste drugi interfejs" } - } - } - }, - "browser.inputFiles.error.invalidParameters": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "set-input-files requires a selector and a files array of absolute paths" + "value": "Tjenester bruger en anden grænseflade" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "يتطلب set-input-files محددًا ومصفوفة files تحتوي على مسارات مطلقة" + "value": "I servizi usano un’altra interfaccia" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "set-input-files benötigt einen Selektor und ein files-Array mit absoluten Pfaden" + "value": "សេវាកម្មប្រើចំណុចប្រទាក់ផ្សេង" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "set-input-files requiere un selector y una matriz files de rutas absolutas" + "value": "Tjenester bruker et annet grensesnitt" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "set-input-files nécessite un sélecteur et un tableau files de chemins absolus" + "value": "Usługi używają innego interfejsu" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "set-input-files にはセレクターと絶対パスを含む files 配列が必要です" + "value": "Os serviços usam outra interface" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "set-input-files에는 선택자와 절대 경로로 구성된 files 배열이 필요합니다" + "value": "Службы используют другой интерфейс" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要选择器及包含绝对路径的 files 数组" + "value": "บริการใช้อินเทอร์เฟซอื่น" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要選取器及包含絕對路徑的 files 陣列" + "value": "Hizmetler başka bir arabirim kullanıyor" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Служби використовують інший інтерфейс" } } } }, - "browser.inputFiles.error.invalidSelection": { + "cloudTree.ports.empty.noService": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Select at most 128 files using absolute paths" + "value": "Start a web server on this machine, then refresh." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "اختر ما يصل إلى 128 ملفًا باستخدام مسارات مطلقة" + "value": "Starte einen Webserver auf diesem Rechner und aktualisiere dann die Liste." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Wählen Sie höchstens 128 Dateien mit absoluten Pfaden aus" + "value": "Démarrez un serveur web sur cette machine, puis actualisez." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "شغّل خادم ويب على هذا الجهاز، ثم حدّث القائمة." } }, "es": { "stringUnit": { "state": "translated", - "value": "Selecciona como máximo 128 archivos mediante rutas absolutas" + "value": "Inicia un servidor web en esta máquina y luego actualiza." } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Sélectionnez au maximum 128 fichiers avec des chemins absolus" + "value": "在這台機器上啟動網頁伺服器,然後重新整理。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "絶対パスで最大128個のファイルを選択してください" + "value": "在此机器上启动网页服务器,然后刷新。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "절대 경로를 사용하여 최대 128개의 파일을 선택하세요" + "value": "이 머신에서 웹 서버를 시작한 다음 새로 고치세요." } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "请使用绝对路径选择最多 128 个文件" + "value": "このマシンで Web サーバーを起動してから、更新してください。" } }, - "zh-Hant": { + "bs": { "stringUnit": { - "state": "translated", - "value": "請使用絕對路徑選取最多 128 個檔案" + "state": "needs_review", + "value": "Pokrenite web server na ovoj mašini, zatim osvježite." } - } - } - }, - "browser.inputFiles.error.timeout": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { - "state": "translated", - "value": "Timed out preparing files for upload" + "state": "needs_review", + "value": "Start en webserver på denne maskine, og opdater derefter." } }, - "ar": { + "it": { "stringUnit": { - "state": "translated", - "value": "انتهت مهلة تجهيز الملفات للرفع" + "state": "needs_review", + "value": "Avvia un server web su questa macchina, poi aggiorna." } }, - "de": { + "km": { "stringUnit": { - "state": "translated", - "value": "Zeitüberschreitung beim Vorbereiten der Dateien für den Upload" + "state": "needs_review", + "value": "ចាប់ផ្តើមម៉ាស៊ីនមេបណ្តាញនៅលើម៉ាស៊ីននេះ រួចផ្ទុកឡើងវិញ។" } }, - "es": { + "nb": { "stringUnit": { - "state": "translated", - "value": "Se agotó el tiempo de preparación de los archivos para subir" + "state": "needs_review", + "value": "Start en webserver på denne maskinen, og oppdater deretter." } }, - "fr": { + "pl": { "stringUnit": { - "state": "translated", - "value": "Le délai de préparation des fichiers à envoyer a été dépassé" + "state": "needs_review", + "value": "Uruchom serwer WWW na tej maszynie, a następnie odśwież." } }, - "ja": { + "pt-BR": { "stringUnit": { - "state": "translated", - "value": "アップロードするファイルの準備がタイムアウトしました" + "state": "needs_review", + "value": "Inicie um servidor web nesta máquina e atualize." } }, - "ko": { + "ru": { "stringUnit": { - "state": "translated", - "value": "업로드할 파일 준비 시간이 초과되었습니다" + "state": "needs_review", + "value": "Запустите веб-сервер на этой машине, затем обновите список." } }, - "zh-Hans": { + "th": { "stringUnit": { - "state": "translated", - "value": "准备上传文件超时" + "state": "needs_review", + "value": "เริ่มเว็บเซิร์ฟเวอร์บนเครื่องนี้ แล้วรีเฟรช" } }, - "zh-Hant": { + "tr": { "stringUnit": { - "state": "translated", - "value": "準備上傳檔案逾時" + "state": "needs_review", + "value": "Bu makinede bir web sunucusu başlatın, ardından yenileyin." + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Запустіть вебсервер на цій машині, а потім оновіть список." } } } }, - "browser.inputFiles.error.tooLarge": { + "cloudTree.ports.hub.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The combined upload must be no larger than 32 MiB" + "value": "This build cannot start cmux’s authenticated Cloud forward. Update cmux, then retry." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يجب ألا يتجاوز الحجم الإجمالي للملفات المرفوعة 32 MiB" + "value": "Dieser Build kann die authentifizierte Cloud-Weiterleitung von cmux nicht starten. Aktualisieren Sie cmux und versuchen Sie es erneut." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Die Uploads dürfen insgesamt nicht größer als 32 MiB sein" + "value": "Cette version ne peut pas démarrer le transfert Cloud authentifié de cmux. Mettez cmux à jour, puis réessayez." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "لا يمكن لهذا الإصدار بدء إعادة توجيه Cloud الموثّقة من cmux. حدّث cmux ثم أعد المحاولة." } }, "es": { "stringUnit": { "state": "translated", - "value": "El tamaño total de los archivos para subir no debe superar los 32 MiB" + "value": "Esta compilación no puede iniciar el reenvío autenticado de Cloud de cmux. Actualiza cmux y vuelve a intentarlo." } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "La taille totale des fichiers à envoyer ne doit pas dépasser 32 MiB" + "value": "此版本無法啟動 cmux 的已驗證 Cloud 轉送。請更新 cmux 後重試。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "アップロードするファイルの合計サイズは32 MiB以下にしてください" + "value": "此版本无法启动 cmux 的已验证 Cloud 转发。请更新 cmux 后重试。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "전체 업로드 크기는 32 MiB를 초과할 수 없습니다" + "value": "이 빌드에서는 cmux 인증 Cloud 전달을 시작할 수 없습니다. cmux를 업데이트한 후 다시 시도하세요." } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "上传文件的总大小不得超过 32 MiB" + "value": "このビルドでは cmux の認証済み Cloud 転送を開始できません。cmux を更新して再試行してください。" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "上傳檔案的總大小不得超過 32 MiB" + "value": "Ova verzija ne može pokrenuti autentificirano Cloud prosljeđivanje cmux-a. Ažurirajte cmux, zatim pokušajte ponovo." } - } - } - }, - "browser.inputFiles.error.unreadableFile": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Every upload path must be a readable regular file" + "value": "Denne build kan ikke starte cmux’ godkendte Cloud-videresendelse. Opdater cmux, og prøv igen." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "يجب أن يشير كل مسار للرفع إلى ملف عادي قابل للقراءة" + "value": "Questa build non può avviare l’inoltro Cloud autenticato di cmux. Aggiorna cmux, quindi riprova." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Jeder Upload-Pfad muss auf eine lesbare reguläre Datei verweisen" + "value": "កំណែនេះមិនអាចចាប់ផ្តើមការបញ្ជូនបន្ត Cloud ដែលបានផ្ទៀងផ្ទាត់របស់ cmux បានទេ។ ធ្វើបច្ចុប្បន្នភាព cmux រួចព្យាយាមម្តងទៀត។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Cada ruta de subida debe apuntar a un archivo normal que se pueda leer" + "value": "Denne versjonen kan ikke starte cmux sin autentiserte Cloud-videresending. Oppdater cmux, og prøv igjen." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Chaque chemin à envoyer doit désigner un fichier ordinaire lisible" + "value": "Ta kompilacja nie może uruchomić uwierzytelnionego przekierowania Cloud w cmux. Zaktualizuj cmux i spróbuj ponownie." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "各アップロードパスは読み取り可能な通常ファイルである必要があります" + "value": "Esta versão não consegue iniciar o encaminhamento Cloud autenticado do cmux. Atualize o cmux e tente novamente." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "모든 업로드 경로는 읽을 수 있는 일반 파일이어야 합니다" + "value": "Эта сборка не может запустить аутентифицированное перенаправление Cloud в cmux. Обновите cmux и повторите попытку." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "每个上传路径都必须指向可读取的普通文件" + "value": "บิลด์นี้ไม่สามารถเริ่มการส่งต่อ Cloud ที่ยืนยันตัวตนแล้วของ cmux ได้ อัปเดต cmux แล้วลองอีกครั้ง" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "每個上傳路徑都必須指向可讀取的一般檔案" + "value": "Bu derleme cmux’un kimliği doğrulanmış Cloud yönlendirmesini başlatamıyor. cmux’u güncelleyin, ardından yeniden deneyin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Ця збірка не може запустити автентифіковане перенаправлення Cloud у cmux. Оновіть cmux і повторіть спробу." } } } }, - "cloudTree.group.cloudMachines.usage": { + "cloudTree.ports.link.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Port discovery could not connect to this machine. Existing cmux ports may still work. Refresh to reconnect; Cloud VPN is not required." } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Die Porterkennung konnte diese Maschine nicht erreichen. Bereits geöffnete cmux-Ports funktionieren möglicherweise weiter. Aktualisieren Sie zum erneuten Verbinden; Cloud-VPN ist nicht erforderlich." } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "La découverte des ports n’a pas pu se connecter à cette machine. Les ports cmux existants peuvent encore fonctionner. Actualisez pour reconnecter ; le VPN Cloud n’est pas nécessaire." } }, "ar": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "تعذر اتصال اكتشاف المنافذ بهذا الجهاز. قد تظل منافذ cmux الحالية تعمل. حدّث لإعادة الاتصال؛ Cloud VPN غير مطلوب." } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "El descubrimiento de puertos no pudo conectar con esta máquina. Los puertos de cmux existentes pueden seguir funcionando. Actualiza para reconectar; Cloud VPN no es necesario." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "連接埠探索無法連線到此機器。現有 cmux 連接埠可能仍可使用。請重新整理以重新連線;不需要 Cloud VPN。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "端口发现无法连接到此机器。现有 cmux 端口可能仍可使用。请刷新以重新连接;无需 Cloud VPN。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "포트 검색이 이 머신에 연결하지 못했습니다. 기존 cmux 포트는 계속 작동할 수 있습니다. 새로 고쳐 다시 연결하세요. Cloud VPN은 필요하지 않습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "ポート検出がこのマシンに接続できませんでした。既存の cmux ポートは引き続き動作する可能性があります。更新して再接続してください。Cloud VPN は不要です。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Otkrivanje portova nije se moglo povezati s ovom mašinom. Postojeći cmux portovi možda i dalje rade. Osvježite za ponovno povezivanje; Cloud VPN nije potreban." } }, "da": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Portregistrering kunne ikke oprette forbindelse til denne maskine. Eksisterende cmux-porte virker muligvis stadig. Opdater for at genoprette forbindelsen; Cloud VPN er ikke påkrævet." } }, "it": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Il rilevamento delle porte non è riuscito a connettersi a questa macchina. Le porte cmux esistenti potrebbero funzionare ancora. Aggiorna per riconnetterti; la VPN Cloud non è necessaria." } }, "km": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "ការស្វែងរកច្រកមិនអាចភ្ជាប់ទៅម៉ាស៊ីននេះបានទេ។ ច្រក cmux ដែលមានស្រាប់អាចនៅតែដំណើរការ។ ផ្ទុកឡើងវិញដើម្បីភ្ជាប់ម្តងទៀត; មិនត្រូវការ Cloud VPN ទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Portoppdagelse kunne ikke koble til denne maskinen. Eksisterende cmux-porter kan fortsatt fungere. Oppdater for å koble til på nytt; Cloud VPN er ikke nødvendig." } }, "pl": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Wykrywanie portów nie mogło połączyć się z tą maszyną. Istniejące porty cmux mogą nadal działać. Odśwież, aby połączyć ponownie; Cloud VPN nie jest wymagany." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "A descoberta de portas não conseguiu se conectar a esta máquina. As portas existentes do cmux ainda podem funcionar. Atualize para reconectar; o Cloud VPN não é necessário." } }, "ru": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Обнаружению портов не удалось подключиться к этой машине. Существующие порты cmux могут по-прежнему работать. Обновите, чтобы переподключиться; Cloud VPN не требуется." } }, "th": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "การค้นหาพอร์ตไม่สามารถเชื่อมต่อกับเครื่องนี้ได้ พอร์ต cmux ที่มีอยู่อาจยังใช้งานได้ รีเฟรชเพื่อเชื่อมต่อใหม่ ไม่จำเป็นต้องใช้ Cloud VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Port keşfi bu makineye bağlanamadı. Mevcut cmux portları hâlâ çalışıyor olabilir. Yeniden bağlanmak için yenileyin; Cloud VPN gerekmez." } }, "uk": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Виявленню портів не вдалося підключитися до цієї машини. Наявні порти cmux можуть і далі працювати. Оновіть, щоб підключитися знову; Cloud VPN не потрібен." } } } }, - "settings.app.accentColor.custom": { + "cloudTree.ports.link.title": { + "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "مخصص" + "value": "Cloud link unavailable" } }, - "bs": { + "de": { "stringUnit": { "state": "translated", - "value": "Prilagođeno" + "value": "Cloud-Verbindung nicht verfügbar" } }, - "da": { + "fr": { "stringUnit": { "state": "translated", - "value": "Tilpasset" + "value": "Connexion Cloud indisponible" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Benutzerdefiniert" + "value": "اتصال Cloud غير متاح" } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Custom" + "value": "Conexión de Cloud no disponible" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Personalizado" + "value": "Cloud 連線無法使用" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Personnalisée" + "value": "Cloud 连接不可用" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Personalizzato" + "value": "Cloud 연결을 사용할 수 없음" } }, "ja": { "stringUnit": { "state": "translated", - "value": "カスタム" + "value": "Cloud 接続を利用できません" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "사용자 지정" + "value": "Cloud veza nije dostupna" } }, - "nb": { + "da": { "stringUnit": { "state": "translated", - "value": "Egendefinert" + "value": "Cloud-forbindelse utilgængelig" } }, - "pl": { + "it": { "stringUnit": { "state": "translated", - "value": "Niestandardowy" + "value": "Collegamento Cloud non disponibile" } }, - "pt-BR": { + "km": { "stringUnit": { "state": "translated", - "value": "Personalizado" + "value": "តំណ Cloud មិនអាចប្រើបាន" } }, - "ru": { + "nb": { "stringUnit": { "state": "translated", - "value": "Пользовательский" + "value": "Cloud-tilkobling utilgjengelig" } }, - "th": { + "pl": { "stringUnit": { "state": "translated", - "value": "กำหนดเอง" + "value": "Połączenie Cloud niedostępne" } }, - "tr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Özel" + "value": "Conexão Cloud indisponível" } }, - "uk": { + "ru": { "stringUnit": { "state": "translated", - "value": "Власний" + "value": "Связь с Cloud недоступна" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "自定义" + "value": "ลิงก์ Cloud ไม่พร้อมใช้งาน" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "自訂" + "value": "Cloud bağlantısı kullanılamıyor" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Зв’язок із Cloud недоступний" } } } }, - "cloudTree.action.newCloudMachine": { + "cloudTree.ports.loading.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "New Cloud Machine" + "value": "Checking services through cmux’s authenticated Cloud link. No system VPN is needed." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جهاز سحابي جديد" + "value": "Dienste werden über die authentifizierte Cloud-Verbindung von cmux geprüft. Ein System-VPN ist nicht erforderlich." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Neue Cloud-Maschine" + "value": "Vérification des services via la connexion Cloud authentifiée de cmux. Aucun VPN système n’est nécessaire." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Nueva máquina en la nube" + "value": "جارٍ فحص الخدمات عبر اتصال Cloud الموثّق من cmux. لا حاجة إلى VPN النظام." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Nouvelle machine cloud" + "value": "Comprobando servicios mediante la conexión autenticada de Cloud de cmux. No se necesita una VPN del sistema." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "新しいクラウドマシン" + "value": "正在透過 cmux 的已驗證 Cloud 連線檢查服務。不需要系統 VPN。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "새 클라우드 머신" + "value": "正在通过 cmux 的已验证 Cloud 连接检查服务。无需系统 VPN。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "新建云主机" + "value": "cmux의 인증된 Cloud 연결로 서비스를 확인하고 있습니다. 시스템 VPN은 필요하지 않습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "新增雲端機器" + "value": "cmux の認証済み Cloud 接続でサービスを確認しています。システム VPN は不要です。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Nova cloud mašina" + "value": "Provjera servisa putem autentificirane Cloud veze cmux-a. Sistemski VPN nije potreban." } }, "da": { "stringUnit": { "state": "translated", - "value": "Ny cloud-maskine" + "value": "Kontrollerer tjenester via cmux’ godkendte Cloud-forbindelse. Der kræves ingen system-VPN." } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuova macchina cloud" + "value": "Controllo dei servizi tramite il collegamento Cloud autenticato di cmux. Non serve una VPN di sistema." } }, "km": { "stringUnit": { "state": "translated", - "value": "ម៉ាស៊ីន Cloud ថ្មី" + "value": "កំពុងពិនិត្យសេវាកម្មតាមរយៈតំណ Cloud ដែលបានផ្ទៀងផ្ទាត់របស់ cmux។ មិនត្រូវការ VPN របស់ប្រព័ន្ធទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ny sky-maskin" + "value": "Sjekker tjenester via cmux sin autentiserte Cloud-tilkobling. Ingen system-VPN er nødvendig." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowa maszyna w chmurze" + "value": "Sprawdzanie usług przez uwierzytelnione połączenie Cloud w cmux. Systemowa sieć VPN nie jest potrzebna." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nova máquina na nuvem" + "value": "Verificando serviços pela conexão Cloud autenticada do cmux. Nenhuma VPN do sistema é necessária." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новая облачная машина" + "value": "Проверка служб через аутентифицированную связь cmux с Cloud. Системный VPN не нужен." } }, "th": { "stringUnit": { "state": "translated", - "value": "เครื่องคลาวด์ใหม่" + "value": "กำลังตรวจสอบบริการผ่านลิงก์ Cloud ที่ยืนยันตัวตนแล้วของ cmux ไม่ต้องใช้ VPN ของระบบ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeni bulut makinesi" + "value": "Hizmetler cmux’un kimliği doğrulanmış Cloud bağlantısı üzerinden denetleniyor. Sistem VPN’i gerekmez." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нова хмарна машина" + "value": "Перевірка служб через автентифікований зв’язок cmux із Cloud. Системний VPN не потрібен." } } } }, - "devices.incoming.confirm.enable": { + "cloudTree.ports.loopback.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Make Discoverable" + "value": "These services open in cmux without Cloud VPN. They listen on the machine’s loopback address, so other apps cannot reach them through its private IP, even with VPN connected." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جعل الجهاز قابلاً للاكتشاف" + "value": "Diese Dienste lassen sich in cmux ohne Cloud-VPN öffnen. Sie lauschen auf der Loopback-Adresse der Maschine. Andere Apps erreichen sie daher auch mit VPN nicht über deren private IP." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Auffindbar machen" + "value": "Ces services s’ouvrent dans cmux sans VPN Cloud. Ils écoutent sur l’adresse locale de la machine : les autres apps ne peuvent pas y accéder via son IP privée, même avec le VPN." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Hacer detectable" + "value": "تُفتح هذه الخدمات داخل cmux دون Cloud VPN. وهي تستمع على عنوان الواجهة المحلية للجهاز، لذا لا تستطيع التطبيقات الأخرى الوصول إليها عبر عنوان IP الخاص به حتى مع اتصال VPN." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Rendre détectable" + "value": "Estos servicios se abren en cmux sin Cloud VPN. Escuchan en la dirección de bucle local de la máquina, por lo que otras apps no pueden acceder por su IP privada, incluso con la VPN conectada." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "検出可能にする" + "value": "這些服務可在 cmux 中開啟,不需要 Cloud VPN。它們在機器的迴路位址上監聽,因此即使已連線 VPN,其他 App 也無法透過其私人 IP 存取。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "검색 허용" + "value": "这些服务可在 cmux 中打开,无需 Cloud VPN。它们监听机器的回环地址,因此即使已连接 VPN,其他应用也无法通过其专用 IP 访问。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "允许发现" + "value": "이 서비스는 Cloud VPN 없이 cmux에서 열립니다. 머신의 루프백 주소에서 수신 대기하므로 VPN에 연결해도 다른 앱은 비공개 IP로 접근할 수 없습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "允許探索" + "value": "これらのサービスは Cloud VPN なしで cmux から開けます。マシンのループバックアドレスで待ち受けるため、VPN 接続中でも他のアプリからプライベート IP 経由ではアクセスできません。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Učini dostupnim" + "value": "Ovi servisi se otvaraju u cmux-u bez Cloud VPN-a. Slušaju na loopback adresi mašine, pa ih druge aplikacije ne mogu dosegnuti preko njene privatne IP adrese, čak ni uz povezan VPN." } }, "da": { "stringUnit": { "state": "translated", - "value": "Gør synlig" + "value": "Disse tjenester åbnes i cmux uden Cloud VPN. De lytter på maskinens loopback-adresse, så andre apps kan ikke nå dem via dens private IP, heller ikke med VPN forbundet." } }, "it": { "stringUnit": { "state": "translated", - "value": "Rendi individuabile" + "value": "Questi servizi si aprono in cmux senza VPN Cloud. Sono in ascolto sull’indirizzo di loopback della macchina, quindi le altre app non possono raggiungerli tramite il suo IP privato, nemmeno con la VPN connessa." } }, "km": { "stringUnit": { "state": "translated", - "value": "ធ្វើឲ្យអាចរកឃើញ" + "value": "សេវាកម្មទាំងនេះបើកនៅក្នុង cmux ដោយមិនត្រូវការ Cloud VPN។ ពួកវាស្តាប់នៅលើអាសយដ្ឋាន loopback របស់ម៉ាស៊ីន ដូច្នេះកម្មវិធីផ្សេងទៀតមិនអាចចូលដល់ពួកវាតាមរយៈ IP ឯកជនរបស់វាបានទេ ទោះបីភ្ជាប់ VPN ក៏ដោយ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gjør denne Mac-en synlig" + "value": "Disse tjenestene åpnes i cmux uten Cloud VPN. De lytter på maskinens loopback-adresse, så andre apper kan ikke nå dem via den private IP-adressen, selv med VPN tilkoblet." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Włącz wykrywanie" + "value": "Te usługi otwierają się w cmux bez Cloud VPN. Nasłuchują na adresie pętli zwrotnej maszyny, więc inne aplikacje nie mogą do nich dotrzeć przez jej prywatny adres IP, nawet przy połączonym VPN." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Tornar detectável" + "value": "Esses serviços abrem no cmux sem o Cloud VPN. Eles escutam no endereço de loopback da máquina, então outros apps não conseguem alcançá-los pelo IP privado dela, mesmo com a VPN conectada." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сделать доступным для обнаружения" + "value": "Эти службы открываются в cmux без Cloud VPN. Они прослушивают loopback-адрес машины, поэтому другие приложения не могут обратиться к ним через её частный IP даже при подключённом VPN." } }, "th": { "stringUnit": { "state": "translated", - "value": "ทำให้ Mac เครื่องนี้ค้นพบได้" + "value": "บริการเหล่านี้เปิดใน cmux ได้โดยไม่ต้องใช้ Cloud VPN บริการรับฟังบนที่อยู่ loopback ของเครื่อง แอปอื่นจึงเข้าถึงผ่าน IP ส่วนตัวของเครื่องไม่ได้ แม้จะเชื่อมต่อ VPN แล้วก็ตาม" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Keşfedilebilir yap" + "value": "Bu hizmetler cmux’ta Cloud VPN olmadan açılır. Makinenin geri döngü adresinde dinledikleri için diğer uygulamalar, VPN bağlıyken bile makinenin özel IP’si üzerinden onlara ulaşamaz." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Зробити цей Mac видимим" + "value": "Ці служби відкриваються в cmux без Cloud VPN. Вони прослуховують loopback-адресу машини, тому інші застосунки не можуть дістатися до них через її приватну IP-адресу, навіть із підключеним VPN." } } } }, - "devices.incoming.confirm.message": { + "cloudTree.ports.loopback.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Other Macs signed in to your cmux account may discover this Mac and connect to its workspaces. Do you want to continue?" + "value": "Loopback services available" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "قد تكتشف أجهزة Mac الأخرى التي سجّلت الدخول إلى حساب cmux هذا الـ Mac وتتصل بمساحات العمل فيه. هل تريد المتابعة؟" + "value": "Loopback-Dienste verfügbar" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Andere Macs, die bei deinem cmux-Konto angemeldet sind, können diesen Mac finden und sich mit seinen Arbeitsbereichen verbinden. Möchtest du fortfahren?" + "value": "Services locaux disponibles" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Otros Mac que hayan iniciado sesión en tu cuenta de cmux podrán descubrir este Mac y conectarse a sus espacios de trabajo. ¿Quieres continuar?" + "value": "خدمات الواجهة المحلية متاحة" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Les autres Mac connectés à votre compte cmux pourront détecter ce Mac et se connecter à ses espaces de travail. Voulez-vous continuer ?" + "value": "Servicios de bucle local disponibles" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmuxアカウントにサインインしているほかのMacから、このMacが検出され、ワークスペースに接続されることがあります。続けますか?" + "value": "可使用迴路服務" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 계정에 로그인한 다른 Mac에서 이 Mac을 검색하고 작업 공간에 연결할 수 있습니다. 계속하시겠습니까?" + "value": "回环服务可用" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "登录你 cmux 帐户的其他 Mac 可能会发现此 Mac 并连接到其工作区。要继续吗?" + "value": "루프백 서비스 사용 가능" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "登入您 cmux 帳戶的其他 Mac 可能會探索此 Mac 並連線至其工作區。要繼續嗎?" + "value": "ループバックのサービスを利用できます" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Drugi Mac računari prijavljeni na vaš cmux nalog možda će otkriti ovaj Mac i povezati se s njegovim radnim prostorima. Želite li nastaviti?" + "value": "Dostupni loopback servisi" } }, "da": { "stringUnit": { "state": "translated", - "value": "Andre Mac-computere, der er logget ind på din cmux-konto, kan muligvis finde denne Mac og oprette forbindelse til dens arbejdsområder. Vil du fortsætte?" + "value": "Loopback-tjenester tilgængelige" } }, "it": { "stringUnit": { "state": "translated", - "value": "Gli altri Mac che hanno effettuato l’accesso al tuo account cmux potrebbero rilevare questo Mac e connettersi ai suoi spazi di lavoro. Vuoi continuare?" + "value": "Servizi di loopback disponibili" } }, "km": { "stringUnit": { "state": "translated", - "value": "Mac ផ្សេងទៀតដែលបានចូលគណនី cmux របស់អ្នក អាចរកឃើញ Mac នេះ និងភ្ជាប់ទៅកាន់ workspace របស់វា។ តើអ្នកចង់បន្តឬទេ?" + "value": "មានសេវាកម្ម loopback" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Andre Mac-maskiner som er logget på cmux-kontoen din, kan finne denne Mac-en og koble til arbeidsområdene. Vil du fortsette?" + "value": "Loopback-tjenester tilgjengelige" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Inne Maki zalogowane na Twoje konto cmux mogą wykryć tego Maca i połączyć się z jego obszarami roboczymi. Czy chcesz kontynuować?" + "value": "Dostępne usługi pętli zwrotnej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Outros Macs conectados à sua conta cmux poderão descobrir este Mac e se conectar aos seus espaços de trabalho. Deseja continuar?" + "value": "Serviços de loopback disponíveis" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Другие Mac, вошедшие в вашу учётную запись cmux, могут обнаружить этот Mac и подключиться к его рабочим пространствам. Продолжить?" + "value": "Доступны loopback-службы" } }, "th": { "stringUnit": { "state": "translated", - "value": "Mac เครื่องอื่นที่ลงชื่อเข้าใช้บัญชี cmux ของคุณอาจค้นพบ Mac เครื่องนี้และเชื่อมต่อกับพื้นที่ทำงานของเครื่องนี้ คุณต้องการดำเนินการต่อหรือไม่" + "value": "มีบริการ loopback พร้อมใช้งาน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "cmux hesabınızda oturum açmış diğer Mac’ler bu Mac’i keşfedebilir ve çalışma alanlarına bağlanabilir. Devam etmek istiyor musunuz?" + "value": "Geri döngü hizmetleri kullanılabilir" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Інші Mac, на яких виконано вхід у ваш обліковий запис cmux, можуть виявити цей Mac і підключитися до його робочих просторів. Продовжити?" + "value": "Доступні loopback-служби" } } } }, - "devices.incoming.confirm.title": { + "cloudTree.ports.notRequested.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Make this Mac discoverable?" + "value": "Ports not checked yet" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "هل تريد جعل جهاز Mac هذا قابلاً للاكتشاف؟" + "value": "Ports noch nicht geprüft" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Diesen Mac auffindbar machen?" + "value": "Ports pas encore vérifiés" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "¿Hacer que este Mac sea detectable?" + "value": "لم يتم فحص المنافذ بعد" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Rendre ce Mac détectable ?" + "value": "Puertos aún sin comprobar" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "このMacを検出可能にしますか?" + "value": "尚未檢查連接埠" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "이 Mac을 검색 가능하게 할까요?" + "value": "尚未检查端口" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "允许发现此 Mac 吗?" + "value": "아직 포트를 확인하지 않음" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "要允許探索此 Mac 嗎?" + "value": "ポートは未確認です" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Učiniti ovaj Mac dostupnim?" + "value": "Portovi još nisu provjereni" } }, "da": { "stringUnit": { "state": "translated", - "value": "Gør denne Mac synlig?" + "value": "Porte er ikke kontrolleret endnu" } }, "it": { "stringUnit": { "state": "translated", - "value": "Rendere individuabile questo Mac?" + "value": "Porte non ancora controllate" } }, "km": { "stringUnit": { "state": "translated", - "value": "ធ្វើឲ្យ Mac នេះអាចរកឃើញ?" + "value": "មិនទាន់បានពិនិត្យច្រកនៅឡើយ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gjøre denne Mac-en synlig?" + "value": "Porter er ikke sjekket ennå" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Uwidocznić tego Maca?" + "value": "Porty nie zostały jeszcze sprawdzone" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Tornar este Mac detectável?" + "value": "Portas ainda não verificadas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сделать этот Mac доступным для обнаружения?" + "value": "Порты ещё не проверены" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทำให้ Mac เครื่องนี้ค้นพบได้หรือไม่" + "value": "ยังไม่ได้ตรวจสอบพอร์ต" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu Mac keşfedilebilir yapılsın mı?" + "value": "Portlar henüz denetlenmedi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Зробити цей Mac доступним для виявлення?" + "value": "Порти ще не перевірено" } } } }, - "cloudTree.device.status.connecting": { + "cloudTree.ports.privateAddress": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Connecting…" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "جارٍ الاتصال…" + "value": "Private address unavailable" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wird verbunden…" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Conectando…" + "value": "Private Adresse nicht verfügbar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connexion…" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "接続中…" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "연결 중…" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "正在连接…" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "正在連線…" - } - } - } - }, - "terminal.clipboardReadConfirmation.deny": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Deny" + "value": "Adresse privée indisponible" } }, "ar": { "stringUnit": { "state": "translated", - "value": "رفض" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Ablehnen" + "value": "العنوان الخاص غير متاح" } }, "es": { "stringUnit": { "state": "translated", - "value": "Denegar" + "value": "Dirección privada no disponible" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Refuser" + "value": "私人位址無法使用" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "拒否" + "value": "专用地址不可用" } }, "ko": { "stringUnit": { "state": "translated", - "value": "거부" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "拒绝" + "value": "비공개 주소를 사용할 수 없음" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "拒絕" + "value": "プライベートアドレスを利用できません" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Odbij" + "value": "Privatna adresa nije dostupna" } }, "da": { "stringUnit": { "state": "translated", - "value": "Afvis" + "value": "Privat adresse utilgængelig" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nega" + "value": "Indirizzo privato non disponibile" } }, "km": { "stringUnit": { "state": "translated", - "value": "បដិសេធ" + "value": "អាសយដ្ឋានឯកជនមិនអាចប្រើបាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Avslå" + "value": "Privat adresse utilgjengelig" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Odmów" + "value": "Adres prywatny niedostępny" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Negar" + "value": "Endereço privado indisponível" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Запретить" + "value": "Частный адрес недоступен" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปฏิเสธ" + "value": "ไม่มีที่อยู่ส่วนตัว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Reddet" + "value": "Özel adres kullanılamıyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Заборонити" + "value": "Приватна адреса недоступна" } } } }, - "terminal.clipboardReadConfirmation.message": { + "cloudTree.ports.privateAddress.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "A program in this terminal wants to read your clipboard. Allow it only if you trust the program." + "value": "cmux’s authenticated route needs this machine’s private address. Refresh to retrieve it. Turning on Cloud VPN does not assign a missing address." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يريد برنامج في هذه الطرفية قراءة الحافظة. اسمح بذلك فقط إذا كنت تثق بالبرنامج." + "value": "Die authentifizierte Route von cmux benötigt die private Adresse dieser Maschine. Aktualisieren Sie, um sie abzurufen. Cloud-VPN weist keine fehlende Adresse zu." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ein Programm in diesem Terminal möchte deine Zwischenablage lesen. Erlaube es nur, wenn du dem Programm vertraust." + "value": "La route authentifiée de cmux nécessite l’adresse privée de cette machine. Actualisez pour la récupérer. Activer le VPN Cloud n’attribue pas d’adresse manquante." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Un programa de esta terminal quiere leer tu portapapeles. Permítelo solo si confías en el programa." + "value": "يحتاج مسار cmux الموثّق إلى العنوان الخاص لهذا الجهاز. حدّث لاسترجاعه. تشغيل Cloud VPN لا يعيّن عنوانًا مفقودًا." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Un programme de ce terminal veut lire votre presse-papiers. Ne l’autorisez que si vous faites confiance à ce programme." + "value": "La ruta autenticada de cmux necesita la dirección privada de esta máquina. Actualiza para obtenerla. Activar Cloud VPN no asigna una dirección que falta." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "このターミナルのプログラムがクリップボードを読み取ろうとしています。信頼できるプログラムの場合にのみ許可してください。" + "value": "cmux 的已驗證路徑需要此機器的私人位址。請重新整理以取得位址。開啟 Cloud VPN 不會指派缺少的位址。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "이 터미널의 프로그램이 클립보드를 읽으려고 합니다. 프로그램을 신뢰할 수 있을 때만 허용하세요." + "value": "cmux 的已验证路由需要此机器的专用地址。请刷新以获取地址。开启 Cloud VPN 不会分配缺失的地址。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "此终端中的程序想要读取你的剪贴板。只有在你信任该程序时才允许。" + "value": "cmux의 인증된 경로에는 이 머신의 비공개 주소가 필요합니다. 새로 고쳐 주소를 가져오세요. Cloud VPN을 켜도 누락된 주소가 할당되지는 않습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "此終端機中的程式想要讀取你的剪貼簿。只有在你信任該程式時才允許。" + "value": "cmux の認証済み経路にはこのマシンのプライベートアドレスが必要です。更新して取得してください。Cloud VPN を有効にしても不足しているアドレスは割り当てられません。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Program u ovom terminalu želi čitati vaš međuspremnik. Dozvolite samo ako vjerujete programu." + "value": "Autentificirana ruta cmux-a treba privatnu adresu ove mašine. Osvježite da je preuzmete. Uključivanje Cloud VPN-a ne dodjeljuje adresu koja nedostaje." } }, "da": { "stringUnit": { "state": "translated", - "value": "Et program i denne terminal vil læse din udklipsholder. Tillad det kun, hvis du har tillid til programmet." + "value": "cmux’ godkendte rute kræver denne maskines private adresse. Opdater for at hente den. Aktivering af Cloud VPN tildeler ikke en manglende adresse." } }, "it": { "stringUnit": { "state": "translated", - "value": "Un programma in questo terminale vuole leggere gli appunti. Consentilo solo se ti fidi del programma." + "value": "Il percorso autenticato di cmux richiede l’indirizzo privato di questa macchina. Aggiorna per recuperarlo. L’attivazione della VPN Cloud non assegna un indirizzo mancante." } }, "km": { "stringUnit": { "state": "translated", - "value": "កម្មវិធីក្នុងស្ថានីយនេះចង់អានក្ដារតម្បៀតខ្ទាស់របស់អ្នក។ អនុញ្ញាតតែបើអ្នកទុកចិត្តកម្មវិធីនេះ។" + "value": "ផ្លូវដែលបានផ្ទៀងផ្ទាត់របស់ cmux ត្រូវការអាសយដ្ឋានឯកជនរបស់ម៉ាស៊ីននេះ។ ផ្ទុកឡើងវិញដើម្បីទាញយកវា។ ការបើក Cloud VPN មិនផ្តល់អាសយដ្ឋានដែលបាត់ទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Et program i denne terminalen vil lese utklippstavlen din. Tillat det bare hvis du stoler på programmet." + "value": "cmux sin autentiserte rute trenger denne maskinens private adresse. Oppdater for å hente den. Å slå på Cloud VPN tildeler ikke en manglende adresse." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Program w tym terminalu chce odczytać schowek. Zezwól tylko, jeśli ufasz temu programowi." + "value": "Uwierzytelniona trasa cmux wymaga prywatnego adresu tej maszyny. Odśwież, aby go pobrać. Włączenie Cloud VPN nie przypisuje brakującego adresu." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Um programa neste terminal quer ler sua área de transferência. Permita somente se você confiar no programa." + "value": "A rota autenticada do cmux precisa do endereço privado desta máquina. Atualize para obtê-lo. Ativar o Cloud VPN não atribui um endereço ausente." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Программа в этом терминале хочет прочитать буфер обмена. Разрешайте только программам, которым доверяете." + "value": "Аутентифицированному маршруту cmux нужен частный адрес этой машины. Обновите, чтобы получить его. Включение Cloud VPN не назначает отсутствующий адрес." } }, "th": { "stringUnit": { "state": "translated", - "value": "โปรแกรมในเทอร์มินัลนี้ต้องการอ่านคลิปบอร์ดของคุณ อนุญาตเฉพาะเมื่อคุณเชื่อถือโปรแกรมนี้" + "value": "เส้นทางที่ยืนยันตัวตนแล้วของ cmux ต้องใช้ที่อยู่ส่วนตัวของเครื่องนี้ รีเฟรชเพื่อดึงข้อมูล การเปิด Cloud VPN ไม่ได้กำหนดที่อยู่ที่ขาดหายไป" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu terminaldeki bir program panonuzu okumak istiyor. Yalnızca programa güveniyorsanız izin verin." + "value": "cmux’un kimliği doğrulanmış yolu bu makinenin özel adresine ihtiyaç duyar. Adresi almak için yenileyin. Cloud VPN’i açmak eksik bir adres atamaz." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Програма в цьому терміналі хоче прочитати ваш буфер обміну. Дозволяйте, лише якщо довіряєте програмі." + "value": "Автентифікованому маршруту cmux потрібна приватна адреса цієї машини. Оновіть, щоб отримати її. Увімкнення Cloud VPN не призначає відсутню адресу." } } } }, - "terminal.clipboardReadConfirmation.title": { + "cloudTree.ports.routeNote": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Allow Clipboard Access?" + "value": "cmux forwards ports without Cloud VPN. Web browsers and other Mac apps need Cloud VPN to reach services bound to the machine’s private address." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "السماح بالوصول إلى الحافظة؟" + "value": "cmux leitet Ports ohne Cloud-VPN weiter. Webbrowser und andere Mac-Apps benötigen Cloud-VPN, um Dienste an der privaten Adresse der Maschine zu erreichen." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Zugriff auf die Zwischenablage erlauben?" + "value": "cmux transfère les ports sans VPN Cloud. Les navigateurs web et les autres apps Mac ont besoin du VPN Cloud pour atteindre les services liés à l’adresse privée de la machine." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "¿Permitir el acceso al portapapeles?" + "value": "يعيد cmux توجيه المنافذ دون Cloud VPN. تحتاج متصفحات الويب وتطبيقات Mac الأخرى إلى Cloud VPN للوصول إلى الخدمات المرتبطة بالعنوان الخاص للجهاز." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Autoriser l’accès au presse-papiers ?" + "value": "cmux reenvía puertos sin Cloud VPN. Los navegadores web y otras apps de Mac necesitan Cloud VPN para acceder a servicios enlazados a la dirección privada de la máquina." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "クリップボードへのアクセスを許可しますか?" + "value": "cmux 可轉送連接埠,不需要 Cloud VPN。網頁瀏覽器和其他 Mac App 需要 Cloud VPN,才能存取繫結至機器私人位址的服務。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "클립보드 접근을 허용하시겠습니까?" + "value": "cmux 可转发端口,无需 Cloud VPN。网页浏览器和其他 Mac 应用需要 Cloud VPN,才能访问绑定到机器专用地址的服务。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "允许访问剪贴板?" + "value": "cmux는 Cloud VPN 없이 포트를 전달합니다. 웹 브라우저 및 다른 Mac 앱이 머신의 비공개 주소에 바인딩된 서비스에 접근하려면 Cloud VPN이 필요합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "允許存取剪貼簿?" + "value": "cmux は Cloud VPN なしでポートを転送します。Web ブラウザやその他の Mac アプリからマシンのプライベートアドレスにバインドされたサービスにアクセスするには Cloud VPN が必要です。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Dozvoliti pristup međuspremniku?" + "value": "cmux prosljeđuje portove bez Cloud VPN-a. Web preglednicima i drugim Mac aplikacijama potreban je Cloud VPN za pristup servisima vezanim za privatnu adresu mašine." } }, "da": { "stringUnit": { "state": "translated", - "value": "Tillad adgang til udklipsholderen?" + "value": "cmux videresender porte uden Cloud VPN. Webbrowsere og andre Mac-apps skal bruge Cloud VPN for at nå tjenester, der er bundet til maskinens private adresse." } }, "it": { "stringUnit": { "state": "translated", - "value": "Consentire l'accesso agli appunti?" + "value": "cmux inoltra le porte senza VPN Cloud. I browser web e le altre app per Mac hanno bisogno della VPN Cloud per raggiungere i servizi associati all’indirizzo privato della macchina." } }, "km": { "stringUnit": { "state": "translated", - "value": "អនុញ្ញាតឱ្យចូលប្រើក្ដារតម្បៀតខ្ទាស់?" + "value": "cmux បញ្ជូនបន្តច្រកដោយមិនត្រូវការ Cloud VPN។ កម្មវិធីរុករកបណ្តាញ និងកម្មវិធី Mac ផ្សេងទៀតត្រូវការ Cloud VPN ដើម្បីចូលដល់សេវាកម្មដែលចងទៅអាសយដ្ឋានឯកជនរបស់ម៉ាស៊ីន។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Tillat tilgang til utklippstavlen?" + "value": "cmux videresender porter uten Cloud VPN. Nettlesere og andre Mac-apper trenger Cloud VPN for å nå tjenester som er bundet til maskinens private adresse." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zezwolić na dostęp do schowka?" + "value": "cmux przekierowuje porty bez Cloud VPN. Przeglądarki internetowe i inne aplikacje na Maca potrzebują Cloud VPN, aby dotrzeć do usług powiązanych z prywatnym adresem maszyny." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Permitir acesso à área de transferência?" + "value": "O cmux encaminha portas sem o Cloud VPN. Navegadores e outros apps do Mac precisam do Cloud VPN para acessar serviços vinculados ao endereço privado da máquina." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Разрешить доступ к буферу обмена?" + "value": "cmux перенаправляет порты без Cloud VPN. Веб-браузерам и другим приложениям Mac нужен Cloud VPN, чтобы обращаться к службам, привязанным к частному адресу машины." } }, "th": { "stringUnit": { "state": "translated", - "value": "อนุญาตให้เข้าถึงคลิปบอร์ดหรือไม่?" + "value": "cmux ส่งต่อพอร์ตได้โดยไม่ต้องใช้ Cloud VPN เว็บเบราว์เซอร์และแอป Mac อื่นๆ ต้องใช้ Cloud VPN เพื่อเข้าถึงบริการที่ผูกกับที่อยู่ส่วนตัวของเครื่อง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Panoya erişime izin verilsin mi?" + "value": "cmux, portları Cloud VPN olmadan yönlendirir. Web tarayıcıları ve diğer Mac uygulamaları, makinenin özel adresine bağlı hizmetlere ulaşmak için Cloud VPN’e ihtiyaç duyar." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Дозволити доступ до буфера обміну?" + "value": "cmux перенаправляє порти без Cloud VPN. Веббраузерам та іншим застосункам Mac потрібен Cloud VPN, щоб звертатися до служб, прив’язаних до приватної адреси машини." } } } }, - "notification.remoteRelay.hostFallback": { + "cloudTree.ports.setupVPN": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Remote host" + "value": "Set Up VPN…" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "مضيف بعيد" + "value": "VPN einrichten…" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Remote-Host" + "value": "Configurer le VPN…" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Host remoto" + "value": "إعداد VPN…" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Hôte distant" + "value": "Configurar VPN…" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "リモートホスト" + "value": "設定 VPN…" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "원격 호스트" + "value": "设置 VPN…" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "远程主机" + "value": "VPN 설정…" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "遠端主機" + "value": "VPN を設定…" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Udaljeni host" + "value": "Postavi VPN…" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fjernvært" + "value": "Konfigurer VPN…" } }, "it": { "stringUnit": { "state": "translated", - "value": "Host remoto" + "value": "Configura VPN…" } }, "km": { "stringUnit": { "state": "translated", - "value": "ម៉ាស៊ីនពីចម្ងាយ" + "value": "រៀបចំ VPN…" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ekstern vert" + "value": "Konfigurer VPN…" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zdalny host" + "value": "Skonfiguruj VPN…" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Host remoto" + "value": "Configurar VPN…" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Удалённый хост" + "value": "Настроить VPN…" } }, "th": { "stringUnit": { "state": "translated", - "value": "โฮสต์ระยะไกล" + "value": "ตั้งค่า VPN…" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Uzak ana bilgisayar" + "value": "VPN’i Kur…" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Віддалений хост" + "value": "Налаштувати VPN…" } } } }, - "notification.remoteRelay.title": { + "cloudTree.ports.stale": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Port list may be out of date" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Portliste möglicherweise veraltet" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "La liste des ports peut être obsolète" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "قد تكون قائمة المنافذ قديمة" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "La lista de puertos puede estar desactualizada" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "連接埠清單可能已過時" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "端口列表可能已过期" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "포트 목록이 오래되었을 수 있음" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "ポートリストが古い可能性があります" } }, "bs": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Lista portova je možda zastarjela" } }, "da": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Portlisten er muligvis forældet" } }, "it": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "L’elenco delle porte potrebbe non essere aggiornato" } }, "km": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "បញ្ជីច្រកអាចហួសសម័យ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Portlisten kan være utdatert" } }, "pl": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Lista portów może być nieaktualna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "A lista de portas pode estar desatualizada" } }, "ru": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Список портов может быть устаревшим" } }, "th": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "รายการพอร์ตอาจไม่เป็นปัจจุบัน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Port listesi güncel olmayabilir" } }, "uk": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Список портів може бути застарілим" } } } }, - "cloud.teamPicker.createSheet.create": { + "cloudTree.ports.stale.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Create" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "إنشاء" + "value": "The last scan could not be refreshed. Listed services may have changed; refresh to check again. cmux forwarding does not need Cloud VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "Erstellen" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Crear" + "value": "Der letzte Scan konnte nicht aktualisiert werden. Die aufgeführten Dienste könnten sich geändert haben. Aktualisieren Sie erneut. Die cmux-Weiterleitung benötigt kein Cloud-VPN." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Créer" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "作成" + "value": "La dernière analyse n’a pas pu être actualisée. Les services listés peuvent avoir changé ; actualisez pour vérifier. Le transfert cmux ne nécessite pas de VPN Cloud." } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "만들기" + "value": "تعذر تحديث آخر فحص. ربما تغيرت الخدمات المدرجة؛ حدّث للفحص مجددًا. لا تحتاج إعادة توجيه cmux إلى Cloud VPN." } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "创建" + "value": "No se pudo actualizar el último escaneo. Los servicios listados pueden haber cambiado; actualiza para comprobarlos. El reenvío de cmux no necesita Cloud VPN." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "建立" - } - } - } - }, - "cloud.teamPicker.createSheet.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Create Team" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "إنشاء فريق" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Team erstellen" + "value": "無法重新整理上次掃描結果。列出的服務可能已變更;請重新整理以再次檢查。cmux 轉送不需要 Cloud VPN。" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Crear equipo" + "value": "无法刷新上次扫描结果。列出的服务可能已更改;请刷新以再次检查。cmux 转发无需 Cloud VPN。" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Créer une équipe" + "value": "마지막 검색 결과를 새로 고치지 못했습니다. 나열된 서비스가 변경되었을 수 있으니 새로 고쳐 확인하세요. cmux 전달에는 Cloud VPN이 필요하지 않습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "チームを作成" + "value": "前回のスキャンを更新できませんでした。表示されたサービスが変わっている可能性があります。更新して再確認してください。cmux の転送に Cloud VPN は不要です。" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "팀 만들기" + "value": "Posljednje skeniranje nije se moglo osvježiti. Navedeni servisi su se možda promijenili; osvježite da ponovo provjerite. Prosljeđivanje u cmux-u ne treba Cloud VPN." } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "创建团队" + "value": "Den seneste scanning kunne ikke opdateres. De viste tjenester kan have ændret sig; opdater for at kontrollere igen. Videresendelse i cmux kræver ikke Cloud VPN." } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "建立團隊" - } - } - } - }, - "cloud.teamPicker.createTeam": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "Create Team…" + "value": "Non è stato possibile aggiornare l’ultima scansione. I servizi elencati potrebbero essere cambiati; aggiorna per controllare di nuovo. L’inoltro di cmux non richiede la VPN Cloud." } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "إنشاء فريق…" + "value": "មិនអាចផ្ទុកការស្កេនចុងក្រោយឡើងវិញបានទេ។ សេវាកម្មដែលបានរាយអាចបានផ្លាស់ប្តូរ; ផ្ទុកឡើងវិញដើម្បីពិនិត្យម្តងទៀត។ ការបញ្ជូនបន្តរបស់ cmux មិនត្រូវការ Cloud VPN ទេ។" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Team erstellen…" + "value": "Den siste skanningen kunne ikke oppdateres. De oppførte tjenestene kan ha endret seg; oppdater for å sjekke på nytt. Videresending i cmux trenger ikke Cloud VPN." } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Crear equipo…" + "value": "Nie udało się odświeżyć ostatniego skanowania. Wymienione usługi mogły się zmienić; odśwież, aby sprawdzić ponownie. Przekierowywanie w cmux nie wymaga Cloud VPN." } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Créer une équipe…" + "value": "Não foi possível atualizar a última verificação. Os serviços listados podem ter mudado; atualize para verificar de novo. O encaminhamento do cmux não precisa do Cloud VPN." } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "チームを作成…" + "value": "Не удалось обновить последнее сканирование. Перечисленные службы могли измениться; обновите, чтобы проверить снова. Перенаправлению cmux Cloud VPN не нужен." } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "팀 만들기…" + "value": "ไม่สามารถรีเฟรชการสแกนครั้งล่าสุดได้ บริการที่แสดงอาจเปลี่ยนไปแล้ว รีเฟรชเพื่อตรวจสอบอีกครั้ง การส่งต่อของ cmux ไม่ต้องใช้ Cloud VPN" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "创建团队…" + "value": "Son tarama yenilenemedi. Listelenen hizmetler değişmiş olabilir; yeniden denetlemek için yenileyin. cmux yönlendirmesi Cloud VPN gerektirmez." } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "建立團隊…" + "value": "Не вдалося оновити останнє сканування. Перелічені служби могли змінитися; оновіть, щоб перевірити знову. Перенаправлення cmux не потребує Cloud VPN." } } } }, - "cloud.teamPicker.switching": { + "cloudTree.ports.unavailable.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Switching teams…" + "value": "The port scan failed; this does not mean no service is listening. Existing cmux ports may still work. Refresh to retry; Cloud VPN is not required." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جارٍ تبديل الفريق…" + "value": "Der Portscan ist fehlgeschlagen; das bedeutet nicht, dass kein Dienst lauscht. Vorhandene cmux-Ports funktionieren möglicherweise weiter. Aktualisieren Sie; Cloud-VPN ist nicht erforderlich." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Team wird gewechselt…" + "value": "L’analyse des ports a échoué ; cela ne signifie pas qu’aucun service n’écoute. Les ports cmux existants peuvent encore fonctionner. Actualisez pour réessayer ; le VPN Cloud n’est pas nécessaire." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "فشل فحص المنافذ؛ هذا لا يعني عدم وجود خدمة تستمع. قد تظل منافذ cmux الحالية تعمل. حدّث للمحاولة مجددًا؛ Cloud VPN غير مطلوب." } }, "es": { "stringUnit": { "state": "translated", - "value": "Cambiando de equipo…" + "value": "Falló el escaneo de puertos; no significa que no haya servicios en escucha. Los puertos de cmux existentes pueden seguir funcionando. Actualiza para reintentar; Cloud VPN no es necesario." } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Changement d’équipe…" + "value": "連接埠掃描失敗;這不代表沒有服務正在監聽。現有 cmux 連接埠可能仍可使用。請重新整理以重試;不需要 Cloud VPN。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "チームを切り替え中…" + "value": "端口扫描失败;这并不代表没有服务正在监听。现有 cmux 端口可能仍可使用。请刷新以重试;无需 Cloud VPN。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "팀 전환 중…" + "value": "포트 검색이 실패했지만 수신 대기 서비스가 없다는 뜻은 아닙니다. 기존 cmux 포트는 계속 작동할 수 있습니다. 새로 고쳐 다시 시도하세요. Cloud VPN은 필요하지 않습니다." } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "正在切换团队…" + "value": "ポートスキャンが失敗しましたが、サービスが待ち受けていないとは限りません。既存の cmux ポートは引き続き動作する可能性があります。更新して再試行してください。Cloud VPN は不要です。" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "正在切換團隊…" + "value": "Skeniranje portova nije uspjelo; to ne znači da nijedan servis ne sluša. Postojeći cmux portovi možda i dalje rade. Osvježite za ponovni pokušaj; Cloud VPN nije potreban." } - } - } - }, - "cloud.teamPicker.creating": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Creating team…" + "value": "Portscanningen mislykkedes; det betyder ikke, at ingen tjeneste lytter. Eksisterende cmux-porte virker muligvis stadig. Opdater for at prøve igen; Cloud VPN er ikke påkrævet." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "جارٍ إنشاء الفريق…" + "value": "La scansione delle porte non è riuscita; ciò non significa che nessun servizio sia in ascolto. Le porte cmux esistenti potrebbero funzionare ancora. Aggiorna per riprovare; la VPN Cloud non è necessaria." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Team wird erstellt…" + "value": "ការស្កេនច្រកបានបរាជ័យ; នេះមិនមានន័យថាគ្មានសេវាកម្មណាកំពុងស្តាប់ទេ។ ច្រក cmux ដែលមានស្រាប់អាចនៅតែដំណើរការ។ ផ្ទុកឡើងវិញដើម្បីព្យាយាមម្តងទៀត; មិនត្រូវការ Cloud VPN ទេ។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Creando equipo…" + "value": "Portskanningen mislyktes; det betyr ikke at ingen tjeneste lytter. Eksisterende cmux-porter kan fortsatt fungere. Oppdater for å prøve igjen; Cloud VPN er ikke nødvendig." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Création de l’équipe…" + "value": "Skanowanie portów nie powiodło się; nie oznacza to, że żadna usługa nie nasłuchuje. Istniejące porty cmux mogą nadal działać. Odśwież, aby spróbować ponownie; Cloud VPN nie jest wymagany." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "チームを作成中…" + "value": "A verificação de portas falhou; isso não significa que nenhum serviço esteja em escuta. As portas existentes do cmux ainda podem funcionar. Atualize para tentar de novo; o Cloud VPN não é necessário." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "팀 만드는 중…" + "value": "Сканирование портов не удалось; это не значит, что ни одна служба не прослушивает порты. Существующие порты cmux могут по-прежнему работать. Обновите, чтобы повторить; Cloud VPN не требуется." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "正在创建团队…" + "value": "การสแกนพอร์ตล้มเหลว ไม่ได้หมายความว่าไม่มีบริการที่กำลังรับฟัง พอร์ต cmux ที่มีอยู่อาจยังใช้งานได้ รีเฟรชเพื่อลองอีกครั้ง ไม่จำเป็นต้องใช้ Cloud VPN" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "正在建立團隊…" + "value": "Port taraması başarısız oldu; bu, dinleyen bir hizmet olmadığı anlamına gelmez. Mevcut cmux portları hâlâ çalışıyor olabilir. Yeniden denemek için yenileyin; Cloud VPN gerekmez." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Сканування портів не вдалося; це не означає, що жодна служба не прослуховує. Наявні порти cmux можуть і далі працювати. Оновіть, щоб повторити; Cloud VPN не потрібен." } } } }, - "socket.authTeam.busy": { + "cloudTree.ports.unsupported": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Another team change is in progress. Try again when it finishes." + "value": "Ports are not supported by this provider." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "هناك تغيير آخر في الفريق قيد التنفيذ. حاول مرة أخرى عند انتهائه." + "value": "Ports werden von diesem Anbieter nicht unterstützt." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Eine andere Teamänderung läuft noch. Versuche es erneut, wenn sie abgeschlossen ist." + "value": "Les ports ne sont pas pris en charge par ce fournisseur." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "لا يدعم هذا الموفر المنافذ." } }, "es": { "stringUnit": { "state": "translated", - "value": "Hay otro cambio de equipo en curso. Inténtalo de nuevo cuando termine." + "value": "Este proveedor no admite puertos." } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Une autre modification d’équipe est en cours. Réessayez une fois terminée." + "value": "此提供者不支援連接埠。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "別のチーム変更を処理中です。完了してからもう一度お試しください。" + "value": "此提供商不支持端口。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다른 팀 변경이 진행 중입니다. 완료된 후 다시 시도하세요." + "value": "이 제공자는 포트를 지원하지 않습니다." } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "另一项团队更改正在进行中,请在完成后重试。" + "value": "このプロバイダーはポートをサポートしていません。" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "另一項團隊變更正在進行中,請在完成後再試一次。" + "value": "Ovaj pružalac ne podržava portove." } - } - } - }, - "cloud.teamPicker.createSheet.message": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "The new team becomes your active team." + "value": "Porte understøttes ikke af denne udbyder." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "يصبح الفريق الجديد فريقك النشط." + "value": "Le porte non sono supportate da questo provider." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Das neue Team wird Ihr aktives Team." + "value": "អ្នកផ្តល់សេវានេះមិនគាំទ្រច្រកទេ។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "El nuevo equipo pasa a ser su equipo activo." + "value": "Porter støttes ikke av denne leverandøren." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "La nouvelle équipe devient votre équipe active." + "value": "Ten dostawca nie obsługuje portów." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "新しいチームがアクティブなチームになります。" + "value": "Este provedor não oferece suporte a portas." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "새 팀이 활성 팀이 됩니다." + "value": "Этот провайдер не поддерживает порты." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "新团队将成为你的当前团队。" + "value": "ผู้ให้บริการนี้ไม่รองรับพอร์ต" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "新團隊會成為你使用中的團隊。" + "value": "Bu sağlayıcı portları desteklemiyor." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Цей постачальник не підтримує порти." } } } }, - "shortcut.diffViewerNextHunk.label": { + "cloudTree.ports.unsupported.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Diff Viewer: Next Hunk" + "value": "This provider has no supported in-app port route. Open a shell to access the service inside the machine. Cloud VPN does not add provider support." } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "差分ビューア: 次のハンク" + "value": "Dieser Anbieter unterstützt keine Portverbindung in der App. Öffnen Sie eine Shell, um innerhalb der Maschine auf den Dienst zuzugreifen. Cloud-VPN fügt keine Anbieterunterstützung hinzu." } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "差异查看器:下一个块" + "value": "Ce fournisseur ne prend pas en charge les ports dans l’app. Ouvrez un shell pour accéder au service dans la machine. Le VPN Cloud n’ajoute pas cette prise en charge." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Diff-Viewer: Nächster Hunk" + "value": "لا يدعم هذا الموفر مسار منافذ داخل التطبيق. افتح صدفة للوصول إلى الخدمة داخل الجهاز. لا يضيف Cloud VPN دعمًا للموفر." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Visionneuse de diff : Bloc suivant" + "value": "Este proveedor no admite una ruta de puertos dentro de la app. Abre una shell para acceder al servicio dentro de la máquina. Cloud VPN no añade soporte al proveedor." } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "عارض الفروق: المقطع التالي" + "value": "此提供者不支援應用程式內連接埠路徑。請開啟 Shell 以在機器內存取服務。Cloud VPN 不會新增提供者支援。" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Visor de diff: Siguiente bloque" + "value": "此提供商不支持应用内端口路由。请打开 Shell 以在机器内部访问服务。Cloud VPN 不会添加提供商支持。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "差異檢視器:下一個區塊" + "value": "이 제공자는 앱 내 포트 경로를 지원하지 않습니다. 셸을 열어 머신 내부의 서비스에 접근하세요. Cloud VPN으로 제공자 지원이 추가되지는 않습니다." } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "비교 뷰어: 다음 헝크" + "value": "このプロバイダーはアプリ内のポート経路に対応していません。シェルを開き、マシン内でサービスにアクセスしてください。Cloud VPN を有効にしても対応は追加されません。" } - } - } - }, - "shortcut.diffViewerPreviousHunk.label": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Ovaj pružalac nema podržanu rutu portova unutar aplikacije. Otvorite shell da pristupite servisu unutar mašine. Cloud VPN ne dodaje podršku pružaoca." + } + }, + "da": { "stringUnit": { "state": "translated", - "value": "Diff Viewer: Previous Hunk" + "value": "Denne udbyder har ingen understøttet portrute i appen. Åbn en shell for at få adgang til tjenesten inde i maskinen. Cloud VPN tilføjer ikke understøttelse for udbyderen." } }, - "ja": { + "it": { "stringUnit": { "state": "translated", - "value": "差分ビューア: 前のハンク" + "value": "Questo provider non ha un percorso delle porte supportato nell’app. Apri una shell per accedere al servizio all’interno della macchina. La VPN Cloud non aggiunge il supporto del provider." } }, - "zh-Hans": { + "km": { "stringUnit": { "state": "translated", - "value": "差异查看器:上一个块" + "value": "អ្នកផ្តល់សេវានេះគ្មានផ្លូវច្រកក្នុងកម្មវិធីដែលគាំទ្រទេ។ បើក shell ដើម្បីចូលប្រើសេវាកម្មនៅខាងក្នុងម៉ាស៊ីន។ Cloud VPN មិនបន្ថែមការគាំទ្រអ្នកផ្តល់សេវាទេ។" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Diff-Viewer: Vorheriger Hunk" + "value": "Denne leverandøren har ingen støttet portrute i appen. Åpne et skall for å få tilgang til tjenesten inne i maskinen. Cloud VPN legger ikke til støtte for leverandøren." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Visionneuse de diff : Bloc précédent" + "value": "Ten dostawca nie ma obsługiwanej trasy portów w aplikacji. Otwórz powłokę, aby uzyskać dostęp do usługi wewnątrz maszyny. Cloud VPN nie dodaje obsługi dostawcy." } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "عارض الفروق: المقطع السابق" + "value": "Este provedor não tem uma rota de portas compatível no app. Abra um shell para acessar o serviço dentro da máquina. O Cloud VPN não adiciona suporte ao provedor." } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Visor de diff: Bloque anterior" + "value": "У этого провайдера нет поддерживаемого маршрута портов в приложении. Откройте оболочку, чтобы получить доступ к службе внутри машины. Cloud VPN не добавляет поддержку провайдера." } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "差異檢視器:上一個區塊" + "value": "ผู้ให้บริการนี้ไม่มีเส้นทางพอร์ตในแอปที่รองรับ เปิดเชลล์เพื่อเข้าถึงบริการภายในเครื่อง Cloud VPN ไม่ได้เพิ่มการรองรับผู้ให้บริการ" } }, - "ko": { + "tr": { "stringUnit": { "state": "translated", - "value": "비교 뷰어: 이전 헝크" + "value": "Bu sağlayıcının desteklenen bir uygulama içi port yolu yok. Makinenin içindeki hizmete erişmek için bir kabuk açın. Cloud VPN sağlayıcı desteği eklemez." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Цей постачальник не має підтримуваного маршруту портів у застосунку. Відкрийте оболонку, щоб отримати доступ до служби всередині машини. Cloud VPN не додає підтримку постачальника." } } } }, - "shortcut.sizeTerminalToMyWindow.label": { + "cloudTree.port.openInCmux": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Size Terminal to My Window" + "value": "Open in cmux" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ضبط حجم الطرفية على نافذتي" + "value": "فتح في cmux" } }, "de": { "stringUnit": { "state": "translated", - "value": "Terminal an mein Fenster anpassen" + "value": "In cmux öffnen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ajustar la terminal a mi ventana" + "value": "Abrir en cmux" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Adapter le terminal à ma fenêtre" + "value": "Ouvrir dans cmux" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルを自分のウィンドウに合わせる" + "value": "cmuxで開く" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널을 내 창 크기에 맞추기" + "value": "cmux에서 열기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "让终端适配我的窗口" + "value": "在 cmux 中打开" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "讓終端機符合我的視窗大小" + "value": "在 cmux 中開啟" } } } }, - "command.terminalDisconnectOtherClients.title": { + "cloudTree.port.openInCmux.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect Other Terminal Clients…" + "value": "Open in cmux. No VPN setup needed." } }, "ar": { "stringUnit": { "state": "translated", - "value": "قطع اتصال عملاء الطرفية الآخرين…" + "value": "افتح في cmux. لا يلزم إعداد VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "Andere Terminal-Clients trennen…" + "value": "In cmux öffnen. Keine VPN-Einrichtung nötig." } }, "es": { "stringUnit": { "state": "translated", - "value": "Desconectar otros clientes de la terminal…" + "value": "Abrir en cmux. No hace falta configurar una VPN." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déconnecter les autres clients du terminal…" + "value": "Ouvrir dans cmux. Aucune configuration VPN nécessaire." } }, "ja": { "stringUnit": { "state": "translated", - "value": "他のターミナルクライアントを切断…" + "value": "cmux で開きます。VPN の設定は不要です。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다른 터미널 클라이언트 연결 끊기…" + "value": "cmux에서 열기. VPN 설정이 필요하지 않습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "断开其他终端客户端…" + "value": "在 cmux 中打开。无需设置 VPN。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "中斷其他終端機用戶端的連線…" + "value": "在 cmux 中開啟。無需設定 VPN。" } } } }, - "command.terminalShowSizePanel.title": { + "cloudTree.port.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show Terminal Size Panel" + "value": "Port %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار لوحة حجم الطرفية" + "value": "المنفذ %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Terminalgrößen-Bereich anzeigen" + "value": "Port-Nr. %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar el panel de tamaño de la terminal" + "value": "Puerto %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher le panneau de taille du terminal" + "value": "Port n° %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルサイズパネルを表示" + "value": "ポート %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널 크기 패널 보기" + "value": "포트 %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示终端大小面板" + "value": "端口 %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示終端機大小面板" + "value": "連接埠 %@" } } } }, - "command.terminalSizeToMyWindow.title": { + "cloudTree.placeholder.deviceOffline": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Size Terminal to My Window" + "value": "Offline — its workspaces return when it does" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ضبط حجم الطرفية على نافذتي" + "value": "غير متصل — ستعود مساحات عمله عند اتصاله مجددًا" } }, "de": { "stringUnit": { "state": "translated", - "value": "Terminal an mein Fenster anpassen" + "value": "Offline — die Arbeitsbereiche erscheinen wieder, sobald das Gerät online ist" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ajustar la terminal a mi ventana" + "value": "Sin conexión — sus espacios de trabajo volverán cuando se conecte" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Adapter le terminal à ma fenêtre" + "value": "Hors ligne — ses espaces de travail réapparaîtront à sa reconnexion" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルを自分のウィンドウに合わせる" + "value": "オフライン — 再接続するとワークスペースが戻ります" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널을 내 창 크기에 맞추기" + "value": "오프라인 — 다시 연결되면 작업 공간이 돌아옵니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "让终端适配我的窗口" + "value": "离线 — 重新连接后会恢复工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "讓終端機符合我的視窗大小" + "value": "離線 — 重新連線後會恢復工作區" } } } }, - "terminalSharing.detached.hostShutdown": { + "cloud.vpn.setup.heading": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The terminal host shut down at %@." + "value": "Use Cloud machines from any app" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "توقف مضيف الطرفية في %@." + "value": "Cloud-Maschinen aus jeder App verwenden" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Der Terminal-Host wurde um %@ beendet." + "value": "Utiliser les machines Cloud depuis toute app" } }, "es": { "stringUnit": { "state": "translated", - "value": "El host de la terminal se detuvo a las %@." + "value": "Usar máquinas Cloud desde cualquier app" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "L’hôte du terminal s’est arrêté à %@." + "value": "ほかのアプリからCloudマシンを使う" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ターミナルホストが %@ に終了しました。" + "value": "从任何应用使用 Cloud 机器" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "從任何 App 使用 Cloud 機器" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널 호스트가 %@에 종료되었습니다." + "value": "모든 앱에서 Cloud 머신 사용" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "终端主机已于 %@ 关闭。" + "value": "استخدام أجهزة Cloud من أي تطبيق" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "終端機主機已於 %@ 關閉。" + "value": "Koristite Cloud mašine iz bilo koje aplikacije" } - } - } - }, - "terminalSharing.detached.network": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "The network dropped." + "value": "Brug Cloud-maskiner fra alle apps" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "انقطع اتصال الشبكة." + "value": "Usa le macchine Cloud da qualsiasi app" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Die Netzwerkverbindung wurde unterbrochen." + "value": "ប្រើម៉ាស៊ីន Cloud ពីកម្មវិធីណាមួយ" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Se perdió la conexión de red." + "value": "Bruk Cloud-maskiner fra alle apper" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "La connexion réseau a été interrompue." + "value": "Używaj maszyn Cloud z dowolnej aplikacji" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "ネットワーク接続が切れました。" + "value": "Use máquinas Cloud em qualquer app" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "네트워크 연결이 끊어졌습니다." + "value": "Используйте Cloud-машины из любого приложения" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "网络连接已中断。" + "value": "ใช้เครื่อง Cloud จากทุกแอป" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "網路連線中斷。" + "value": "Cloud makinelerini her uygulamadan kullanın" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Використовуйте Cloud-машини з будь-якої програми" } } } }, - "terminalSharing.detached.reattach": { + "cloud.vpn.setup.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Reattach" + "value": "Optional access to each VM's private address and original ports, such as 10.40.0.10:3000." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إعادة الإرفاق" + "value": "Optionaler Zugriff auf die private Adresse und die ursprünglichen Ports jeder VM, etwa 10.40.0.10:3000." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Erneut verbinden" + "value": "Accès facultatif à chaque adresse privée et aux ports d’origine des VM, comme 10.40.0.10:3000." } }, "es": { "stringUnit": { "state": "translated", - "value": "Volver a conectar" + "value": "Acceso opcional a la dirección privada y los puertos originales de cada VM, como 10.40.0.10:3000." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Se reconnecter" + "value": "各VMのプライベートアドレスと元のポート(例:10.40.0.10:3000)にアクセスするための任意の設定です。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "再接続" + "value": "可选设置,用于访问每台 VM 的私有地址和原始端口,例如 10.40.0.10:3000。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "選用設定,可存取每台 VM 的私有位址和原始連接埠,例如 10.40.0.10:3000。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다시 연결" + "value": "각 VM의 비공개 주소와 원래 포트(예: 10.40.0.10:3000)에 접근하기 위한 선택 설정입니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "重新连接" + "value": "وصول اختياري إلى العنوان الخاص والمنافذ الأصلية لكل جهاز افتراضي، مثل 10.40.0.10:3000." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "重新連接" + "value": "Opcionalni pristup privatnoj adresi i izvornim portovima svake VM, na primjer 10.40.0.10:3000." } - } - } - }, - "terminalSharing.detached.reattachAsViewer": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Reattach as Viewer" + "value": "Valgfri adgang til hver VM’s private adresse og oprindelige porte, f.eks. 10.40.0.10:3000." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "إعادة الإرفاق كمشاهد" + "value": "Accesso facoltativo all’indirizzo privato e alle porte originali di ogni VM, ad esempio 10.40.0.10:3000." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Als Zuschauer erneut verbinden" + "value": "ចូលប្រើអាសយដ្ឋានឯកជន និងច្រកដើមរបស់ VM នីមួយៗ ដូចជា 10.40.0.10:3000 ជាជម្រើស។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Volver a conectar como espectador" + "value": "Valgfri tilgang til hver VMs private adresse og opprinnelige porter, som 10.40.0.10:3000." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Se reconnecter en lecture seule" + "value": "Opcjonalny dostęp do prywatnego adresu i oryginalnych portów każdej maszyny VM, na przykład 10.40.0.10:3000." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "閲覧者として再接続" + "value": "Acesso opcional ao endereço privado e às portas originais de cada VM, como 10.40.0.10:3000." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "보기 전용으로 다시 연결" + "value": "Необязательный доступ к частному адресу и исходным портам каждой VM, например 10.40.0.10:3000." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "以查看者身份重新连接" + "value": "การเข้าถึงที่ไม่บังคับไปยังที่อยู่ส่วนตัวและพอร์ตเดิมของ VM แต่ละเครื่อง เช่น 10.40.0.10:3000" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "以檢視者身分重新連接" + "value": "Her VM’nin özel adresine ve özgün bağlantı noktalarına isteğe bağlı erişim; örneğin 10.40.0.10:3000." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Необов’язковий доступ до приватної адреси та початкових портів кожної VM, наприклад 10.40.0.10:3000." } } } }, - "terminalSharing.detached.reattachAsViewer.help": { + "cloud.vpn.setup.howItWorks.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Reattach without changing the terminal size" + "value": "How it works" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إعادة الإرفاق دون تغيير حجم الطرفية" + "value": "So funktioniert es" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Erneut verbinden, ohne die Terminalgröße zu ändern" + "value": "Fonctionnement" } }, "es": { "stringUnit": { "state": "translated", - "value": "Volver a conectar sin cambiar el tamaño de la terminal" + "value": "Cómo funciona" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Se reconnecter sans modifier la taille du terminal" + "value": "仕組み" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ターミナルサイズを変えずに再接続" + "value": "工作原理" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "運作方式" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널 크기를 바꾸지 않고 다시 연결" + "value": "작동 방식" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "重新连接但不更改终端大小" + "value": "طريقة العمل" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "重新連接但不變更終端機大小" + "value": "Kako radi" } - } - } - }, - "terminalSharing.detached.someone": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Someone" + "value": "Sådan fungerer det" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "شخص ما" + "value": "Come funziona" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Jemand" + "value": "របៀបដំណើរការ" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Alguien" + "value": "Slik fungerer det" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Quelqu’un" + "value": "Jak to działa" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "誰か" + "value": "Como funciona" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "누군가" + "value": "Как это работает" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "有人" + "value": "วิธีการทำงาน" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "有人" + "value": "Nasıl çalışır" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Як це працює" } } } }, - "terminalSharing.detached.superseded": { + "cloud.vpn.setup.status.off": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Another window of this Mac replaced this one at %@." + "value": "Off. Your Cloud panes continue to work through cmux's built-in route." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "استبدلت نافذة أخرى على جهاز Mac هذا هذه النافذة في %@." + "value": "Aus. Ihre Cloud-Bereiche funktionieren weiterhin über die integrierte Verbindung von cmux." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ein anderes Fenster dieses Macs hat dieses um %@ ersetzt." + "value": "Désactivé. Vos volets Cloud continuent de fonctionner via la connexion intégrée de cmux." } }, "es": { "stringUnit": { "state": "translated", - "value": "Otra ventana de este Mac reemplazó a esta a las %@." + "value": "Desactivada. Tus paneles Cloud siguen funcionando mediante la conexión integrada de cmux." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Une autre fenêtre de ce Mac a remplacé celle-ci à %@." + "value": "オフ。Cloudペインは引き続きcmux内蔵の接続経路で動作します。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "このMacの別のウィンドウが %@ にこのウィンドウを置き換えました。" + "value": "已关闭。Cloud 面板仍通过 cmux 内置连接工作。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 Mac의 다른 창이 %@에 이 창을 대체했습니다." + "value": "已關閉。Cloud 面板仍透過 cmux 內建連線運作。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "这台 Mac 的另一个窗口已于 %@ 替换此窗口。" + "value": "꺼짐. Cloud 패널은 cmux의 내장 연결을 통해 계속 작동합니다." } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "這台 Mac 的另一個視窗已於 %@ 取代此視窗。" + "value": "متوقف. تستمر لوحات Cloud في العمل عبر اتصال cmux المضمن." } - } - } - }, - "terminalSharing.participant.personDevice": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Isključeno. Cloud paneli i dalje rade preko ugrađene cmux veze." } }, - "ja": { + "da": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Fra. Dine Cloud-paneler fungerer stadig via cmux’ indbyggede forbindelse." } - } - } - }, - "terminalSharing.device.browser": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "it": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "Disattivata. I pannelli Cloud continuano a funzionare tramite la connessione integrata di cmux." } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "المتصفح" + "value": "បិទ។ ផ្ទាំង Cloud របស់អ្នកនៅតែដំណើរការតាមការភ្ជាប់ដែលមានស្រាប់របស់ cmux។" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "Av. Cloud-panelene dine fortsetter å fungere gjennom cmux sin innebygde forbindelse." } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Navegador" + "value": "Wyłączona. Panele Cloud nadal działają przez wbudowane połączenie cmux." } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Navigateur" + "value": "Desativada. Seus painéis Cloud continuam funcionando pela conexão integrada do cmux." } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "ブラウザ" + "value": "Выключено. Панели Cloud продолжают работать через встроенное соединение cmux." } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "브라우저" + "value": "ปิดอยู่ แผง Cloud ยังคงทำงานผ่านการเชื่อมต่อในตัวของ cmux" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "浏览器" + "value": "Kapalı. Cloud panelleriniz cmux’un yerleşik bağlantısıyla çalışmaya devam eder." } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "瀏覽器" + "value": "Вимкнено. Панелі Cloud продовжують працювати через вбудоване з’єднання cmux." } } } }, - "terminalSharing.device.ipad": { + "cloud.vpn.setup.steps.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "iPad" + "value": "First-time setup" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "iPad" + "value": "Ersteinrichtung" } - } - } - }, - "terminalSharing.device.iphone": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "iPhone" + "value": "Première configuration" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Configuración inicial" } }, "ja": { "stringUnit": { "state": "translated", - "value": "iPhone" + "value": "初回設定" } - } - } - }, - "terminalSharing.device.mac": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Mac" + "value": "首次设置" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Mac" + "value": "首次設定" } - } - } - }, - "terminalSharing.device.tui": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Terminal client" + "value": "최초 설정" } }, "ar": { "stringUnit": { "state": "translated", - "value": "عميل طرفية" + "value": "الإعداد الأولي" } }, - "de": { + "bs": { "stringUnit": { "state": "translated", - "value": "Terminal-Client" + "value": "Prvo podešavanje" } }, - "es": { + "da": { "stringUnit": { "state": "translated", - "value": "Cliente de terminal" + "value": "Første opsætning" } }, - "fr": { + "it": { "stringUnit": { "state": "translated", - "value": "Client terminal" + "value": "Prima configurazione" } }, - "ja": { + "km": { "stringUnit": { "state": "translated", - "value": "ターミナルクライアント" + "value": "ការរៀបចំលើកដំបូង" } }, - "ko": { + "nb": { "stringUnit": { "state": "translated", - "value": "터미널 클라이언트" + "value": "Førstegangsoppsett" } }, - "zh-Hans": { + "pl": { "stringUnit": { "state": "translated", - "value": "终端客户端" + "value": "Pierwsza konfiguracja" } }, - "zh-Hant": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "終端機用戶端" + "value": "Primeira configuração" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Первая настройка" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "การตั้งค่าครั้งแรก" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "İlk kurulum" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Перше налаштування" } } } }, - "terminalSharing.device.unknown": { + "cloud.vpn.setup.steps.extension": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Device" + "value": "1. Click Connect Cloud VPN. When macOS asks, allow the cmux network extension in System Settings." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جهاز" + "value": "1. Klicken Sie auf Cloud-VPN verbinden. Erlauben Sie auf Aufforderung von macOS die cmux-Netzwerkerweiterung in den Systemeinstellungen." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Gerät" + "value": "1. Cliquez sur Connecter le VPN Cloud. Lorsque macOS le demande, autorisez l’extension réseau cmux dans Réglages Système." } }, "es": { "stringUnit": { "state": "translated", - "value": "Dispositivo" + "value": "1. Haz clic en Conectar VPN de Cloud. Cuando macOS lo solicite, permite la extensión de red de cmux en Ajustes del Sistema." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Appareil" + "value": "1. 「Cloud VPNに接続」をクリックします。macOSに求められたら、システム設定でcmuxのネットワーク機能拡張を許可します。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "デバイス" + "value": "1. 点击“连接 Cloud VPN”。macOS 提示时,在系统设置中允许 cmux 网络扩展。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "1. 按一下「連接 Cloud VPN」。macOS 提示時,請在系統設定中允許 cmux 網路延伸功能。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "기기" + "value": "1. Cloud VPN 연결을 클릭합니다. macOS에서 요청하면 시스템 설정에서 cmux 네트워크 확장을 허용합니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "设备" + "value": "1. انقر على توصيل VPN الخاص بـ Cloud. عندما يطلب macOS ذلك، اسمح بامتداد شبكة cmux في إعدادات النظام." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "裝置" + "value": "1. Kliknite Poveži Cloud VPN. Kada macOS zatraži, dozvolite cmux mrežni dodatak u Postavkama sistema." } - } - } - }, - "terminalSharing.owner.held": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Held size" + "value": "1. Klik på Forbind Cloud VPN. Når macOS spørger, skal du tillade cmux-netværksudvidelsen i Systemindstillinger." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "حجم محتفظ به" + "value": "1. Fai clic su Connetti VPN Cloud. Quando macOS lo richiede, consenti l’estensione di rete cmux nelle Impostazioni di Sistema." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Beibehaltene Größe" + "value": "1. ចុច ភ្ជាប់ Cloud VPN។ ពេល macOS ស្នើ សូមអនុញ្ញាតផ្នែកបន្ថែមបណ្តាញ cmux ក្នុងការកំណត់ប្រព័ន្ធ។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Tamaño conservado" + "value": "1. Klikk Koble til Cloud VPN. Når macOS spør, tillat cmux-nettverksutvidelsen i Systeminnstillinger." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Taille conservée" + "value": "1. Kliknij Połącz z Cloud VPN. Gdy macOS poprosi, zezwól na rozszerzenie sieci cmux w Ustawieniach systemowych." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "保持されたサイズ" + "value": "1. Clique em Conectar Cloud VPN. Quando o macOS pedir, permita a extensão de rede do cmux nos Ajustes do Sistema." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "유지된 크기" + "value": "1. Нажмите Подключить Cloud VPN. Когда macOS попросит, разрешите сетевое расширение cmux в системных настройках." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "保留的大小" + "value": "1. คลิก เชื่อมต่อ Cloud VPN เมื่อ macOS ขอ ให้อนุญาตส่วนขยายเครือข่าย cmux ในการตั้งค่าระบบ" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "保留的大小" + "value": "1. Cloud VPN’e bağlan’a tıklayın. macOS istediğinde Sistem Ayarları’nda cmux ağ uzantısına izin verin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "1. Натисніть Підключити Cloud VPN. Коли macOS попросить, дозвольте мережеве розширення cmux у Системних параметрах." } } } }, - "terminalSharing.owner.largest": { + "cloud.vpn.setup.steps.settings": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Largest window" + "value": "Open General > Login Items & Extensions > Network Extensions, then enable cmux." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "أكبر نافذة" + "value": "Öffnen Sie Allgemein > Anmeldeobjekte & Erweiterungen > Netzwerkerweiterungen und aktivieren Sie cmux." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Größtes Fenster" + "value": "Ouvrez Général > Ouverture et extensions > Extensions réseau, puis activez cmux." } }, "es": { "stringUnit": { "state": "translated", - "value": "Ventana más grande" + "value": "Abre General > Ítems de inicio y extensiones > Extensiones de red y activa cmux." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Plus grande fenêtre" + "value": "「一般」>「ログイン項目と機能拡張」>「ネットワーク機能拡張」を開き、cmuxを有効にします。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "最大のウィンドウ" + "value": "打开“通用”>“登录项与扩展”>“网络扩展”,然后启用 cmux。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "打開「一般」>「登入項目與延伸功能」>「網路延伸功能」,然後啟用 cmux。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "가장 큰 창" + "value": "일반 > 로그인 항목 및 확장 프로그램 > 네트워크 확장을 열고 cmux를 활성화합니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "最大的窗口" + "value": "افتح عام > عناصر الدخول والامتدادات > امتدادات الشبكة، ثم فعّل cmux." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "最大的視窗" + "value": "Otvorite Opšte > Stavke za prijavu i dodaci > Mrežni dodaci, pa omogućite cmux." } - } - } - }, - "terminalSharing.owner.shared": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Shared size" + "value": "Åbn Generelt > Loginemner og udvidelser > Netværksudvidelser, og aktivér cmux." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "حجم مشترك" + "value": "Apri Generali > Elementi login ed estensioni > Estensioni di rete, quindi abilita cmux." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Gemeinsame Größe" + "value": "បើក ទូទៅ > ធាតុចូល និងផ្នែកបន្ថែម > ផ្នែកបន្ថែមបណ្តាញ ហើយបើក cmux។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Tamaño compartido" + "value": "Åpne Generelt > Påloggingselementer og utvidelser > Nettverksutvidelser, og aktiver cmux." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Taille partagée" + "value": "Otwórz Ogólne > Elementy logowania i rozszerzenia > Rozszerzenia sieciowe, a następnie włącz cmux." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "共有サイズ" + "value": "Abra Geral > Itens de Início e Extensões > Extensões de Rede e ative o cmux." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "공유 크기" + "value": "Откройте Основные > Объекты входа и расширения > Сетевые расширения и включите cmux." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "共享大小" + "value": "เปิด ทั่วไป > รายการเข้าสู่ระบบและส่วนขยาย > ส่วนขยายเครือข่าย แล้วเปิดใช้ cmux" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "共用大小" + "value": "Genel > Giriş Öğeleri ve Uzantılar > Ağ Uzantıları’nı açın ve cmux’u etkinleştirin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Відкрийте Загальні > Об’єкти входу та розширення > Мережеві розширення й увімкніть cmux." } } } }, - "terminalSharing.owner.smallest": { + "cloud.vpn.setup.steps.settingsLegacy": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fits everyone" + "value": "Open Privacy & Security and allow the cmux extension." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يناسب الجميع" + "value": "Öffnen Sie Datenschutz & Sicherheit und erlauben Sie die cmux-Erweiterung." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Passt für alle" + "value": "Ouvrez Confidentialité et sécurité et autorisez l’extension cmux." } }, "es": { "stringUnit": { "state": "translated", - "value": "Se ajusta a todos" + "value": "Abre Privacidad y seguridad y permite la extensión de cmux." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Convient à tous" + "value": "「プライバシーとセキュリティ」を開き、cmuxの機能拡張を許可します。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "全員に合わせる" + "value": "打开“隐私与安全性”,然后允许 cmux 扩展。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "打開「隱私權與安全性」,然後允許 cmux 延伸功能。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모두에게 맞춤" + "value": "개인정보 보호 및 보안을 열고 cmux 확장을 허용합니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "适合所有人" + "value": "افتح الخصوصية والأمان واسمح بامتداد cmux." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "符合所有人" + "value": "Otvorite Privatnost i sigurnost i dozvolite cmux dodatak." } - } - } - }, - "terminalSharing.participant.thisMac": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "This Mac" + "value": "Åbn Anonymitet og sikkerhed, og tillad cmux-udvidelsen." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "جهاز Mac هذا" + "value": "Apri Privacy e sicurezza e consenti l’estensione cmux." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Dieser Mac" + "value": "បើក ឯកជនភាព និងសុវត្ថិភាព ហើយអនុញ្ញាតផ្នែកបន្ថែម cmux។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Este Mac" + "value": "Åpne Personvern og sikkerhet og tillat cmux-utvidelsen." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Ce Mac" + "value": "Otwórz Prywatność i ochrona i zezwól na rozszerzenie cmux." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "このMac" + "value": "Abra Privacidade e Segurança e permita a extensão do cmux." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "이 Mac" + "value": "Откройте Конфиденциальность и безопасность и разрешите расширение cmux." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "这台 Mac" + "value": "เปิด ความเป็นส่วนตัวและความปลอดภัย แล้วอนุญาตส่วนขยาย cmux" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "這台 Mac" + "value": "Gizlilik ve Güvenlik’i açın ve cmux uzantısına izin verin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Відкрийте Конфіденційність і безпека та дозвольте розширення cmux." } } } }, - "terminalSharing.owner.possessiveDevice": { + "cloud.vpn.setup.steps.configuration": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@'s %2$@" + "value": "2. Allow cmux to add a VPN configuration named cmux Cloud. This is a separate macOS permission." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "2. Erlauben Sie cmux, eine VPN-Konfiguration namens cmux Cloud hinzuzufügen. Dies ist eine separate macOS-Berechtigung." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "2. Autorisez cmux à ajouter une configuration VPN nommée cmux Cloud. Il s’agit d’une autorisation macOS distincte." } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "2. Permite que cmux añada una configuración VPN llamada cmux Cloud. Este es un permiso independiente de macOS." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "2. cmux Cloudという名前のVPN構成の追加を許可します。これは別のmacOS権限です。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@の%2$@" + "value": "2. 允许 cmux 添加名为 cmux Cloud 的 VPN 配置。这是单独的 macOS 权限。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "2. 允許 cmux 加入名為 cmux Cloud 的 VPN 設定。這是另一項 macOS 權限。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@의 %2$@" + "value": "2. cmux가 cmux Cloud라는 VPN 구성을 추가하도록 허용합니다. 이는 별도의 macOS 권한입니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$@的%2$@" + "value": "2. اسمح لـ cmux بإضافة إعداد VPN باسم cmux Cloud. هذا إذن منفصل في macOS." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "%1$@的%2$@" + "value": "2. Dozvolite cmux-u da doda VPN konfiguraciju pod imenom cmux Cloud. Ovo je posebna macOS dozvola." } - } - } - }, - "terminalSharing.owner.fixedShort": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Fixed" + "value": "2. Tillad cmux at tilføje en VPN-konfiguration med navnet cmux Cloud. Dette er en separat macOS-tilladelse." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "ثابت" + "value": "2. Consenti a cmux di aggiungere una configurazione VPN chiamata cmux Cloud. È un’autorizzazione macOS separata." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Fest" + "value": "2. អនុញ្ញាតឱ្យ cmux បន្ថែមការកំណត់ VPN ឈ្មោះ cmux Cloud។ នេះជាសិទ្ធិ macOS ផ្សេងមួយ។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Fijo" + "value": "2. Tillat cmux å legge til en VPN-konfigurasjon kalt cmux Cloud. Dette er en separat macOS-tillatelse." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Fixe" + "value": "2. Zezwól cmux dodać konfigurację VPN o nazwie cmux Cloud. To osobne uprawnienie macOS." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "2. Permita que o cmux adicione uma configuração VPN chamada cmux Cloud. Esta é uma permissão separada do macOS." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "고정" + "value": "2. Разрешите cmux добавить VPN-конфигурацию с именем cmux Cloud. Это отдельное разрешение macOS." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "2. อนุญาตให้ cmux เพิ่มการกำหนดค่า VPN ชื่อ cmux Cloud นี่เป็นสิทธิ์ macOS แยกต่างหาก" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "2. cmux’un cmux Cloud adlı bir VPN yapılandırması eklemesine izin verin. Bu ayrı bir macOS iznidir." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "2. Дозвольте cmux додати конфігурацію VPN з назвою cmux Cloud. Це окремий дозвіл macOS." } } } }, - "terminalSharing.tab.tooltip": { + "cloud.vpn.setup.steps.return": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Size set by %1$@ · %2$@" + "value": "3. Return to this pane. The connection continues automatically after approval. Disconnect here when finished. Quitting cmux or signing out also disconnects it." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "الحجم يحدده %1$@ · %2$@" + "value": "3. Kehren Sie zu diesem Bereich zurück. Die Verbindung wird nach der Genehmigung automatisch fortgesetzt. Trennen Sie sie hier, wenn Sie fertig sind. Das Beenden von cmux oder Abmelden trennt sie ebenfalls." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Größe festgelegt von %1$@ · %2$@" + "value": "3. Revenez à ce volet. La connexion reprend automatiquement après autorisation. Déconnectez-la ici lorsque vous avez terminé. Quitter cmux ou fermer la session la déconnecte aussi." } }, "es": { "stringUnit": { "state": "translated", - "value": "Tamaño definido por %1$@ · %2$@" + "value": "3. Vuelve a este panel. La conexión continúa automáticamente tras la autorización. Desconéctala aquí cuando termines. Salir de cmux o cerrar sesión también la desconecta." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Taille définie par %1$@ · %2$@" + "value": "3. このペインに戻ります。承認後、接続は自動的に続行されます。使い終わったらここで切断してください。cmuxの終了やサインアウトでも切断されます。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@がサイズを設定 · %2$@" + "value": "3. 返回此面板。批准后连接会自动继续。完成后可在此断开连接。退出 cmux 或退出登录也会断开连接。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "3. 返回此面板。核准後連線會自動繼續。完成後可在此中斷連線。結束 cmux 或登出也會中斷連線。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "크기 설정: %1$@ · %2$@" + "value": "3. 이 패널로 돌아옵니다. 승인 후 연결이 자동으로 계속됩니다. 사용을 마치면 여기에서 연결을 해제하세요. cmux를 종료하거나 로그아웃해도 연결이 해제됩니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "尺寸由%1$@设定 · %2$@" + "value": "3. ارجع إلى هذه اللوحة. يستمر الاتصال تلقائيًا بعد الموافقة. اقطع الاتصال هنا عند الانتهاء. يؤدي إنهاء cmux أو تسجيل الخروج أيضًا إلى قطع الاتصال." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "尺寸由%1$@設定 · %2$@" + "value": "3. Vratite se na ovaj panel. Veza se nastavlja automatski nakon odobrenja. Ovdje prekinite vezu kada završite. Izlazak iz cmux-a ili odjava takođe prekida vezu." } - } - } - }, - "terminalSharing.panel.sizeLabel": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Size" + "value": "3. Gå tilbage til dette panel. Forbindelsen fortsætter automatisk efter godkendelsen. Afbryd her, når du er færdig. Hvis du afslutter cmux eller logger ud, afbrydes forbindelsen også." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "الحجم" + "value": "3. Torna a questo pannello. La connessione continua automaticamente dopo l’autorizzazione. Disconnettila qui quando hai finito. Anche uscire da cmux o effettuare il logout la disconnette." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Größe" + "value": "3. ត្រឡប់ទៅផ្ទាំងនេះ។ ការភ្ជាប់នឹងបន្តដោយស្វ័យប្រវត្តិបន្ទាប់ពីអនុម័ត។ ផ្តាច់នៅទីនេះពេលបញ្ចប់។ ការបិទ cmux ឬចាកចេញក៏ផ្តាច់ការភ្ជាប់ដែរ។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Tamaño" + "value": "3. Gå tilbake til dette panelet. Forbindelsen fortsetter automatisk etter godkjenning. Koble fra her når du er ferdig. Avslutning av cmux eller utlogging kobler også fra." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Taille" + "value": "3. Wróć do tego panelu. Połączenie będzie kontynuowane automatycznie po zatwierdzeniu. Po zakończeniu rozłącz je tutaj. Zamknięcie cmux lub wylogowanie również rozłączy połączenie." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "サイズ" + "value": "3. Volte a este painel. A conexão continuará automaticamente após a aprovação. Desconecte aqui quando terminar. Sair do cmux ou encerrar a sessão também desconecta." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "크기" + "value": "3. Вернитесь в эту панель. После подтверждения соединение продолжится автоматически. Завершив работу, отключите его здесь. Выход из cmux или системы также отключает соединение." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "尺寸" + "value": "3. กลับมาที่แผงนี้ การเชื่อมต่อจะดำเนินต่อโดยอัตโนมัติหลังการอนุมัติ ตัดการเชื่อมต่อที่นี่เมื่อเสร็จแล้ว การออกจาก cmux หรือออกจากระบบจะตัดการเชื่อมต่อด้วย" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "尺寸" + "value": "3. Bu panele dönün. Onaydan sonra bağlantı otomatik olarak devam eder. Bitirdiğinizde buradan bağlantıyı kesin. cmux’tan çıkmak veya oturumu kapatmak da bağlantıyı keser." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "3. Поверніться до цієї панелі. Після схвалення з’єднання продовжиться автоматично. Завершивши роботу, від’єднайте його тут. Вихід із cmux або системи також від’єднає з’єднання." } } } }, - "terminalSharing.sizeMode.latest": { + "cloud.vpn.setup.address.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Follow Latest" + "value": "Private addresses" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "اتباع الأحدث" + "value": "Private Adressen" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Letzter Eingabe folgen" + "value": "Adresses privées" } }, "es": { "stringUnit": { "state": "translated", - "value": "Seguir la última entrada" + "value": "Direcciones privadas" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Suivre la dernière saisie" + "value": "プライベートアドレス" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "最新の入力に合わせる" + "value": "私有地址" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "私有位址" } }, "ko": { "stringUnit": { "state": "translated", - "value": "최근 입력 따르기" + "value": "비공개 주소" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "跟随最新输入" + "value": "العناوين الخاصة" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "跟隨最新輸入" + "value": "Privatne adrese" } - } - } - }, - "terminalSharing.sizeMode.smallest": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Fit Everyone" + "value": "Private adresser" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "ملاءمة الجميع" + "value": "Indirizzi privati" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Allen anpassen" + "value": "អាសយដ្ឋានឯកជន" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Ajustar a todos" + "value": "Private adresser" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Adapter à tous" + "value": "Prywatne adresy" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "全員に合わせる" + "value": "Endereços privados" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "모두에게 맞추기" + "value": "Частные адреса" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "适合所有人" + "value": "ที่อยู่ส่วนตัว" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "適合所有人" + "value": "Özel adresler" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Приватні адреси" } } } }, - "terminalSharing.sizeMode.largest": { + "cloud.vpn.setup.openSettings": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Largest Window" + "value": "Open System Settings" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "أكبر نافذة" + "value": "Systemeinstellungen öffnen" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Größtes Fenster" + "value": "Ouvrir Réglages Système" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ventana más grande" + "value": "Abrir Ajustes del Sistema" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Plus grande fenêtre" + "value": "システム設定を開く" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "最大のウインドウ" + "value": "打开系统设置" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "打開系統設定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "가장 큰 윈도우" + "value": "시스템 설정 열기" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "最大窗口" + "value": "فتح إعدادات النظام" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "最大視窗" + "value": "Otvori Postavke sistema" } - } - } - }, - "terminalSharing.sizeMode.priority": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Priority" + "value": "Åbn Systemindstillinger" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "الأولوية" + "value": "Apri Impostazioni di Sistema" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Priorität" + "value": "បើកការកំណត់ប្រព័ន្ធ" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Prioridad" + "value": "Åpne Systeminnstillinger" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Priorité" + "value": "Otwórz Ustawienia systemowe" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "優先順位" + "value": "Abrir Ajustes do Sistema" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "우선순위" + "value": "Открыть системные настройки" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "优先级" + "value": "เปิดการตั้งค่าระบบ" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "優先順序" + "value": "Sistem Ayarlarını aç" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Відкрити Системні параметри" } } } }, - "terminalSharing.sizeMode.fixed": { - "extractionState": "manual", + "settings.app.accentColor.custom": { "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Fixed" + "value": "مخصص" } }, - "ar": { + "bs": { "stringUnit": { "state": "translated", - "value": "ثابت" + "value": "Prilagođeno" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Tilpasset" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fest" + "value": "Benutzerdefiniert" } }, - "es": { + "en": { "stringUnit": { "state": "translated", - "value": "Fijo" + "value": "Custom" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Fixe" + "value": "Personalizado" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "Personnalisée" } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "고정" + "value": "Personalizzato" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "カスタム" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "사용자 지정" } - } - } - }, - "terminalSharing.panel.setsSize": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "nb": { "stringUnit": { "state": "translated", - "value": "sets size" + "value": "Egendefinert" } }, - "ar": { + "pl": { "stringUnit": { "state": "translated", - "value": "يحدد الحجم" + "value": "Niestandardowy" } }, - "de": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "legt Größe fest" + "value": "Personalizado" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "define el tamaño" + "value": "Пользовательский" } }, - "fr": { + "th": { "stringUnit": { "state": "translated", - "value": "définit la taille" + "value": "กำหนดเอง" } }, - "ja": { + "tr": { "stringUnit": { "state": "translated", - "value": "サイズを設定" + "value": "Özel" } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "크기 설정" + "value": "Власний" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "设定尺寸" + "value": "自定义" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "設定尺寸" + "value": "自訂" } } } }, - "terminalSharing.panel.notCounted": { + "devices.incoming.confirm.enable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "not counted" + "value": "Make Discoverable" } }, "ar": { "stringUnit": { "state": "translated", - "value": "غير محتسب" + "value": "جعل الجهاز قابلاً للاكتشاف" } }, "de": { "stringUnit": { "state": "translated", - "value": "nicht gezählt" + "value": "Auffindbar machen" } }, "es": { "stringUnit": { "state": "translated", - "value": "no cuenta" + "value": "Hacer detectable" } }, "fr": { "stringUnit": { "state": "translated", - "value": "non compté" + "value": "Rendre détectable" } }, "ja": { "stringUnit": { "state": "translated", - "value": "カウント対象外" + "value": "検出可能にする" } }, "ko": { "stringUnit": { "state": "translated", - "value": "계산 안 됨" + "value": "검색 허용" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "不计入" + "value": "允许发现" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "不計入" + "value": "允許探索" } - } - } - }, - "terminalSharing.panel.rowOptions": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Options for %@" + "value": "Učini dostupnim" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "خيارات %@" + "value": "Gør synlig" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Optionen für %@" + "value": "Rendi individuabile" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Opciones de %@" + "value": "ធ្វើឲ្យអាចរកឃើញ" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Options pour %@" + "value": "Gjør denne Mac-en synlig" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "%@のオプション" + "value": "Włącz wykrywanie" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "%@ 옵션" + "value": "Tornar detectável" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "%@的选项" + "value": "Сделать доступным для обнаружения" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "%@的選項" + "value": "ทำให้ Mac เครื่องนี้ค้นพบได้" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Keşfedilebilir yap" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Зробити цей Mac видимим" } } } }, - "terminalSharing.panel.disconnectOthersButton": { + "devices.incoming.confirm.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect Others" + "value": "Other Macs signed in to your cmux account may discover this Mac and connect to its workspaces. Do you want to continue?" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قطع اتصال الآخرين" + "value": "قد تكتشف أجهزة Mac الأخرى التي سجّلت الدخول إلى حساب cmux هذا الـ Mac وتتصل بمساحات العمل فيه. هل تريد المتابعة؟" } }, "de": { "stringUnit": { "state": "translated", - "value": "Andere trennen" + "value": "Andere Macs, die bei deinem cmux-Konto angemeldet sind, können diesen Mac finden und sich mit seinen Arbeitsbereichen verbinden. Möchtest du fortfahren?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desconectar a los demás" + "value": "Otros Mac que hayan iniciado sesión en tu cuenta de cmux podrán descubrir este Mac y conectarse a sus espacios de trabajo. ¿Quieres continuar?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déconnecter les autres" + "value": "Les autres Mac connectés à votre compte cmux pourront détecter ce Mac et se connecter à ses espaces de travail. Voulez-vous continuer ?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "他の接続を切断" + "value": "cmuxアカウントにサインインしているほかのMacから、このMacが検出され、ワークスペースに接続されることがあります。続けますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다른 연결 끊기" + "value": "cmux 계정에 로그인한 다른 Mac에서 이 Mac을 검색하고 작업 공간에 연결할 수 있습니다. 계속하시겠습니까?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "断开其他连接" + "value": "登录你 cmux 帐户的其他 Mac 可能会发现此 Mac 并连接到其工作区。要继续吗?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "中斷其他連線" + "value": "登入您 cmux 帳戶的其他 Mac 可能會探索此 Mac 並連線至其工作區。要繼續嗎?" } - } - } - }, - "terminalSharing.detached.titleShort": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Detached" + "value": "Drugi Mac računari prijavljeni na vaš cmux nalog možda će otkriti ovaj Mac i povezati se s njegovim radnim prostorima. Želite li nastaviti?" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "تم الفصل" + "value": "Andre Mac-computere, der er logget ind på din cmux-konto, kan muligvis finde denne Mac og oprette forbindelse til dens arbejdsområder. Vil du fortsætte?" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Getrennt" + "value": "Gli altri Mac che hanno effettuato l’accesso al tuo account cmux potrebbero rilevare questo Mac e connettersi ai suoi spazi di lavoro. Vuoi continuare?" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Desconectado" + "value": "Mac ផ្សេងទៀតដែលបានចូលគណនី cmux របស់អ្នក អាចរកឃើញ Mac នេះ និងភ្ជាប់ទៅកាន់ workspace របស់វា។ តើអ្នកចង់បន្តឬទេ?" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Détaché" + "value": "Andre Mac-maskiner som er logget på cmux-kontoen din, kan finne denne Mac-en og koble til arbeidsområdene. Vil du fortsette?" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "切断されました" + "value": "Inne Maki zalogowane na Twoje konto cmux mogą wykryć tego Maca i połączyć się z jego obszarami roboczymi. Czy chcesz kontynuować?" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "분리됨" + "value": "Outros Macs conectados à sua conta cmux poderão descobrir este Mac e se conectar aos seus espaços de trabalho. Deseja continuar?" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "已分离" + "value": "Другие Mac, вошедшие в вашу учётную запись cmux, могут обнаружить этот Mac и подключиться к его рабочим пространствам. Продолжить?" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "已分離" + "value": "Mac เครื่องอื่นที่ลงชื่อเข้าใช้บัญชี cmux ของคุณอาจค้นพบ Mac เครื่องนี้และเชื่อมต่อกับพื้นที่ทำงานของเครื่องนี้ คุณต้องการดำเนินการต่อหรือไม่" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "cmux hesabınızda oturum açmış diğer Mac’ler bu Mac’i keşfedebilir ve çalışma alanlarına bağlanabilir. Devam etmek istiyor musunuz?" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Інші Mac, на яких виконано вхід у ваш обліковий запис cmux, можуть виявити цей Mac і підключитися до його робочих просторів. Продовжити?" } } } }, - "terminalSharing.detached.byMessageShort": { + "devices.incoming.confirm.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@ disconnected this Mac at %2$@." + "value": "Make this Mac discoverable?" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قطع %1$@ اتصال هذا الـMac في %2$@." + "value": "هل تريد جعل جهاز Mac هذا قابلاً للاكتشاف؟" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@ hat diesen Mac um %2$@ getrennt." + "value": "Diesen Mac auffindbar machen?" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@ desconectó este Mac a las %2$@." + "value": "¿Hacer que este Mac sea detectable?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ a déconnecté ce Mac à %2$@." + "value": "Rendre ce Mac détectable ?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@が%2$@にこのMacを切断しました。" + "value": "このMacを検出可能にしますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@이(가) %2$@에 이 Mac의 연결을 끊었습니다." + "value": "이 Mac을 검색 가능하게 할까요?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@于%2$@断开了这台Mac的连接。" + "value": "允许发现此 Mac 吗?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@於%2$@中斷了這台Mac的連線。" + "value": "要允許探索此 Mac 嗎?" } - } - } - }, - "terminalSharing.chip.hiddenColumns": { - "extractionState": "manual", - "localizations": { - "en": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld col hidden" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld cols hidden" - } - } - } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Učiniti ovaj Mac dostupnim?" } }, - "ar": { - "variations": { - "plural": { - "zero": { - "stringUnit": { - "state": "translated", - "value": "لا أعمدة مخفية (%ld)" - } - }, - "one": { - "stringUnit": { - "state": "translated", - "value": "عمود واحد مخفي (%ld)" - } - }, - "two": { - "stringUnit": { - "state": "translated", - "value": "عمودان مخفيان (%ld)" - } - }, - "few": { - "stringUnit": { - "state": "translated", - "value": "%ld أعمدة مخفية" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%ld عمودًا مخفيًا" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld عمود مخفي" - } - } - } + "da": { + "stringUnit": { + "state": "translated", + "value": "Gør denne Mac synlig?" } }, - "de": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld Spalte ausgeblendet" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld Spalten ausgeblendet" - } - } - } + "it": { + "stringUnit": { + "state": "translated", + "value": "Rendere individuabile questo Mac?" } }, - "es": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld columna oculta" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%ld de columnas ocultas" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld columnas ocultas" - } - } - } + "km": { + "stringUnit": { + "state": "translated", + "value": "ធ្វើឲ្យ Mac នេះអាចរកឃើញ?" } }, - "fr": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld colonne masquée" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%ld de colonnes masquées" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld colonnes masquées" - } - } - } + "nb": { + "stringUnit": { + "state": "translated", + "value": "Gjøre denne Mac-en synlig?" } }, - "ja": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld列が非表示" - } - } - } + "pl": { + "stringUnit": { + "state": "translated", + "value": "Uwidocznić tego Maca?" } }, - "ko": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld열 숨겨짐" - } - } - } + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Tornar este Mac detectável?" } }, - "zh-Hans": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "隐藏 %ld 列" - } - } - } + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сделать этот Mac доступным для обнаружения?" } }, - "zh-Hant": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "隱藏 %ld 欄" - } - } - } + "th": { + "stringUnit": { + "state": "translated", + "value": "ทำให้ Mac เครื่องนี้ค้นพบได้หรือไม่" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bu Mac keşfedilebilir yapılsın mı?" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Зробити цей Mac доступним для виявлення?" } } } }, - "terminalSharing.panel.cancel": { + "cloudTree.device.status.connecting": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cancel" + "value": "Connecting…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إلغاء" + "value": "جارٍ الاتصال…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Abbrechen" + "value": "Wird verbunden…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "Conectando…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Annuler" + "value": "Connexion…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "キャンセル" + "value": "接続中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "취소" + "value": "연결 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "正在连接…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "正在連線…" } } } }, - "terminalSharing.panel.disconnectOthers.confirm": { + "cloud.teamPicker.createSheet.create": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect all other clients?" + "value": "Create" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هل تريد قطع اتصال جميع العملاء الآخرين؟" + "value": "إنشاء" } }, "de": { "stringUnit": { "state": "translated", - "value": "Alle anderen Clients trennen?" + "value": "Erstellen" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Desconectar todos los demás clientes?" + "value": "Crear" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déconnecter tous les autres clients ?" + "value": "Créer" } }, "ja": { "stringUnit": { "state": "translated", - "value": "他のすべてのクライアントを切断しますか?" + "value": "作成" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다른 모든 클라이언트의 연결을 끊을까요?" + "value": "만들기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "要断开其他所有客户端吗?" + "value": "创建" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "要中斷其他所有用戶端的連線嗎?" + "value": "建立" } } } }, - "terminalSharing.panel.disconnectOthers.confirmButton": { + "cloud.teamPicker.createSheet.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect" + "value": "Create Team" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قطع الاتصال" + "value": "إنشاء فريق" } }, "de": { "stringUnit": { "state": "translated", - "value": "Trennen" + "value": "Team erstellen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desconectar" + "value": "Crear equipo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déconnecter" + "value": "Créer une équipe" } }, "ja": { "stringUnit": { "state": "translated", - "value": "切断" + "value": "チームを作成" } }, "ko": { "stringUnit": { "state": "translated", - "value": "연결 끊기" + "value": "팀 만들기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "断开连接" + "value": "创建团队" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "中斷連線" + "value": "建立團隊" } } } }, - "terminalSharing.panel.fixedColumns": { + "cloud.teamPicker.createTeam": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Columns" + "value": "Create Team…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الأعمدة" + "value": "إنشاء فريق…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Spalten" + "value": "Team erstellen…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Columnas" + "value": "Crear equipo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Colonnes" + "value": "Créer une équipe…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "列" + "value": "チームを作成…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "열" + "value": "팀 만들기…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "列数" + "value": "创建团队…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "欄數" + "value": "建立團隊…" } } } }, - "terminalSharing.panel.fixedRows": { + "cloud.teamPicker.switching": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Rows" + "value": "Switching teams…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الصفوف" + "value": "جارٍ تبديل الفريق…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zeilen" + "value": "Team wird gewechselt…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Filas" + "value": "Cambiando de equipo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Lignes" + "value": "Changement d’équipe…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "行" + "value": "チームを切り替え中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "행" + "value": "팀 전환 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "行数" + "value": "正在切换团队…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "列數" + "value": "正在切換團隊…" } } } }, - "terminalSharing.panel.unavailable": { + "cloud.teamPicker.creating": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This terminal is not shared." + "value": "Creating team…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هذه الطرفية غير مشتركة." + "value": "جارٍ إنشاء الفريق…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieses Terminal wird nicht geteilt." + "value": "Team wird erstellt…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esta terminal no está compartida." + "value": "Creando equipo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce terminal n’est pas partagé." + "value": "Création de l’équipe…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このターミナルは共有されていません。" + "value": "チームを作成中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 터미널은 공유되지 않았습니다." + "value": "팀 만드는 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此终端未共享。" + "value": "正在创建团队…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此終端機未共用。" + "value": "正在建立團隊…" } } } }, - "terminalSharing.panel.counts": { + "socket.authTeam.busy": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Counts toward size" + "value": "Another team change is in progress. Try again when it finishes." } }, "ar": { "stringUnit": { "state": "translated", - "value": "يُحتسب في الحجم" + "value": "هناك تغيير آخر في الفريق قيد التنفيذ. حاول مرة أخرى عند انتهائه." } }, "de": { "stringUnit": { "state": "translated", - "value": "Zählt für die Größe" + "value": "Eine andere Teamänderung läuft noch. Versuche es erneut, wenn sie abgeschlossen ist." } }, "es": { "stringUnit": { "state": "translated", - "value": "Cuenta para el tamaño" + "value": "Hay otro cambio de equipo en curso. Inténtalo de nuevo cuando termine." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Compte pour la taille" + "value": "Une autre modification d’équipe est en cours. Réessayez une fois terminée." } }, "ja": { "stringUnit": { "state": "translated", - "value": "サイズに反映" + "value": "別のチーム変更を処理中です。完了してからもう一度お試しください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "크기에 반영" + "value": "다른 팀 변경이 진행 중입니다. 완료된 후 다시 시도하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "计入大小" + "value": "另一项团队更改正在进行中,请在完成后重试。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "計入大小" + "value": "另一項團隊變更正在進行中,請在完成後再試一次。" } } } }, - "terminalSharing.panel.disconnect": { + "cloud.teamPicker.createSheet.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect" + "value": "The new team becomes your active team." } }, "ar": { "stringUnit": { "state": "translated", - "value": "قطع الاتصال" + "value": "يصبح الفريق الجديد فريقك النشط." } }, "de": { "stringUnit": { "state": "translated", - "value": "Trennen" + "value": "Das neue Team wird Ihr aktives Team." } }, "es": { "stringUnit": { "state": "translated", - "value": "Desconectar" + "value": "El nuevo equipo pasa a ser su equipo activo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déconnecter" + "value": "La nouvelle équipe devient votre équipe active." } }, "ja": { "stringUnit": { "state": "translated", - "value": "切断" + "value": "新しいチームがアクティブなチームになります。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "연결 끊기" + "value": "새 팀이 활성 팀이 됩니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "断开连接" + "value": "新团队将成为你的当前团队。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "中斷連線" + "value": "新團隊會成為你使用中的團隊。" } } } @@ -585926,6 +585513,124 @@ } } }, + "shortcut.diffViewerNextHunk.label": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Next Hunk" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "差分ビューア: 次のハンク" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "差异查看器:下一个块" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Diff-Viewer: Nächster Hunk" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Visionneuse de diff : Bloc suivant" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "عارض الفروق: المقطع التالي" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Visor de diff: Siguiente bloque" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "差異檢視器:下一個區塊" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "비교 뷰어: 다음 헝크" + } + } + } + }, + "shortcut.diffViewerPreviousHunk.label": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "差分ビューア: 前のハンク" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "差异查看器:上一个块" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Diff-Viewer: Vorheriger Hunk" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Visionneuse de diff : Bloc précédent" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "عارض الفروق: المقطع السابق" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Visor de diff: Bloque anterior" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "差異檢視器:上一個區塊" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "비교 뷰어: 이전 헝크" + } + } + } + }, "cloudMenu.machine.freeAccess": { "extractionState": "manual", "localizations": { @@ -586870,533 +586575,658 @@ } } }, - "cloudMenu.tone.attention": { + "cloudMenu.tone.attention": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Needs attention" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يحتاج إلى انتباه" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Erfordert Aufmerksamkeit" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Requiere atención" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Nécessite une attention" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "対応が必要" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "확인 필요" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "需要处理" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "需要處理" + } + } + } + }, + "menu.cloud.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "السحابة" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Cloud" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Cloud" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Cloud" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クラウド" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "클라우드" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "云端" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "雲端" + } + } + } + }, + "cloudMenu.machines.loading": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Needs attention" + "value": "Cloud Machines · Loading…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يحتاج إلى انتباه" + "value": "أجهزة السحابة · جارٍ التحميل…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Erfordert Aufmerksamkeit" + "value": "Cloud-Maschinen · Wird geladen…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Requiere atención" + "value": "Máquinas de Cloud · Cargando…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nécessite une attention" + "value": "Machines Cloud · Chargement…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "対応が必要" + "value": "クラウドマシン · 読み込み中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "확인 필요" + "value": "클라우드 머신 · 불러오는 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "需要处理" + "value": "云端机器 · 正在加载…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "需要處理" + "value": "雲端機器 · 正在載入…" } } } }, - "menu.cloud.title": { + "cloudMenu.machines.showAll": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud" + "value": "Show All Machines…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "السحابة" + "value": "عرض كل الأجهزة…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud" + "value": "Alle Maschinen anzeigen…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cloud" + "value": "Mostrar todas las máquinas…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cloud" + "value": "Afficher toutes les machines…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "クラウド" + "value": "すべてのマシンを表示…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드" + "value": "모든 머신 보기…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "云端" + "value": "显示所有机器…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "雲端" + "value": "顯示所有機器…" } } } }, - "cloudMenu.machines.loading": { + "cloudMenu.newMachine": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud Machines · Loading…" + "value": "New Cloud Machine…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أجهزة السحابة · جارٍ التحميل…" + "value": "جهاز سحابي جديد…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Maschinen · Wird geladen…" + "value": "Neue Cloud-Maschine…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Máquinas de Cloud · Cargando…" + "value": "Nueva máquina de Cloud…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Machines Cloud · Chargement…" + "value": "Nouvelle machine Cloud…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "クラウドマシン · 読み込み中…" + "value": "新規クラウドマシン…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 머신 · 불러오는 중…" + "value": "새 클라우드 머신…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "云端机器 · 正在加载…" + "value": "新建云端机器…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "雲端機器 · 正在載入…" + "value": "新增雲端機器…" } } } }, - "cloudMenu.machines.showAll": { + "cloudMenu.signIn": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show All Machines…" + "value": "Sign In to cmux Cloud…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "عرض كل الأجهزة…" + "value": "تسجيل الدخول إلى cmux Cloud…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Alle Maschinen anzeigen…" + "value": "Bei cmux Cloud anmelden…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar todas las máquinas…" + "value": "Iniciar sesión en cmux Cloud…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher toutes les machines…" + "value": "Se connecter à cmux Cloud…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "すべてのマシンを表示…" + "value": "cmux Cloud にサインイン…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모든 머신 보기…" + "value": "cmux Cloud에 로그인…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示所有机器…" + "value": "登录 cmux Cloud…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示所有機器…" + "value": "登入 cmux Cloud…" } } } }, - "cloudMenu.newMachine": { + "cloudMenu.signInAgain": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "New Cloud Machine…" + "value": "Sign In Again…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جهاز سحابي جديد…" + "value": "تسجيل الدخول مجددًا…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Neue Cloud-Maschine…" + "value": "Erneut anmelden…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nueva máquina de Cloud…" + "value": "Volver a iniciar sesión…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nouvelle machine Cloud…" + "value": "Se reconnecter…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "新規クラウドマシン…" + "value": "もう一度サインイン…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 클라우드 머신…" + "value": "다시 로그인…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新建云端机器…" + "value": "重新登录…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "新增雲端機器…" + "value": "重新登入…" } } } }, - "cloudMenu.signIn": { + "cloudMenu.signingIn": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sign In to cmux Cloud…" + "value": "Signing In…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تسجيل الدخول إلى cmux Cloud…" + "value": "جارٍ تسجيل الدخول…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bei cmux Cloud anmelden…" + "value": "Anmeldung läuft…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Iniciar sesión en cmux Cloud…" + "value": "Iniciando sesión…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Se connecter à cmux Cloud…" + "value": "Connexion…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux Cloud にサインイン…" + "value": "サインイン中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux Cloud에 로그인…" + "value": "로그인 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "登录 cmux Cloud…" + "value": "正在登录…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "登入 cmux Cloud…" + "value": "正在登入…" } } } }, - "cloudMenu.signInAgain": { + "cloudMenu.upgrade": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sign In Again…" + "value": "Upgrade to Pro…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تسجيل الدخول مجددًا…" + "value": "الترقية إلى Pro…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Erneut anmelden…" + "value": "Auf Pro upgraden…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Volver a iniciar sesión…" + "value": "Mejorar a Pro…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Se reconnecter…" + "value": "Passer à Pro…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "もう一度サインイン…" + "value": "Pro にアップグレード…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다시 로그인…" + "value": "Pro로 업그레이드…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重新登录…" + "value": "升级到 Pro…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新登入…" + "value": "升級至 Pro…" } } } }, - "cloudMenu.signingIn": { + "cloudTree.action.newCloudMachine": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Signing In…" + "value": "New Cloud Machine" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جارٍ تسجيل الدخول…" + "value": "جهاز سحابي جديد" } }, "de": { "stringUnit": { "state": "translated", - "value": "Anmeldung läuft…" + "value": "Neue Cloud-Maschine" } }, "es": { "stringUnit": { "state": "translated", - "value": "Iniciando sesión…" + "value": "Nueva máquina en la nube" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connexion…" + "value": "Nouvelle machine cloud" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サインイン中…" + "value": "新しいクラウドマシン" } }, "ko": { "stringUnit": { "state": "translated", - "value": "로그인 중…" + "value": "새 클라우드 머신" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "正在登录…" + "value": "新建云主机" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "正在登入…" + "value": "新增雲端機器" } - } - } - }, - "cloudMenu.upgrade": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Upgrade to Pro…" + "value": "Nova cloud mašina" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "الترقية إلى Pro…" + "value": "Ny cloud-maskine" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Auf Pro upgraden…" + "value": "Nuova macchina cloud" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Mejorar a Pro…" + "value": "ម៉ាស៊ីន Cloud ថ្មី" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Passer à Pro…" + "value": "Ny sky-maskin" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "Pro にアップグレード…" + "value": "Nowa maszyna w chmurze" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Pro로 업그레이드…" + "value": "Nova máquina na nuvem" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "升级到 Pro…" + "value": "Новая облачная машина" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "升級至 Pro…" + "value": "เครื่องคลาวด์ใหม่" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Yeni bulut makinesi" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Нова хмарна машина" } } } @@ -587578,6 +587408,65 @@ } } }, + "cli.restore.error.routedLauncherNotFound": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "restore: this session was started with '%1$@ claude proxy', but '%1$@' is not on PATH in this shell. Add it to PATH, then retry." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "restore: このセッションは「%1$@ claude proxy」で起動されましたが、このシェルの PATH に「%1$@」がありません。PATH に追加してから、再試行してください。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "restore:此会话是通过“%1$@ claude proxy”启动的,但此 shell 的 PATH 中没有“%1$@”。请将其添加到 PATH,然后重试。" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "restore: Diese Sitzung wurde mit „%1$@ claude proxy“ gestartet, aber „%1$@“ ist in dieser Shell nicht im PATH. Fügen Sie es zum PATH hinzu und versuchen Sie es dann erneut." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "restore : cette session a été démarrée avec « %1$@ claude proxy », mais « %1$@ » n'est pas dans le PATH de ce shell. Ajoutez-le au PATH, puis réessayez." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "restore: بدأت هذه الجلسة باستخدام '%1$@ claude proxy'، لكن '%1$@' غير موجود في PATH في هذه الصدفة. أضفه إلى PATH، ثم أعد المحاولة." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "restore: esta sesión se inició con '%1$@ claude proxy', pero '%1$@' no está en el PATH de este shell. Agréguelo al PATH y vuelva a intentarlo." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "restore:此工作階段是以「%1$@ claude proxy」啟動的,但此 shell 的 PATH 中沒有「%1$@」。請將其加入 PATH,然後重試。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "restore: 이 세션은 '%1$@ claude proxy'로 시작되었지만 이 셸의 PATH에 '%1$@'이(가) 없습니다. PATH에 추가한 후 다시 시도하십시오." + } + } + } + }, "settings.terminal.textEditingCommandMovesByWord": { "extractionState": "manual", "localizations": { @@ -587873,65 +587762,6 @@ } } }, - "cli.restore.error.routedLauncherNotFound": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "restore: this session was started with '%1$@ claude proxy', but '%1$@' is not on PATH in this shell. Add it to PATH, then retry." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "restore: このセッションは「%1$@ claude proxy」で起動されましたが、このシェルの PATH に「%1$@」がありません。PATH に追加してから、再試行してください。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "restore:此会话是通过“%1$@ claude proxy”启动的,但此 shell 的 PATH 中没有“%1$@”。请将其添加到 PATH,然后重试。" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "restore: Diese Sitzung wurde mit „%1$@ claude proxy“ gestartet, aber „%1$@“ ist in dieser Shell nicht im PATH. Fügen Sie es zum PATH hinzu und versuchen Sie es dann erneut." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "restore : cette session a été démarrée avec « %1$@ claude proxy », mais « %1$@ » n'est pas dans le PATH de ce shell. Ajoutez-le au PATH, puis réessayez." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "restore: بدأت هذه الجلسة باستخدام '%1$@ claude proxy'، لكن '%1$@' غير موجود في PATH في هذه الصدفة. أضفه إلى PATH، ثم أعد المحاولة." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "restore: esta sesión se inició con '%1$@ claude proxy', pero '%1$@' no está en el PATH de este shell. Agréguelo al PATH y vuelva a intentarlo." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "restore:此工作階段是以「%1$@ claude proxy」啟動的,但此 shell 的 PATH 中沒有「%1$@」。請將其加入 PATH,然後重試。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "restore: 이 세션은 '%1$@ claude proxy'로 시작되었지만 이 셸의 PATH에 '%1$@'이(가) 없습니다. PATH에 추가한 후 다시 시도하십시오." - } - } - } - }, "command.copyWorkingDirectory.title": { "extractionState": "manual", "localizations": { @@ -589764,415 +589594,120 @@ } } }, - "settings.terminal.predictiveLocalEcho": { + "agent.generic.status.runningSubagents": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Predictive Local Echo" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Vorausschauendes lokales Echo" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Écho local prédictif" + "value": "Running subagents" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الصدى المحلي التنبؤي" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Eco local predictivo" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "預測性本機回顯" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "预测性本地回显" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예측 로컬 에코" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "予測ローカルエコー" - } - } - } - }, - "settings.search.alias.setting.terminal.predictive-local-echo": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "terminal.predictiveLocalEcho predictive local echo typing latency lag ssh remote speculative mosh round trip underline" + "value": "تشغيل الوكلاء الفرعيين" } }, "de": { "stringUnit": { "state": "translated", - "value": "terminal.predictiveLocalEcho vorausschauendes lokales echo tippen latenz verzögerung ssh remote spekulativ mosh round trip unterstrichen" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "terminal.predictiveLocalEcho écho local prédictif saisie latence décalage ssh distant spéculatif mosh aller-retour souligné" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "terminal.predictiveLocalEcho الصدى المحلي التنبؤي الكتابة زمن الاستجابة التأخير ssh بعيد تخميني mosh ذهاب وإياب تسطير" + "value": "Subagenten werden ausgeführt" } }, "es": { "stringUnit": { "state": "translated", - "value": "terminal.predictiveLocalEcho eco local predictivo escritura latencia retraso ssh remoto especulativo mosh ida y vuelta subrayado" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "terminal.predictiveLocalEcho 預測性本機回顯 輸入 延遲 卡頓 ssh 遠端 推測 mosh 往返 底線" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "terminal.predictiveLocalEcho 预测性本地回显 输入 延迟 卡顿 ssh 远程 推测 mosh 往返 下划线" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "terminal.predictiveLocalEcho 예측 로컬 에코 입력 지연 랙 ssh 원격 추측 mosh 왕복 밑줄" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "terminal.predictiveLocalEcho 予測ローカルエコー 入力 遅延 ラグ ssh リモート 投機的 mosh 往復 下線" - } - } - } - }, - "settingAction.confirm.apply": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Change" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Ändern" + "value": "Ejecutando subagentes" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Modifier" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تغيير" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cambiar" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "變更" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "更改" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "변경" + "value": "Sous-agents en cours d’exécution" } }, "ja": { "stringUnit": { "state": "translated", - "value": "変更" - } - } - } - }, - "settingAction.confirm.message": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "This action edits your cmux.json:\n\n%@" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Diese Aktion bearbeitet deine cmux.json:\n\n%@" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cette action modifie votre cmux.json :\n\n%@" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "يعدّل هذا الإجراء ملف cmux.json:\n\n%@" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Esta acción edita tu cmux.json:\n\n%@" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "此動作會編輯你的 cmux.json:\n\n%@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "此操作会编辑你的 cmux.json:\n\n%@" + "value": "サブエージェントを実行中" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 작업은 cmux.json을 편집합니다:\n\n%@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このアクションは cmux.json を編集します:\n\n%@" - } - } - } - }, - "settingAction.confirm.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Change Setting?" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Einstellung ändern?" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Modifier le réglage ?" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "هل تريد تغيير الإعداد؟" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "¿Cambiar el ajuste?" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "要變更設定嗎?" + "value": "하위 에이전트 실행 중" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "要更改设置吗?" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "설정을 변경할까요?" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "設定を変更しますか?" - } - } - } - }, - "settingAction.failed.unreadable": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "cmux couldn't read or save ~/.config/cmux/cmux.json. Check it for a syntax error, then try again." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "cmux konnte ~/.config/cmux/cmux.json nicht lesen oder speichern. Prüfe die Datei auf einen Syntaxfehler und versuche es erneut." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "cmux n'a pas pu lire ou enregistrer ~/.config/cmux/cmux.json. Vérifiez qu'il ne contient pas d'erreur de syntaxe, puis réessayez." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تعذّر على cmux قراءة ~/.config/cmux/cmux.json أو حفظه. تحقّق من عدم وجود خطأ في الصياغة، ثم حاول مرة أخرى." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "cmux no pudo leer ni guardar ~/.config/cmux/cmux.json. Revisa si tiene un error de sintaxis y vuelve a intentarlo." + "value": "正在运行子代理" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux 無法讀取或儲存 ~/.config/cmux/cmux.json。請檢查是否有語法錯誤,然後再試一次。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "cmux 无法读取或保存 ~/.config/cmux/cmux.json。请检查是否有语法错误,然后重试。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "cmux가 ~/.config/cmux/cmux.json을 읽거나 저장하지 못했습니다. 구문 오류가 있는지 확인한 뒤 다시 시도하세요." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux は ~/.config/cmux/cmux.json を読み込むか保存できませんでした。構文エラーがないか確認してから、もう一度お試しください。" + "value": "執行子代理程式中" } } } }, - "settingAction.failed.title": { + "agent.generic.status.waiting": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Couldn't Change Setting" + "value": "Waiting" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذّر تغيير الإعداد" + "value": "في الانتظار" } }, "de": { "stringUnit": { "state": "translated", - "value": "Einstellung konnte nicht geändert werden" + "value": "Warten" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudo cambiar el ajuste" + "value": "Esperando" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Impossible de modifier le réglage" + "value": "En attente" } }, "ja": { "stringUnit": { "state": "translated", - "value": "設定を変更できませんでした" + "value": "待機中" } }, "ko": { "stringUnit": { "state": "translated", - "value": "설정을 변경할 수 없음" + "value": "대기 중" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法更改设置" + "value": "等待中" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法更改設定" + "value": "等待中" } } } @@ -590413,668 +589948,533 @@ } } }, - "cli.help.record": { + "settingAction.confirm.apply": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nRecord a cmux window to an mp4 or gif, for a pull request or a bug\nreport. Only cmux's own windows can be recorded, and no Screen\nRecording permission is involved.\n\nFlags for start:\n --format mp4|gif Output format (default: mp4)\n --gif Shorthand for --format gif\n --fps <1-30> Frames per second (default: 12 for mp4, 8 for gif)\n --max-seconds Stop by itself after n seconds, 0.5-120 (default: 15)\n --scale <0.1-1> Scale the output (default: 1 for mp4, 0.5 for gif)\n --max-width <64-4096> Cap the output width, keeping the aspect ratio\n --region Record part of the window, in window points\n --out Write here instead of a temporary directory\n --label Name the file\n --no-captions Do not draw `record note` captions into the clip\n --window Window to record (default: the frontmost one)\n\nOutput: ` `, or the full response with --json.\n\nA recording stops itself at --max-seconds, so a clip is never left\nrunning by an agent that goes away. One recording at a time.\n\nExample:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "الاستخدام: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nتسجيل نافذة cmux بصيغة mp4 أو gif، من أجل طلب سحب أو تقرير خطأ.\nلا يمكن تسجيل سوى نوافذ cmux نفسها،\nولا يتطلب ذلك إذن تسجيل الشاشة.\n\nخيارات start:\n --format mp4|gif صيغة الإخراج (الافتراضي: mp4)\n --gif اختصار لـ --format gif\n --fps <1-30> الإطارات في الثانية (الافتراضي: 12 لـ mp4، 8 لـ gif)\n --max-seconds يتوقف من تلقاء نفسه بعد n ثانية، 0.5-120 (الافتراضي: 15)\n --scale <0.1-1> تحجيم الإخراج (الافتراضي: 1 لـ mp4، 0.5 لـ gif)\n --max-width <64-4096> تحديد أقصى عرض للإخراج مع الحفاظ على نسبة الأبعاد\n --region تسجيل جزء من النافذة، بوحدات نقاط النافذة\n --out الكتابة هنا بدلاً من دليل مؤقت\n --label تسمية الملف\n --no-captions عدم رسم تعليقات `record note` داخل المقطع\n --window النافذة المراد تسجيلها (الافتراضي: النافذة الأمامية)\n\nالإخراج: ` `، أو الاستجابة الكاملة مع --json.\n\nيتوقف التسجيل من تلقاء نفسه عند --max-seconds، حتى لا يترك وكيل غادر\nمقطعًا قيد التسجيل. تسجيل واحد في كل مرة.\n\nمثال:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + "value": "Change" } }, "de": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux record [start] [Flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nEin cmux-Fenster als mp4 oder gif aufzeichnen, für einen Pull Request\noder einen Fehlerbericht. Nur cmux-eigene Fenster können aufgezeichnet\nwerden, und es ist keine Bildschirmaufnahme-Berechtigung beteiligt.\n\nFlags für start:\n --format mp4|gif Ausgabeformat (Standard: mp4)\n --gif Kurzform für --format gif\n --fps <1-30> Bilder pro Sekunde (Standard: 12 für mp4, 8 für gif)\n --max-seconds Nach n Sekunden selbst beenden, 0.5-120 (Standard: 15)\n --scale <0.1-1> Ausgabe skalieren (Standard: 1 für mp4, 0.5 für gif)\n --max-width <64-4096> Ausgabebreite begrenzen, Seitenverhältnis bleibt\n --region Teil des Fensters aufzeichnen, in Fensterpunkten\n --out Hierhin schreiben statt in ein temporäres Verzeichnis\n --label Datei benennen\n --no-captions Keine `record note`-Untertitel in den Clip zeichnen\n --window Fenster zum Aufzeichnen (Standard: das vorderste)\n\nAusgabe: ` `, oder mit --json die vollständige Antwort.\n\nEine Aufzeichnung beendet sich bei --max-seconds selbst, damit ein Agent, der\nverschwindet, keinen laufenden Clip hinterlässt. Eine Aufzeichnung zur Zeit.\n\nBeispiel:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Uso: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nGraba una ventana de cmux en mp4 o gif, para un pull request o un informe\nde error. Solo se pueden grabar las ventanas propias de cmux, y no\ninterviene ningún permiso de grabación de pantalla.\n\nFlags para start:\n --format mp4|gif Formato de salida (predeterminado: mp4)\n --gif Atajo para --format gif\n --fps <1-30> Fotogramas por segundo (predeterminado: 12 para mp4, 8 para gif)\n --max-seconds Se detiene solo tras n segundos, 0.5-120 (predeterminado: 15)\n --scale <0.1-1> Escala la salida (predeterminado: 1 para mp4, 0.5 para gif)\n --max-width <64-4096> Limita el ancho de salida manteniendo la proporción\n --region Graba parte de la ventana, en puntos de ventana\n --out Escribe aquí en lugar de en un directorio temporal\n --label Da nombre al archivo\n --no-captions No dibujar los subtítulos de `record note` en el clip\n --window Ventana que se graba (predeterminado: la del frente)\n\nSalida: ` `, o la respuesta completa con --json.\n\nUna grabación se detiene sola en --max-seconds, para que un agente que\ndesaparece nunca deje un clip en marcha. Una grabación a la vez.\n\nEjemplo:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + "value": "Ändern" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nEnregistrer une fenêtre cmux en mp4 ou gif, pour une pull request ou un\nrapport de bug. Seules les fenêtres de cmux peuvent être enregistrées, et\naucune autorisation d'enregistrement de l'écran n'intervient.\n\nFlags pour start :\n --format mp4|gif Format de sortie (par défaut : mp4)\n --gif Raccourci pour --format gif\n --fps <1-30> Images par seconde (par défaut : 12 pour mp4, 8 pour gif)\n --max-seconds S'arrête seul après n secondes, 0.5-120 (par défaut : 15)\n --scale <0.1-1> Mettre la sortie à l'échelle (par défaut : 1 pour mp4, 0.5 pour gif)\n --max-width <64-4096> Limiter la largeur de sortie en gardant les proportions\n --region N'enregistrer qu'une partie de la fenêtre, en points fenêtre\n --out Écrire ici au lieu d'un répertoire temporaire\n --label Nommer le fichier\n --no-captions Ne pas dessiner les légendes `record note` dans le clip\n --window Fenêtre à enregistrer (par défaut : celle au premier plan)\n\nSortie : ` `, ou la réponse complète avec --json.\n\nUn enregistrement s'arrête de lui-même à --max-seconds, afin qu'un agent qui\ndisparaît ne laisse jamais un clip en cours. Un seul enregistrement à la fois.\n\nExemple :\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "使用方法: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nプルリクエストやバグ報告のために、cmux のウィンドウを mp4 または gif\nで録画します。録画できるのは cmux 自身のウィンドウだけで、画面収録の\n権限は必要ありません。\n\nstart のフラグ:\n --format mp4|gif 出力形式(既定: mp4)\n --gif --format gif の短縮形\n --fps <1-30> 1 秒あたりのフレーム数(既定: mp4 は 12、gif は 8)\n --max-seconds n 秒後に自動停止、0.5-120(既定: 15)\n --scale <0.1-1> 出力を拡大縮小(既定: mp4 は 1、gif は 0.5)\n --max-width <64-4096> 縦横比を保ったまま出力の幅を制限\n --region ウィンドウの一部だけを録画(ウィンドウポイント単位)\n --out 一時ディレクトリではなくこのパスに書き出す\n --label ファイルに名前を付ける\n --no-captions `record note` のキャプションをクリップに描画しない\n --window 録画するウィンドウ(既定: 最前面のウィンドウ)\n\n出力: ` `、または --json で完全なレスポンス。\n\n録画は --max-seconds で自動停止するので、いなくなったエージェントが\n録画を実行したままにすることはありません。録画は同時に 1 つだけです。\n\n例:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "사용법: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\n풀 리퀘스트나 버그 리포트에 쓰려고 cmux 창을 mp4 또는 gif로\n녹화합니다. cmux 자신의 창만 녹화할 수 있고, 화면 기록 권한은\n필요하지 않습니다.\n\nstart 플래그:\n --format mp4|gif 출력 형식 (기본값: mp4)\n --gif --format gif의 단축형\n --fps <1-30> 초당 프레임 수 (기본값: mp4는 12, gif는 8)\n --max-seconds n초 후 스스로 정지, 0.5-120 (기본값: 15)\n --scale <0.1-1> 출력 크기 조정 (기본값: mp4는 1, gif는 0.5)\n --max-width <64-4096> 가로 세로 비율을 유지하며 출력 너비 제한\n --region 창의 일부만 녹화, 창 포인트 단위\n --out 임시 디렉터리 대신 이 경로에 기록\n --label 파일 이름 지정\n --no-captions `record note` 캡션을 클립에 그리지 않음\n --window 녹화할 창 (기본값: 맨 앞 창)\n\n출력: ` `, 또는 --json으로 전체 응답.\n\n녹화는 --max-seconds에서 스스로 멈추므로 사라진 에이전트가 녹화를 계속\n남겨 두는 일은 없습니다. 한 번에 하나의 녹화만 가능합니다.\n\n예:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "使用方法: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\n将 cmux 窗口录制为 mp4 或 gif,用于 pull request 或错误报告。\n只能录制 cmux 自己的窗口,\n而且不需要任何屏幕录制权限。\n\nstart 的标志:\n --format mp4|gif 输出格式(默认: mp4)\n --gif --format gif 的简写\n --fps <1-30> 每秒帧数(默认: mp4 为 12,gif 为 8)\n --max-seconds n 秒后自行停止,0.5-120(默认: 15)\n --scale <0.1-1> 缩放输出(默认: mp4 为 1,gif 为 0.5)\n --max-width <64-4096> 限制输出宽度并保持宽高比\n --region 只录制窗口的一部分,以窗口点为单位\n --out 写入此处而非临时目录\n --label 为文件命名\n --no-captions 不要把 `record note` 字幕画进视频\n --window 要录制的窗口(默认: 最前面的窗口)\n\n输出: ` `,或用 --json 获取完整响应。\n\n录制会在 --max-seconds 时自行停止,因此离开的代理不会留下仍在录制的\n视频。同一时间只能有一份录制。\n\n示例:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "使用方法: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\n將 cmux 視窗錄製成 mp4 或 gif,用於 pull request 或錯誤報告。\n只能錄製 cmux 自己的視窗,\n而且不需要任何螢幕錄製權限。\n\nstart 的旗標:\n --format mp4|gif 輸出格式(預設: mp4)\n --gif --format gif 的簡寫\n --fps <1-30> 每秒影格數(預設: mp4 為 12,gif 為 8)\n --max-seconds n 秒後自行停止,0.5-120(預設: 15)\n --scale <0.1-1> 縮放輸出(預設: mp4 為 1,gif 為 0.5)\n --max-width <64-4096> 限制輸出寬度並維持長寬比\n --region 只錄製視窗的一部分,以視窗點為單位\n --out 寫入此處而非暫存目錄\n --label 為檔案命名\n --no-captions 不要將 `record note` 字幕畫進影片\n --window 要錄製的視窗(預設: 最前面的視窗)\n\n輸出: ` `,或以 --json 取得完整回應。\n\n錄製會在 --max-seconds 時自行停止,因此離開的代理程式不會留下仍在\n錄製的影片。同一時間只能有一份錄製。\n\n範例:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" - } - } - } - }, - "cli.record.error.formatConflict": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "record start: --gif conflicts with --format" + "value": "Modifier" } }, "ar": { "stringUnit": { "state": "translated", - "value": "record start: لا يمكن دمج --gif مع --format" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "record start: --gif kann nicht mit --format kombiniert werden" + "value": "تغيير" } }, "es": { "stringUnit": { "state": "translated", - "value": "record start: --gif no se puede combinar con --format" + "value": "Cambiar" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "record start: --gif ne peut pas être combiné avec --format" + "value": "變更" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "record start: --gif は --format と併用できません" + "value": "更改" } }, "ko": { "stringUnit": { "state": "translated", - "value": "record start: --gif은 --format과 함께 사용할 수 없습니다" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "record start: --gif 不能与 --format 同用" + "value": "변경" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "record start: --gif 無法與 --format 同時使用" + "value": "変更" } } } }, - "cli.record.error.noteText": { + "settingAction.confirm.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "record note: text is required" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "record note: النص مطلوب" + "value": "This action edits your cmux.json:\n\n%@" } }, "de": { "stringUnit": { "state": "translated", - "value": "record note: Text ist erforderlich" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "record note: se requiere el texto" + "value": "Diese Aktion bearbeitet deine cmux.json:\n\n%@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "record note : le texte est requis" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "record note: テキストが必要です" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "record note: 텍스트가 필요합니다" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "record note: 必须提供文本" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "record note: 必須提供文字" - } - } - } - }, - "cli.record.error.unexpectedArguments": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "record %@: unexpected arguments: %@" + "value": "Cette action modifie votre cmux.json :\n\n%@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "record %@: وسائط غير متوقعة: %@" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "record %@: unerwartete Argumente: %@" + "value": "يعدّل هذا الإجراء ملف cmux.json:\n\n%@" } }, "es": { "stringUnit": { "state": "translated", - "value": "record %@: argumentos inesperados: %@" + "value": "Esta acción edita tu cmux.json:\n\n%@" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "record %@ : arguments inattendus : %@" + "value": "此動作會編輯你的 cmux.json:\n\n%@" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "record %@: 予期しない引数: %@" + "value": "此操作会编辑你的 cmux.json:\n\n%@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "record %@: 예기치 않은 인수: %@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "record %@: 多余的参数: %@" + "value": "이 작업은 cmux.json을 편집합니다:\n\n%@" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "record %@: 未預期的引數: %@" + "value": "このアクションは cmux.json を編集します:\n\n%@" } } } }, - "cli.record.error.unknownSubcommand": { + "settingAction.confirm.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "record: unknown subcommand '%@' (start, stop, status, note, list)" + "value": "Change Setting?" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "record: أمر فرعي غير معروف '%@' (start، stop، status، note، list)" + "value": "Einstellung ändern?" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "record: unbekannter Unterbefehl „%@“ (start, stop, status, note, list)" + "value": "Modifier le réglage ?" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "record: subcomando desconocido '%@' (start, stop, status, note, list)" + "value": "هل تريد تغيير الإعداد؟" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "record : sous-commande inconnue '%@' (start, stop, status, note, list)" + "value": "¿Cambiar el ajuste?" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "record: 不明なサブコマンド '%@' です(start、stop、status、note、list)" + "value": "要變更設定嗎?" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "record: 알 수 없는 하위 명령 '%@' (start, stop, status, note, list)" + "value": "要更改设置吗?" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "record: 未知的子命令 '%@'(start、stop、status、note、list)" + "value": "설정을 변경할까요?" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "record: 未知的子命令 '%@'(start、stop、status、note、list)" + "value": "設定を変更しますか?" } } } }, - "cli.usage.record": { + "settingAction.failed.unreadable": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "cmux couldn't read or save ~/.config/cmux/cmux.json. Check it for a syntax error, then try again." } }, "de": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "cmux konnte ~/.config/cmux/cmux.json nicht lesen oder speichern. Prüfe die Datei auf einen Syntaxfehler und versuche es erneut." } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "cmux n'a pas pu lire ou enregistrer ~/.config/cmux/cmux.json. Vérifiez qu'il ne contient pas d'erreur de syntaxe, puis réessayez." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "تعذّر على cmux قراءة ~/.config/cmux/cmux.json أو حفظه. تحقّق من عدم وجود خطأ في الصياغة، ثم حاول مرة أخرى." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "cmux no pudo leer ni guardar ~/.config/cmux/cmux.json. Revisa si tiene un error de sintaxis y vuelve a intentarlo." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "cmux 無法讀取或儲存 ~/.config/cmux/cmux.json。請檢查是否有語法錯誤,然後再試一次。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "cmux 无法读取或保存 ~/.config/cmux/cmux.json。请检查是否有语法错误,然后重试。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "cmux가 ~/.config/cmux/cmux.json을 읽거나 저장하지 못했습니다. 구문 오류가 있는지 확인한 뒤 다시 시도하세요." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "cmux は ~/.config/cmux/cmux.json を読み込むか保存できませんでした。構文エラーがないか確認してから、もう一度お試しください。" } } } }, - "cli.help.shot": { + "settingAction.failed.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux shot [flags]\n\nScreenshot a cmux window, or a region of one, to a png or a jpeg. Only\ncmux's own windows can be captured, and no Screen Recording permission\nis involved, so this works on a release build and inside CI.\n\nFlags:\n --format png|jpg Output format (default: png)\n --jpg Shorthand for --format jpg\n --scale <0.1-1> Scale the output (default: 1)\n --max-width <64-8192> Cap the output width, keeping the aspect ratio\n --quality <0.1-1> JPEG quality (default: 0.8, ignored for png)\n --region Capture part of the window, in window points\n --out Write here instead of a temporary directory\n --label Name the file\n --caption Draw a caption into the image\n --window Window to capture (default: the frontmost one)\n\nOutput: `x `, or the full response with --json.\n\nA region is the same rectangle `cmux record --region` films, so a\ndetail spotted in a clip can be shot with the same four numbers.\n\nExample:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "Couldn't Change Setting" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux shot [flags]\n\nتصوير نافذة cmux أو جزء منها بصيغة png أو jpeg.\nلا يمكن تصوير سوى نوافذ cmux نفسها، ولا يتطلب ذلك إذن تسجيل الشاشة،\nلذلك يعمل هذا في بناء الإصدار وداخل CI.\n\nالخيارات:\n --format png|jpg صيغة الإخراج (الافتراضي: png)\n --jpg اختصار لـ --format jpg\n --scale <0.1-1> تحجيم الإخراج (الافتراضي: 1)\n --max-width <64-8192> تحديد أقصى عرض للإخراج مع الحفاظ على نسبة الأبعاد\n --quality <0.1-1> جودة JPEG (الافتراضي: 0.8، وتُهمل مع png)\n --region تصوير جزء من النافذة، بوحدات نقاط النافذة\n --out الكتابة هنا بدلاً من دليل مؤقت\n --label تسمية الملف\n --caption رسم تعليق داخل الصورة\n --window النافذة المراد تصويرها (الافتراضي: النافذة الأمامية)\n\nالإخراج: `x `، أو الاستجابة الكاملة مع --json.\n\nالمنطقة هي نفس المستطيل الذي يصوّره `cmux record --region`، لذا يمكن تصوير\nتفصيل لوحظ في مقطع بالأرقام الأربعة نفسها.\n\nمثال:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "تعذّر تغيير الإعداد" } }, "de": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux shot [Flags]\n\nEin cmux-Fenster oder einen Teil davon als png oder jpeg aufnehmen. Nur\ncmux-eigene Fenster sind aufnehmbar, und es ist keine Berechtigung für\nBildschirmaufnahmen nötig, das geht also im Release-Build und in der CI.\n\nFlags:\n --format png|jpg Ausgabeformat (Standard: png)\n --jpg Kurzform für --format jpg\n --scale <0.1-1> Ausgabe skalieren (Standard: 1)\n --max-width <64-8192> Ausgabebreite begrenzen, Seitenverhältnis bleibt\n --quality <0.1-1> JPEG-Qualität (Standard: 0.8, für png ignoriert)\n --region Teil des Fensters aufnehmen, in Fensterpunkten\n --out Hierhin schreiben statt in ein temporäres Verzeichnis\n --label Datei benennen\n --caption Eine Bildunterschrift ins Bild zeichnen\n --window Fenster zum Aufnehmen (Standard: das vorderste)\n\nAusgabe: `x `, oder mit --json die vollständige Antwort.\n\nEine Region ist dasselbe Rechteck, das `cmux record --region` filmt: ein im\nClip entdecktes Detail lässt sich mit denselben vier Zahlen aufnehmen.\n\nBeispiel:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "Einstellung konnte nicht geändert werden" } }, "es": { "stringUnit": { "state": "translated", - "value": "Uso: cmux shot [flags]\n\nCaptura una ventana de cmux, o una región de ella, en png o jpeg. Solo se\npueden capturar las ventanas propias de cmux, y no interviene ningún permiso\nde grabación de pantalla, así que funciona en una release y dentro de CI.\n\nFlags:\n --format png|jpg Formato de salida (predeterminado: png)\n --jpg Atajo para --format jpg\n --scale <0.1-1> Escala la salida (predeterminado: 1)\n --max-width <64-8192> Limita el ancho de salida manteniendo la proporción\n --quality <0.1-1> Calidad JPEG (predeterminado: 0.8, se ignora en png)\n --region Captura parte de la ventana, en puntos de ventana\n --out Escribe aquí en lugar de en un directorio temporal\n --label Da nombre al archivo\n --caption Dibuja un rótulo dentro de la imagen\n --window Ventana que se captura (predeterminado: la del frente)\n\nSalida: `x `, o la respuesta completa con --json.\n\nUna región es el mismo rectángulo que filma `cmux record --region`, así que un\ndetalle visto en un clip se captura con los mismos cuatro números.\n\nEjemplo:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "No se pudo cambiar el ajuste" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux shot [flags]\n\nCapture une fenêtre cmux, ou une partie de celle-ci, en png ou en jpeg.\nSeules les fenêtres de cmux peuvent être capturées, et aucune autorisation\nd'enregistrement d'écran n'intervient : cela marche en release et dans la CI.\n\nFlags :\n --format png|jpg Format de sortie (par défaut : png)\n --jpg Raccourci pour --format jpg\n --scale <0.1-1> Met la sortie à l'échelle (par défaut : 1)\n --max-width <64-8192> Limite la largeur de sortie en gardant les proportions\n --quality <0.1-1> Qualité JPEG (par défaut : 0.8, ignorée pour png)\n --region Capture une partie de la fenêtre, en points de fenêtre\n --out Écrit ici au lieu d'un répertoire temporaire\n --label Nomme le fichier\n --caption Dessine une légende dans l'image\n --window Fenêtre à capturer (par défaut : celle au premier plan)\n\nSortie : `x `, ou la réponse complète avec --json.\n\nUne région est le même rectangle que filme `cmux record --region` : un détail\nrepéré dans un clip se capture avec les mêmes quatre nombres.\n\nExemple :\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "Impossible de modifier le réglage" } }, "ja": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux shot [flags]\n\ncmux のウィンドウ、またはその一部の領域を png または jpeg で撮ります。\n撮れるのは cmux 自身のウィンドウだけで、画面収録の権限は必要ないので、\nリリースビルドでも CI の中でも動きます。\n\nフラグ:\n --format png|jpg 出力形式(既定: png)\n --jpg --format jpg の短縮形\n --scale <0.1-1> 出力を拡大縮小(既定: 1)\n --max-width <64-8192> 縦横比を保ったまま出力の幅を制限\n --quality <0.1-1> JPEG の品質(既定: 0.8、png では無視)\n --region ウィンドウの一部だけを撮る(ウィンドウポイント単位)\n --out 一時ディレクトリではなくこのパスに書き出す\n --label ファイルに名前を付ける\n --caption 画像にキャプションを描画する\n --window 撮るウィンドウ(既定: 最前面のウィンドウ)\n\n出力: `x `、または --json で完全なレスポンス。\n\n領域は `cmux record --region` が撮るのと同じ矩形なので、クリップで見つけた\n細部を同じ 4 つの数字で撮れます。\n\n例:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "設定を変更できませんでした" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용법: cmux shot [flags]\n\ncmux 창이나 창의 일부 영역을 png 또는 jpeg로 캡처합니다. cmux 자신의\n창만 캡처할 수 있고, 화면 기록 권한이 필요하지 않으므로 릴리스 빌드와\nCI 안에서도 동작합니다.\n\n플래그:\n --format png|jpg 출력 형식 (기본값: png)\n --jpg --format jpg의 단축형\n --scale <0.1-1> 출력 크기 조정 (기본값: 1)\n --max-width <64-8192> 가로 세로 비율을 유지하며 출력 너비 제한\n --quality <0.1-1> JPEG 품질 (기본값: 0.8, png에서는 무시)\n --region 창의 일부만 캡처, 창 포인트 단위\n --out 임시 디렉터리 대신 이 경로에 기록\n --label 파일 이름 지정\n --caption 이미지에 캡션 그리기\n --window 캡처할 창 (기본값: 맨 앞 창)\n\n출력: `x `, 또는 --json으로 전체 응답.\n\n영역은 `cmux record --region`이 촬영하는 사각형과 같으므로, 클립에서 본\n세부를 같은 네 숫자로 캡처할 수 있습니다.\n\n예:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "설정을 변경할 수 없음" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux shot [flags]\n\n将 cmux 窗口或其中一块区域截取为 png 或 jpeg。\n只能截取 cmux 自己的窗口,而且不需要任何屏幕录制权限,\n因此在 release 构建和 CI 中都能用。\n\n标志:\n --format png|jpg 输出格式(默认: png)\n --jpg --format jpg 的简写\n --scale <0.1-1> 缩放输出(默认: 1)\n --max-width <64-8192> 限制输出宽度并保持宽高比\n --quality <0.1-1> JPEG 质量(默认: 0.8,png 会忽略)\n --region 只截取窗口的一部分,以窗口点为单位\n --out 写入此处而非临时目录\n --label 为文件命名\n --caption 在图片上绘制字幕\n --window 要截取的窗口(默认: 最前面的窗口)\n\n输出: `x `,或用 --json 获取完整响应。\n\n区域和 `cmux record --region` 拍摄的矩形相同,因此在视频里看到的细节\n可以用同样的四个数字截取。\n\n示例:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "无法更改设置" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux shot [flags]\n\n將 cmux 視窗或其中一塊區域擷取成 png 或 jpeg。\n只能擷取 cmux 自己的視窗,而且不需要任何螢幕錄製權限,\n因此在 release 版本與 CI 內都能用。\n\n旗標:\n --format png|jpg 輸出格式(預設: png)\n --jpg --format jpg 的簡寫\n --scale <0.1-1> 縮放輸出(預設: 1)\n --max-width <64-8192> 限制輸出寬度並保持長寬比\n --quality <0.1-1> JPEG 品質(預設: 0.8,png 會忽略)\n --region 只擷取視窗的一部分,以視窗點為單位\n --out 寫入此處而非暫存目錄\n --label 為檔案命名\n --caption 在圖片上畫出字幕\n --window 要擷取的視窗(預設: 最前面的視窗)\n\n輸出: `x `,或用 --json 取得完整回應。\n\n區域和 `cmux record --region` 拍攝的矩形相同,所以在影片裡看到的細節\n可以用同樣的四個數字擷取。\n\n範例:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "無法更改設定" } } } }, - "cli.shot.error.formatConflict": { + "settings.terminal.predictiveLocalEcho": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "shot: --jpg conflicts with --format" + "value": "Predictive Local Echo" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "shot: لا يمكن دمج --jpg مع --format" + "value": "Vorausschauendes lokales Echo" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "shot: --jpg kann nicht mit --format kombiniert werden" + "value": "Écho local prédictif" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "shot: --jpg no se puede combinar con --format" + "value": "الصدى المحلي التنبؤي" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "shot : --jpg ne peut pas être combiné avec --format" + "value": "Eco local predictivo" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "shot: --jpg は --format と併用できません" + "value": "預測性本機回顯" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "shot: --jpg은 --format과 함께 사용할 수 없습니다" + "value": "预测性本地回显" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "shot: --jpg 不能与 --format 同用" + "value": "예측 로컬 에코" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "shot: --jpg 無法與 --format 同時使用" + "value": "予測ローカルエコー" } } } }, - "cli.shot.error.unexpectedArguments": { + "settings.search.alias.setting.terminal.predictive-local-echo": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "shot: unexpected arguments: %@" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "shot: وسائط غير متوقعة: %@" + "value": "terminal.predictiveLocalEcho predictive local echo typing latency lag ssh remote speculative mosh round trip underline" } }, "de": { "stringUnit": { "state": "translated", - "value": "shot: unerwartete Argumente: %@" + "value": "terminal.predictiveLocalEcho vorausschauendes lokales echo tippen latenz verzögerung ssh remote spekulativ mosh round trip unterstrichen" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "shot: argumentos inesperados: %@" + "value": "terminal.predictiveLocalEcho écho local prédictif saisie latence décalage ssh distant spéculatif mosh aller-retour souligné" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "shot : arguments inattendus : %@" + "value": "terminal.predictiveLocalEcho الصدى المحلي التنبؤي الكتابة زمن الاستجابة التأخير ssh بعيد تخميني mosh ذهاب وإياب تسطير" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "shot: 予期しない引数: %@" + "value": "terminal.predictiveLocalEcho eco local predictivo escritura latencia retraso ssh remoto especulativo mosh ida y vuelta subrayado" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "shot: 예기치 않은 인수: %@" + "value": "terminal.predictiveLocalEcho 預測性本機回顯 輸入 延遲 卡頓 ssh 遠端 推測 mosh 往返 底線" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "shot: 多余的参数: %@" + "value": "terminal.predictiveLocalEcho 预测性本地回显 输入 延迟 卡顿 ssh 远程 推测 mosh 往返 下划线" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "shot: 未預期的引數: %@" - } - } - } - }, - "cli.usage.shot": { - "extractionState": "manual", - "localizations": { - "en": { + "ko": { "stringUnit": { "state": "translated", - "value": "shot [--format png|jpg] [--jpg] [--scale ] [--max-width ] [--quality ] [--region ] [--out ] [--label ] [--caption ] [--window ]" + "value": "terminal.predictiveLocalEcho 예측 로컬 에코 입력 지연 랙 ssh 원격 추측 mosh 왕복 밑줄" } }, "ja": { "stringUnit": { "state": "translated", - "value": "shot [--format png|jpg] [--jpg] [--scale ] [--max-width ] [--quality ] [--region ] [--out ] [--label ] [--caption ] [--window ]" + "value": "terminal.predictiveLocalEcho 予測ローカルエコー 入力 遅延 ラグ ssh リモート 投機的 mosh 往復 下線" } } } }, - "agent.generic.status.runningSubagents": { + "cli.vm.run.createMissingMachineID": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Running subagents" + "value": "vm run: create returned no machine id" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تشغيل الوكلاء الفرعيين" + "value": "vm run: 作成結果にマシン ID がありません" } }, "de": { "stringUnit": { "state": "translated", - "value": "Subagenten werden ausgeführt" + "value": "vm run: Beim Erstellen wurde keine Maschinen-ID zurückgegeben" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ejecutando subagentes" + "value": "vm run : la création n'a renvoyé aucun identifiant de machine" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Sous-agents en cours d’exécution" + "value": "vm run: لم يُرجع الإنشاء معرّف جهاز" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "サブエージェントを実行中" + "value": "vm run: la creación no devolvió ningún ID de máquina" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "하위 에이전트 실행 중" + "value": "vm run: 创建未返回机器 ID" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "正在运行子代理" + "value": "vm run:建立未回傳機器 ID" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "執行子代理程式中" + "value": "vm run: 생성 결과에 머신 ID가 없습니다" } } } }, - "agent.generic.status.waiting": { + "terminalContextMenu.pasteAsOneLine": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Waiting" + "value": "لصق في سطر واحد" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "في الانتظار" + "value": "Als eine Zeile einfügen" } }, - "de": { + "en": { "stringUnit": { "state": "translated", - "value": "Warten" + "value": "Paste as One Line" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esperando" + "value": "Pegar en una sola línea" } }, "fr": { "stringUnit": { "state": "translated", - "value": "En attente" + "value": "Coller sur une seule ligne" } }, "ja": { "stringUnit": { "state": "translated", - "value": "待機中" + "value": "1行にしてペースト" } }, "ko": { "stringUnit": { "state": "translated", - "value": "대기 중" + "value": "한 줄로 붙여넣기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "等待中" + "value": "粘贴为单行" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "等待中" + "value": "貼上為單行" } } } @@ -591897,7448 +591297,7937 @@ "ar": { "stringUnit": { "state": "translated", - "value": "إظهار الأمر" + "value": "إظهار الأمر" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Mostrar comando" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "顯示指令" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示命令" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "명령 보기" + } + } + } + }, + "agentWake.notification.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ didn't resume" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ が再開しませんでした" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "%@ wurde nicht fortgesetzt" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "%@ n’a pas repris" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف %@" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "%@ no se reanudó" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "%@ 未能恢復" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@ 未能恢复" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "%@이(가) 다시 시작되지 않았습니다" + } + } + } + }, + "agentWake.reason.didNotStart": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "It did not start within 90 seconds." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "90 秒以内に起動しませんでした。" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Es wurde nicht innerhalb von 90 Sekunden gestartet." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Il n’a pas démarré dans les 90 secondes." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "لم يبدأ خلال 90 ثانية." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "No se inició en 90 segundos." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "未在 90 秒內啟動。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "未在 90 秒内启动。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "90초 안에 시작되지 않았습니다." + } + } + } + }, + "agentWake.reason.exitedBeforeStart": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Its resume command exited." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "再開コマンドが終了しました。" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Sein Fortsetzungsbefehl wurde beendet." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Sa commande de reprise s’est terminée." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "انتهى أمر الاستئناف الخاص به." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Su comando de reanudación terminó." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "其恢復指令已結束。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "其恢复命令已退出。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "재개 명령이 종료되었습니다." + } + } + } + }, + "agentWake.status.multiple": { + "extractionState": "manual", + "localizations": { + "en": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld agent didn't resume" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld agents didn't resume" + } + } + } + } + }, + "ja": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld 個のエージェントが再開しませんでした" + } + } + } + } + }, + "de": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld Agent wurde nicht fortgesetzt" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld Agenten wurden nicht fortgesetzt" + } + } + } + } + }, + "fr": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld agent n’a pas repris" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%ld agents n’ont pas repris" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld agents n’ont pas repris" + } + } + } + } + }, + "ar": { + "variations": { + "plural": { + "zero": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف أي وكيل (%ld)" + } + }, + "one": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف وكيل واحد (%ld)" + } + }, + "two": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف وكيلان (%ld)" + } + }, + "few": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف %ld وكلاء" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف %ld وكيلًا" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف %ld وكيل" + } + } + } + } + }, + "es": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld agente no se reanudó" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%ld agentes no se reanudaron" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld agentes no se reanudaron" + } + } + } + } + }, + "zh-Hant": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld 個代理程式未能恢復" + } + } + } + } + }, + "zh-Hans": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld 个代理未能恢复" + } + } + } + } + }, + "ko": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "에이전트 %ld개가 다시 시작되지 않았습니다" + } + } + } + } + } + } + }, + "agentWake.status.single": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Agent didn't resume" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "エージェントが再開しませんでした" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Agent wurde nicht fortgesetzt" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "L’agent n’a pas repris" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف الوكيل" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "El agente no se reanudó" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "代理程式未能恢復" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "代理未能恢复" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "에이전트가 다시 시작되지 않았습니다" + } + } + } + }, + "cli.help.record": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Usage: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nRecord a cmux window to an mp4 or gif, for a pull request or a bug\nreport. Only cmux's own windows can be recorded, and no Screen\nRecording permission is involved.\n\nFlags for start:\n --format mp4|gif Output format (default: mp4)\n --gif Shorthand for --format gif\n --fps <1-30> Frames per second (default: 12 for mp4, 8 for gif)\n --max-seconds Stop by itself after n seconds, 0.5-120 (default: 15)\n --scale <0.1-1> Scale the output (default: 1 for mp4, 0.5 for gif)\n --max-width <64-4096> Cap the output width, keeping the aspect ratio\n --region Record part of the window, in window points\n --out Write here instead of a temporary directory\n --label Name the file\n --no-captions Do not draw `record note` captions into the clip\n --window Window to record (default: the frontmost one)\n\nOutput: ` `, or the full response with --json.\n\nA recording stops itself at --max-seconds, so a clip is never left\nrunning by an agent that goes away. One recording at a time.\n\nExample:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "الاستخدام: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nتسجيل نافذة cmux بصيغة mp4 أو gif، من أجل طلب سحب أو تقرير خطأ.\nلا يمكن تسجيل سوى نوافذ cmux نفسها،\nولا يتطلب ذلك إذن تسجيل الشاشة.\n\nخيارات start:\n --format mp4|gif صيغة الإخراج (الافتراضي: mp4)\n --gif اختصار لـ --format gif\n --fps <1-30> الإطارات في الثانية (الافتراضي: 12 لـ mp4، 8 لـ gif)\n --max-seconds يتوقف من تلقاء نفسه بعد n ثانية، 0.5-120 (الافتراضي: 15)\n --scale <0.1-1> تحجيم الإخراج (الافتراضي: 1 لـ mp4، 0.5 لـ gif)\n --max-width <64-4096> تحديد أقصى عرض للإخراج مع الحفاظ على نسبة الأبعاد\n --region تسجيل جزء من النافذة، بوحدات نقاط النافذة\n --out الكتابة هنا بدلاً من دليل مؤقت\n --label تسمية الملف\n --no-captions عدم رسم تعليقات `record note` داخل المقطع\n --window النافذة المراد تسجيلها (الافتراضي: النافذة الأمامية)\n\nالإخراج: ` `، أو الاستجابة الكاملة مع --json.\n\nيتوقف التسجيل من تلقاء نفسه عند --max-seconds، حتى لا يترك وكيل غادر\nمقطعًا قيد التسجيل. تسجيل واحد في كل مرة.\n\nمثال:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Verwendung: cmux record [start] [Flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nEin cmux-Fenster als mp4 oder gif aufzeichnen, für einen Pull Request\noder einen Fehlerbericht. Nur cmux-eigene Fenster können aufgezeichnet\nwerden, und es ist keine Bildschirmaufnahme-Berechtigung beteiligt.\n\nFlags für start:\n --format mp4|gif Ausgabeformat (Standard: mp4)\n --gif Kurzform für --format gif\n --fps <1-30> Bilder pro Sekunde (Standard: 12 für mp4, 8 für gif)\n --max-seconds Nach n Sekunden selbst beenden, 0.5-120 (Standard: 15)\n --scale <0.1-1> Ausgabe skalieren (Standard: 1 für mp4, 0.5 für gif)\n --max-width <64-4096> Ausgabebreite begrenzen, Seitenverhältnis bleibt\n --region Teil des Fensters aufzeichnen, in Fensterpunkten\n --out Hierhin schreiben statt in ein temporäres Verzeichnis\n --label Datei benennen\n --no-captions Keine `record note`-Untertitel in den Clip zeichnen\n --window Fenster zum Aufzeichnen (Standard: das vorderste)\n\nAusgabe: ` `, oder mit --json die vollständige Antwort.\n\nEine Aufzeichnung beendet sich bei --max-seconds selbst, damit ein Agent, der\nverschwindet, keinen laufenden Clip hinterlässt. Eine Aufzeichnung zur Zeit.\n\nBeispiel:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Uso: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nGraba una ventana de cmux en mp4 o gif, para un pull request o un informe\nde error. Solo se pueden grabar las ventanas propias de cmux, y no\ninterviene ningún permiso de grabación de pantalla.\n\nFlags para start:\n --format mp4|gif Formato de salida (predeterminado: mp4)\n --gif Atajo para --format gif\n --fps <1-30> Fotogramas por segundo (predeterminado: 12 para mp4, 8 para gif)\n --max-seconds Se detiene solo tras n segundos, 0.5-120 (predeterminado: 15)\n --scale <0.1-1> Escala la salida (predeterminado: 1 para mp4, 0.5 para gif)\n --max-width <64-4096> Limita el ancho de salida manteniendo la proporción\n --region Graba parte de la ventana, en puntos de ventana\n --out Escribe aquí en lugar de en un directorio temporal\n --label Da nombre al archivo\n --no-captions No dibujar los subtítulos de `record note` en el clip\n --window Ventana que se graba (predeterminado: la del frente)\n\nSalida: ` `, o la respuesta completa con --json.\n\nUna grabación se detiene sola en --max-seconds, para que un agente que\ndesaparece nunca deje un clip en marcha. Una grabación a la vez.\n\nEjemplo:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Utilisation : cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nEnregistrer une fenêtre cmux en mp4 ou gif, pour une pull request ou un\nrapport de bug. Seules les fenêtres de cmux peuvent être enregistrées, et\naucune autorisation d'enregistrement de l'écran n'intervient.\n\nFlags pour start :\n --format mp4|gif Format de sortie (par défaut : mp4)\n --gif Raccourci pour --format gif\n --fps <1-30> Images par seconde (par défaut : 12 pour mp4, 8 pour gif)\n --max-seconds S'arrête seul après n secondes, 0.5-120 (par défaut : 15)\n --scale <0.1-1> Mettre la sortie à l'échelle (par défaut : 1 pour mp4, 0.5 pour gif)\n --max-width <64-4096> Limiter la largeur de sortie en gardant les proportions\n --region N'enregistrer qu'une partie de la fenêtre, en points fenêtre\n --out Écrire ici au lieu d'un répertoire temporaire\n --label Nommer le fichier\n --no-captions Ne pas dessiner les légendes `record note` dans le clip\n --window Fenêtre à enregistrer (par défaut : celle au premier plan)\n\nSortie : ` `, ou la réponse complète avec --json.\n\nUn enregistrement s'arrête de lui-même à --max-seconds, afin qu'un agent qui\ndisparaît ne laisse jamais un clip en cours. Un seul enregistrement à la fois.\n\nExemple :\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "使用方法: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nプルリクエストやバグ報告のために、cmux のウィンドウを mp4 または gif\nで録画します。録画できるのは cmux 自身のウィンドウだけで、画面収録の\n権限は必要ありません。\n\nstart のフラグ:\n --format mp4|gif 出力形式(既定: mp4)\n --gif --format gif の短縮形\n --fps <1-30> 1 秒あたりのフレーム数(既定: mp4 は 12、gif は 8)\n --max-seconds n 秒後に自動停止、0.5-120(既定: 15)\n --scale <0.1-1> 出力を拡大縮小(既定: mp4 は 1、gif は 0.5)\n --max-width <64-4096> 縦横比を保ったまま出力の幅を制限\n --region ウィンドウの一部だけを録画(ウィンドウポイント単位)\n --out 一時ディレクトリではなくこのパスに書き出す\n --label ファイルに名前を付ける\n --no-captions `record note` のキャプションをクリップに描画しない\n --window 録画するウィンドウ(既定: 最前面のウィンドウ)\n\n出力: ` `、または --json で完全なレスポンス。\n\n録画は --max-seconds で自動停止するので、いなくなったエージェントが\n録画を実行したままにすることはありません。録画は同時に 1 つだけです。\n\n例:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "사용법: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\n풀 리퀘스트나 버그 리포트에 쓰려고 cmux 창을 mp4 또는 gif로\n녹화합니다. cmux 자신의 창만 녹화할 수 있고, 화면 기록 권한은\n필요하지 않습니다.\n\nstart 플래그:\n --format mp4|gif 출력 형식 (기본값: mp4)\n --gif --format gif의 단축형\n --fps <1-30> 초당 프레임 수 (기본값: mp4는 12, gif는 8)\n --max-seconds n초 후 스스로 정지, 0.5-120 (기본값: 15)\n --scale <0.1-1> 출력 크기 조정 (기본값: mp4는 1, gif는 0.5)\n --max-width <64-4096> 가로 세로 비율을 유지하며 출력 너비 제한\n --region 창의 일부만 녹화, 창 포인트 단위\n --out 임시 디렉터리 대신 이 경로에 기록\n --label 파일 이름 지정\n --no-captions `record note` 캡션을 클립에 그리지 않음\n --window 녹화할 창 (기본값: 맨 앞 창)\n\n출력: ` `, 또는 --json으로 전체 응답.\n\n녹화는 --max-seconds에서 스스로 멈추므로 사라진 에이전트가 녹화를 계속\n남겨 두는 일은 없습니다. 한 번에 하나의 녹화만 가능합니다.\n\n예:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "使用方法: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\n将 cmux 窗口录制为 mp4 或 gif,用于 pull request 或错误报告。\n只能录制 cmux 自己的窗口,\n而且不需要任何屏幕录制权限。\n\nstart 的标志:\n --format mp4|gif 输出格式(默认: mp4)\n --gif --format gif 的简写\n --fps <1-30> 每秒帧数(默认: mp4 为 12,gif 为 8)\n --max-seconds n 秒后自行停止,0.5-120(默认: 15)\n --scale <0.1-1> 缩放输出(默认: mp4 为 1,gif 为 0.5)\n --max-width <64-4096> 限制输出宽度并保持宽高比\n --region 只录制窗口的一部分,以窗口点为单位\n --out 写入此处而非临时目录\n --label 为文件命名\n --no-captions 不要把 `record note` 字幕画进视频\n --window 要录制的窗口(默认: 最前面的窗口)\n\n输出: ` `,或用 --json 获取完整响应。\n\n录制会在 --max-seconds 时自行停止,因此离开的代理不会留下仍在录制的\n视频。同一时间只能有一份录制。\n\n示例:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "使用方法: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\n將 cmux 視窗錄製成 mp4 或 gif,用於 pull request 或錯誤報告。\n只能錄製 cmux 自己的視窗,\n而且不需要任何螢幕錄製權限。\n\nstart 的旗標:\n --format mp4|gif 輸出格式(預設: mp4)\n --gif --format gif 的簡寫\n --fps <1-30> 每秒影格數(預設: mp4 為 12,gif 為 8)\n --max-seconds n 秒後自行停止,0.5-120(預設: 15)\n --scale <0.1-1> 縮放輸出(預設: mp4 為 1,gif 為 0.5)\n --max-width <64-4096> 限制輸出寬度並維持長寬比\n --region 只錄製視窗的一部分,以視窗點為單位\n --out 寫入此處而非暫存目錄\n --label 為檔案命名\n --no-captions 不要將 `record note` 字幕畫進影片\n --window 要錄製的視窗(預設: 最前面的視窗)\n\n輸出: ` `,或以 --json 取得完整回應。\n\n錄製會在 --max-seconds 時自行停止,因此離開的代理程式不會留下仍在\n錄製的影片。同一時間只能有一份錄製。\n\n範例:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + } + } + } + }, + "cli.record.error.formatConflict": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "record start: --gif conflicts with --format" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "record start: لا يمكن دمج --gif مع --format" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "record start: --gif kann nicht mit --format kombiniert werden" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "record start: --gif no se puede combinar con --format" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "record start: --gif ne peut pas être combiné avec --format" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "record start: --gif は --format と併用できません" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "record start: --gif은 --format과 함께 사용할 수 없습니다" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "record start: --gif 不能与 --format 同用" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "record start: --gif 無法與 --format 同時使用" + } + } + } + }, + "cli.record.error.noteText": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "record note: text is required" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "record note: النص مطلوب" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "record note: Text ist erforderlich" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "record note: se requiere el texto" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "record note : le texte est requis" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Mostrar comando" + "value": "record note: テキストが必要です" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "顯示指令" + "value": "record note: 텍스트가 필요합니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示命令" + "value": "record note: 必须提供文本" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "명령 보기" + "value": "record note: 必須提供文字" } } } }, - "agentWake.notification.title": { + "cli.record.error.unexpectedArguments": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@ didn't resume" + "value": "record %@: unexpected arguments: %@" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@ が再開しませんでした" + "value": "record %@: وسائط غير متوقعة: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "%@ wurde nicht fortgesetzt" + "value": "record %@: unerwartete Argumente: %@" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "%@ n’a pas repris" + "value": "record %@: argumentos inesperados: %@" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "لم يُستأنف %@" + "value": "record %@ : arguments inattendus : %@" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "%@ no se reanudó" + "value": "record %@: 予期しない引数: %@" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "%@ 未能恢復" + "value": "record %@: 예기치 않은 인수: %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@ 未能恢复" + "value": "record %@: 多余的参数: %@" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@이(가) 다시 시작되지 않았습니다" + "value": "record %@: 未預期的引數: %@" } } } }, - "agentWake.reason.didNotStart": { + "cli.record.error.unknownSubcommand": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "It did not start within 90 seconds." + "value": "record: unknown subcommand '%@' (start, stop, status, note, list)" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "90 秒以内に起動しませんでした。" + "value": "record: أمر فرعي غير معروف '%@' (start، stop، status، note، list)" } }, "de": { "stringUnit": { "state": "translated", - "value": "Es wurde nicht innerhalb von 90 Sekunden gestartet." + "value": "record: unbekannter Unterbefehl „%@“ (start, stop, status, note, list)" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Il n’a pas démarré dans les 90 secondes." + "value": "record: subcomando desconocido '%@' (start, stop, status, note, list)" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "لم يبدأ خلال 90 ثانية." + "value": "record : sous-commande inconnue '%@' (start, stop, status, note, list)" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "No se inició en 90 segundos." + "value": "record: 不明なサブコマンド '%@' です(start、stop、status、note、list)" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "未在 90 秒內啟動。" + "value": "record: 알 수 없는 하위 명령 '%@' (start, stop, status, note, list)" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "未在 90 秒内启动。" + "value": "record: 未知的子命令 '%@'(start、stop、status、note、list)" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "90초 안에 시작되지 않았습니다." + "value": "record: 未知的子命令 '%@'(start、stop、status、note、list)" } } } }, - "agentWake.reason.exitedBeforeStart": { + "cli.usage.record": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Its resume command exited." + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "再開コマンドが終了しました。" + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "de": { + "en": { "stringUnit": { "state": "translated", - "value": "Sein Fortsetzungsbefehl wurde beendet." + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Sa commande de reprise s’est terminée." + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "انتهى أمر الاستئناف الخاص به." + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Su comando de reanudación terminó." + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "其恢復指令已結束。" + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "其恢复命令已退出。" + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "재개 명령이 종료되었습니다." + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } } } }, - "agentWake.status.multiple": { + "cli.help.shot": { "extractionState": "manual", "localizations": { "en": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld agent didn't resume" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld agents didn't resume" - } - } - } + "stringUnit": { + "state": "translated", + "value": "Usage: cmux shot [flags]\n\nScreenshot a cmux window, or a region of one, to a png or a jpeg. Only\ncmux's own windows can be captured, and no Screen Recording permission\nis involved, so this works on a release build and inside CI.\n\nFlags:\n --format png|jpg Output format (default: png)\n --jpg Shorthand for --format jpg\n --scale <0.1-1> Scale the output (default: 1)\n --max-width <64-8192> Cap the output width, keeping the aspect ratio\n --quality <0.1-1> JPEG quality (default: 0.8, ignored for png)\n --region Capture part of the window, in window points\n --out Write here instead of a temporary directory\n --label Name the file\n --caption Draw a caption into the image\n --window Window to capture (default: the frontmost one)\n\nOutput: `x `, or the full response with --json.\n\nA region is the same rectangle `cmux record --region` films, so a\ndetail spotted in a clip can be shot with the same four numbers.\n\nExample:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, - "ja": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld 個のエージェントが再開しませんでした" - } - } - } + "ar": { + "stringUnit": { + "state": "translated", + "value": "الاستخدام: cmux shot [flags]\n\nتصوير نافذة cmux أو جزء منها بصيغة png أو jpeg.\nلا يمكن تصوير سوى نوافذ cmux نفسها، ولا يتطلب ذلك إذن تسجيل الشاشة،\nلذلك يعمل هذا في بناء الإصدار وداخل CI.\n\nالخيارات:\n --format png|jpg صيغة الإخراج (الافتراضي: png)\n --jpg اختصار لـ --format jpg\n --scale <0.1-1> تحجيم الإخراج (الافتراضي: 1)\n --max-width <64-8192> تحديد أقصى عرض للإخراج مع الحفاظ على نسبة الأبعاد\n --quality <0.1-1> جودة JPEG (الافتراضي: 0.8، وتُهمل مع png)\n --region تصوير جزء من النافذة، بوحدات نقاط النافذة\n --out الكتابة هنا بدلاً من دليل مؤقت\n --label تسمية الملف\n --caption رسم تعليق داخل الصورة\n --window النافذة المراد تصويرها (الافتراضي: النافذة الأمامية)\n\nالإخراج: `x `، أو الاستجابة الكاملة مع --json.\n\nالمنطقة هي نفس المستطيل الذي يصوّره `cmux record --region`، لذا يمكن تصوير\nتفصيل لوحظ في مقطع بالأرقام الأربعة نفسها.\n\nمثال:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, "de": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld Agent wurde nicht fortgesetzt" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld Agenten wurden nicht fortgesetzt" - } - } - } + "stringUnit": { + "state": "translated", + "value": "Verwendung: cmux shot [Flags]\n\nEin cmux-Fenster oder einen Teil davon als png oder jpeg aufnehmen. Nur\ncmux-eigene Fenster sind aufnehmbar, und es ist keine Berechtigung für\nBildschirmaufnahmen nötig, das geht also im Release-Build und in der CI.\n\nFlags:\n --format png|jpg Ausgabeformat (Standard: png)\n --jpg Kurzform für --format jpg\n --scale <0.1-1> Ausgabe skalieren (Standard: 1)\n --max-width <64-8192> Ausgabebreite begrenzen, Seitenverhältnis bleibt\n --quality <0.1-1> JPEG-Qualität (Standard: 0.8, für png ignoriert)\n --region Teil des Fensters aufnehmen, in Fensterpunkten\n --out Hierhin schreiben statt in ein temporäres Verzeichnis\n --label Datei benennen\n --caption Eine Bildunterschrift ins Bild zeichnen\n --window Fenster zum Aufnehmen (Standard: das vorderste)\n\nAusgabe: `x `, oder mit --json die vollständige Antwort.\n\nEine Region ist dasselbe Rechteck, das `cmux record --region` filmt: ein im\nClip entdecktes Detail lässt sich mit denselben vier Zahlen aufnehmen.\n\nBeispiel:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, - "fr": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld agent n’a pas repris" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%ld agents n’ont pas repris" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld agents n’ont pas repris" - } - } - } + "es": { + "stringUnit": { + "state": "translated", + "value": "Uso: cmux shot [flags]\n\nCaptura una ventana de cmux, o una región de ella, en png o jpeg. Solo se\npueden capturar las ventanas propias de cmux, y no interviene ningún permiso\nde grabación de pantalla, así que funciona en una release y dentro de CI.\n\nFlags:\n --format png|jpg Formato de salida (predeterminado: png)\n --jpg Atajo para --format jpg\n --scale <0.1-1> Escala la salida (predeterminado: 1)\n --max-width <64-8192> Limita el ancho de salida manteniendo la proporción\n --quality <0.1-1> Calidad JPEG (predeterminado: 0.8, se ignora en png)\n --region Captura parte de la ventana, en puntos de ventana\n --out Escribe aquí en lugar de en un directorio temporal\n --label Da nombre al archivo\n --caption Dibuja un rótulo dentro de la imagen\n --window Ventana que se captura (predeterminado: la del frente)\n\nSalida: `x `, o la respuesta completa con --json.\n\nUna región es el mismo rectángulo que filma `cmux record --region`, así que un\ndetalle visto en un clip se captura con los mismos cuatro números.\n\nEjemplo:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, - "ar": { - "variations": { - "plural": { - "zero": { - "stringUnit": { - "state": "translated", - "value": "لم يُستأنف أي وكيل (%ld)" - } - }, - "one": { - "stringUnit": { - "state": "translated", - "value": "لم يُستأنف وكيل واحد (%ld)" - } - }, - "two": { - "stringUnit": { - "state": "translated", - "value": "لم يُستأنف وكيلان (%ld)" - } - }, - "few": { - "stringUnit": { - "state": "translated", - "value": "لم يُستأنف %ld وكلاء" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "لم يُستأنف %ld وكيلًا" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "لم يُستأنف %ld وكيل" - } - } - } + "fr": { + "stringUnit": { + "state": "translated", + "value": "Utilisation : cmux shot [flags]\n\nCapture une fenêtre cmux, ou une partie de celle-ci, en png ou en jpeg.\nSeules les fenêtres de cmux peuvent être capturées, et aucune autorisation\nd'enregistrement d'écran n'intervient : cela marche en release et dans la CI.\n\nFlags :\n --format png|jpg Format de sortie (par défaut : png)\n --jpg Raccourci pour --format jpg\n --scale <0.1-1> Met la sortie à l'échelle (par défaut : 1)\n --max-width <64-8192> Limite la largeur de sortie en gardant les proportions\n --quality <0.1-1> Qualité JPEG (par défaut : 0.8, ignorée pour png)\n --region Capture une partie de la fenêtre, en points de fenêtre\n --out Écrit ici au lieu d'un répertoire temporaire\n --label Nomme le fichier\n --caption Dessine une légende dans l'image\n --window Fenêtre à capturer (par défaut : celle au premier plan)\n\nSortie : `x `, ou la réponse complète avec --json.\n\nUne région est le même rectangle que filme `cmux record --region` : un détail\nrepéré dans un clip se capture avec les mêmes quatre nombres.\n\nExemple :\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, - "es": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld agente no se reanudó" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%ld agentes no se reanudaron" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld agentes no se reanudaron" - } - } - } + "ja": { + "stringUnit": { + "state": "translated", + "value": "使用方法: cmux shot [flags]\n\ncmux のウィンドウ、またはその一部の領域を png または jpeg で撮ります。\n撮れるのは cmux 自身のウィンドウだけで、画面収録の権限は必要ないので、\nリリースビルドでも CI の中でも動きます。\n\nフラグ:\n --format png|jpg 出力形式(既定: png)\n --jpg --format jpg の短縮形\n --scale <0.1-1> 出力を拡大縮小(既定: 1)\n --max-width <64-8192> 縦横比を保ったまま出力の幅を制限\n --quality <0.1-1> JPEG の品質(既定: 0.8、png では無視)\n --region ウィンドウの一部だけを撮る(ウィンドウポイント単位)\n --out 一時ディレクトリではなくこのパスに書き出す\n --label ファイルに名前を付ける\n --caption 画像にキャプションを描画する\n --window 撮るウィンドウ(既定: 最前面のウィンドウ)\n\n出力: `x `、または --json で完全なレスポンス。\n\n領域は `cmux record --region` が撮るのと同じ矩形なので、クリップで見つけた\n細部を同じ 4 つの数字で撮れます。\n\n例:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, - "zh-Hant": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld 個代理程式未能恢復" - } - } - } + "ko": { + "stringUnit": { + "state": "translated", + "value": "사용법: cmux shot [flags]\n\ncmux 창이나 창의 일부 영역을 png 또는 jpeg로 캡처합니다. cmux 자신의\n창만 캡처할 수 있고, 화면 기록 권한이 필요하지 않으므로 릴리스 빌드와\nCI 안에서도 동작합니다.\n\n플래그:\n --format png|jpg 출력 형식 (기본값: png)\n --jpg --format jpg의 단축형\n --scale <0.1-1> 출력 크기 조정 (기본값: 1)\n --max-width <64-8192> 가로 세로 비율을 유지하며 출력 너비 제한\n --quality <0.1-1> JPEG 품질 (기본값: 0.8, png에서는 무시)\n --region 창의 일부만 캡처, 창 포인트 단위\n --out 임시 디렉터리 대신 이 경로에 기록\n --label 파일 이름 지정\n --caption 이미지에 캡션 그리기\n --window 캡처할 창 (기본값: 맨 앞 창)\n\n출력: `x `, 또는 --json으로 전체 응답.\n\n영역은 `cmux record --region`이 촬영하는 사각형과 같으므로, 클립에서 본\n세부를 같은 네 숫자로 캡처할 수 있습니다.\n\n예:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, "zh-Hans": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld 个代理未能恢复" - } - } - } + "stringUnit": { + "state": "translated", + "value": "使用方法: cmux shot [flags]\n\n将 cmux 窗口或其中一块区域截取为 png 或 jpeg。\n只能截取 cmux 自己的窗口,而且不需要任何屏幕录制权限,\n因此在 release 构建和 CI 中都能用。\n\n标志:\n --format png|jpg 输出格式(默认: png)\n --jpg --format jpg 的简写\n --scale <0.1-1> 缩放输出(默认: 1)\n --max-width <64-8192> 限制输出宽度并保持宽高比\n --quality <0.1-1> JPEG 质量(默认: 0.8,png 会忽略)\n --region 只截取窗口的一部分,以窗口点为单位\n --out 写入此处而非临时目录\n --label 为文件命名\n --caption 在图片上绘制字幕\n --window 要截取的窗口(默认: 最前面的窗口)\n\n输出: `x `,或用 --json 获取完整响应。\n\n区域和 `cmux record --region` 拍摄的矩形相同,因此在视频里看到的细节\n可以用同样的四个数字截取。\n\n示例:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, - "ko": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "에이전트 %ld개가 다시 시작되지 않았습니다" - } - } - } + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "使用方法: cmux shot [flags]\n\n將 cmux 視窗或其中一塊區域擷取成 png 或 jpeg。\n只能擷取 cmux 自己的視窗,而且不需要任何螢幕錄製權限,\n因此在 release 版本與 CI 內都能用。\n\n旗標:\n --format png|jpg 輸出格式(預設: png)\n --jpg --format jpg 的簡寫\n --scale <0.1-1> 縮放輸出(預設: 1)\n --max-width <64-8192> 限制輸出寬度並保持長寬比\n --quality <0.1-1> JPEG 品質(預設: 0.8,png 會忽略)\n --region 只擷取視窗的一部分,以視窗點為單位\n --out 寫入此處而非暫存目錄\n --label 為檔案命名\n --caption 在圖片上畫出字幕\n --window 要擷取的視窗(預設: 最前面的視窗)\n\n輸出: `x `,或用 --json 取得完整回應。\n\n區域和 `cmux record --region` 拍攝的矩形相同,所以在影片裡看到的細節\n可以用同樣的四個數字擷取。\n\n範例:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } } } }, - "agentWake.status.single": { + "cli.shot.error.formatConflict": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Agent didn't resume" + "value": "shot: --jpg conflicts with --format" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "エージェントが再開しませんでした" + "value": "shot: لا يمكن دمج --jpg مع --format" } }, "de": { "stringUnit": { "state": "translated", - "value": "Agent wurde nicht fortgesetzt" + "value": "shot: --jpg kann nicht mit --format kombiniert werden" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "L’agent n’a pas repris" + "value": "shot: --jpg no se puede combinar con --format" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "لم يُستأنف الوكيل" + "value": "shot : --jpg ne peut pas être combiné avec --format" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "El agente no se reanudó" + "value": "shot: --jpg は --format と併用できません" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "代理程式未能恢復" + "value": "shot: --jpg은 --format과 함께 사용할 수 없습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "代理未能恢复" + "value": "shot: --jpg 不能与 --format 同用" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "에이전트가 다시 시작되지 않았습니다" + "value": "shot: --jpg 無法與 --format 同時使用" } } } }, - "cloud.operation.failure.machineAsleep": { + "cli.shot.error.unexpectedArguments": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This machine is asleep. Wake it to connect." + "value": "shot: unexpected arguments: %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هذا الجهاز في وضع السكون. أوقظه للاتصال." + "value": "shot: وسائط غير متوقعة: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Diese Maschine ist im Ruhezustand. Wecken Sie sie auf, um eine Verbindung herzustellen." + "value": "shot: unerwartete Argumente: %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esta máquina está en reposo. Actívala para conectarte." + "value": "shot: argumentos inesperados: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cette machine est en veille. Réveillez-la pour vous connecter." + "value": "shot : arguments inattendus : %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このマシンはスリープ中です。接続するには起動してください。" + "value": "shot: 予期しない引数: %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 머신은 잠자기 상태입니다. 연결하려면 깨우세요." + "value": "shot: 예기치 않은 인수: %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此机器处于睡眠状态。唤醒它以连接。" + "value": "shot: 多余的参数: %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "這部機器目前處於睡眠狀態。喚醒它以連線。" + "value": "shot: 未預期的引數: %@" } } } }, - "cloud.operation.failure.machineUnavailable": { + "cli.usage.shot": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux cannot reach the Cloud service for this machine right now." + "value": "shot [--format png|jpg] [--jpg] [--scale ] [--max-width ] [--quality ] [--region ] [--out ] [--label ] [--caption ] [--window ]" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "يتعذر على cmux الوصول إلى خدمة Cloud لهذه الآلة في الوقت الحالي." + "value": "shot [--format png|jpg] [--jpg] [--scale ] [--max-width ] [--quality ] [--region ] [--out ] [--label ] [--caption ] [--window ]" + } + } + } + }, + "agent.autoResume.status": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Auto-resumed ×%lld" } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux kann den Cloud-Dienst für diese Maschine derzeit nicht erreichen." + "value": "Automatisch fortgesetzt ×%lld" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux no puede acceder al servicio Cloud para esta máquina en este momento." + "value": "Reprise automatique ×%lld" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux ne peut pas joindre le service Cloud pour cette machine pour le moment." + "value": "استئناف تلقائي ×%lld" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux は現在、このマシンの Cloud サービスに接続できません。" + "value": "Reanudado automáticamente ×%lld" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux가 현재 이 머신의 Cloud 서비스에 연결할 수 없습니다." + "value": "已自動繼續 ×%lld" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 目前无法连接到此机器的 Cloud 服务。" + "value": "已自动继续 ×%lld" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux 目前無法連線到這部機器的 Cloud 服務。" + "value": "자동 재개 ×%lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "自動再開 ×%lld" } } } }, - "cloudTree.menu.rename": { + "settings.automation.agentAutoResume": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Rename…" + "value": "Auto-Resume Agents After Errors" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "名称変更…" + "value": "Agenten nach Fehlern automatisch fortsetzen" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "重命名…" + "value": "Relancer automatiquement les agents après une erreur" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Umbenennen…" + "value": "استئناف الوكلاء تلقائيًا بعد الأخطاء" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Renommer…" + "value": "Reanudar agentes automáticamente tras errores" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "إعادة التسمية…" + "value": "錯誤後自動恢復代理" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Renombrar…" + "value": "出错后自动恢复代理" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "重新命名…" + "value": "오류 후 에이전트 자동 재개" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "이름 바꾸기…" + "value": "エラー後にエージェントを自動再開" } } } }, - "cloudTree.operation.rename": { + "settings.automation.agentAutoResume.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Renaming %@…" + "value": "Send “continue” when an agent's turn ends on a retryable error such as model capacity or a dropped connection." } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "%@ の名称を変更しています…" + "value": "Sendet „continue“, wenn der Zug eines Agenten mit einem wiederholbaren Fehler endet, etwa ausgelasteter Modellkapazität oder einer getrennten Verbindung." } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "正在重命名 %@…" + "value": "Envoie « continue » quand le tour d’un agent se termine sur une erreur réessayable, comme un modèle saturé ou une connexion interrompue." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@ wird umbenannt…" + "value": "يرسل \"continue\" عندما ينتهي دور الوكيل بخطأ يمكن إعادة المحاولة بعده، مثل امتلاء سعة النموذج أو انقطاع الاتصال." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Renommage de %@…" + "value": "Envía «continue» cuando el turno de un agente termina con un error reintentable, como falta de capacidad del modelo o una conexión perdida." } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "جاري إعادة تسمية %@…" + "value": "當代理的回合因可重試的錯誤(例如模型容量不足或連線中斷)而結束時,傳送「continue」。" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Renombrando %@…" + "value": "当代理的回合因可重试的错误(例如模型容量不足或连接中断)而结束时,发送“continue”。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "正在重新命名 %@…" + "value": "모델 용량 초과나 연결 끊김처럼 재시도 가능한 오류로 에이전트의 턴이 끝나면 “continue”를 보냅니다." } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "%@ 이름 바꾸는 중…" + "value": "モデルの容量不足や接続切断など、再試行可能なエラーでエージェントのターンが終了したときに「continue」を送信します。" } } } }, - "cloudTree.operation.clearName": { + "settings.search.alias.setting.automation.agent-error-auto-resume": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Clearing %@…" + "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "%@ のカスタム名をクリアしています…" + "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error automatisch fortsetzen fortfahren wiederholen kapazität überlastet agent fehler" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "正在清空 %@…" + "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error reprise automatique continuer réessayer capacité surchargé agent erreur" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@ wird geleert…" + "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error استئناف تلقائي متابعة إعادة المحاولة سعة حمل زائد وكيل خطأ" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Effacement de %@…" + "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error reanudar automáticamente continuar reintentar capacidad sobrecargado agente error" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "جاري مسح %@…" + "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error 自動恢復 繼續 重試 容量 過載 代理 錯誤" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Limpiando %@…" + "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error 自动恢复 继续 重试 容量 过载 代理 错误" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "正在清除 %@…" + "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error 자동 재개 계속 재시도 용량 과부하 에이전트 오류" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "%@ 비우는 중…" + "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error 自動再開 続行 再試行 容量 過負荷 エージェント エラー" } } } }, - "cloudTree.rename.title": { + "settings.betaFeatures.conversationSidebar": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Rename “%@”" + "value": "Conversation Sidebar" } }, "ja": { "stringUnit": { "state": "translated", - "value": "「%@」の名称変更" + "value": "会話サイドバー" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重命名“%@”" + "value": "对话侧边栏" } }, "de": { "stringUnit": { "state": "translated", - "value": "„%@“ umbenennen" + "value": "Konversations-Seitenleiste" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Renommer « %@ »" + "value": "Barre latérale des conversations" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إعادة تسمية “%@”" + "value": "الشريط الجانبي للمحادثات" } }, "es": { "stringUnit": { "state": "translated", - "value": "Renombrar “%@”" + "value": "Barra lateral de conversaciones" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新命名「%@」" + "value": "對話側邊欄" } }, "ko": { "stringUnit": { "state": "translated", - "value": "“%@” 이름 바꾸기" + "value": "대화 사이드바" } } } }, - "cloudTree.error.renameNoRemoteTab": { + "settings.betaFeatures.conversationSidebar.subtitleOff": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This tab is not open in a remote workspace." + "value": "Hides Conversations while preserving existing agent sessions." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "علامة التبويب هذه ليست مفتوحة في مساحة عمل بعيدة." + "value": "既存のエージェントセッションを保持したまま、「会話」を非表示にします。" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Dieser Tab ist in keinem Remote-Arbeitsbereich geöffnet." + "value": "隐藏“对话”,同时保留现有智能体会话。" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Esta pestaña no está abierta en un espacio de trabajo remoto." + "value": "Blendet „Konversationen“ aus und behält vorhandene Agent-Sitzungen bei." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cet onglet n’est pas ouvert dans un espace de travail distant." + "value": "Masque les conversations tout en conservant les sessions d’agent existantes." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このタブはリモートワークスペースで開かれていません。" + "value": "يخفي «المحادثات» مع الاحتفاظ بجلسات الوكيل الحالية." } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "이 탭은 원격 작업 공간에 열려 있지 않습니다." + "value": "Oculta Conversaciones y conserva las sesiones de agente existentes." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此标签页未在任何远程工作区中打开。" + "value": "隱藏「對話」,同時保留現有代理程式工作階段。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "此標籤頁未在遠端工作區中開啟。" + "value": "기존 에이전트 세션은 유지하면서 대화를 숨깁니다." } } } }, - "cloudTree.error.renameTabUnavailable": { + "settings.betaFeatures.conversationSidebar.subtitleOn": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The current state for tab %@ is unavailable. Refresh and retry before renaming." + "value": "Shows Conversations in the left sidebar picker." } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Der aktuelle Zustand von Tab %@ ist nicht verfügbar. Aktualisieren Sie die Ansicht und versuchen Sie die Umbenennung erneut." + "value": "左側サイドバーの選択メニューに「会話」を表示します。" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "L’état actuel de l’onglet %@ n’est pas disponible. Actualisez la page et réessayez de le renommer." + "value": "在左侧边栏选择器中显示“对话”。" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "الحالة الحالية لعلامة التبويب %@ غير متاحة. حدّث الصفحة وحاول إعادة التسمية مرة أخرى." + "value": "Zeigt „Konversationen“ im Auswahlmenü der linken Seitenleiste an." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "El estado actual de la pestaña %@ no está disponible. Actualiza la página y vuelve a intentar cambiarle el nombre." + "value": "Affiche les conversations dans le sélecteur de la barre latérale gauche." } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "標籤頁 %@ 的目前狀態無法使用。請重新整理後再試一次重新命名。" + "value": "يعرض «المحادثات» في منتقي الشريط الجانبي الأيسر." } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "标签页 %@ 的当前状态不可用。请刷新后重试重命名。" + "value": "Muestra Conversaciones en el selector de la barra lateral izquierda." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "탭 %@의 현재 상태를 사용할 수 없습니다. 새로 고친 후 이름을 다시 바꾸십시오." + "value": "在左側側邊欄選取器中顯示「對話」。" } }, - "ja": { + "ko": { "stringUnit": { "state": "translated", - "value": "タブ %@ の現在の状態を取得できません。更新してから名前の変更をもう一度お試しください。" + "value": "왼쪽 사이드바 선택기에 대화를 표시합니다." } } } }, - "cli.send.error.dialogOpen": { + "sidebar.provider.conversations.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ is waiting on a question or dialog, so nothing was sent. Retry once it is answered, or pass --force to send anyway." + "value": "Coding-agent sessions" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$@: ينتظر %2$@ إجابة على سؤال أو مربع حوار، لذا لم يُرسل شيء. أعد المحاولة بعد الإجابة، أو مرّر --force للإرسال على أي حال." + "value": "コーディングエージェントのセッション" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ wartet auf eine Frage oder einen Dialog, daher wurde nichts gesendet. Versuche es erneut, sobald sie beantwortet ist, oder übergib --force, um trotzdem zu senden." + "value": "编码智能体会话" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ está esperando una pregunta o un diálogo, así que no se envió nada. Vuelve a intentarlo cuando se responda, o pasa --force para enviarlo de todos modos." + "value": "Sitzungen von Coding-Agenten" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ : %2$@ attend la réponse à une question ou à une boîte de dialogue, rien n'a donc été envoyé. Réessayez une fois la réponse donnée, ou passez --force pour envoyer quand même." + "value": "Sessions d’agents de programmation" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ は質問またはダイアログへの応答を待っているため、何も送信しませんでした。応答後に再試行するか、--force を指定して送信してください。" + "value": "جلسات وكلاء البرمجة" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@에서 질문 또는 대화상자가 응답을 기다리고 있어 아무것도 보내지 않았습니다. 응답한 후 다시 시도하거나 --force를 지정해 그래도 보내세요." + "value": "Sesiones de agentes de programación" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@:%2$@ 正在等待问题或对话框的回应,因此未发送任何内容。请在回应后重试,或传入 --force 强制发送。" + "value": "程式設計代理程式工作階段" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$@:%2$@ 正在等待問題或對話框的回應,因此未傳送任何內容。請在回應後重試,或傳入 --force 強制傳送。" + "value": "코딩 에이전트 세션" } } } }, - "cli.send.error.draftPresent": { + "sidebar.provider.conversations.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: the agent prompt in %2$@ holds text someone is typing, so nothing was sent. Retry when the prompt is clear, or pass --force to send anyway." + "value": "Conversations" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$@: تحتوي مطالبة الوكيل في %2$@ على نص يكتبه شخص ما، لذا لم يُرسل شيء. أعد المحاولة عندما تصبح المطالبة فارغة، أو مرّر --force للإرسال على أي حال." + "value": "会話" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@: Die Agent-Eingabe in %2$@ enthält Text, den jemand gerade tippt, daher wurde nichts gesendet. Versuche es erneut, wenn die Eingabe leer ist, oder übergib --force, um trotzdem zu senden." + "value": "对话" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$@: el prompt del agente en %2$@ contiene texto que alguien está escribiendo, así que no se envió nada. Vuelve a intentarlo cuando el prompt esté vacío, o pasa --force para enviarlo de todos modos." + "value": "Konversationen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ : l'invite de l'agent dans %2$@ contient du texte en cours de saisie, rien n'a donc été envoyé. Réessayez quand l'invite est vide, ou passez --force pour envoyer quand même." + "value": "Discussions" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ のエージェントのプロンプトに誰かが入力中のテキストがあるため、何も送信しませんでした。プロンプトが空になってから再試行するか、--force を指定して送信してください。" + "value": "المحادثات" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@의 에이전트 프롬프트에 누군가 입력 중인 텍스트가 있어 아무것도 보내지 않았습니다. 프롬프트가 비면 다시 시도하거나 --force를 지정해 그래도 보내세요." + "value": "Conversaciones" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@:%2$@ 中的代理提示里有人正在输入文本,因此未发送任何内容。请在提示清空后重试,或传入 --force 强制发送。" + "value": "對話" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$@:%2$@ 中的代理程式提示裡有人正在輸入文字,因此未傳送任何內容。請在提示清空後重試,或傳入 --force 強制傳送。" + "value": "대화" } } } }, - "settings.textBox.betaWarning": { + "featureFlags.conversationSidebar.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "مربع النص ميزة تجريبية. قد تتغير إعداداته الافتراضية وسلوكه أثناء اختباره." - } - }, - "bs": { - "stringUnit": { - "state": "needs_review", - "value": "TextBox je beta funkcija. Zadane vrijednosti i ponašanje mogu se promijeniti tokom testiranja." - } - }, - "da": { - "stringUnit": { - "state": "needs_review", - "value": "TextBox er en beta-funktion. Standarder og adfærd kan ændre sig under test." + "value": "Multi-provider conversation sidebar" } }, "de": { "stringUnit": { "state": "translated", - "value": "TextBox ist eine Beta-Funktion. Standardwerte und Verhalten können sich während der Testphase ändern." + "value": "Multi-Provider-Konversationsseitenleiste" } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "TextBox is a beta feature. Its defaults and behavior may change while it is being tested." + "value": "Barre latérale de conversations multi-fournisseurs" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "TextBox es una característica beta. Sus valores predeterminados y comportamiento pueden cambiar mientras se prueba." + "value": "الشريط الجانبي للمحادثات متعددة المزوّدين" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "La TextBox est une fonctionnalité bêta. Ses valeurs par défaut et son comportement peuvent changer pendant sa phase de test." + "value": "Barra lateral de conversaciones de varios proveedores" } }, - "it": { + "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "TextBox è una funzionalità beta. Valori predefiniti e comportamento possono cambiare durante i test." + "state": "translated", + "value": "多提供者對話側邊欄" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "TextBox はベータ機能です。テスト中のため、既定値や動作が変わる場合があります。" + "value": "多提供商对话侧边栏" } }, - "km": { + "ko": { "stringUnit": { - "state": "needs_review", - "value": "TextBox គឺជាមុខងារបេតា។ តម្លៃលំនាំដើម និងឥរិយាបថអាចផ្លាស់ប្តូរនៅពេលកំពុងសាកល្បង។" + "state": "translated", + "value": "다중 제공자 대화 사이드바" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "TextBox는 베타 기능입니다. 테스트되는 동안 기본값 및 동작이 변경될 수 있습니다." + "value": "複数プロバイダーの会話サイドバー" } - }, - "nb": { + } + } + }, + "featureFlags.conversationSidebar.description": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { - "state": "needs_review", - "value": "TextBox er en betafunksjon. Standardverdier og oppførsel kan endres mens den testes." + "state": "translated", + "value": "Enables the opt-in sidebar for conversations from multiple coding-agent providers." } }, - "pl": { + "de": { "stringUnit": { - "state": "needs_review", - "value": "TextBox jest funkcją beta. Domyślne ustawienia i zachowanie mogą się zmienić podczas testów." + "state": "translated", + "value": "Aktiviert die optionale Seitenleiste für Unterhaltungen von mehreren Coding-Agent-Anbietern." } }, - "pt-BR": { + "fr": { "stringUnit": { - "state": "needs_review", - "value": "TextBox é um recurso beta. Seus padrões e comportamento podem mudar durante os testes." + "state": "translated", + "value": "Active la barre latérale facultative pour les conversations provenant de plusieurs fournisseurs d’agents de codage." } }, - "ru": { + "ar": { "stringUnit": { - "state": "needs_review", - "value": "TextBox — бета-функция. Во время тестирования значения по умолчанию и поведение могут измениться." + "state": "translated", + "value": "يمكّن الشريط الجانبي الاختياري للمحادثات من مزوّدي وكلاء برمجة متعدّدين." } }, - "th": { + "es": { "stringUnit": { - "state": "needs_review", - "value": "TextBox เป็นฟีเจอร์เบต้า ค่าเริ่มต้นและพฤติกรรมอาจเปลี่ยนแปลงระหว่างการทดสอบ" + "state": "translated", + "value": "Activa la barra lateral opcional para conversaciones de varios proveedores de agentes de programación." } }, - "tr": { + "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "TextBox bir beta özelliğidir. Varsayılanlar ve davranış test süresince değişebilir." + "state": "translated", + "value": "啟用可選的側邊欄,顯示來自多個程式設計代理程式提供者的對話。" } }, - "uk": { + "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "TextBox — бета-функція. Під час тестування типові значення й поведінка можуть змінюватися." + "state": "translated", + "value": "启用可选的侧边栏,显示来自多个编程代理提供商的对话。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "TextBox 是测试版功能。在测试期间,默认值和行为可能会变化。" + "value": "여러 코딩 에이전트 제공자의 대화를 위한 선택적 사이드바를 활성화합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "文字框是一項 Beta 功能。在測試期間,其預設值與行為可能會發生變更。" + "value": "複数のコーディングエージェントプロバイダーの会話を表示するオプトインのサイドバーを有効にします。" } } } }, - "cli.auth.team.inviteFailed": { + "cloud.operation.failure.machineAsleep": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Could not invite %1$@: %2$@" + "value": "This machine is asleep. Wake it to connect." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذّرت دعوة %1$@: %2$@" + "value": "هذا الجهاز في وضع السكون. أوقظه للاتصال." } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@ konnte nicht eingeladen werden: %2$@" + "value": "Diese Maschine ist im Ruhezustand. Wecken Sie sie auf, um eine Verbindung herzustellen." } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudo invitar a %1$@: %2$@" + "value": "Esta máquina está en reposo. Actívala para conectarte." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Impossible d’inviter %1$@ : %2$@" + "value": "Cette machine est en veille. Réveillez-la pour vous connecter." } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@ を招待できませんでした: %2$@" + "value": "このマシンはスリープ中です。接続するには起動してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@을(를) 초대할 수 없습니다: %2$@" + "value": "이 머신은 잠자기 상태입니다. 연결하려면 깨우세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法邀请 %1$@:%2$@" + "value": "此机器处于睡眠状态。唤醒它以连接。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法邀請 %1$@:%2$@" + "value": "這部機器目前處於睡眠狀態。喚醒它以連線。" } } } }, - "cli.auth.team.inviteUsage": { + "cloud.operation.failure.machineUnavailable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux auth team invite ... [--role admin|member] [--team ]" + "value": "cmux cannot reach the Cloud service for this machine right now." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux auth team invite ... [--role admin|member] [--team ]" + "value": "يتعذر على cmux الوصول إلى خدمة Cloud لهذه الآلة في الوقت الحالي." } }, "de": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux auth team invite ... [--role admin|member] [--team ]" + "value": "cmux kann den Cloud-Dienst für diese Maschine derzeit nicht erreichen." } }, "es": { "stringUnit": { "state": "translated", - "value": "Uso: cmux auth team invite ... [--role admin|member] [--team ]" + "value": "cmux no puede acceder al servicio Cloud para esta máquina en este momento." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux auth team invite ... [--role admin|member] [--team ]" + "value": "cmux ne peut pas joindre le service Cloud pour cette machine pour le moment." } }, "ja": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux auth team invite ... [--role admin|member] [--team ]" + "value": "cmux は現在、このマシンの Cloud サービスに接続できません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용법: cmux auth team invite ... [--role admin|member] [--team ]" + "value": "cmux가 현재 이 머신의 Cloud 서비스에 연결할 수 없습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用法:cmux auth team invite ... [--role admin|member] [--team ]" + "value": "cmux 目前无法连接到此机器的 Cloud 服务。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "用法:cmux auth team invite ... [--role admin|member] [--team ]" + "value": "cmux 目前無法連線到這部機器的 Cloud 服務。" } } } }, - "cli.auth.team.invited": { + "cloudTree.menu.rename": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Invited %@" + "value": "Rename…" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تمت دعوة %@" + "value": "名称変更…" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@ eingeladen" + "value": "重命名…" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Se invitó a %@" + "value": "Umbenennen…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%@ invité" + "value": "Renommer…" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@ を招待しました" + "value": "إعادة التسمية…" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "%@을(를) 초대했습니다" + "value": "Renombrar…" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已邀请 %@" + "value": "重新命名…" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "已邀請 %@" + "value": "이름 바꾸기…" } } } }, - "cli.auth.team.pendingInvitation": { + "cloudTree.operation.rename": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": " pending %1$@ %2$@ %3$@" + "value": "Renaming %@…" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": " معلّقة %1$@ %2$@ %3$@" + "value": "%@ の名称を変更しています…" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": " ausstehend %1$@ %2$@ %3$@" + "value": "正在重命名 %@…" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": " pendiente %1$@ %2$@ %3$@" + "value": "%@ wird umbenannt…" } }, "fr": { "stringUnit": { "state": "translated", - "value": " en attente %1$@ %2$@ %3$@" + "value": "Renommage de %@…" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": " 保留中 %1$@ %2$@ %3$@" + "value": "جاري إعادة تسمية %@…" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": " 대기 중 %1$@ %2$@ %3$@" + "value": "Renombrando %@…" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": " 待处理 %1$@ %2$@ %3$@" + "value": "正在重新命名 %@…" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": " 待處理 %1$@ %2$@ %3$@" + "value": "%@ 이름 바꾸는 중…" } } } }, - "cli.auth.team.removeUsage": { + "cloudTree.operation.clearName": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux auth team remove [--team ]" + "value": "Clearing %@…" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux auth team remove [--team ]" + "value": "%@ のカスタム名をクリアしています…" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux auth team remove [--team ]" + "value": "正在清空 %@…" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Uso: cmux auth team remove [--team ]" + "value": "%@ wird geleert…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux auth team remove [--team ]" + "value": "Effacement de %@…" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux auth team remove [--team ]" + "value": "جاري مسح %@…" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "사용법: cmux auth team remove [--team ]" + "value": "Limpiando %@…" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "用法:cmux auth team remove [--team ]" + "value": "正在清除 %@…" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "用法:cmux auth team remove [--team ]" + "value": "%@ 비우는 중…" } } } }, - "cli.auth.team.removed": { + "cloudTree.rename.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Removed." + "value": "Rename “%@”" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تمت الإزالة." + "value": "「%@」の名称変更" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Entfernt." + "value": "重命名“%@”" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Eliminado." + "value": "„%@“ umbenennen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Supprimé." + "value": "Renommer « %@ »" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "削除しました。" + "value": "إعادة تسمية “%@”" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "제거했습니다." + "value": "Renombrar “%@”" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已移除。" + "value": "重新命名「%@」" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "已移除。" + "value": "“%@” 이름 바꾸기" } } } }, - "cli.auth.team.revokeUsage": { + "cloudTree.error.renameNoRemoteTab": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux auth team revoke-invite [--team ]" + "value": "This tab is not open in a remote workspace." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux auth team revoke-invite [--team ]" + "value": "علامة التبويب هذه ليست مفتوحة في مساحة عمل بعيدة." } }, "de": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux auth team revoke-invite [--team ]" + "value": "Dieser Tab ist in keinem Remote-Arbeitsbereich geöffnet." } }, "es": { "stringUnit": { "state": "translated", - "value": "Uso: cmux auth team revoke-invite [--team ]" + "value": "Esta pestaña no está abierta en un espacio de trabajo remoto." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux auth team revoke-invite [--team ]" + "value": "Cet onglet n’est pas ouvert dans un espace de travail distant." } }, "ja": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux auth team revoke-invite [--team ]" + "value": "このタブはリモートワークスペースで開かれていません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용법: cmux auth team revoke-invite [--team ]" + "value": "이 탭은 원격 작업 공간에 열려 있지 않습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用法:cmux auth team revoke-invite [--team ]" + "value": "此标签页未在任何远程工作区中打开。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "用法:cmux auth team revoke-invite [--team ]" + "value": "此標籤頁未在遠端工作區中開啟。" } } } }, - "cli.auth.team.revoked": { + "cloudTree.error.renameTabUnavailable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Revoked." + "value": "The current state for tab %@ is unavailable. Refresh and retry before renaming." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تم الإلغاء." + "value": "Der aktuelle Zustand von Tab %@ ist nicht verfügbar. Aktualisieren Sie die Ansicht und versuchen Sie die Umbenennung erneut." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Widerrufen." + "value": "L’état actuel de l’onglet %@ n’est pas disponible. Actualisez la page et réessayez de le renommer." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Revocado." + "value": "الحالة الحالية لعلامة التبويب %@ غير متاحة. حدّث الصفحة وحاول إعادة التسمية مرة أخرى." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Révoqué." + "value": "El estado actual de la pestaña %@ no está disponible. Actualiza la página y vuelve a intentar cambiarle el nombre." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "取り消しました。" + "value": "標籤頁 %@ 的目前狀態無法使用。請重新整理後再試一次重新命名。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "취소했습니다." + "value": "标签页 %@ 的当前状态不可用。请刷新后重试重命名。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "已撤销。" + "value": "탭 %@의 현재 상태를 사용할 수 없습니다. 새로 고친 후 이름을 다시 바꾸십시오." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "已撤銷。" + "value": "タブ %@ の現在の状態を取得できません。更新してから名前の変更をもう一度お試しください。" } } } }, - "teamMembers.error.forbidden": { + "cli.send.error.dialogOpen": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Only team admins can do that." + "value": "%1$@: %2$@ is waiting on a question or dialog, so nothing was sent. Retry once it is answered, or pass --force to send anyway." } }, "ar": { "stringUnit": { "state": "translated", - "value": "يمكن لمسؤولي الفريق فقط القيام بذلك." + "value": "%1$@: ينتظر %2$@ إجابة على سؤال أو مربع حوار، لذا لم يُرسل شيء. أعد المحاولة بعد الإجابة، أو مرّر --force للإرسال على أي حال." } }, "de": { "stringUnit": { "state": "translated", - "value": "Das können nur Team-Admins." + "value": "%1$@: %2$@ wartet auf eine Frage oder einen Dialog, daher wurde nichts gesendet. Versuche es erneut, sobald sie beantwortet ist, oder übergib --force, um trotzdem zu senden." } }, "es": { "stringUnit": { "state": "translated", - "value": "Solo los administradores del equipo pueden hacer eso." + "value": "%1$@: %2$@ está esperando una pregunta o un diálogo, así que no se envió nada. Vuelve a intentarlo cuando se responda, o pasa --force para enviarlo de todos modos." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Seuls les administrateurs de l’équipe peuvent faire cela." + "value": "%1$@ : %2$@ attend la réponse à une question ou à une boîte de dialogue, rien n'a donc été envoyé. Réessayez une fois la réponse donnée, ou passez --force pour envoyer quand même." } }, "ja": { "stringUnit": { "state": "translated", - "value": "この操作はチームの管理者のみ行えます。" + "value": "%1$@: %2$@ は質問またはダイアログへの応答を待っているため、何も送信しませんでした。応答後に再試行するか、--force を指定して送信してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "팀 관리자만 할 수 있습니다." + "value": "%1$@: %2$@에서 질문 또는 대화상자가 응답을 기다리고 있어 아무것도 보내지 않았습니다. 응답한 후 다시 시도하거나 --force를 지정해 그래도 보내세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "只有团队管理员可以执行此操作。" + "value": "%1$@:%2$@ 正在等待问题或对话框的回应,因此未发送任何内容。请在回应后重试,或传入 --force 强制发送。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "只有團隊管理員可以執行此操作。" + "value": "%1$@:%2$@ 正在等待問題或對話框的回應,因此未傳送任何內容。請在回應後重試,或傳入 --force 強制傳送。" } } } }, - "teamMembers.error.invalidEmail": { + "cli.send.error.draftPresent": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Enter at least one email address." + "value": "%1$@: the agent prompt in %2$@ holds text someone is typing, so nothing was sent. Retry when the prompt is clear, or pass --force to send anyway." } }, "ar": { "stringUnit": { "state": "translated", - "value": "أدخل عنوان بريد إلكتروني واحدًا على الأقل." + "value": "%1$@: تحتوي مطالبة الوكيل في %2$@ على نص يكتبه شخص ما، لذا لم يُرسل شيء. أعد المحاولة عندما تصبح المطالبة فارغة، أو مرّر --force للإرسال على أي حال." } }, "de": { "stringUnit": { "state": "translated", - "value": "Gib mindestens eine E-Mail-Adresse ein." + "value": "%1$@: Die Agent-Eingabe in %2$@ enthält Text, den jemand gerade tippt, daher wurde nichts gesendet. Versuche es erneut, wenn die Eingabe leer ist, oder übergib --force, um trotzdem zu senden." } }, "es": { "stringUnit": { "state": "translated", - "value": "Introduce al menos una dirección de correo." + "value": "%1$@: el prompt del agente en %2$@ contiene texto que alguien está escribiendo, así que no se envió nada. Vuelve a intentarlo cuando el prompt esté vacío, o pasa --force para enviarlo de todos modos." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Saisissez au moins une adresse e-mail." + "value": "%1$@ : l'invite de l'agent dans %2$@ contient du texte en cours de saisie, rien n'a donc été envoyé. Réessayez quand l'invite est vide, ou passez --force pour envoyer quand même." } }, "ja": { "stringUnit": { "state": "translated", - "value": "メールアドレスを 1 つ以上入力してください。" + "value": "%1$@: %2$@ のエージェントのプロンプトに誰かが入力中のテキストがあるため、何も送信しませんでした。プロンプトが空になってから再試行するか、--force を指定して送信してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이메일 주소를 하나 이상 입력하세요." + "value": "%1$@: %2$@의 에이전트 프롬프트에 누군가 입력 중인 텍스트가 있어 아무것도 보내지 않았습니다. 프롬프트가 비면 다시 시도하거나 --force를 지정해 그래도 보내세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "请输入至少一个电子邮件地址。" + "value": "%1$@:%2$@ 中的代理提示里有人正在输入文本,因此未发送任何内容。请在提示清空后重试,或传入 --force 强制发送。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "請輸入至少一個電子郵件地址。" + "value": "%1$@:%2$@ 中的代理程式提示裡有人正在輸入文字,因此未傳送任何內容。請在提示清空後重試,或傳入 --force 強制傳送。" } } } }, - "teamMembers.error.invalidLinkOptions": { + "machines.meter.upgrade": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Link expiry must be 1, 7 or 30 days and max uses at least 1." + "value": "Upgrade for more" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "يجب أن تكون صلاحية الرابط 1 أو 7 أو 30 يومًا وعدد الاستخدامات 1 على الأقل." + "value": "アップグレードで追加" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Der Link muss nach 1, 7 oder 30 Tagen ablaufen und mindestens 1 Verwendung erlauben." + "value": "升级以获得更多" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "El enlace debe caducar en 1, 7 o 30 días y permitir al menos 1 uso." + "value": "Upgrade für mehr" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L’expiration du lien doit être de 1, 7 ou 30 jours et le nombre d’utilisations d’au moins 1." + "value": "Passez au forfait supérieur pour en obtenir plus" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "リンクの有効期限は 1、7、30 日のいずれか、最大使用回数は 1 以上にしてください。" + "value": "ترقية للحصول على المزيد" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "링크 만료는 1, 7 또는 30일이어야 하며 최대 사용 횟수는 1 이상이어야 합니다." + "value": "Actualizar para obtener más" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "链接有效期必须为 1、7 或 30 天,最大使用次数至少为 1。" + "value": "升級以取得更多" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "連結有效期必須為 1、7 或 30 天,最大使用次數至少為 1。" + "value": "더 사용하려면 업그레이드" } } } }, - "teamMembers.error.invitationNotFound": { + "settings.betaFeatures.dock.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "That invitation no longer exists." + "value": "Adds Dock to the right sidebar for custom terminal controls." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "لم تعد هذه الدعوة موجودة." + "value": "Fügt der rechten Seitenleiste das Dock für benutzerdefinierte Terminal-Steuerelemente hinzu." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Diese Einladung existiert nicht mehr." + "value": "Ajoute le Dock à la barre latérale droite pour les commandes de terminal personnalisées." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Esa invitación ya no existe." + "value": "يضيف Dock إلى الشريط الجانبي الأيمن لعناصر التحكم المخصصة في الطرفية." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Cette invitation n’existe plus." + "value": "Añade el Dock a la barra lateral derecha para controles de terminal personalizados." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "その招待はもう存在しません。" + "value": "在右側邊欄加入 Dock,用來放置自訂的終端機控制項。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "해당 초대가 더 이상 존재하지 않습니다." + "value": "在右侧边栏添加 Dock,用来放置自定义的终端控件。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "该邀请已不存在。" + "value": "오른쪽 사이드바에 Dock을 추가해 터미널 컨트롤을 직접 구성할 수 있습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "該邀請已不存在。" + "value": "右サイドバーに Dock を追加し、ターミナル用のカスタムコントロールを配置できるようにします。" } } } }, - "teamMembers.error.lastAdmin": { + "cli.agentMessage.noAgent": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "A team must keep at least one admin." + "value": "No agent activity seen on that surface yet. The message waits until an agent there picks it up." } }, "ar": { "stringUnit": { "state": "translated", - "value": "يجب أن يبقى في الفريق مسؤول واحد على الأقل." + "value": "لم يُرصد أي نشاط لوكيل على هذا السطح بعد. تنتظر الرسالة حتى يستلمها وكيل هناك." } }, "de": { "stringUnit": { "state": "translated", - "value": "Ein Team braucht mindestens einen Admin." + "value": "Auf dieser Oberfläche wurde noch keine Agent-Aktivität erkannt. Die Nachricht wartet, bis ein Agent dort sie abholt." } }, "es": { "stringUnit": { "state": "translated", - "value": "Un equipo debe conservar al menos un administrador." + "value": "Todavía no se ha visto actividad de ningún agente en esa superficie. El mensaje espera hasta que un agente allí lo recoja." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Une équipe doit conserver au moins un administrateur." + "value": "Aucune activité d'agent détectée sur cette surface pour l'instant. Le message attend qu'un agent l'y récupère." } }, "ja": { "stringUnit": { "state": "translated", - "value": "チームには管理者が少なくとも 1 人必要です。" + "value": "そのサーフェスではまだエージェントの動きが確認されていません。そこのエージェントが受け取るまでメッセージは待機します。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "팀에는 관리자가 한 명 이상 있어야 합니다." + "value": "해당 표면에서 아직 에이전트 활동이 없습니다. 그곳의 에이전트가 가져갈 때까지 메시지가 대기합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "团队必须至少保留一位管理员。" + "value": "尚未在该表面看到代理活动。消息会等待,直到那里的代理取走它。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "團隊必須至少保留一位管理員。" + "value": "尚未在該表面看到代理活動。訊息會等待,直到那裡的代理取走它。" } } } }, - "teamMembers.error.memberNotFound": { + "cli.agentMessage.queued": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "That person is not a member of this team." + "value": "Queued message %@ for %@ (%@)." } }, "ar": { "stringUnit": { "state": "translated", - "value": "هذا الشخص ليس عضوًا في هذا الفريق." + "value": "وُضعت الرسالة %1$@ في قائمة الانتظار لـ %2$@ (%3$@)." } }, "de": { "stringUnit": { "state": "translated", - "value": "Diese Person ist kein Mitglied dieses Teams." + "value": "Nachricht %1$@ für %2$@ (%3$@) in die Warteschlange gestellt." } }, "es": { "stringUnit": { "state": "translated", - "value": "Esa persona no es miembro de este equipo." + "value": "Mensaje %1$@ en cola para %2$@ (%3$@)." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cette personne n’est pas membre de cette équipe." + "value": "Message %1$@ mis en file pour %2$@ (%3$@)." } }, "ja": { "stringUnit": { "state": "translated", - "value": "その人はこのチームのメンバーではありません。" + "value": "メッセージ %1$@ を %2$@(%3$@)宛てにキューに入れました。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "해당 사용자는 이 팀의 구성원이 아닙니다." + "value": "메시지 %1$@을(를) %2$@(%3$@) 앞으로 대기열에 넣었습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "该用户不是此团队的成员。" + "value": "已将消息 %1$@ 排入 %2$@(%3$@)的队列。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "該使用者不是此團隊的成員。" + "value": "已將訊息 %1$@ 排入 %2$@(%3$@)的佇列。" } } } }, - "teamMembers.error.noTeam": { + "cli.help.agentInbox": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Select a team first." + "value": "الاستخدام: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\nيعرض رسائل الوكلاء، الأحدث أولًا. بدون --surface، يعرض الرسائل لكل\nالأسطح. يضع --mark-read علامة مقروءة على الرسائل المعروضة." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "اختر فريقًا أولًا." + "value": "Verwendung: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\nListet Agent-Nachrichten auf, neueste zuerst. Ohne --surface werden Nachrichten für\nalle Oberflächen aufgelistet. --mark-read markiert die aufgelisteten Nachrichten als gelesen." } }, - "de": { + "en": { "stringUnit": { "state": "translated", - "value": "Wähle zuerst ein Team aus." + "value": "Usage: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\nList agent messages, newest first. Without --surface, lists messages for\nevery surface. --mark-read marks the listed messages read." } }, "es": { "stringUnit": { "state": "translated", - "value": "Selecciona primero un equipo." + "value": "Uso: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\nLista los mensajes de agentes, del más reciente al más antiguo. Sin --surface, lista los mensajes de\ntodas las superficies. --mark-read marca como leídos los mensajes listados." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Sélectionnez d’abord une équipe." + "value": "Utilisation : cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\nListe les messages d'agent, du plus récent au plus ancien. Sans --surface, liste les messages de\ntoutes les surfaces. --mark-read marque les messages listés comme lus." } }, "ja": { "stringUnit": { "state": "translated", - "value": "まずチームを選択してください。" + "value": "使い方: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\nエージェントのメッセージを新しい順に一覧表示します。--surface を指定しないと\nすべてのサーフェスのメッセージを表示します。--mark-read は表示したメッセージを既読にします。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "먼저 팀을 선택하세요." + "value": "사용법: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\n에이전트 메시지를 최신순으로 나열합니다. --surface가 없으면\n모든 표면의 메시지를 나열합니다. --mark-read는 나열된 메시지를 읽음으로 표시합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "请先选择团队。" + "value": "用法: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\n列出代理消息,最新的在前。未指定 --surface 时,列出\n所有表面的消息。--mark-read 会将列出的消息标记为已读。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "請先選擇團隊。" + "value": "用法: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\n列出代理訊息,最新的在前。未指定 --surface 時,列出\n所有表面的訊息。--mark-read 會將列出的訊息標為已讀。" } } } }, - "teamMembers.error.offline": { + "cli.help.agentMessage": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux Cloud is unreachable. Check your connection and try again." + "value": "الاستخدام: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\nيرسل رسالة إلى الوكيل الذي يعمل في مساحة عمل أو سطح آخر. يوصلها cmux\nعبر خطافات ذلك الوكيل، ولا يكتبها أبدًا في طرفيته،\nلذا لا يمكن أن تقع داخل موجّه مكتوب نصفه. تستيقظ جلسة Claude Code الخاملة\nلقراءتها، وتقرأها الجلسة المشغولة في خطوتها التالية.\n\n هو معرّف أو مرجع مساحة عمل أو سطح (workspace:2، surface:5)، أو\nعنوان مساحة عمل (مطابقة تامة أولًا، ثم بادئة فريدة). استخدم - لقراءة النص من\nstdin. القيمة الافتراضية لـ --from هي عنوان مساحة العمل المرسِلة.\n\nأمثلة:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تعذّر الوصول إلى cmux Cloud. تحقق من اتصالك وحاول مرة أخرى." + "value": "Verwendung: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\nSendet eine Nachricht an den Agenten in einem anderen Workspace oder einer anderen Oberfläche. cmux\nliefert sie über die Hooks dieses Agenten aus, nie durch Tippen in sein Terminal,\ndaher kann sie nicht in einem halb getippten Prompt landen. Eine untätige Claude-Code-Sitzung wacht\nauf, um sie zu lesen; eine beschäftigte liest sie bei ihrem nächsten Schritt.\n\n ist eine Workspace- oder Oberflächen-ID bzw. -Referenz (workspace:2, surface:5) oder ein\nWorkspace-Titel (zuerst exakt, dann ein eindeutiges Präfix). Mit - wird der Text von\nstdin gelesen. --from ist standardmäßig der Titel des sendenden Workspace.\n\nBeispiele:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" } }, - "de": { + "en": { "stringUnit": { "state": "translated", - "value": "cmux Cloud ist nicht erreichbar. Prüfe deine Verbindung und versuche es erneut." + "value": "Usage: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\nSend a message to the agent running in another workspace or surface. cmux\ndelivers it through that agent's hooks, never by typing into its terminal,\nso it cannot land in a half-typed prompt. An idle Claude Code session wakes\nup to read it; a busy one reads it at its next step.\n\n is a workspace or surface id or ref (workspace:2, surface:5), or a\nworkspace title (exact, then a unique prefix). Use - to read the text from\nstdin. --from defaults to the sending workspace's title.\n\nExamples:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se puede acceder a cmux Cloud. Comprueba tu conexión e inténtalo de nuevo." + "value": "Uso: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\nEnvía un mensaje al agente que se ejecuta en otro espacio de trabajo o superficie. cmux\nlo entrega a través de los hooks de ese agente, nunca escribiendo en su terminal,\npor lo que no puede acabar en un prompt a medio escribir. Una sesión inactiva de Claude Code se despierta\npara leerlo; una ocupada lo lee en su siguiente paso.\n\n es un ID o referencia de espacio de trabajo o superficie (workspace:2, surface:5), o un\ntítulo de espacio de trabajo (exacto, luego un prefijo único). Usa - para leer el texto desde\nstdin. --from usa por defecto el título del espacio de trabajo que envía.\n\nEjemplos:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux Cloud est injoignable. Vérifiez votre connexion et réessayez." + "value": "Utilisation : cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\nEnvoie un message à l'agent d'un autre espace de travail ou d'une autre surface. cmux\nle remet via les hooks de cet agent, jamais en tapant dans son terminal,\nil ne peut donc pas atterrir dans un prompt à moitié tapé. Une session Claude Code inactive se réveille\npour le lire ; une session occupée le lit à sa prochaine étape.\n\n est un identifiant ou une référence d'espace de travail ou de surface (workspace:2, surface:5), ou un\ntitre d'espace de travail (exact, puis un préfixe unique). Utilisez - pour lire le texte depuis\nstdin. Par défaut, --from vaut le titre de l'espace de travail expéditeur.\n\nExemples :\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux Cloud に接続できません。接続を確認してもう一度お試しください。" + "value": "使い方: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\n別のワークスペースまたはサーフェスで動いているエージェントにメッセージを送ります。cmux は\nそのエージェントのフック経由で届け、ターミナルに打ち込むことはないので、\n入力途中のプロンプトに紛れ込みません。アイドル中の Claude Code セッションは起きて\n読み、作業中のセッションは次のステップで読みます。\n\n はワークスペースかサーフェスの ID または参照(workspace:2、surface:5)、または\nワークスペースのタイトル(完全一致、次に一意な前方一致)です。- を指定すると\nstdin からテキストを読みます。--from の既定値は送信元ワークスペースのタイトルです。\n\n例:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux Cloud에 연결할 수 없습니다. 연결을 확인하고 다시 시도하세요." + "value": "사용법: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\n다른 워크스페이스나 표면에서 실행 중인 에이전트에게 메시지를 보냅니다. cmux는\n해당 에이전트의 훅을 통해 전달하며, 절대 터미널에 입력하지 않으므로\n반쯤 입력된 프롬프트에 섞일 수 없습니다. 유휴 상태의 Claude Code 세션은 깨어나서\n읽고, 작업 중인 세션은 다음 단계에서 읽습니다.\n\n은 워크스페이스나 표면의 ID 또는 참조(workspace:2, surface:5), 또는\n워크스페이스 제목(먼저 정확히 일치, 그다음 고유한 접두사)입니다. -를 쓰면\nstdin에서 텍스트를 읽습니다. --from의 기본값은 보내는 워크스페이스의 제목입니다.\n\n예시:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法连接到 cmux Cloud。请检查网络连接后重试。" + "value": "用法: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\n向在另一个工作区或表面中运行的代理发送消息。cmux\n通过该代理的 hook 投递消息,绝不会向它的终端输入按键,\n因此消息不会落入输入到一半的提示中。空闲的 Claude Code 会话会醒来\n阅读它;忙碌的会话会在下一步阅读。\n\n 是工作区或表面的 ID 或引用(workspace:2、surface:5),或\n工作区标题(先完全匹配,再找唯一前缀)。使用 - 从\nstdin 读取文本。--from 默认为发送端工作区的标题。\n\n示例:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法連線至 cmux Cloud。請檢查網路連線後再試一次。" + "value": "用法: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\n傳送訊息給在另一個工作區或表面中執行的代理。cmux\n透過該代理的 hook 遞送訊息,絕不會打字到它的終端機,\n因此訊息不會落入打到一半的提示中。閒置的 Claude Code 工作階段會醒來\n閱讀它;忙碌中的工作階段會在下一步閱讀。\n\n 是工作區或表面的 ID 或參照(workspace:2、surface:5),或\n工作區標題(先完全符合,再找唯一前綴)。使用 - 從\nstdin 讀取文字。--from 預設為傳送端工作區的標題。\n\n範例:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" } } } }, - "teamMembers.error.rateLimited": { + "socket.agentMessage.error.bodyTooLarge": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Too many invitations. Wait a minute and try again." + "value": "The message is too long. The limit is 32 KiB." } }, "ar": { "stringUnit": { "state": "translated", - "value": "دعوات كثيرة جدًا. انتظر دقيقة وحاول مرة أخرى." + "value": "الرسالة طويلة جدًا. الحد الأقصى 32 كيلوبايت." } }, "de": { "stringUnit": { "state": "translated", - "value": "Zu viele Einladungen. Warte eine Minute und versuche es erneut." + "value": "Die Nachricht ist zu lang. Die Grenze liegt bei 32 KiB." } }, "es": { "stringUnit": { "state": "translated", - "value": "Demasiadas invitaciones. Espera un minuto e inténtalo de nuevo." + "value": "El mensaje es demasiado largo. El límite es de 32 KiB." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Trop d’invitations. Patientez une minute et réessayez." + "value": "Le message est trop long. La limite est de 32 Kio." } }, "ja": { "stringUnit": { "state": "translated", - "value": "招待が多すぎます。1 分待ってからもう一度お試しください。" + "value": "メッセージが長すぎます。上限は 32 KiB です。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "초대가 너무 많습니다. 잠시 후 다시 시도하세요." + "value": "메시지가 너무 깁니다. 한도는 32KiB입니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "邀请次数过多。请稍候一分钟再试。" + "value": "消息太长。上限为 32 KiB。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "邀請次數過多。請稍候一分鐘再試。" + "value": "訊息太長。上限為 32 KiB。" } } } }, - "teamMembers.error.seatLimit": { + "socket.agentMessage.error.controlCharacter": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This plan includes 3 members. Remove someone or upgrade to Team to invite more." + "value": "The message contains control characters. Only text, newlines and tabs are allowed." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تتضمن هذه الخطة 3 أعضاء. أزل أحدهم أو قم بالترقية إلى Team لدعوة المزيد." + "value": "تحتوي الرسالة على أحرف تحكم. لا يُسمح إلا بالنص وفواصل الأسطر وعلامات الجدولة." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Plan umfasst 3 Mitglieder. Entferne jemanden oder wechsle zu Team, um weitere einzuladen." + "value": "Die Nachricht enthält Steuerzeichen. Erlaubt sind nur Text, Zeilenumbrüche und Tabulatoren." } }, "es": { "stringUnit": { "state": "translated", - "value": "Este plan incluye 3 miembros. Elimina a alguien o cambia a Team para invitar a más." + "value": "El mensaje contiene caracteres de control. Solo se permiten texto, saltos de línea y tabulaciones." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cette offre inclut 3 membres. Retirez quelqu’un ou passez à Team pour inviter plus de personnes." + "value": "Le message contient des caractères de contrôle. Seuls le texte, les retours à la ligne et les tabulations sont autorisés." } }, "ja": { "stringUnit": { "state": "translated", - "value": "このプランにはメンバー 3 人が含まれます。誰かを削除するか、Team にアップグレードしてさらに招待してください。" + "value": "メッセージに制御文字が含まれています。使えるのはテキスト、改行、タブだけです。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 플랜에는 구성원 3명이 포함됩니다. 구성원을 제거하거나 Team으로 업그레이드하여 더 초대하세요." + "value": "메시지에 제어 문자가 있습니다. 텍스트, 줄바꿈, 탭만 허용됩니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此方案包含 3 位成员。请移除成员或升级到 Team 以邀请更多人。" + "value": "消息包含控制字符。只允许文本、换行和制表符。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此方案包含 3 位成員。請移除成員或升級至 Team 以邀請更多人。" + "value": "訊息包含控制字元。只允許文字、換行和定位字元。" } } } }, - "sidebar.account.invitePeople": { + "socket.agentMessage.error.emptyBody": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Invite people…" + "value": "The message is empty." } }, "ar": { "stringUnit": { "state": "translated", - "value": "دعوة أشخاص…" + "value": "الرسالة فارغة." } }, "de": { "stringUnit": { "state": "translated", - "value": "Personen einladen…" + "value": "Die Nachricht ist leer." } }, "es": { "stringUnit": { "state": "translated", - "value": "Invitar personas…" + "value": "El mensaje está vacío." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Inviter des personnes…" + "value": "Le message est vide." } }, "ja": { "stringUnit": { "state": "translated", - "value": "メンバーを招待…" + "value": "メッセージが空です。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "구성원 초대…" + "value": "메시지가 비어 있습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "邀请成员…" + "value": "消息为空。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "邀請成員…" + "value": "訊息是空的。" } } } }, - "sidebar.account.members": { + "socket.agentMessage.error.invalidSender": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Members…" + "value": "The sender name must be one line of at most 64 characters." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الأعضاء…" + "value": "يجب أن يكون اسم المرسل سطرًا واحدًا لا يتجاوز 64 حرفًا." } }, "de": { "stringUnit": { "state": "translated", - "value": "Mitglieder…" + "value": "Der Absendername muss eine einzelne Zeile mit höchstens 64 Zeichen sein." } }, "es": { "stringUnit": { "state": "translated", - "value": "Miembros…" + "value": "El nombre del remitente debe ser una sola línea de 64 caracteres como máximo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Membres…" + "value": "Le nom de l'expéditeur doit tenir sur une ligne de 64 caractères au maximum." } }, "ja": { "stringUnit": { "state": "translated", - "value": "メンバー…" + "value": "送信者名は 64 文字以内の 1 行にしてください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "구성원…" + "value": "보낸 사람 이름은 64자 이하의 한 줄이어야 합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "成员…" + "value": "发送者名称必须是一行,最多 64 个字符。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "成員…" + "value": "寄件者名稱必須是一行,最多 64 個字元。" } } } }, - "command.auth.teamMembers.title": { + "socket.agentMessage.error.invalidState": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Invite Team Members" + "value": "State must be queued, delivered, read or failed." } }, "ar": { "stringUnit": { "state": "translated", - "value": "دعوة أعضاء الفريق" + "value": "يجب أن تكون الحالة queued أو delivered أو read أو failed." } }, "de": { "stringUnit": { "state": "translated", - "value": "Teammitglieder einladen" + "value": "Der Status muss queued, delivered, read oder failed sein." } }, "es": { "stringUnit": { "state": "translated", - "value": "Invitar miembros del equipo" + "value": "El estado debe ser queued, delivered, read o failed." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Inviter des membres de l’équipe" + "value": "L'état doit être queued, delivered, read ou failed." } }, "ja": { "stringUnit": { "state": "translated", - "value": "チームメンバーを招待" + "value": "状態は queued、delivered、read、failed のいずれかにしてください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "팀 구성원 초대" + "value": "상태는 queued, delivered, read, failed 중 하나여야 합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "邀请团队成员" + "value": "状态必须是 queued、delivered、read 或 failed。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "邀請團隊成員" + "value": "狀態必須是 queued、delivered、read 或 failed。" } } } }, - "socket.authTeam.missingInvitation": { + "socket.agentMessage.error.missingSurface": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "An invitation id or link id is required." + "value": "A surface_id UUID is required." } }, "ar": { "stringUnit": { "state": "translated", - "value": "مطلوب معرّف دعوة أو معرّف رابط." + "value": "يلزم تحديد surface_id بصيغة UUID." } }, "de": { "stringUnit": { "state": "translated", - "value": "Eine Einladungs-ID oder Link-ID ist erforderlich." + "value": "Eine surface_id-UUID ist erforderlich." } }, "es": { "stringUnit": { "state": "translated", - "value": "Se requiere un ID de invitación o de enlace." + "value": "Se requiere un UUID en surface_id." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Un identifiant d’invitation ou de lien est requis." + "value": "Un UUID surface_id est requis." } }, "ja": { "stringUnit": { "state": "translated", - "value": "招待 ID またはリンク ID が必要です。" + "value": "surface_id の UUID が必要です。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "초대 ID 또는 링크 ID가 필요합니다." + "value": "surface_id UUID가 필요합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "需要邀请 ID 或链接 ID。" + "value": "需要 surface_id UUID。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "需要邀請 ID 或連結 ID。" + "value": "需要 surface_id UUID。" } } } }, - "socket.authTeam.missingUser": { + "socket.agentMessage.error.missingTarget": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "A user id is required." + "value": "Give a target workspace or surface, or a message id to reply to." } }, "ar": { "stringUnit": { "state": "translated", - "value": "مطلوب معرّف مستخدم." + "value": "حدّد مساحة عمل أو سطحًا هدفًا، أو معرّف رسالة للرد عليها." } }, "de": { "stringUnit": { "state": "translated", - "value": "Eine Benutzer-ID ist erforderlich." + "value": "Gib einen Ziel-Workspace oder eine Zieloberfläche an, oder eine Nachrichten-ID, auf die geantwortet werden soll." } }, "es": { "stringUnit": { "state": "translated", - "value": "Se requiere un ID de usuario." + "value": "Indica un espacio de trabajo o una superficie de destino, o el ID de un mensaje al que responder." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Un identifiant d’utilisateur est requis." + "value": "Indiquez un espace de travail ou une surface cible, ou l'identifiant du message auquel répondre." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ユーザー ID が必要です。" + "value": "宛先のワークスペースかサーフェス、または返信するメッセージの ID を指定してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용자 ID가 필요합니다." + "value": "대상 워크스페이스나 표면, 또는 답장할 메시지 ID를 지정하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "需要用户 ID。" + "value": "请指定目标工作区或表面,或要回复的消息 ID。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "需要使用者 ID。" + "value": "請指定目標工作區或表面,或要回覆的訊息 ID。" } } } }, - "sidebar.account.invitePeople.short": { + "socket.agentMessage.error.noReplyAddress": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Invite People" + "value": "That message has no sender surface to reply to." } }, "ar": { "stringUnit": { "state": "translated", - "value": "دعوة أشخاص" + "value": "لا يوجد لهذه الرسالة سطح مرسل يمكن الرد عليه." } }, "de": { "stringUnit": { "state": "translated", - "value": "Personen einladen" + "value": "Diese Nachricht hat keine Absenderoberfläche, an die geantwortet werden kann." } }, "es": { "stringUnit": { "state": "translated", - "value": "Invitar personas" + "value": "Ese mensaje no tiene una superficie de remitente a la que responder." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Inviter des personnes" + "value": "Ce message n'a pas de surface d'expéditeur à laquelle répondre." } }, "ja": { "stringUnit": { "state": "translated", - "value": "メンバーを招待" + "value": "このメッセージには返信先となる送信元サーフェスがありません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "구성원 초대" + "value": "이 메시지에는 답장할 보낸 사람 표면이 없습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "邀请成员" + "value": "该消息没有可回复的发送者表面。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "邀請成員" + "value": "該訊息沒有可回覆的寄件者表面。" } } } }, - "sidebar.account.invite.button": { + "socket.agentMessage.error.notSaved": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Invite" + "value": "The message was not sent: cmux could not save it to the message journal." } }, "ar": { "stringUnit": { "state": "translated", - "value": "دعوة" + "value": "لم يتم إرسال الرسالة: تعذّر على cmux حفظها في سجل الرسائل." } }, "de": { "stringUnit": { "state": "translated", - "value": "Einladen" + "value": "Die Nachricht wurde nicht gesendet: cmux konnte sie nicht im Nachrichtenjournal speichern." } }, "es": { "stringUnit": { "state": "translated", - "value": "Invitar" + "value": "El mensaje no se envió: cmux no pudo guardarlo en el registro de mensajes." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Inviter" + "value": "Le message n’a pas été envoyé : cmux n’a pas pu l’enregistrer dans le journal des messages." } }, "ja": { "stringUnit": { "state": "translated", - "value": "招待" + "value": "メッセージは送信されませんでした: cmux がメッセージジャーナルに保存できませんでした。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "초대" + "value": "메시지를 보내지 못했습니다: cmux가 메시지 저널에 저장하지 못했습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "邀请" + "value": "消息未发送:cmux 无法将其保存到消息日志。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "邀請" + "value": "訊息未傳送:cmux 無法將其儲存到訊息日誌。" } } } }, - "cloudInvite.done": { + "socket.agentMessage.error.targetNotFound": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Done" + "value": "No workspace or surface matches that target." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تم" + "value": "لا توجد مساحة عمل أو سطح يطابق هذا الهدف." } }, "de": { "stringUnit": { "state": "translated", - "value": "Fertig" + "value": "Kein Workspace und keine Oberfläche passt zu diesem Ziel." } }, "es": { "stringUnit": { "state": "translated", - "value": "Listo" + "value": "Ningún espacio de trabajo ni superficie coincide con ese destino." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Terminé" + "value": "Aucun espace de travail ni aucune surface ne correspond à cette cible." } }, "ja": { "stringUnit": { "state": "translated", - "value": "完了" + "value": "その宛先に一致するワークスペースもサーフェスもありません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "완료" + "value": "해당 대상과 일치하는 워크스페이스나 표면이 없습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "完成" + "value": "没有与该目标匹配的工作区或表面。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "完成" + "value": "沒有符合該目標的工作區或表面。" } } } }, - "cloudInvite.inviteMore": { + "socket.agentMessage.error.unknownMessage": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Invite More" + "value": "No message with id %@." } }, "ar": { "stringUnit": { "state": "translated", - "value": "دعوة المزيد" + "value": "لا توجد رسالة بالمعرّف %@." } }, "de": { "stringUnit": { "state": "translated", - "value": "Weitere einladen" + "value": "Keine Nachricht mit der ID %@." } }, "es": { "stringUnit": { "state": "translated", - "value": "Invitar a más" + "value": "No hay ningún mensaje con el ID %@." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Inviter d’autres personnes" + "value": "Aucun message avec l'identifiant %@." } }, "ja": { "stringUnit": { "state": "translated", - "value": "さらに招待" + "value": "ID が %@ のメッセージはありません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "더 초대" + "value": "ID가 %@인 메시지가 없습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "继续邀请" + "value": "没有 ID 为 %@ 的消息。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "繼續邀請" + "value": "沒有 ID 為 %@ 的訊息。" } } } }, - "cloudInvite.linkCopied": { + "agentHibernation.manual.agentBusy": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Invite link copied. Anyone with it joins as a member for 7 days." + "value": "This agent is working or waiting for input." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تم نسخ رابط الدعوة. يمكن لأي شخص يملكه الانضمام كعضو لمدة 7 أيام." + "value": "このエージェントは作業中か、入力を待っています。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Einladungslink kopiert. Wer ihn hat, tritt 7 Tage lang als Mitglied bei." + "value": "Dieser Agent arbeitet oder wartet auf eine Eingabe." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Enlace de invitación copiado. Cualquiera que lo tenga se une como miembro durante 7 días." + "value": "Cet agent travaille ou attend une saisie." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Lien d’invitation copié. Toute personne qui l’a rejoint comme membre pendant 7 jours." + "value": "هذا الوكيل يعمل أو ينتظر إدخالًا." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "招待リンクをコピーしました。リンクを持つ人は 7 日間メンバーとして参加できます。" + "value": "Este agente está trabajando o esperando una respuesta." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "초대 링크를 복사했습니다. 링크가 있으면 7일 동안 구성원으로 참여할 수 있습니다." + "value": "此代理程式正在工作或等待輸入。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已复制邀请链接。持有链接者可在 7 天内以成员身份加入。" + "value": "此智能体正在工作或等待输入。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "已複製邀請連結。持有連結者可在 7 天內以成員身分加入。" + "value": "이 에이전트는 작업 중이거나 입력을 기다리고 있습니다." } } } }, - "cloudInvite.manageMembers": { + "agentHibernation.manual.alreadyHibernated": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Manage members…" + "value": "This agent is already hibernated." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "إدارة الأعضاء…" + "value": "このエージェントはすでに休止中です。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Mitglieder verwalten…" + "value": "Dieser Agent ruht bereits." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Gestionar miembros…" + "value": "Cet agent est déjà en veille." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Gérer les membres…" + "value": "هذا الوكيل في وضع السبات بالفعل." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "メンバーを管理…" + "value": "Este agente ya está en hibernación." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "구성원 관리…" + "value": "此代理程式已經休眠。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "管理成员…" + "value": "此智能体已休眠。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "管理成員…" + "value": "이 에이전트는 이미 휴면 중입니다." } } } }, - "cloudInvite.partial": { + "agentHibernation.manual.lifecycleUnknown": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Could not invite: %@" + "value": "cmux can't tell whether this agent is idle, so it was left running." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تعذّرت الدعوة: %@" + "value": "cmux はこのエージェントがアイドル状態か判断できないため、実行したままにしました。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Konnte nicht einladen: %@" + "value": "cmux kann nicht erkennen, ob dieser Agent untätig ist, daher läuft er weiter." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "No se pudo invitar: %@" + "value": "cmux ne peut pas savoir si cet agent est inactif, il continue donc de tourner." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Impossible d’inviter : %@" + "value": "لا يستطيع cmux معرفة ما إذا كان هذا الوكيل خاملًا، لذا تُرك قيد التشغيل." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "招待できませんでした: %@" + "value": "cmux no puede saber si este agente está inactivo, así que sigue en ejecución." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "초대할 수 없음: %@" + "value": "cmux 無法判斷此代理程式是否閒置,因此保持執行。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法邀请:%@" + "value": "cmux 无法判断此智能体是否空闲,因此保持运行。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "無法邀請:%@" + "value": "cmux가 이 에이전트의 유휴 여부를 알 수 없어 실행 상태로 두었습니다." } } } }, - "cloudInvite.role.admin": { + "agentHibernation.manual.notRestorable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Admin" + "value": "This terminal has no agent that cmux can resume the way it was started." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "مسؤول" + "value": "このターミナルには、起動時と同じ方法で cmux が再開できるエージェントがありません。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Administrator" + "value": "Dieses Terminal hat keinen Agenten, den cmux so fortsetzen kann, wie er gestartet wurde." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Administrador" + "value": "Ce terminal n’a aucun agent que cmux peut reprendre de la façon dont il a été lancé." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Administrateur" + "value": "لا تحتوي هذه الطرفية على وكيل يستطيع cmux استئنافه بالطريقة التي بدأ بها." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "管理者" + "value": "Esta terminal no tiene un agente que cmux pueda reanudar tal como se inició." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "관리자" + "value": "此終端機沒有 cmux 能以原本啟動方式恢復的代理程式。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "管理员" + "value": "此终端没有 cmux 能按原启动方式恢复的智能体。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "管理員" + "value": "이 터미널에는 시작된 방식 그대로 cmux가 재개할 수 있는 에이전트가 없습니다." } } } }, - "cloudInvite.role.label": { + "agentHibernation.manual.notRunning": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Join as" + "value": "This terminal is not running, so there is nothing to hibernate." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "الانضمام بصفة" + "value": "このターミナルは実行されていないため、休止するものがありません。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Beitreten als" + "value": "Dieses Terminal läuft nicht, daher gibt es nichts zum Ruhen." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Unirse como" + "value": "Ce terminal n’est pas en cours d’exécution, il n’y a donc rien à mettre en veille." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Rejoindre en tant que" + "value": "هذه الطرفية لا تعمل، لذا لا يوجد ما يمكن وضعه في السبات." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "参加する役割" + "value": "Esta terminal no se está ejecutando, así que no hay nada que hibernar." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "참여 역할" + "value": "此終端機未在執行,沒有可休眠的內容。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "加入身份" + "value": "此终端未在运行,没有可休眠的内容。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "加入身分" + "value": "이 터미널은 실행 중이 아니어서 휴면할 대상이 없습니다." } } } }, - "cloudInvite.role.member": { + "agentHibernation.manual.processScopeUnsafe": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Member" + "value": "This terminal is running other work, such as background jobs, that hibernation would stop." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "عضو" + "value": "このターミナルでは、休止すると停止してしまうバックグラウンドジョブなどの作業が実行中です。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Mitglied" + "value": "In diesem Terminal läuft weitere Arbeit, etwa Hintergrundjobs, die das Ruhen beenden würde." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Miembro" + "value": "Ce terminal exécute d’autres tâches, comme des tâches en arrière-plan, que la mise en veille arrêterait." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Membre" + "value": "تشغّل هذه الطرفية أعمالًا أخرى، مثل مهام الخلفية، سيوقفها السبات." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "メンバー" + "value": "Esta terminal está ejecutando otro trabajo, como tareas en segundo plano, que la hibernación detendría." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "구성원" + "value": "此終端機正在執行其他工作(例如背景工作),休眠會使其停止。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "成员" + "value": "此终端正在运行其他工作(例如后台任务),休眠会使其停止。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "成員" + "value": "이 터미널에서 백그라운드 작업 등 휴면하면 중단될 다른 작업이 실행 중입니다." } } } }, - "cloudInvite.send": { + "agentHibernation.manual.recentlyActive": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Send Invite" + "value": "This agent was active a moment ago. Try again in a few seconds." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "إرسال الدعوة" + "value": "このエージェントは少し前まで動作していました。数秒後にもう一度お試しください。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Einladung senden" + "value": "Dieser Agent war gerade eben aktiv. Versuche es in ein paar Sekunden erneut." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Enviar invitación" + "value": "Cet agent était actif il y a un instant. Réessayez dans quelques secondes." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Envoyer l’invitation" + "value": "كان هذا الوكيل نشطًا قبل لحظة. حاول مرة أخرى بعد بضع ثوانٍ." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "招待を送信" + "value": "Este agente estuvo activo hace un momento. Inténtalo de nuevo en unos segundos." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "초대 보내기" + "value": "此代理程式剛剛仍在活動。請幾秒後再試。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "发送邀请" + "value": "此智能体刚刚仍在活动。请几秒后再试。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "傳送邀請" + "value": "이 에이전트는 방금 전까지 활동했습니다. 몇 초 후 다시 시도하세요." } } } }, - "cloudInvite.someSent": { + "agentHibernation.manual.surfaceNotFound": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The other invitations were sent." + "value": "No terminal matches that surface." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تم إرسال الدعوات الأخرى." + "value": "そのサーフェスに一致するターミナルはありません。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die übrigen Einladungen wurden gesendet." + "value": "Kein Terminal passt zu dieser Oberfläche." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Las demás invitaciones se enviaron." + "value": "Aucun terminal ne correspond à cette surface." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Les autres invitations ont été envoyées." + "value": "لا توجد طرفية تطابق هذا السطح." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "他の招待は送信されました。" + "value": "Ninguna terminal coincide con esa superficie." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "나머지 초대는 보냈습니다." + "value": "沒有符合該 surface 的終端機。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "其余邀请已发送。" + "value": "没有与该 surface 匹配的终端。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "其餘邀請已送出。" + "value": "해당 서피스와 일치하는 터미널이 없습니다." } } } }, - "cloudInvite.seatsOpen": { + "agentHibernation.manual.teardownInProgress": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$d of %#@seats@ open on this plan." - }, - "substitutions": { - "seats": { - "argNum": 2, - "formatSpecifier": "d", - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%d seat" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%d seats" - } - } - } - } - } + "value": "This agent is already being hibernated." } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$d von %#@seats@ dieses Plans frei." - }, - "substitutions": { - "seats": { - "argNum": 2, - "formatSpecifier": "d", - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%d Platz" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%d Plätzen" - } - } - } - } - } + "value": "このエージェントはすでに休止処理中です。" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$d sur %#@seats@ libres sur cette offre." - }, - "substitutions": { - "seats": { - "argNum": 2, - "formatSpecifier": "d", - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%d siège" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%d sièges" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%d sièges" - } - } - } - } - } + "value": "Dieser Agent wird bereits in den Ruhezustand versetzt." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$d de %#@seats@ libres en este plan." - }, - "substitutions": { - "seats": { - "argNum": 2, - "formatSpecifier": "d", - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%d asiento" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%d asientos" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%d asientos" - } - } - } - } - } + "value": "Cet agent est déjà en cours de mise en veille." } }, "ar": { "stringUnit": { "state": "translated", - "value": "%1$d من %#@seats@ متاحة في هذه الخطة." - }, - "substitutions": { - "seats": { - "argNum": 2, - "formatSpecifier": "d", - "variations": { - "plural": { - "zero": { - "stringUnit": { - "state": "translated", - "value": "%d مقعد" - } - }, - "one": { - "stringUnit": { - "state": "translated", - "value": "مقعد واحد (%d)" - } - }, - "two": { - "stringUnit": { - "state": "translated", - "value": "مقعدين (%d)" - } - }, - "few": { - "stringUnit": { - "state": "translated", - "value": "%d مقاعد" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%d مقعدًا" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%d مقعد" - } - } - } - } - } + "value": "يجري بالفعل وضع هذا الوكيل في السبات." } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "此方案尚有 %1$d / %#@seats@ 可用。" - }, - "substitutions": { - "seats": { - "argNum": 2, - "formatSpecifier": "d", - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%d 個席位" - } - } - } - } - } + "value": "Este agente ya se está hibernando." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此方案尚有 %1$d / %#@seats@ 可用。" - }, - "substitutions": { - "seats": { - "argNum": 2, - "formatSpecifier": "d", - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%d 个席位" - } - } - } - } - } + "value": "此代理程式正在休眠中。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "이 플랜에서 %1$d / %#@seats@ 남음." - }, - "substitutions": { - "seats": { - "argNum": 2, - "formatSpecifier": "d", - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%d석" - } - } - } - } - } + "value": "此智能体正在休眠中。" } }, - "ja": { + "ko": { "stringUnit": { "state": "translated", - "value": "このプランで %1$d / %#@seats@ が空いています。" - }, - "substitutions": { - "seats": { - "argNum": 2, - "formatSpecifier": "d", - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%d 席" - } - } - } - } - } + "value": "이 에이전트는 이미 휴면 처리 중입니다." } } } }, - "cloudInvite.copyLink.short": { + "agentHibernation.manual.teardownRefused": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy link" + "value": "The agent changed or its session could not be protected, so it was left running. Try again later." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "نسخ الرابط" + "value": "エージェントが変化したか、セッションを保護できなかったため、実行したままにしました。後でもう一度お試しください。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Link kopieren" + "value": "Der Agent hat sich geändert oder seine Sitzung konnte nicht geschützt werden, daher läuft er weiter. Versuche es später erneut." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Copiar enlace" + "value": "L’agent a changé ou sa session n’a pas pu être protégée, il continue donc de tourner. Réessayez plus tard." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Copier le lien" + "value": "تغيّر الوكيل أو تعذّرت حماية جلسته، لذا تُرك قيد التشغيل. حاول مرة أخرى لاحقًا." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "リンクをコピー" + "value": "El agente cambió o no se pudo proteger su sesión, así que sigue en ejecución. Inténtalo más tarde." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "링크 복사" + "value": "代理程式有變動或其工作階段無法受保護,因此保持執行。請稍後再試。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "复制链接" + "value": "智能体有变化或其会话无法受到保护,因此保持运行。请稍后再试。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "複製連結" + "value": "에이전트가 변경되었거나 세션을 보호할 수 없어 실행 상태로 두었습니다. 나중에 다시 시도하세요." } } } }, - "cloudInvite.emails.placeholder.short": { + "agentHibernation.manual.unconfirmedInput": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Email, comma separated" + "value": "This agent has typed input it has not received yet." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "البريد الإلكتروني، مفصول بفواصل" + "value": "このエージェントには、まだ受け取っていない入力があります。" } }, "de": { "stringUnit": { "state": "translated", - "value": "E-Mail, durch Kommas getrennt" + "value": "Dieser Agent hat getippte Eingaben, die er noch nicht erhalten hat." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Correo, separado por comas" + "value": "Cet agent a une saisie qu’il n’a pas encore reçue." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "E-mail, séparés par des virgules" + "value": "لدى هذا الوكيل إدخال مكتوب لم يستلمه بعد." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "メール(カンマ区切り)" + "value": "Este agente tiene texto escrito que aún no ha recibido." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이메일(쉼표로 구분)" + "value": "此代理程式有尚未收到的輸入。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "电子邮件,以逗号分隔" + "value": "此智能体有尚未收到的输入。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "電子郵件,以逗號分隔" + "value": "이 에이전트에는 아직 받지 않은 입력이 있습니다." } } } }, - "cloudInvite.heading.short": { + "agentHibernation.manual.visible": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Invite to %@" + "value": "This agent is on screen. Switch away from it first." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "دعوة إلى %@" + "value": "このエージェントは画面に表示されています。先に別の場所に切り替えてください。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zu %@ einladen" + "value": "Dieser Agent ist auf dem Bildschirm. Wechsle zuerst weg." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Invitar a %@" + "value": "Cet agent est à l’écran. Passez d’abord à autre chose." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Inviter dans %@" + "value": "هذا الوكيل ظاهر على الشاشة. انتقل بعيدًا عنه أولًا." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "%@ に招待" + "value": "Este agente está en pantalla. Cambia a otro lugar primero." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@에 초대" + "value": "此代理程式正顯示在螢幕上。請先切換離開。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "邀请加入 %@" + "value": "此智能体正显示在屏幕上。请先切换离开。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "邀請加入 %@" + "value": "이 에이전트가 화면에 표시되어 있습니다. 먼저 다른 곳으로 전환하세요." } } } }, - "cloudInvite.notAdmin.short": { + "agentHibernation.wake.notHibernated": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Only team admins can invite." + "value": "This agent is not hibernated." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "يمكن لمسؤولي الفريق فقط الدعوة." + "value": "このエージェントは休止していません。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nur Team-Admins können einladen." + "value": "Dieser Agent ruht nicht." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Solo los administradores pueden invitar." + "value": "Cet agent n’est pas en veille." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Seuls les administrateurs peuvent inviter." + "value": "هذا الوكيل ليس في وضع السبات." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "招待できるのはチームの管理者だけです。" + "value": "Este agente no está en hibernación." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "팀 관리자만 초대할 수 있습니다." + "value": "此代理程式未休眠。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "只有团队管理员可以邀请。" + "value": "此智能体未休眠。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "只有團隊管理員可以邀請。" + "value": "이 에이전트는 휴면 중이 아닙니다." } } } }, - "cloudInvite.oneLiner": { + "agentHibernation.wake.resumeUnavailable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Members share this team's Cloud machines. Your Mac stays private." + "value": "cmux could not start this agent's resume command." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "يتشارك الأعضاء أجهزة Cloud الخاصة بهذا الفريق. يبقى جهاز Mac الخاص بك خاصًا." + "value": "cmux はこのエージェントの再開コマンドを開始できませんでした。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Mitglieder teilen die Cloud-Maschinen dieses Teams. Dein Mac bleibt privat." + "value": "cmux konnte den Fortsetzungsbefehl dieses Agenten nicht starten." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Los miembros comparten las máquinas Cloud de este equipo. Tu Mac sigue siendo privado." + "value": "cmux n’a pas pu lancer la commande de reprise de cet agent." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Les membres partagent les machines Cloud de cette équipe. Votre Mac reste privé." + "value": "تعذّر على cmux بدء أمر الاستئناف لهذا الوكيل." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "メンバーはこのチームの Cloud マシンを共有します。あなたの Mac は非公開のままです。" + "value": "cmux no pudo iniciar el comando de reanudación de este agente." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "구성원은 이 팀의 Cloud 머신을 공유합니다. 내 Mac은 비공개로 유지됩니다." + "value": "cmux 無法啟動此代理程式的恢復指令。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "成员共享此团队的 Cloud 机器。你的 Mac 保持私密。" + "value": "cmux 无法启动此智能体的恢复命令。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "成員共用此團隊的 Cloud 機器。你的 Mac 保持私密。" + "value": "cmux가 이 에이전트의 재개 명령을 시작할 수 없습니다." } } } }, - "cloudInvite.seatsFull.short": { + "agentHibernation.wake.surfaceNotFound": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No seats left on this plan. Upgrade to Team to invite more." + "value": "No terminal matches that surface." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "لا مقاعد متبقية في هذه الخطة. قم بالترقية إلى Team لدعوة المزيد." + "value": "そのサーフェスに一致するターミナルはありません。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Keine Plätze mehr in diesem Plan. Wechsle zu Team, um weitere einzuladen." + "value": "Kein Terminal passt zu dieser Oberfläche." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "No quedan asientos en este plan. Cambia a Team para invitar a más." + "value": "Aucun terminal ne correspond à cette surface." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Plus de sièges sur cette offre. Passez à Team pour inviter plus de personnes." + "value": "لا توجد طرفية تطابق هذا السطح." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "このプランに空席はありません。Team にアップグレードしてさらに招待してください。" + "value": "Ninguna terminal coincide con esa superficie." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 플랜에 남은 좌석이 없습니다. Team으로 업그레이드하여 더 초대하세요." + "value": "沒有符合該 surface 的終端機。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此方案已无席位。请升级到 Team 以邀请更多人。" + "value": "没有与该 surface 匹配的终端。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "此方案已無席位。請升級至 Team 以邀請更多人。" + "value": "해당 서피스와 일치하는 터미널이 없습니다." } } } }, - "cloudInvite.sentTo": { + "agentHibernation.wake.teardownInProgress": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sent to %@" + "value": "This agent is still being hibernated. Try again in a moment." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تم الإرسال إلى %@" + "value": "このエージェントはまだ休止処理中です。しばらくしてからもう一度お試しください。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Gesendet an %@" + "value": "Dieser Agent wird noch in den Ruhezustand versetzt. Versuche es gleich noch einmal." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Enviado a %@" + "value": "Cet agent est encore en cours de mise en veille. Réessayez dans un instant." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Envoyé à %@" + "value": "لا يزال هذا الوكيل قيد الوضع في السبات. حاول مرة أخرى بعد لحظة." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "%@ に送信しました" + "value": "Este agente todavía se está hibernando. Inténtalo en un momento." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@에게 보냈습니다" + "value": "此代理程式仍在休眠中。請稍後再試。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已发送给 %@" + "value": "此智能体仍在休眠中。请稍后再试。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "已傳送給 %@" + "value": "이 에이전트는 아직 휴면 처리 중입니다. 잠시 후 다시 시도하세요." } } } }, - "cli.auth.team.acceptUsage": { + "cli.agentHibernation.hibernated": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux auth team accept|decline " + "value": "OK hibernated %@" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux auth team accept|decline " + "value": "OK 休止しました %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux auth team accept|decline " + "value": "OK ruht jetzt %@" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Uso: cmux auth team accept|decline " + "value": "OK mis en veille %@" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux auth team accept|decline " + "value": "OK تم وضعه في السبات %@" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "使い方: cmux auth team accept|decline " + "value": "OK hibernado %@" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "사용법: cmux auth team accept|decline " + "value": "OK 已休眠 %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用法:cmux auth team accept|decline " + "value": "OK 已休眠 %@" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "用法:cmux auth team accept|decline " + "value": "OK 휴면함 %@" } } } }, - "cli.auth.team.declined": { + "cli.agentHibernation.usage": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Declined." + "value": "Usage: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تم الرفض." + "value": "使い方: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" } }, "de": { "stringUnit": { "state": "translated", - "value": "Abgelehnt." + "value": "Verwendung: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Rechazada." + "value": "Utilisation: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Refusée." + "value": "الاستخدام: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "辞退しました。" + "value": "Uso: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "거절했습니다." + "value": "用法: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已拒绝。" + "value": "用法: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "已拒絕。" + "value": "사용법: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" } } } }, - "cli.auth.team.invitationRow": { + "cli.agentHibernation.woke": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@ %2$@ (%3$@) invited by %4$@" + "value": "OK woke %@" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$@ %2$@ (%3$@) بدعوة من %4$@" + "value": "OK 再開しました %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@ %2$@ (%3$@), eingeladen von %4$@" + "value": "OK geweckt %@" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ %2$@ (%3$@) invitado por %4$@" + "value": "OK réveillé %@" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$@ %2$@ (%3$@) invité par %4$@" + "value": "OK تم إيقاظه %@" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "%1$@ %2$@(%3$@)%4$@ からの招待" + "value": "OK reanudado %@" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@ %2$@ (%3$@) %4$@ 님이 초대함" + "value": "OK 已喚醒 %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@ %2$@(%3$@)由 %4$@ 邀请" + "value": "OK 已唤醒 %@" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$@ %2$@(%3$@)由 %4$@ 邀請" + "value": "OK 깨움 %@" } } } }, - "cli.auth.team.joined": { + "socket.agentHibernation.surfaceRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Joined." + "value": "Missing or invalid surface_id" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تم الانضمام." + "value": "surface_id がないか無効です" } }, "de": { "stringUnit": { "state": "translated", - "value": "Beigetreten." + "value": "surface_id fehlt oder ist ungültig" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Te has unido." + "value": "surface_id manquant ou invalide" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Rejoint." + "value": "surface_id مفقود أو غير صالح" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "参加しました。" + "value": "Falta surface_id o no es válido" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "참여했습니다." + "value": "缺少 surface_id 或其無效" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已加入。" + "value": "缺少 surface_id 或其无效" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "已加入。" + "value": "surface_id가 없거나 올바르지 않습니다" } } } }, - "cli.auth.team.noInvitations": { + "settings.textBox.betaWarning": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "No pending invitations." + "value": "مربع النص ميزة تجريبية. قد تتغير إعداداته الافتراضية وسلوكه أثناء اختباره." } }, - "ar": { + "bs": { "stringUnit": { - "state": "translated", - "value": "لا توجد دعوات معلقة." + "state": "needs_review", + "value": "TextBox je beta funkcija. Zadane vrijednosti i ponašanje mogu se promijeniti tokom testiranja." + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "TextBox er en beta-funktion. Standarder og adfærd kan ændre sig under test." } }, "de": { "stringUnit": { "state": "translated", - "value": "Keine ausstehenden Einladungen." + "value": "TextBox ist eine Beta-Funktion. Standardwerte und Verhalten können sich während der Testphase ändern." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "TextBox is a beta feature. Its defaults and behavior may change while it is being tested." } }, "es": { "stringUnit": { "state": "translated", - "value": "No hay invitaciones pendientes." + "value": "TextBox es una característica beta. Sus valores predeterminados y comportamiento pueden cambiar mientras se prueba." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucune invitation en attente." + "value": "La TextBox est une fonctionnalité bêta. Ses valeurs par défaut et son comportement peuvent changer pendant sa phase de test." } }, - "ja": { + "it": { "stringUnit": { - "state": "translated", - "value": "保留中の招待はありません。" + "state": "needs_review", + "value": "TextBox è una funzionalità beta. Valori predefiniti e comportamento possono cambiare durante i test." } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "대기 중인 초대가 없습니다." + "value": "TextBox はベータ機能です。テスト中のため、既定値や動作が変わる場合があります。" } }, - "zh-Hans": { + "km": { "stringUnit": { - "state": "translated", - "value": "没有待处理的邀请。" + "state": "needs_review", + "value": "TextBox គឺជាមុខងារបេតា។ តម្លៃលំនាំដើម និងឥរិយាបថអាចផ្លាស់ប្តូរនៅពេលកំពុងសាកល្បង។" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "沒有待處理的邀請。" + "value": "TextBox는 베타 기능입니다. 테스트되는 동안 기본값 및 동작이 변경될 수 있습니다." } - } - } - }, - "notification.teamInvite.body": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "nb": { "stringUnit": { - "state": "translated", - "value": "Join from the team menu in the Cloud panel or Settings › Account." + "state": "needs_review", + "value": "TextBox er en betafunksjon. Standardverdier og oppførsel kan endres mens den testes." } }, - "ar": { + "pl": { "stringUnit": { - "state": "translated", - "value": "انضم من قائمة الفريق في لوحة Cloud أو من الإعدادات › الحساب." + "state": "needs_review", + "value": "TextBox jest funkcją beta. Domyślne ustawienia i zachowanie mogą się zmienić podczas testów." } }, - "de": { + "pt-BR": { "stringUnit": { - "state": "translated", - "value": "Tritt über das Teammenü im Cloud-Bereich oder unter Einstellungen › Account bei." + "state": "needs_review", + "value": "TextBox é um recurso beta. Seus padrões e comportamento podem mudar durante os testes." } }, - "es": { + "ru": { "stringUnit": { - "state": "translated", - "value": "Únete desde el menú de equipo del panel Cloud o en Ajustes › Cuenta." + "state": "needs_review", + "value": "TextBox — бета-функция. Во время тестирования значения по умолчанию и поведение могут измениться." } }, - "fr": { + "th": { "stringUnit": { - "state": "translated", - "value": "Rejoignez depuis le menu d'équipe du panneau Cloud ou dans Réglages › Compte." + "state": "needs_review", + "value": "TextBox เป็นฟีเจอร์เบต้า ค่าเริ่มต้นและพฤติกรรมอาจเปลี่ยนแปลงระหว่างการทดสอบ" } }, - "ja": { + "tr": { "stringUnit": { - "state": "translated", - "value": "Cloud パネルのチームメニュー、または設定 › アカウントから参加できます。" + "state": "needs_review", + "value": "TextBox bir beta özelliğidir. Varsayılanlar ve davranış test süresince değişebilir." } }, - "ko": { + "uk": { "stringUnit": { - "state": "translated", - "value": "Cloud 패널의 팀 메뉴 또는 설정 › 계정에서 참여하세요." + "state": "needs_review", + "value": "TextBox — бета-функція. Під час тестування типові значення й поведінка можуть змінюватися." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "从 Cloud 面板的团队菜单或“设置 › 账户”加入。" + "value": "TextBox 是测试版功能。在测试期间,默认值和行为可能会变化。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "從 Cloud 面板的團隊選單或「設定 › 帳號」加入。" + "value": "文字框是一項 Beta 功能。在測試期間,其預設值與行為可能會發生變更。" } } } }, - "notification.teamInvite.someone": { + "cli.auth.team.inviteFailed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "A teammate" + "value": "Could not invite %1$@: %2$@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أحد أعضاء الفريق" + "value": "تعذّرت دعوة %1$@: %2$@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ein Teammitglied" + "value": "%1$@ konnte nicht eingeladen werden: %2$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Un compañero de equipo" + "value": "No se pudo invitar a %1$@: %2$@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Un coéquipier" + "value": "Impossible d’inviter %1$@ : %2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "チームメンバー" + "value": "%1$@ を招待できませんでした: %2$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "팀원" + "value": "%1$@을(를) 초대할 수 없습니다: %2$@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "一位队友" + "value": "无法邀请 %1$@:%2$@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "一位隊友" + "value": "無法邀請 %1$@:%2$@" } } } }, - "notification.teamInvite.subtitle": { + "cli.auth.team.inviteUsage": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux Cloud team" + "value": "Usage: cmux auth team invite ... [--role admin|member] [--team ]" } }, "ar": { "stringUnit": { "state": "translated", - "value": "فريق cmux Cloud" + "value": "الاستخدام: cmux auth team invite ... [--role admin|member] [--team ]" } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux Cloud-Team" + "value": "Verwendung: cmux auth team invite ... [--role admin|member] [--team ]" } }, "es": { "stringUnit": { "state": "translated", - "value": "Equipo de cmux Cloud" + "value": "Uso: cmux auth team invite ... [--role admin|member] [--team ]" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Équipe cmux Cloud" + "value": "Utilisation : cmux auth team invite ... [--role admin|member] [--team ]" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux Cloud チーム" + "value": "使用方法: cmux auth team invite ... [--role admin|member] [--team ]" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux Cloud 팀" + "value": "사용법: cmux auth team invite ... [--role admin|member] [--team ]" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux Cloud 团队" + "value": "用法:cmux auth team invite ... [--role admin|member] [--team ]" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux Cloud 團隊" + "value": "用法:cmux auth team invite ... [--role admin|member] [--team ]" } } } }, - "notification.teamInvite.title": { + "cli.auth.team.invited": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@ invited you to %2$@" + "value": "Invited %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "دعاك %1$@ إلى %2$@" + "value": "تمت دعوة %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@ hat dich zu %2$@ eingeladen" + "value": "%@ eingeladen" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@ te invitó a %2$@" + "value": "Se invitó a %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ vous a invité à %2$@" + "value": "%@ invité" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@ が %2$@ に招待しました" + "value": "%@ を招待しました" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@ 님이 %2$@에 초대했습니다" + "value": "%@을(를) 초대했습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@ 邀请你加入 %2$@" + "value": "已邀请 %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@ 邀請你加入 %2$@" + "value": "已邀請 %@" } } } }, - "cloud.teamPicker.invitedTo": { + "cli.auth.team.pendingInvitation": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Invited to" + "value": " pending %1$@ %2$@ %3$@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مدعو إلى" + "value": " معلّقة %1$@ %2$@ %3$@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Eingeladen zu" + "value": " ausstehend %1$@ %2$@ %3$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Invitado a" + "value": " pendiente %1$@ %2$@ %3$@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Invité à" + "value": " en attente %1$@ %2$@ %3$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "招待されたチーム" + "value": " 保留中 %1$@ %2$@ %3$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "초대받은 팀" + "value": " 대기 중 %1$@ %2$@ %3$@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "受邀加入" + "value": " 待处理 %1$@ %2$@ %3$@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "受邀加入" + "value": " 待處理 %1$@ %2$@ %3$@" } } } }, - "cloud.teamPicker.join": { + "cli.auth.team.removeUsage": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Join %@" + "value": "Usage: cmux auth team remove [--team ]" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الانضمام إلى %@" + "value": "الاستخدام: cmux auth team remove [--team ]" } }, "de": { "stringUnit": { "state": "translated", - "value": "%@ beitreten" + "value": "Verwendung: cmux auth team remove [--team ]" } }, "es": { "stringUnit": { "state": "translated", - "value": "Unirse a %@" + "value": "Uso: cmux auth team remove [--team ]" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Rejoindre %@" + "value": "Utilisation : cmux auth team remove [--team ]" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@ に参加" + "value": "使用方法: cmux auth team remove [--team ]" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%@ 참여" + "value": "사용법: cmux auth team remove [--team ]" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "加入 %@" + "value": "用法:cmux auth team remove [--team ]" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "加入 %@" + "value": "用法:cmux auth team remove [--team ]" } } } }, - "agentHibernation.manual.agentBusy": { + "cli.auth.team.removed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This agent is working or waiting for input." + "value": "Removed." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このエージェントは作業中か、入力を待っています。" + "value": "تمت الإزالة." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Agent arbeitet oder wartet auf eine Eingabe." + "value": "Entfernt." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Cet agent travaille ou attend une saisie." + "value": "Eliminado." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "هذا الوكيل يعمل أو ينتظر إدخالًا." + "value": "Supprimé." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Este agente está trabajando o esperando una respuesta." + "value": "削除しました。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "此代理程式正在工作或等待輸入。" + "value": "제거했습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此智能体正在工作或等待输入。" + "value": "已移除。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 에이전트는 작업 중이거나 입력을 기다리고 있습니다." + "value": "已移除。" } } } }, - "agentHibernation.manual.alreadyHibernated": { + "cli.auth.team.revokeUsage": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This agent is already hibernated." + "value": "Usage: cmux auth team revoke-invite [--team ]" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このエージェントはすでに休止中です。" + "value": "الاستخدام: cmux auth team revoke-invite [--team ]" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Agent ruht bereits." + "value": "Verwendung: cmux auth team revoke-invite [--team ]" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Cet agent est déjà en veille." + "value": "Uso: cmux auth team revoke-invite [--team ]" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "هذا الوكيل في وضع السبات بالفعل." + "value": "Utilisation : cmux auth team revoke-invite [--team ]" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Este agente ya está en hibernación." + "value": "使用方法: cmux auth team revoke-invite [--team ]" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "此代理程式已經休眠。" + "value": "사용법: cmux auth team revoke-invite [--team ]" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此智能体已休眠。" + "value": "用法:cmux auth team revoke-invite [--team ]" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 에이전트는 이미 휴면 중입니다." + "value": "用法:cmux auth team revoke-invite [--team ]" } } } }, - "agentHibernation.manual.lifecycleUnknown": { + "cli.auth.team.revoked": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux can't tell whether this agent is idle, so it was left running." + "value": "Revoked." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux はこのエージェントがアイドル状態か判断できないため、実行したままにしました。" + "value": "تم الإلغاء." } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux kann nicht erkennen, ob dieser Agent untätig ist, daher läuft er weiter." + "value": "Widerrufen." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux ne peut pas savoir si cet agent est inactif, il continue donc de tourner." + "value": "Revocado." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "لا يستطيع cmux معرفة ما إذا كان هذا الوكيل خاملًا، لذا تُرك قيد التشغيل." + "value": "Révoqué." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux no puede saber si este agente está inactivo, así que sigue en ejecución." + "value": "取り消しました。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux 無法判斷此代理程式是否閒置,因此保持執行。" + "value": "취소했습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 无法判断此智能体是否空闲,因此保持运行。" + "value": "已撤销。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux가 이 에이전트의 유휴 여부를 알 수 없어 실행 상태로 두었습니다." + "value": "已撤銷。" } } } }, - "agentHibernation.manual.notRestorable": { + "teamMembers.error.forbidden": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This terminal has no agent that cmux can resume the way it was started." + "value": "Only team admins can do that." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このターミナルには、起動時と同じ方法で cmux が再開できるエージェントがありません。" + "value": "يمكن لمسؤولي الفريق فقط القيام بذلك." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieses Terminal hat keinen Agenten, den cmux so fortsetzen kann, wie er gestartet wurde." + "value": "Das können nur Team-Admins." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Ce terminal n’a aucun agent que cmux peut reprendre de la façon dont il a été lancé." + "value": "Solo los administradores del equipo pueden hacer eso." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "لا تحتوي هذه الطرفية على وكيل يستطيع cmux استئنافه بالطريقة التي بدأ بها." + "value": "Seuls les administrateurs de l’équipe peuvent faire cela." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Esta terminal no tiene un agente que cmux pueda reanudar tal como se inició." + "value": "この操作はチームの管理者のみ行えます。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "此終端機沒有 cmux 能以原本啟動方式恢復的代理程式。" + "value": "팀 관리자만 할 수 있습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此终端没有 cmux 能按原启动方式恢复的智能体。" + "value": "只有团队管理员可以执行此操作。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 터미널에는 시작된 방식 그대로 cmux가 재개할 수 있는 에이전트가 없습니다." + "value": "只有團隊管理員可以執行此操作。" } } } }, - "agentHibernation.manual.notRunning": { + "teamMembers.error.invalidEmail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This terminal is not running, so there is nothing to hibernate." + "value": "Enter at least one email address." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このターミナルは実行されていないため、休止するものがありません。" + "value": "أدخل عنوان بريد إلكتروني واحدًا على الأقل." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieses Terminal läuft nicht, daher gibt es nichts zum Ruhen." + "value": "Gib mindestens eine E-Mail-Adresse ein." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Ce terminal n’est pas en cours d’exécution, il n’y a donc rien à mettre en veille." + "value": "Introduce al menos una dirección de correo." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "هذه الطرفية لا تعمل، لذا لا يوجد ما يمكن وضعه في السبات." + "value": "Saisissez au moins une adresse e-mail." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Esta terminal no se está ejecutando, así que no hay nada que hibernar." + "value": "メールアドレスを 1 つ以上入力してください。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "此終端機未在執行,沒有可休眠的內容。" + "value": "이메일 주소를 하나 이상 입력하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此终端未在运行,没有可休眠的内容。" + "value": "请输入至少一个电子邮件地址。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 터미널은 실행 중이 아니어서 휴면할 대상이 없습니다." + "value": "請輸入至少一個電子郵件地址。" } } } }, - "agentHibernation.manual.processScopeUnsafe": { + "teamMembers.error.invalidLinkOptions": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This terminal is running other work, such as background jobs, that hibernation would stop." + "value": "Link expiry must be 1, 7 or 30 days and max uses at least 1." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このターミナルでは、休止すると停止してしまうバックグラウンドジョブなどの作業が実行中です。" + "value": "يجب أن تكون صلاحية الرابط 1 أو 7 أو 30 يومًا وعدد الاستخدامات 1 على الأقل." } }, "de": { "stringUnit": { "state": "translated", - "value": "In diesem Terminal läuft weitere Arbeit, etwa Hintergrundjobs, die das Ruhen beenden würde." + "value": "Der Link muss nach 1, 7 oder 30 Tagen ablaufen und mindestens 1 Verwendung erlauben." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Ce terminal exécute d’autres tâches, comme des tâches en arrière-plan, que la mise en veille arrêterait." + "value": "El enlace debe caducar en 1, 7 o 30 días y permitir al menos 1 uso." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "تشغّل هذه الطرفية أعمالًا أخرى، مثل مهام الخلفية، سيوقفها السبات." + "value": "L’expiration du lien doit être de 1, 7 ou 30 jours et le nombre d’utilisations d’au moins 1." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Esta terminal está ejecutando otro trabajo, como tareas en segundo plano, que la hibernación detendría." + "value": "リンクの有効期限は 1、7、30 日のいずれか、最大使用回数は 1 以上にしてください。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "此終端機正在執行其他工作(例如背景工作),休眠會使其停止。" + "value": "링크 만료는 1, 7 또는 30일이어야 하며 최대 사용 횟수는 1 이상이어야 합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此终端正在运行其他工作(例如后台任务),休眠会使其停止。" + "value": "链接有效期必须为 1、7 或 30 天,最大使用次数至少为 1。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 터미널에서 백그라운드 작업 등 휴면하면 중단될 다른 작업이 실행 중입니다." + "value": "連結有效期必須為 1、7 或 30 天,最大使用次數至少為 1。" } } } }, - "agentHibernation.manual.recentlyActive": { + "teamMembers.error.invitationNotFound": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This agent was active a moment ago. Try again in a few seconds." + "value": "That invitation no longer exists." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このエージェントは少し前まで動作していました。数秒後にもう一度お試しください。" + "value": "لم تعد هذه الدعوة موجودة." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Agent war gerade eben aktiv. Versuche es in ein paar Sekunden erneut." + "value": "Diese Einladung existiert nicht mehr." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Cet agent était actif il y a un instant. Réessayez dans quelques secondes." + "value": "Esa invitación ya no existe." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "كان هذا الوكيل نشطًا قبل لحظة. حاول مرة أخرى بعد بضع ثوانٍ." + "value": "Cette invitation n’existe plus." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Este agente estuvo activo hace un momento. Inténtalo de nuevo en unos segundos." + "value": "その招待はもう存在しません。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "此代理程式剛剛仍在活動。請幾秒後再試。" + "value": "해당 초대가 더 이상 존재하지 않습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此智能体刚刚仍在活动。请几秒后再试。" + "value": "该邀请已不存在。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 에이전트는 방금 전까지 활동했습니다. 몇 초 후 다시 시도하세요." + "value": "該邀請已不存在。" } } } }, - "agentHibernation.manual.surfaceNotFound": { + "teamMembers.error.lastAdmin": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No terminal matches that surface." + "value": "A team must keep at least one admin." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "そのサーフェスに一致するターミナルはありません。" + "value": "يجب أن يبقى في الفريق مسؤول واحد على الأقل." } }, "de": { "stringUnit": { "state": "translated", - "value": "Kein Terminal passt zu dieser Oberfläche." + "value": "Ein Team braucht mindestens einen Admin." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Aucun terminal ne correspond à cette surface." + "value": "Un equipo debe conservar al menos un administrador." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "لا توجد طرفية تطابق هذا السطح." + "value": "Une équipe doit conserver au moins un administrateur." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ninguna terminal coincide con esa superficie." + "value": "チームには管理者が少なくとも 1 人必要です。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "沒有符合該 surface 的終端機。" + "value": "팀에는 관리자가 한 명 이상 있어야 합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "没有与该 surface 匹配的终端。" + "value": "团队必须至少保留一位管理员。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "해당 서피스와 일치하는 터미널이 없습니다." + "value": "團隊必須至少保留一位管理員。" } } } }, - "agentHibernation.manual.teardownInProgress": { + "teamMembers.error.memberNotFound": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This agent is already being hibernated." + "value": "That person is not a member of this team." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このエージェントはすでに休止処理中です。" + "value": "هذا الشخص ليس عضوًا في هذا الفريق." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Agent wird bereits in den Ruhezustand versetzt." + "value": "Diese Person ist kein Mitglied dieses Teams." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Cet agent est déjà en cours de mise en veille." + "value": "Esa persona no es miembro de este equipo." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "يجري بالفعل وضع هذا الوكيل في السبات." + "value": "Cette personne n’est pas membre de cette équipe." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Este agente ya se está hibernando." + "value": "その人はこのチームのメンバーではありません。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "此代理程式正在休眠中。" + "value": "해당 사용자는 이 팀의 구성원이 아닙니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此智能体正在休眠中。" + "value": "该用户不是此团队的成员。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 에이전트는 이미 휴면 처리 중입니다." + "value": "該使用者不是此團隊的成員。" } } } }, - "agentHibernation.manual.teardownRefused": { + "teamMembers.error.noTeam": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The agent changed or its session could not be protected, so it was left running. Try again later." + "value": "Select a team first." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "エージェントが変化したか、セッションを保護できなかったため、実行したままにしました。後でもう一度お試しください。" + "value": "اختر فريقًا أولًا." } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Agent hat sich geändert oder seine Sitzung konnte nicht geschützt werden, daher läuft er weiter. Versuche es später erneut." + "value": "Wähle zuerst ein Team aus." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "L’agent a changé ou sa session n’a pas pu être protégée, il continue donc de tourner. Réessayez plus tard." + "value": "Selecciona primero un equipo." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "تغيّر الوكيل أو تعذّرت حماية جلسته، لذا تُرك قيد التشغيل. حاول مرة أخرى لاحقًا." + "value": "Sélectionnez d’abord une équipe." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "El agente cambió o no se pudo proteger su sesión, así que sigue en ejecución. Inténtalo más tarde." + "value": "まずチームを選択してください。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "代理程式有變動或其工作階段無法受保護,因此保持執行。請稍後再試。" + "value": "먼저 팀을 선택하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "智能体有变化或其会话无法受到保护,因此保持运行。请稍后再试。" + "value": "请先选择团队。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "에이전트가 변경되었거나 세션을 보호할 수 없어 실행 상태로 두었습니다. 나중에 다시 시도하세요." + "value": "請先選擇團隊。" } } } }, - "agentHibernation.manual.unconfirmedInput": { + "teamMembers.error.offline": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This agent has typed input it has not received yet." + "value": "cmux Cloud is unreachable. Check your connection and try again." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このエージェントには、まだ受け取っていない入力があります。" + "value": "تعذّر الوصول إلى cmux Cloud. تحقق من اتصالك وحاول مرة أخرى." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Agent hat getippte Eingaben, die er noch nicht erhalten hat." + "value": "cmux Cloud ist nicht erreichbar. Prüfe deine Verbindung und versuche es erneut." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Cet agent a une saisie qu’il n’a pas encore reçue." + "value": "No se puede acceder a cmux Cloud. Comprueba tu conexión e inténtalo de nuevo." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "لدى هذا الوكيل إدخال مكتوب لم يستلمه بعد." + "value": "cmux Cloud est injoignable. Vérifiez votre connexion et réessayez." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Este agente tiene texto escrito que aún no ha recibido." + "value": "cmux Cloud に接続できません。接続を確認してもう一度お試しください。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "此代理程式有尚未收到的輸入。" + "value": "cmux Cloud에 연결할 수 없습니다. 연결을 확인하고 다시 시도하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此智能体有尚未收到的输入。" + "value": "无法连接到 cmux Cloud。请检查网络连接后重试。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 에이전트에는 아직 받지 않은 입력이 있습니다." + "value": "無法連線至 cmux Cloud。請檢查網路連線後再試一次。" } } } }, - "agentHibernation.manual.visible": { + "teamMembers.error.rateLimited": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This agent is on screen. Switch away from it first." + "value": "Too many invitations. Wait a minute and try again." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このエージェントは画面に表示されています。先に別の場所に切り替えてください。" + "value": "دعوات كثيرة جدًا. انتظر دقيقة وحاول مرة أخرى." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Agent ist auf dem Bildschirm. Wechsle zuerst weg." + "value": "Zu viele Einladungen. Warte eine Minute und versuche es erneut." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Cet agent est à l’écran. Passez d’abord à autre chose." + "value": "Demasiadas invitaciones. Espera un minuto e inténtalo de nuevo." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "هذا الوكيل ظاهر على الشاشة. انتقل بعيدًا عنه أولًا." + "value": "Trop d’invitations. Patientez une minute et réessayez." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Este agente está en pantalla. Cambia a otro lugar primero." + "value": "招待が多すぎます。1 分待ってからもう一度お試しください。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "此代理程式正顯示在螢幕上。請先切換離開。" + "value": "초대가 너무 많습니다. 잠시 후 다시 시도하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此智能体正显示在屏幕上。请先切换离开。" + "value": "邀请次数过多。请稍候一分钟再试。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 에이전트가 화면에 표시되어 있습니다. 먼저 다른 곳으로 전환하세요." + "value": "邀請次數過多。請稍候一分鐘再試。" } } } }, - "agentHibernation.wake.notHibernated": { + "teamMembers.error.seatLimit": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This agent is not hibernated." + "value": "This plan includes 3 members. Remove someone or upgrade to Team to invite more." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このエージェントは休止していません。" + "value": "تتضمن هذه الخطة 3 أعضاء. أزل أحدهم أو قم بالترقية إلى Team لدعوة المزيد." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Agent ruht nicht." + "value": "Dieser Plan umfasst 3 Mitglieder. Entferne jemanden oder wechsle zu Team, um weitere einzuladen." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Cet agent n’est pas en veille." + "value": "Este plan incluye 3 miembros. Elimina a alguien o cambia a Team para invitar a más." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "هذا الوكيل ليس في وضع السبات." + "value": "Cette offre inclut 3 membres. Retirez quelqu’un ou passez à Team pour inviter plus de personnes." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Este agente no está en hibernación." + "value": "このプランにはメンバー 3 人が含まれます。誰かを削除するか、Team にアップグレードしてさらに招待してください。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "此代理程式未休眠。" + "value": "이 플랜에는 구성원 3명이 포함됩니다. 구성원을 제거하거나 Team으로 업그레이드하여 더 초대하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此智能体未休眠。" + "value": "此方案包含 3 位成员。请移除成员或升级到 Team 以邀请更多人。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 에이전트는 휴면 중이 아닙니다." + "value": "此方案包含 3 位成員。請移除成員或升級至 Team 以邀請更多人。" } } } }, - "agentHibernation.wake.resumeUnavailable": { + "sidebar.account.invitePeople": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux could not start this agent's resume command." + "value": "Invite people…" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux はこのエージェントの再開コマンドを開始できませんでした。" + "value": "دعوة أشخاص…" } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux konnte den Fortsetzungsbefehl dieses Agenten nicht starten." + "value": "Personen einladen…" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux n’a pas pu lancer la commande de reprise de cet agent." + "value": "Invitar personas…" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "تعذّر على cmux بدء أمر الاستئناف لهذا الوكيل." + "value": "Inviter des personnes…" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux no pudo iniciar el comando de reanudación de este agente." + "value": "メンバーを招待…" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux 無法啟動此代理程式的恢復指令。" + "value": "구성원 초대…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 无法启动此智能体的恢复命令。" + "value": "邀请成员…" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux가 이 에이전트의 재개 명령을 시작할 수 없습니다." + "value": "邀請成員…" } } } }, - "agentHibernation.wake.surfaceNotFound": { + "sidebar.account.members": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No terminal matches that surface." + "value": "Members…" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "そのサーフェスに一致するターミナルはありません。" + "value": "الأعضاء…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Kein Terminal passt zu dieser Oberfläche." + "value": "Mitglieder…" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Aucun terminal ne correspond à cette surface." + "value": "Miembros…" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "لا توجد طرفية تطابق هذا السطح." + "value": "Membres…" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ninguna terminal coincide con esa superficie." + "value": "メンバー…" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "沒有符合該 surface 的終端機。" + "value": "구성원…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "没有与该 surface 匹配的终端。" + "value": "成员…" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "해당 서피스와 일치하는 터미널이 없습니다." + "value": "成員…" } } } }, - "agentHibernation.wake.teardownInProgress": { + "command.auth.teamMembers.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This agent is still being hibernated. Try again in a moment." + "value": "Invite Team Members" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このエージェントはまだ休止処理中です。しばらくしてからもう一度お試しください。" + "value": "دعوة أعضاء الفريق" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Agent wird noch in den Ruhezustand versetzt. Versuche es gleich noch einmal." + "value": "Teammitglieder einladen" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Cet agent est encore en cours de mise en veille. Réessayez dans un instant." + "value": "Invitar miembros del equipo" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "لا يزال هذا الوكيل قيد الوضع في السبات. حاول مرة أخرى بعد لحظة." + "value": "Inviter des membres de l’équipe" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Este agente todavía se está hibernando. Inténtalo en un momento." + "value": "チームメンバーを招待" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "此代理程式仍在休眠中。請稍後再試。" + "value": "팀 구성원 초대" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此智能体仍在休眠中。请稍后再试。" + "value": "邀请团队成员" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 에이전트는 아직 휴면 처리 중입니다. 잠시 후 다시 시도하세요." + "value": "邀請團隊成員" } } } }, - "cli.agentHibernation.hibernated": { + "socket.authTeam.missingInvitation": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "OK hibernated %@" + "value": "An invitation id or link id is required." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "OK 休止しました %@" + "value": "مطلوب معرّف دعوة أو معرّف رابط." } }, "de": { "stringUnit": { "state": "translated", - "value": "OK ruht jetzt %@" + "value": "Eine Einladungs-ID oder Link-ID ist erforderlich." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "OK mis en veille %@" + "value": "Se requiere un ID de invitación o de enlace." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "OK تم وضعه في السبات %@" + "value": "Un identifiant d’invitation ou de lien est requis." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "OK hibernado %@" + "value": "招待 ID またはリンク ID が必要です。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "OK 已休眠 %@" + "value": "초대 ID 또는 링크 ID가 필요합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "OK 已休眠 %@" + "value": "需要邀请 ID 或链接 ID。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "OK 휴면함 %@" + "value": "需要邀請 ID 或連結 ID。" } } } }, - "cli.agentHibernation.usage": { + "socket.authTeam.missingUser": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" + "value": "A user id is required." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "使い方: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" + "value": "مطلوب معرّف مستخدم." } }, "de": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" + "value": "Eine Benutzer-ID ist erforderlich." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Utilisation: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" + "value": "Se requiere un ID de usuario." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" + "value": "Un identifiant d’utilisateur est requis." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Uso: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" + "value": "ユーザー ID が必要です。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "用法: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" + "value": "사용자 ID가 필요합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用法: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" + "value": "需要用户 ID。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "사용법: cmux agent-hibernation [--json]\n cmux agent-hibernation [--workspace ] [--json]" + "value": "需要使用者 ID。" } } } }, - "cli.agentHibernation.woke": { + "sidebar.account.invitePeople.short": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "OK woke %@" + "value": "Invite People" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "OK 再開しました %@" + "value": "دعوة أشخاص" } }, "de": { "stringUnit": { "state": "translated", - "value": "OK geweckt %@" + "value": "Personen einladen" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "OK réveillé %@" + "value": "Invitar personas" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "OK تم إيقاظه %@" + "value": "Inviter des personnes" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "OK reanudado %@" + "value": "メンバーを招待" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "OK 已喚醒 %@" + "value": "구성원 초대" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "OK 已唤醒 %@" + "value": "邀请成员" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "OK 깨움 %@" + "value": "邀請成員" } } } }, - "socket.agentHibernation.surfaceRequired": { + "sidebar.account.invite.button": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Missing or invalid surface_id" + "value": "Invite" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "surface_id がないか無効です" + "value": "دعوة" } }, "de": { "stringUnit": { "state": "translated", - "value": "surface_id fehlt oder ist ungültig" + "value": "Einladen" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "surface_id manquant ou invalide" + "value": "Invitar" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "surface_id مفقود أو غير صالح" + "value": "Inviter" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Falta surface_id o no es válido" + "value": "招待" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "缺少 surface_id 或其無效" + "value": "초대" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "缺少 surface_id 或其无效" + "value": "邀请" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "surface_id가 없거나 올바르지 않습니다" + "value": "邀請" } } } }, - "machines.meter.upgrade": { + "cloudInvite.done": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Upgrade for more" + "value": "Done" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "アップグレードで追加" + "value": "تم" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "升级以获得更多" + "value": "Fertig" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Upgrade für mehr" + "value": "Listo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Passez au forfait supérieur pour en obtenir plus" + "value": "Terminé" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "ترقية للحصول على المزيد" + "value": "完了" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Actualizar para obtener más" + "value": "완료" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "升級以取得更多" + "value": "完成" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "더 사용하려면 업그레이드" + "value": "完成" } } } }, - "settings.betaFeatures.dock.subtitle": { + "cloudInvite.inviteMore": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Adds Dock to the right sidebar for custom terminal controls." + "value": "Invite More" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Fügt der rechten Seitenleiste das Dock für benutzerdefinierte Terminal-Steuerelemente hinzu." + "value": "دعوة المزيد" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Ajoute le Dock à la barre latérale droite pour les commandes de terminal personnalisées." + "value": "Weitere einladen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يضيف Dock إلى الشريط الجانبي الأيمن لعناصر التحكم المخصصة في الطرفية." + "value": "Invitar a más" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Añade el Dock a la barra lateral derecha para controles de terminal personalizados." + "value": "Inviter d’autres personnes" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在右側邊欄加入 Dock,用來放置自訂的終端機控制項。" + "value": "さらに招待" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在右侧边栏添加 Dock,用来放置自定义的终端控件。" + "value": "더 초대" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "오른쪽 사이드바에 Dock을 추가해 터미널 컨트롤을 직접 구성할 수 있습니다." + "value": "继续邀请" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "右サイドバーに Dock を追加し、ターミナル用のカスタムコントロールを配置できるようにします。" + "value": "繼續邀請" } } } }, - "cli.agentMessage.noAgent": { + "cloudInvite.linkCopied": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No agent activity seen on that surface yet. The message waits until an agent there picks it up." + "value": "Invite link copied. Anyone with it joins as a member for 7 days." } }, "ar": { "stringUnit": { "state": "translated", - "value": "لم يُرصد أي نشاط لوكيل على هذا السطح بعد. تنتظر الرسالة حتى يستلمها وكيل هناك." + "value": "تم نسخ رابط الدعوة. يمكن لأي شخص يملكه الانضمام كعضو لمدة 7 أيام." } }, "de": { "stringUnit": { "state": "translated", - "value": "Auf dieser Oberfläche wurde noch keine Agent-Aktivität erkannt. Die Nachricht wartet, bis ein Agent dort sie abholt." + "value": "Einladungslink kopiert. Wer ihn hat, tritt 7 Tage lang als Mitglied bei." } }, "es": { "stringUnit": { "state": "translated", - "value": "Todavía no se ha visto actividad de ningún agente en esa superficie. El mensaje espera hasta que un agente allí lo recoja." + "value": "Enlace de invitación copiado. Cualquiera que lo tenga se une como miembro durante 7 días." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucune activité d'agent détectée sur cette surface pour l'instant. Le message attend qu'un agent l'y récupère." + "value": "Lien d’invitation copié. Toute personne qui l’a rejoint comme membre pendant 7 jours." } }, "ja": { "stringUnit": { "state": "translated", - "value": "そのサーフェスではまだエージェントの動きが確認されていません。そこのエージェントが受け取るまでメッセージは待機します。" + "value": "招待リンクをコピーしました。リンクを持つ人は 7 日間メンバーとして参加できます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "해당 표면에서 아직 에이전트 활동이 없습니다. 그곳의 에이전트가 가져갈 때까지 메시지가 대기합니다." + "value": "초대 링크를 복사했습니다. 링크가 있으면 7일 동안 구성원으로 참여할 수 있습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "尚未在该表面看到代理活动。消息会等待,直到那里的代理取走它。" + "value": "已复制邀请链接。持有链接者可在 7 天内以成员身份加入。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "尚未在該表面看到代理活動。訊息會等待,直到那裡的代理取走它。" + "value": "已複製邀請連結。持有連結者可在 7 天內以成員身分加入。" } } } }, - "cli.agentMessage.queued": { + "cloudInvite.manageMembers": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Queued message %@ for %@ (%@)." + "value": "Manage members…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "وُضعت الرسالة %1$@ في قائمة الانتظار لـ %2$@ (%3$@)." + "value": "إدارة الأعضاء…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nachricht %1$@ für %2$@ (%3$@) in die Warteschlange gestellt." + "value": "Mitglieder verwalten…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mensaje %1$@ en cola para %2$@ (%3$@)." + "value": "Gestionar miembros…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Message %1$@ mis en file pour %2$@ (%3$@)." + "value": "Gérer les membres…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "メッセージ %1$@ を %2$@(%3$@)宛てにキューに入れました。" + "value": "メンバーを管理…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "메시지 %1$@을(를) %2$@(%3$@) 앞으로 대기열에 넣었습니다." + "value": "구성원 관리…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已将消息 %1$@ 排入 %2$@(%3$@)的队列。" + "value": "管理成员…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已將訊息 %1$@ 排入 %2$@(%3$@)的佇列。" + "value": "管理成員…" } } } }, - "cli.help.agentInbox": { + "cloudInvite.partial": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\nيعرض رسائل الوكلاء، الأحدث أولًا. بدون --surface، يعرض الرسائل لكل\nالأسطح. يضع --mark-read علامة مقروءة على الرسائل المعروضة." + "value": "Could not invite: %@" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\nListet Agent-Nachrichten auf, neueste zuerst. Ohne --surface werden Nachrichten für\nalle Oberflächen aufgelistet. --mark-read markiert die aufgelisteten Nachrichten als gelesen." + "value": "تعذّرت الدعوة: %@" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "Usage: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\nList agent messages, newest first. Without --surface, lists messages for\nevery surface. --mark-read marks the listed messages read." + "value": "Konnte nicht einladen: %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Uso: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\nLista los mensajes de agentes, del más reciente al más antiguo. Sin --surface, lista los mensajes de\ntodas las superficies. --mark-read marca como leídos los mensajes listados." + "value": "No se pudo invitar: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\nListe les messages d'agent, du plus récent au plus ancien. Sans --surface, liste les messages de\ntoutes les surfaces. --mark-read marque les messages listés comme lus." + "value": "Impossible d’inviter : %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "使い方: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\nエージェントのメッセージを新しい順に一覧表示します。--surface を指定しないと\nすべてのサーフェスのメッセージを表示します。--mark-read は表示したメッセージを既読にします。" + "value": "招待できませんでした: %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용법: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\n에이전트 메시지를 최신순으로 나열합니다. --surface가 없으면\n모든 표면의 메시지를 나열합니다. --mark-read는 나열된 메시지를 읽음으로 표시합니다." + "value": "초대할 수 없음: %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用法: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\n列出代理消息,最新的在前。未指定 --surface 时,列出\n所有表面的消息。--mark-read 会将列出的消息标记为已读。" + "value": "无法邀请:%@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "用法: cmux agent inbox [--surface ] [--state queued|delivered|read|failed] [--limit ] [--mark-read] [--json]\n\n列出代理訊息,最新的在前。未指定 --surface 時,列出\n所有表面的訊息。--mark-read 會將列出的訊息標為已讀。" + "value": "無法邀請:%@" } } } }, - "cli.help.agentMessage": { + "cloudInvite.role.admin": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\nيرسل رسالة إلى الوكيل الذي يعمل في مساحة عمل أو سطح آخر. يوصلها cmux\nعبر خطافات ذلك الوكيل، ولا يكتبها أبدًا في طرفيته،\nلذا لا يمكن أن تقع داخل موجّه مكتوب نصفه. تستيقظ جلسة Claude Code الخاملة\nلقراءتها، وتقرأها الجلسة المشغولة في خطوتها التالية.\n\n هو معرّف أو مرجع مساحة عمل أو سطح (workspace:2، surface:5)، أو\nعنوان مساحة عمل (مطابقة تامة أولًا، ثم بادئة فريدة). استخدم - لقراءة النص من\nstdin. القيمة الافتراضية لـ --from هي عنوان مساحة العمل المرسِلة.\n\nأمثلة:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" + "value": "Admin" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\nSendet eine Nachricht an den Agenten in einem anderen Workspace oder einer anderen Oberfläche. cmux\nliefert sie über die Hooks dieses Agenten aus, nie durch Tippen in sein Terminal,\ndaher kann sie nicht in einem halb getippten Prompt landen. Eine untätige Claude-Code-Sitzung wacht\nauf, um sie zu lesen; eine beschäftigte liest sie bei ihrem nächsten Schritt.\n\n ist eine Workspace- oder Oberflächen-ID bzw. -Referenz (workspace:2, surface:5) oder ein\nWorkspace-Titel (zuerst exakt, dann ein eindeutiges Präfix). Mit - wird der Text von\nstdin gelesen. --from ist standardmäßig der Titel des sendenden Workspace.\n\nBeispiele:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" + "value": "مسؤول" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "Usage: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\nSend a message to the agent running in another workspace or surface. cmux\ndelivers it through that agent's hooks, never by typing into its terminal,\nso it cannot land in a half-typed prompt. An idle Claude Code session wakes\nup to read it; a busy one reads it at its next step.\n\n is a workspace or surface id or ref (workspace:2, surface:5), or a\nworkspace title (exact, then a unique prefix). Use - to read the text from\nstdin. --from defaults to the sending workspace's title.\n\nExamples:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" + "value": "Administrator" } }, "es": { "stringUnit": { "state": "translated", - "value": "Uso: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\nEnvía un mensaje al agente que se ejecuta en otro espacio de trabajo o superficie. cmux\nlo entrega a través de los hooks de ese agente, nunca escribiendo en su terminal,\npor lo que no puede acabar en un prompt a medio escribir. Una sesión inactiva de Claude Code se despierta\npara leerlo; una ocupada lo lee en su siguiente paso.\n\n es un ID o referencia de espacio de trabajo o superficie (workspace:2, surface:5), o un\ntítulo de espacio de trabajo (exacto, luego un prefijo único). Usa - para leer el texto desde\nstdin. --from usa por defecto el título del espacio de trabajo que envía.\n\nEjemplos:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" + "value": "Administrador" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\nEnvoie un message à l'agent d'un autre espace de travail ou d'une autre surface. cmux\nle remet via les hooks de cet agent, jamais en tapant dans son terminal,\nil ne peut donc pas atterrir dans un prompt à moitié tapé. Une session Claude Code inactive se réveille\npour le lire ; une session occupée le lit à sa prochaine étape.\n\n est un identifiant ou une référence d'espace de travail ou de surface (workspace:2, surface:5), ou un\ntitre d'espace de travail (exact, puis un préfixe unique). Utilisez - pour lire le texte depuis\nstdin. Par défaut, --from vaut le titre de l'espace de travail expéditeur.\n\nExemples :\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" + "value": "Administrateur" } }, "ja": { "stringUnit": { "state": "translated", - "value": "使い方: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\n別のワークスペースまたはサーフェスで動いているエージェントにメッセージを送ります。cmux は\nそのエージェントのフック経由で届け、ターミナルに打ち込むことはないので、\n入力途中のプロンプトに紛れ込みません。アイドル中の Claude Code セッションは起きて\n読み、作業中のセッションは次のステップで読みます。\n\n はワークスペースかサーフェスの ID または参照(workspace:2、surface:5)、または\nワークスペースのタイトル(完全一致、次に一意な前方一致)です。- を指定すると\nstdin からテキストを読みます。--from の既定値は送信元ワークスペースのタイトルです。\n\n例:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" + "value": "管理者" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용법: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\n다른 워크스페이스나 표면에서 실행 중인 에이전트에게 메시지를 보냅니다. cmux는\n해당 에이전트의 훅을 통해 전달하며, 절대 터미널에 입력하지 않으므로\n반쯤 입력된 프롬프트에 섞일 수 없습니다. 유휴 상태의 Claude Code 세션은 깨어나서\n읽고, 작업 중인 세션은 다음 단계에서 읽습니다.\n\n은 워크스페이스나 표면의 ID 또는 참조(workspace:2, surface:5), 또는\n워크스페이스 제목(먼저 정확히 일치, 그다음 고유한 접두사)입니다. -를 쓰면\nstdin에서 텍스트를 읽습니다. --from의 기본값은 보내는 워크스페이스의 제목입니다.\n\n예시:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" + "value": "관리자" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用法: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\n向在另一个工作区或表面中运行的代理发送消息。cmux\n通过该代理的 hook 投递消息,绝不会向它的终端输入按键,\n因此消息不会落入输入到一半的提示中。空闲的 Claude Code 会话会醒来\n阅读它;忙碌的会话会在下一步阅读。\n\n 是工作区或表面的 ID 或引用(workspace:2、surface:5),或\n工作区标题(先完全匹配,再找唯一前缀)。使用 - 从\nstdin 读取文本。--from 默认为发送端工作区的标题。\n\n示例:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" + "value": "管理员" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "用法: cmux agent message [--from ] [--thread ] [--json] [--] \n cmux agent message --reply-to [--from ] [--json] [--] \n\n傳送訊息給在另一個工作區或表面中執行的代理。cmux\n透過該代理的 hook 遞送訊息,絕不會打字到它的終端機,\n因此訊息不會落入打到一半的提示中。閒置的 Claude Code 工作階段會醒來\n閱讀它;忙碌中的工作階段會在下一步閱讀。\n\n 是工作區或表面的 ID 或參照(workspace:2、surface:5),或\n工作區標題(先完全符合,再找唯一前綴)。使用 - 從\nstdin 讀取文字。--from 預設為傳送端工作區的標題。\n\n範例:\n cmux agent message cmux-remote-status \"The relay fix is on main, rebase when free.\"\n cmux agent message --reply-to 3f2a... \"Done, PR is #123.\"" + "value": "管理員" } } } }, - "socket.agentMessage.error.bodyTooLarge": { + "cloudInvite.role.label": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The message is too long. The limit is 32 KiB." + "value": "Join as" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الرسالة طويلة جدًا. الحد الأقصى 32 كيلوبايت." + "value": "الانضمام بصفة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Nachricht ist zu lang. Die Grenze liegt bei 32 KiB." + "value": "Beitreten als" } }, "es": { "stringUnit": { "state": "translated", - "value": "El mensaje es demasiado largo. El límite es de 32 KiB." + "value": "Unirse como" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le message est trop long. La limite est de 32 Kio." + "value": "Rejoindre en tant que" } }, "ja": { "stringUnit": { "state": "translated", - "value": "メッセージが長すぎます。上限は 32 KiB です。" + "value": "参加する役割" } }, "ko": { "stringUnit": { "state": "translated", - "value": "메시지가 너무 깁니다. 한도는 32KiB입니다." + "value": "참여 역할" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "消息太长。上限为 32 KiB。" + "value": "加入身份" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "訊息太長。上限為 32 KiB。" + "value": "加入身分" } } } }, - "socket.agentMessage.error.controlCharacter": { + "cloudInvite.role.member": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The message contains control characters. Only text, newlines and tabs are allowed." + "value": "Member" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تحتوي الرسالة على أحرف تحكم. لا يُسمح إلا بالنص وفواصل الأسطر وعلامات الجدولة." + "value": "عضو" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Nachricht enthält Steuerzeichen. Erlaubt sind nur Text, Zeilenumbrüche und Tabulatoren." + "value": "Mitglied" } }, "es": { "stringUnit": { "state": "translated", - "value": "El mensaje contiene caracteres de control. Solo se permiten texto, saltos de línea y tabulaciones." + "value": "Miembro" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le message contient des caractères de contrôle. Seuls le texte, les retours à la ligne et les tabulations sont autorisés." + "value": "Membre" } }, "ja": { "stringUnit": { "state": "translated", - "value": "メッセージに制御文字が含まれています。使えるのはテキスト、改行、タブだけです。" + "value": "メンバー" } }, "ko": { "stringUnit": { "state": "translated", - "value": "메시지에 제어 문자가 있습니다. 텍스트, 줄바꿈, 탭만 허용됩니다." + "value": "구성원" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "消息包含控制字符。只允许文本、换行和制表符。" + "value": "成员" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "訊息包含控制字元。只允許文字、換行和定位字元。" + "value": "成員" } } } }, - "socket.agentMessage.error.emptyBody": { + "cloudInvite.send": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The message is empty." + "value": "Send Invite" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الرسالة فارغة." + "value": "إرسال الدعوة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Nachricht ist leer." + "value": "Einladung senden" } }, "es": { "stringUnit": { "state": "translated", - "value": "El mensaje está vacío." + "value": "Enviar invitación" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le message est vide." + "value": "Envoyer l’invitation" } }, "ja": { "stringUnit": { "state": "translated", - "value": "メッセージが空です。" + "value": "招待を送信" } }, "ko": { "stringUnit": { "state": "translated", - "value": "메시지가 비어 있습니다." + "value": "초대 보내기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "消息为空。" + "value": "发送邀请" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "訊息是空的。" + "value": "傳送邀請" } } } }, - "socket.agentMessage.error.invalidSender": { + "cloudInvite.someSent": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The sender name must be one line of at most 64 characters." + "value": "The other invitations were sent." } }, "ar": { "stringUnit": { "state": "translated", - "value": "يجب أن يكون اسم المرسل سطرًا واحدًا لا يتجاوز 64 حرفًا." + "value": "تم إرسال الدعوات الأخرى." } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Absendername muss eine einzelne Zeile mit höchstens 64 Zeichen sein." + "value": "Die übrigen Einladungen wurden gesendet." } }, "es": { "stringUnit": { "state": "translated", - "value": "El nombre del remitente debe ser una sola línea de 64 caracteres como máximo." + "value": "Las demás invitaciones se enviaron." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le nom de l'expéditeur doit tenir sur une ligne de 64 caractères au maximum." + "value": "Les autres invitations ont été envoyées." } }, "ja": { "stringUnit": { "state": "translated", - "value": "送信者名は 64 文字以内の 1 行にしてください。" + "value": "他の招待は送信されました。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "보낸 사람 이름은 64자 이하의 한 줄이어야 합니다." + "value": "나머지 초대는 보냈습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "发送者名称必须是一行,最多 64 个字符。" + "value": "其余邀请已发送。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "寄件者名稱必須是一行,最多 64 個字元。" + "value": "其餘邀請已送出。" } } } }, - "socket.agentMessage.error.invalidState": { + "cloudInvite.seatsOpen": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "State must be queued, delivered, read or failed." + "value": "%1$d of %#@seats@ open on this plan." + }, + "substitutions": { + "seats": { + "argNum": 2, + "formatSpecifier": "d", + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%d seat" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%d seats" + } + } + } + } + } } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يجب أن تكون الحالة queued أو delivered أو read أو failed." + "value": "%1$d von %#@seats@ dieses Plans frei." + }, + "substitutions": { + "seats": { + "argNum": 2, + "formatSpecifier": "d", + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%d Platz" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%d Plätzen" + } + } + } + } + } } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Der Status muss queued, delivered, read oder failed sein." + "value": "%1$d sur %#@seats@ libres sur cette offre." + }, + "substitutions": { + "seats": { + "argNum": 2, + "formatSpecifier": "d", + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%d siège" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%d sièges" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%d sièges" + } + } + } + } + } } }, "es": { "stringUnit": { "state": "translated", - "value": "El estado debe ser queued, delivered, read o failed." + "value": "%1$d de %#@seats@ libres en este plan." + }, + "substitutions": { + "seats": { + "argNum": 2, + "formatSpecifier": "d", + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%d asiento" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%d asientos" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%d asientos" + } + } + } + } + } } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "L'état doit être queued, delivered, read ou failed." + "value": "%1$d من %#@seats@ متاحة في هذه الخطة." + }, + "substitutions": { + "seats": { + "argNum": 2, + "formatSpecifier": "d", + "variations": { + "plural": { + "zero": { + "stringUnit": { + "state": "translated", + "value": "%d مقعد" + } + }, + "one": { + "stringUnit": { + "state": "translated", + "value": "مقعد واحد (%d)" + } + }, + "two": { + "stringUnit": { + "state": "translated", + "value": "مقعدين (%d)" + } + }, + "few": { + "stringUnit": { + "state": "translated", + "value": "%d مقاعد" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%d مقعدًا" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%d مقعد" + } + } + } + } + } } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "状態は queued、delivered、read、failed のいずれかにしてください。" + "value": "此方案尚有 %1$d / %#@seats@ 可用。" + }, + "substitutions": { + "seats": { + "argNum": 2, + "formatSpecifier": "d", + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%d 個席位" + } + } + } + } + } } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "상태는 queued, delivered, read, failed 중 하나여야 합니다." + "value": "此方案尚有 %1$d / %#@seats@ 可用。" + }, + "substitutions": { + "seats": { + "argNum": 2, + "formatSpecifier": "d", + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%d 个席位" + } + } + } + } + } } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "状态必须是 queued、delivered、read 或 failed。" + "value": "이 플랜에서 %1$d / %#@seats@ 남음." + }, + "substitutions": { + "seats": { + "argNum": 2, + "formatSpecifier": "d", + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%d석" + } + } + } + } + } } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "狀態必須是 queued、delivered、read 或 failed。" + "value": "このプランで %1$d / %#@seats@ が空いています。" + }, + "substitutions": { + "seats": { + "argNum": 2, + "formatSpecifier": "d", + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%d 席" + } + } + } + } + } } } } }, - "socket.agentMessage.error.missingSurface": { + "cloudInvite.copyLink.short": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "A surface_id UUID is required." + "value": "Copy link" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يلزم تحديد surface_id بصيغة UUID." + "value": "نسخ الرابط" } }, "de": { "stringUnit": { "state": "translated", - "value": "Eine surface_id-UUID ist erforderlich." + "value": "Link kopieren" } }, "es": { "stringUnit": { "state": "translated", - "value": "Se requiere un UUID en surface_id." + "value": "Copiar enlace" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Un UUID surface_id est requis." + "value": "Copier le lien" } }, "ja": { "stringUnit": { "state": "translated", - "value": "surface_id の UUID が必要です。" + "value": "リンクをコピー" } }, "ko": { "stringUnit": { "state": "translated", - "value": "surface_id UUID가 필요합니다." + "value": "링크 복사" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "需要 surface_id UUID。" + "value": "复制链接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "需要 surface_id UUID。" + "value": "複製連結" } } } }, - "socket.agentMessage.error.missingTarget": { + "cloudInvite.emails.placeholder.short": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Give a target workspace or surface, or a message id to reply to." + "value": "Email, comma separated" } }, "ar": { "stringUnit": { "state": "translated", - "value": "حدّد مساحة عمل أو سطحًا هدفًا، أو معرّف رسالة للرد عليها." + "value": "البريد الإلكتروني، مفصول بفواصل" } }, "de": { "stringUnit": { "state": "translated", - "value": "Gib einen Ziel-Workspace oder eine Zieloberfläche an, oder eine Nachrichten-ID, auf die geantwortet werden soll." + "value": "E-Mail, durch Kommas getrennt" } }, "es": { "stringUnit": { "state": "translated", - "value": "Indica un espacio de trabajo o una superficie de destino, o el ID de un mensaje al que responder." + "value": "Correo, separado por comas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Indiquez un espace de travail ou une surface cible, ou l'identifiant du message auquel répondre." + "value": "E-mail, séparés par des virgules" } }, "ja": { "stringUnit": { "state": "translated", - "value": "宛先のワークスペースかサーフェス、または返信するメッセージの ID を指定してください。" + "value": "メール(カンマ区切り)" } }, "ko": { "stringUnit": { "state": "translated", - "value": "대상 워크스페이스나 표면, 또는 답장할 메시지 ID를 지정하세요." + "value": "이메일(쉼표로 구분)" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "请指定目标工作区或表面,或要回复的消息 ID。" + "value": "电子邮件,以逗号分隔" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "請指定目標工作區或表面,或要回覆的訊息 ID。" + "value": "電子郵件,以逗號分隔" } } } }, - "socket.agentMessage.error.noReplyAddress": { + "cloudInvite.heading.short": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "That message has no sender surface to reply to." + "value": "Invite to %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا يوجد لهذه الرسالة سطح مرسل يمكن الرد عليه." + "value": "دعوة إلى %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Diese Nachricht hat keine Absenderoberfläche, an die geantwortet werden kann." + "value": "Zu %@ einladen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ese mensaje no tiene una superficie de remitente a la que responder." + "value": "Invitar a %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce message n'a pas de surface d'expéditeur à laquelle répondre." + "value": "Inviter dans %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このメッセージには返信先となる送信元サーフェスがありません。" + "value": "%@ に招待" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 메시지에는 답장할 보낸 사람 표면이 없습니다." + "value": "%@에 초대" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "该消息没有可回复的发送者表面。" + "value": "邀请加入 %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "該訊息沒有可回覆的寄件者表面。" + "value": "邀請加入 %@" } } } }, - "socket.agentMessage.error.notSaved": { + "cloudInvite.notAdmin.short": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The message was not sent: cmux could not save it to the message journal." + "value": "Only team admins can invite." } }, "ar": { "stringUnit": { "state": "translated", - "value": "لم يتم إرسال الرسالة: تعذّر على cmux حفظها في سجل الرسائل." + "value": "يمكن لمسؤولي الفريق فقط الدعوة." } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Nachricht wurde nicht gesendet: cmux konnte sie nicht im Nachrichtenjournal speichern." + "value": "Nur Team-Admins können einladen." } }, "es": { "stringUnit": { "state": "translated", - "value": "El mensaje no se envió: cmux no pudo guardarlo en el registro de mensajes." + "value": "Solo los administradores pueden invitar." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le message n’a pas été envoyé : cmux n’a pas pu l’enregistrer dans le journal des messages." + "value": "Seuls les administrateurs peuvent inviter." } }, "ja": { "stringUnit": { "state": "translated", - "value": "メッセージは送信されませんでした: cmux がメッセージジャーナルに保存できませんでした。" + "value": "招待できるのはチームの管理者だけです。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "메시지를 보내지 못했습니다: cmux가 메시지 저널에 저장하지 못했습니다." + "value": "팀 관리자만 초대할 수 있습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "消息未发送:cmux 无法将其保存到消息日志。" + "value": "只有团队管理员可以邀请。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "訊息未傳送:cmux 無法將其儲存到訊息日誌。" + "value": "只有團隊管理員可以邀請。" } } } }, - "socket.agentMessage.error.targetNotFound": { + "cloudInvite.oneLiner": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No workspace or surface matches that target." + "value": "Members share this team's Cloud machines. Your Mac stays private." } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا توجد مساحة عمل أو سطح يطابق هذا الهدف." + "value": "يتشارك الأعضاء أجهزة Cloud الخاصة بهذا الفريق. يبقى جهاز Mac الخاص بك خاصًا." } }, "de": { "stringUnit": { "state": "translated", - "value": "Kein Workspace und keine Oberfläche passt zu diesem Ziel." + "value": "Mitglieder teilen die Cloud-Maschinen dieses Teams. Dein Mac bleibt privat." } }, "es": { "stringUnit": { "state": "translated", - "value": "Ningún espacio de trabajo ni superficie coincide con ese destino." + "value": "Los miembros comparten las máquinas Cloud de este equipo. Tu Mac sigue siendo privado." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucun espace de travail ni aucune surface ne correspond à cette cible." + "value": "Les membres partagent les machines Cloud de cette équipe. Votre Mac reste privé." } }, "ja": { "stringUnit": { "state": "translated", - "value": "その宛先に一致するワークスペースもサーフェスもありません。" + "value": "メンバーはこのチームの Cloud マシンを共有します。あなたの Mac は非公開のままです。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "해당 대상과 일치하는 워크스페이스나 표면이 없습니다." + "value": "구성원은 이 팀의 Cloud 머신을 공유합니다. 내 Mac은 비공개로 유지됩니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "没有与该目标匹配的工作区或表面。" + "value": "成员共享此团队的 Cloud 机器。你的 Mac 保持私密。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "沒有符合該目標的工作區或表面。" + "value": "成員共用此團隊的 Cloud 機器。你的 Mac 保持私密。" } } } }, - "socket.agentMessage.error.unknownMessage": { + "cloudInvite.seatsFull.short": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No message with id %@." + "value": "No seats left on this plan. Upgrade to Team to invite more." } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا توجد رسالة بالمعرّف %@." + "value": "لا مقاعد متبقية في هذه الخطة. قم بالترقية إلى Team لدعوة المزيد." } }, "de": { "stringUnit": { "state": "translated", - "value": "Keine Nachricht mit der ID %@." + "value": "Keine Plätze mehr in diesem Plan. Wechsle zu Team, um weitere einzuladen." } }, "es": { "stringUnit": { "state": "translated", - "value": "No hay ningún mensaje con el ID %@." + "value": "No quedan asientos en este plan. Cambia a Team para invitar a más." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucun message avec l'identifiant %@." + "value": "Plus de sièges sur cette offre. Passez à Team pour inviter plus de personnes." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ID が %@ のメッセージはありません。" + "value": "このプランに空席はありません。Team にアップグレードしてさらに招待してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "ID가 %@인 메시지가 없습니다." + "value": "이 플랜에 남은 좌석이 없습니다. Team으로 업그레이드하여 더 초대하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "没有 ID 为 %@ 的消息。" + "value": "此方案已无席位。请升级到 Team 以邀请更多人。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "沒有 ID 為 %@ 的訊息。" + "value": "此方案已無席位。請升級至 Team 以邀請更多人。" } } } }, - "agent.autoResume.status": { + "cloudInvite.sentTo": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Auto-resumed ×%lld" + "value": "Sent to %@" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Automatisch fortgesetzt ×%lld" + "value": "تم الإرسال إلى %@" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Reprise automatique ×%lld" + "value": "Gesendet an %@" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "استئناف تلقائي ×%lld" + "value": "Enviado a %@" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Reanudado automáticamente ×%lld" + "value": "Envoyé à %@" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "已自動繼續 ×%lld" + "value": "%@ に送信しました" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "已自动继续 ×%lld" + "value": "%@에게 보냈습니다" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "자동 재개 ×%lld" + "value": "已发送给 %@" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "自動再開 ×%lld" + "value": "已傳送給 %@" } } } }, - "settings.automation.agentAutoResume": { + "cli.auth.team.acceptUsage": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Auto-Resume Agents After Errors" + "value": "Usage: cmux auth team accept|decline " } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Agenten nach Fehlern automatisch fortsetzen" + "value": "الاستخدام: cmux auth team accept|decline " } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Relancer automatiquement les agents après une erreur" + "value": "Verwendung: cmux auth team accept|decline " } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "استئناف الوكلاء تلقائيًا بعد الأخطاء" + "value": "Uso: cmux auth team accept|decline " } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Reanudar agentes automáticamente tras errores" + "value": "Utilisation : cmux auth team accept|decline " } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "錯誤後自動恢復代理" + "value": "使い方: cmux auth team accept|decline " } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "出错后自动恢复代理" + "value": "사용법: cmux auth team accept|decline " } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "오류 후 에이전트 자동 재개" + "value": "用法:cmux auth team accept|decline " } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "エラー後にエージェントを自動再開" + "value": "用法:cmux auth team accept|decline " } } } }, - "settings.automation.agentAutoResume.subtitle": { + "cli.auth.team.declined": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Send “continue” when an agent's turn ends on a retryable error such as model capacity or a dropped connection." + "value": "Declined." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Sendet „continue“, wenn der Zug eines Agenten mit einem wiederholbaren Fehler endet, etwa ausgelasteter Modellkapazität oder einer getrennten Verbindung." + "value": "تم الرفض." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Envoie « continue » quand le tour d’un agent se termine sur une erreur réessayable, comme un modèle saturé ou une connexion interrompue." + "value": "Abgelehnt." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يرسل \"continue\" عندما ينتهي دور الوكيل بخطأ يمكن إعادة المحاولة بعده، مثل امتلاء سعة النموذج أو انقطاع الاتصال." + "value": "Rechazada." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Envía «continue» cuando el turno de un agente termina con un error reintentable, como falta de capacidad del modelo o una conexión perdida." + "value": "Refusée." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "當代理的回合因可重試的錯誤(例如模型容量不足或連線中斷)而結束時,傳送「continue」。" + "value": "辞退しました。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "当代理的回合因可重试的错误(例如模型容量不足或连接中断)而结束时,发送“continue”。" + "value": "거절했습니다." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "모델 용량 초과나 연결 끊김처럼 재시도 가능한 오류로 에이전트의 턴이 끝나면 “continue”를 보냅니다." + "value": "已拒绝。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "モデルの容量不足や接続切断など、再試行可能なエラーでエージェントのターンが終了したときに「continue」を送信します。" + "value": "已拒絕。" } } } }, - "settings.search.alias.setting.automation.agent-error-auto-resume": { + "cli.auth.team.invitationRow": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error" + "value": "%1$@ %2$@ (%3$@) invited by %4$@" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error automatisch fortsetzen fortfahren wiederholen kapazität überlastet agent fehler" + "value": "%1$@ %2$@ (%3$@) بدعوة من %4$@" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error reprise automatique continuer réessayer capacité surchargé agent erreur" + "value": "%1$@ %2$@ (%3$@), eingeladen von %4$@" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error استئناف تلقائي متابعة إعادة المحاولة سعة حمل زائد وكيل خطأ" + "value": "%1$@ %2$@ (%3$@) invitado por %4$@" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error reanudar automáticamente continuar reintentar capacidad sobrecargado agente error" + "value": "%1$@ %2$@ (%3$@) invité par %4$@" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error 自動恢復 繼續 重試 容量 過載 代理 錯誤" + "value": "%1$@ %2$@(%3$@)%4$@ からの招待" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error 自动恢复 继续 重试 容量 过载 代理 错误" + "value": "%1$@ %2$@ (%3$@) %4$@ 님이 초대함" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error 자동 재개 계속 재시도 용량 과부하 에이전트 오류" + "value": "%1$@ %2$@(%3$@)由 %4$@ 邀请" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "automation.agentAutoResume auto resume continue retry capacity overloaded agent error 自動再開 続行 再試行 容量 過負荷 エージェント エラー" + "value": "%1$@ %2$@(%3$@)由 %4$@ 邀請" } } } }, - "settings.app.showAgentUsage": { + "cli.auth.team.joined": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "عرض استخدام الوكيل في الشريط الجانبي" + "value": "Joined." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Agent-Nutzung in der Seitenleiste anzeigen" + "value": "تم الانضمام." } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "Show Agent Usage in Sidebar" + "value": "Beigetreten." } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar el uso del agente en la barra lateral" + "value": "Te has unido." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher l’utilisation des agents dans la barre latérale" + "value": "Rejoint." } }, "ja": { "stringUnit": { "state": "translated", - "value": "サイドバーにエージェントの使用状況を表示" + "value": "参加しました。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사이드바에 에이전트 사용량 표시" + "value": "참여했습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在侧边栏显示代理用量" + "value": "已加入。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "在側邊欄顯示代理用量" + "value": "已加入。" } } } }, - "settings.app.showAgentUsage.subtitle": { + "cli.auth.team.noInvitations": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "يُلحق النموذج ونسبة نافذة السياق المستخدمة بإدخالات حالة Claude Code وCodex، بالإضافة إلى تكلفة API تقديرية لـ Claude Code. التكلفة تقدير مبني على أسعار API المعلنة، وليست فاتورة اشتراكك." + "value": "No pending invitations." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Hängt Modell und belegtes Kontextfenster an die Statuseinträge von Claude Code und Codex an, für Claude Code zusätzlich die geschätzten API-Kosten. Die Kosten sind eine Schätzung nach API-Listenpreisen, nicht deine Abo-Rechnung." + "value": "لا توجد دعوات معلقة." } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "Append the model and context window used to Claude Code and Codex status entries, plus an estimated API cost for Claude Code. The cost is an API list-price estimate, not your subscription bill." + "value": "Keine ausstehenden Einladungen." } }, "es": { "stringUnit": { "state": "translated", - "value": "Añade el modelo y la ventana de contexto usada a las entradas de estado de Claude Code y Codex, además de un coste estimado de la API para Claude Code. El coste es una estimación según los precios de lista de la API, no la factura de tu suscripción." + "value": "No hay invitaciones pendientes." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ajoute le modèle et la part de la fenêtre de contexte utilisée aux entrées d’état de Claude Code et Codex, ainsi qu’un coût API estimé pour Claude Code. Le coût est une estimation d’après les tarifs API publics, pas votre facture d’abonnement." + "value": "Aucune invitation en attente." } }, "ja": { "stringUnit": { "state": "translated", - "value": "Claude Code と Codex のステータス項目にモデルと使用中のコンテキストウィンドウを追加し、Claude Code には推定 API コストも表示します。コストは API の定価に基づく推定値で、サブスクリプションの請求額ではありません。" + "value": "保留中の招待はありません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Claude Code 및 Codex 상태 항목에 모델과 사용 중인 컨텍스트 창을 덧붙이고, Claude Code에는 예상 API 비용도 표시합니다. 비용은 API 정가 기준의 추정치이며 구독 요금이 아닙니다." + "value": "대기 중인 초대가 없습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在 Claude Code 和 Codex 的状态条目后附加模型和已用的上下文窗口,并为 Claude Code 附加估算的 API 费用。费用是根据 API 公开价格估算的,并非你的订阅账单。" + "value": "没有待处理的邀请。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "在 Claude Code 與 Codex 的狀態項目後附加模型與已用的上下文視窗,並為 Claude Code 附加估算的 API 費用。費用是依 API 公開價格估算,並非你的訂閱帳單。" + "value": "沒有待處理的邀請。" } } } }, - "settings.search.alias.setting.app.show-agent-usage": { + "notification.teamInvite.body": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex وكيل استخدام نموذج نافذة السياق رموز نسبة تكلفة سعر تقدير الشريط الجانبي" + "value": "Join from the team menu in the Cloud panel or Settings › Account." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex Agent Nutzung Modell Kontextfenster Token Prozent Kosten Preis Schätzung Seitenleiste" + "value": "انضم من قائمة الفريق في لوحة Cloud أو من الإعدادات › الحساب." } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex" + "value": "Tritt über das Teammenü im Cloud-Bereich oder unter Einstellungen › Account bei." } }, "es": { "stringUnit": { "state": "translated", - "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex agente uso modelo ventana de contexto tokens porcentaje coste precio estimación barra lateral" + "value": "Únete desde el menú de equipo del panel Cloud o en Ajustes › Cuenta." } }, "fr": { "stringUnit": { "state": "translated", - "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex agent utilisation modèle fenêtre de contexte jetons pourcentage coût prix estimation barre latérale" + "value": "Rejoignez depuis le menu d'équipe du panneau Cloud ou dans Réglages › Compte." } }, "ja": { "stringUnit": { "state": "translated", - "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex エージェント 使用状況 モデル コンテキストウィンドウ トークン パーセント コスト 料金 推定 サイドバー" + "value": "Cloud パネルのチームメニュー、または設定 › アカウントから参加できます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex 에이전트 사용량 모델 컨텍스트 창 토큰 퍼센트 비용 가격 추정 사이드바" + "value": "Cloud 패널의 팀 메뉴 또는 설정 › 계정에서 참여하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex 代理 用量 模型 上下文窗口 令牌 百分比 费用 价格 估算 侧边栏" + "value": "从 Cloud 面板的团队菜单或“设置 › 账户”加入。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex 代理 用量 模型 上下文視窗 權杖 百分比 費用 價格 估算 側邊欄" + "value": "從 Cloud 面板的團隊選單或「設定 › 帳號」加入。" } } } }, - "sidebar.agentUsage.estimatedCost": { + "notification.teamInvite.someone": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "حوالي %@" + "value": "A teammate" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "ca. %@" + "value": "أحد أعضاء الفريق" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "~%@" + "value": "Ein Teammitglied" } }, "es": { "stringUnit": { "state": "translated", - "value": "aprox. %@" + "value": "Un compañero de equipo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "env. %@" + "value": "Un coéquipier" } }, "ja": { "stringUnit": { "state": "translated", - "value": "約%@" + "value": "チームメンバー" } }, "ko": { "stringUnit": { "state": "translated", - "value": "약 %@" + "value": "팀원" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "约 %@" + "value": "一位队友" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "約 %@" + "value": "一位隊友" } } } }, - "sidebar.agentUsage.estimatedCostAtLeast": { + "notification.teamInvite.subtitle": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "حوالي %@+" + "value": "cmux Cloud team" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "ca. %@+" + "value": "فريق cmux Cloud" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "~%@+" + "value": "cmux Cloud-Team" } }, "es": { "stringUnit": { "state": "translated", - "value": "aprox. %@+" + "value": "Equipo de cmux Cloud" } }, "fr": { "stringUnit": { "state": "translated", - "value": "env. %@+" + "value": "Équipe cmux Cloud" } }, "ja": { "stringUnit": { "state": "translated", - "value": "約%@+" + "value": "cmux Cloud チーム" } }, "ko": { "stringUnit": { "state": "translated", - "value": "약 %@+" + "value": "cmux Cloud 팀" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "约 %@+" + "value": "cmux Cloud 团队" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "約 %@+" + "value": "cmux Cloud 團隊" } } } }, - "sidebar.agentUsage.costHelp": { + "notification.teamInvite.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "التكلفة تقدير مبني على أسعار API المعلنة، وليست فاتورة اشتراكك." + "value": "%1$@ invited you to %2$@" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Die Kosten sind eine Schätzung nach API-Listenpreisen, nicht deine Abo-Rechnung." + "value": "دعاك %1$@ إلى %2$@" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "Cost is an API list-price estimate, not your subscription bill." + "value": "%1$@ hat dich zu %2$@ eingeladen" } }, "es": { "stringUnit": { "state": "translated", - "value": "El coste es una estimación según los precios de lista de la API, no la factura de tu suscripción." + "value": "%1$@ te invitó a %2$@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le coût est une estimation d’après les tarifs API publics, pas votre facture d’abonnement." + "value": "%1$@ vous a invité à %2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "コストは API の定価に基づく推定値で、サブスクリプションの請求額ではありません。" + "value": "%1$@ が %2$@ に招待しました" } }, "ko": { "stringUnit": { "state": "translated", - "value": "비용은 API 정가 기준의 추정치이며 구독 요금이 아닙니다." + "value": "%1$@ 님이 %2$@에 초대했습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "费用是根据 API 公开价格估算的,并非你的订阅账单。" + "value": "%1$@ 邀请你加入 %2$@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "費用是依 API 公開價格估算,並非你的訂閱帳單。" + "value": "%1$@ 邀請你加入 %2$@" } } } }, - "cli.vm.run.createMissingMachineID": { + "cloud.teamPicker.invitedTo": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "vm run: create returned no machine id" + "value": "Invited to" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "vm run: 作成結果にマシン ID がありません" + "value": "مدعو إلى" } }, "de": { "stringUnit": { "state": "translated", - "value": "vm run: Beim Erstellen wurde keine Maschinen-ID zurückgegeben" + "value": "Eingeladen zu" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "vm run : la création n'a renvoyé aucun identifiant de machine" + "value": "Invitado a" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "vm run: لم يُرجع الإنشاء معرّف جهاز" + "value": "Invité à" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "vm run: la creación no devolvió ningún ID de máquina" + "value": "招待されたチーム" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "vm run: 创建未返回机器 ID" + "value": "초대받은 팀" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "vm run:建立未回傳機器 ID" + "value": "受邀加入" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "vm run: 생성 결과에 머신 ID가 없습니다" + "value": "受邀加入" } } } }, - "terminalContextMenu.pasteAsOneLine": { + "cloud.teamPicker.join": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "لصق في سطر واحد" + "value": "Join %@" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Als eine Zeile einfügen" + "value": "الانضمام إلى %@" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "Paste as One Line" + "value": "%@ beitreten" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pegar en una sola línea" + "value": "Unirse a %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Coller sur une seule ligne" + "value": "Rejoindre %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "1行にしてペースト" + "value": "%@ に参加" } }, "ko": { "stringUnit": { "state": "translated", - "value": "한 줄로 붙여넣기" + "value": "%@ 참여" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "粘贴为单行" + "value": "加入 %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "貼上為單行" + "value": "加入 %@" } } } @@ -606670,6 +606559,610 @@ } } }, + "socket.notification.effectsInvalid": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Missing or invalid effects" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "effects が指定されていないか無効です" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "effects 缺失或无效" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Fehlende oder ungültige effects" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "effects manquant ou invalide" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "قيمة effects مفقودة أو غير صالحة" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "effects faltante o no válido" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "遺失或無效的 effects" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "effects가 없거나 잘못되었습니다" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Nedostaje ili je nevažeći effects" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Manglende eller ugyldig effects" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "effects mancante o non valido" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "effects បាត់ ឬមិនត្រឹមត្រូវ" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Manglende eller ugyldig effects" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Brak lub nieprawidłowa wartość effects" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "effects ausente ou inválido" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отсутствует или недопустимое значение effects" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "effects หายไปหรือไม่ถูกต้อง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "effects eksik veya geçersiz" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Відсутнє або недійсне значення effects" + } + } + } + }, + "cli.error.notifyDesktopValue": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "--desktop must be true|false" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يجب أن يكون --desktop إما true|false" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "--desktop muss true|false sein" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "--desktop debe ser true|false" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "--desktop doit être true|false" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "--desktop には true|false を指定してください" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "--desktop는 true|false여야 합니다" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "--desktop 必须是 true|false" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "--desktop 必須是 true|false" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "--desktop mora biti true|false" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "--desktop skal være true|false" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "--desktop deve essere true|false" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "--desktop ត្រូវតែជា true|false" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "--desktop må være true|false" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "--desktop musi mieć wartość true|false" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "--desktop deve ser true|false" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "--desktop должен быть true|false" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "--desktop ต้องเป็น true|false" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "--desktop true|false olmalıdır" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "--desktop має бути true|false" + } + } + } + }, + "settings.app.showAgentUsage": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "عرض استخدام الوكيل في الشريط الجانبي" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Agent-Nutzung in der Seitenleiste anzeigen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Show Agent Usage in Sidebar" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Mostrar el uso del agente en la barra lateral" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Afficher l’utilisation des agents dans la barre latérale" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "サイドバーにエージェントの使用状況を表示" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "사이드바에 에이전트 사용량 표시" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在侧边栏显示代理用量" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "在側邊欄顯示代理用量" + } + } + } + }, + "settings.app.showAgentUsage.subtitle": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "يُلحق النموذج ونسبة نافذة السياق المستخدمة بإدخالات حالة Claude Code وCodex، بالإضافة إلى تكلفة API تقديرية لـ Claude Code. التكلفة تقدير مبني على أسعار API المعلنة، وليست فاتورة اشتراكك." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Hängt Modell und belegtes Kontextfenster an die Statuseinträge von Claude Code und Codex an, für Claude Code zusätzlich die geschätzten API-Kosten. Die Kosten sind eine Schätzung nach API-Listenpreisen, nicht deine Abo-Rechnung." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Append the model and context window used to Claude Code and Codex status entries, plus an estimated API cost for Claude Code. The cost is an API list-price estimate, not your subscription bill." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Añade el modelo y la ventana de contexto usada a las entradas de estado de Claude Code y Codex, además de un coste estimado de la API para Claude Code. El coste es una estimación según los precios de lista de la API, no la factura de tu suscripción." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Ajoute le modèle et la part de la fenêtre de contexte utilisée aux entrées d’état de Claude Code et Codex, ainsi qu’un coût API estimé pour Claude Code. Le coût est une estimation d’après les tarifs API publics, pas votre facture d’abonnement." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Claude Code と Codex のステータス項目にモデルと使用中のコンテキストウィンドウを追加し、Claude Code には推定 API コストも表示します。コストは API の定価に基づく推定値で、サブスクリプションの請求額ではありません。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Claude Code 및 Codex 상태 항목에 모델과 사용 중인 컨텍스트 창을 덧붙이고, Claude Code에는 예상 API 비용도 표시합니다. 비용은 API 정가 기준의 추정치이며 구독 요금이 아닙니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在 Claude Code 和 Codex 的状态条目后附加模型和已用的上下文窗口,并为 Claude Code 附加估算的 API 费用。费用是根据 API 公开价格估算的,并非你的订阅账单。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "在 Claude Code 與 Codex 的狀態項目後附加模型與已用的上下文視窗,並為 Claude Code 附加估算的 API 費用。費用是依 API 公開價格估算,並非你的訂閱帳單。" + } + } + } + }, + "settings.search.alias.setting.app.show-agent-usage": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex وكيل استخدام نموذج نافذة السياق رموز نسبة تكلفة سعر تقدير الشريط الجانبي" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex Agent Nutzung Modell Kontextfenster Token Prozent Kosten Preis Schätzung Seitenleiste" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex agente uso modelo ventana de contexto tokens porcentaje coste precio estimación barra lateral" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex agent utilisation modèle fenêtre de contexte jetons pourcentage coût prix estimation barre latérale" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex エージェント 使用状況 モデル コンテキストウィンドウ トークン パーセント コスト 料金 推定 サイドバー" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex 에이전트 사용량 모델 컨텍스트 창 토큰 퍼센트 비용 가격 추정 사이드바" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex 代理 用量 模型 上下文窗口 令牌 百分比 费用 价格 估算 侧边栏" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex 代理 用量 模型 上下文視窗 權杖 百分比 費用 價格 估算 側邊欄" + } + } + } + }, + "sidebar.agentUsage.estimatedCost": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "حوالي %@" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "ca. %@" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "~%@" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "aprox. %@" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "env. %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "約%@" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "약 %@" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "约 %@" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "約 %@" + } + } + } + }, + "sidebar.agentUsage.estimatedCostAtLeast": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "حوالي %@+" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "ca. %@+" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "~%@+" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "aprox. %@+" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "env. %@+" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "約%@+" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "약 %@+" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "约 %@+" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "約 %@+" + } + } + } + }, + "sidebar.agentUsage.costHelp": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "التكلفة تقدير مبني على أسعار API المعلنة، وليست فاتورة اشتراكك." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Die Kosten sind eine Schätzung nach API-Listenpreisen, nicht deine Abo-Rechnung." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Cost is an API list-price estimate, not your subscription bill." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "El coste es una estimación según los precios de lista de la API, no la factura de tu suscripción." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Le coût est une estimation d’après les tarifs API publics, pas votre facture d’abonnement." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "コストは API の定価に基づく推定値で、サブスクリプションの請求額ではありません。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "비용은 API 정가 기준의 추정치이며 구독 요금이 아닙니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "费用是根据 API 公开价格估算的,并非你的订阅账单。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "費用是依 API 公開價格估算,並非你的訂閱帳單。" + } + } + } + }, "settings.notifications.paneFlashDoubleBlink.title": { "extractionState": "manual", "localizations": { @@ -607060,856 +607553,304 @@ } } }, - "settings.search.alias.setting.terminal.jump-to-bottom-button": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude الانتقال إلى الأسفل تمرير" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude zum ende springen scrollen verlauf" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude ir al final desplazar historial" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude aller en bas défiler historique" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude 一番下へ移動 スクロール" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude 맨 아래로 이동 스크롤" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude 跳到底部 滚动 回滚" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude 跳至底部 捲動 回溯" - } - } - } - }, - "settings.terminal.showJumpToBottomButton": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "زر الانتقال إلى الأسفل" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Schaltfläche „Zum Ende springen“" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Jump to Bottom Button" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Botón Ir al final" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Bouton Aller en bas" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "「一番下へ移動」ボタン" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "맨 아래로 이동 버튼" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "“跳到底部”按钮" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "「跳至底部」按鈕" - } - } - } - }, - "command.terminalScrollToBottom.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Scroll to Bottom" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "التمرير إلى الأسفل" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Zum Ende scrollen" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Desplazar al final" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Faire défiler jusqu'en bas" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "一番下までスクロール" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "맨 아래로 스크롤" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "滚动到底部" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "捲動至底部" - } - } - } - }, - "cli.remotes.error.invalidArguments": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%@: invalid arguments." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "%@: وسيطات غير صالحة." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "%@: ungültige Argumente." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "%@: argumentos no válidos." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "%@ : arguments non valides." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%@:引数が無効です。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%@: 잘못된 인수입니다." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "%@:无效的参数。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "%@:無效的引數。" - } - } - } - }, - "cli.remotes.error.unexpectedArgument": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%1$@: unexpected argument '%2$@'." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "%1$@: وسيطة غير متوقعة '%2$@'." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "%1$@: unerwartetes Argument '%2$@'." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "%1$@: argumento inesperado '%2$@'." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "%1$@ : argument inattendu '%2$@'." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$@:予期しない引数 '%2$@' です。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%1$@: 예상하지 못한 인수 '%2$@'입니다." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "%1$@:意外的参数 '%2$@'。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "%1$@:非預期的引數 '%2$@'。" - } - } - } - }, - "cli.remotes.error.unknownFlag": { + "cloud.teamPicker.switchAccount": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: unknown flag '%2$@'." + "value": "Switch Account…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: خيار غير معروف '%2$@'." + "value": "تبديل الحساب…" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@: unbekannte Option '%2$@'." + "value": "Konto wechseln…" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@: opción desconocida '%2$@'." + "value": "Cambiar de cuenta…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ : option inconnue '%2$@'." + "value": "Changer de compte…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@:不明なオプション '%2$@' です。" + "value": "アカウントを切り替え…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@: 알 수 없는 옵션 '%2$@'입니다." + "value": "계정 전환…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@:未知的选项 '%2$@'。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "%1$@:未知的選項 '%2$@'。" - } - } - } - }, - "cloudPane.attachment.reason.staleDaemon": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "this Cloud machine is running an older terminal runtime; upgrade it, then retry" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "auf dieser Cloud-Maschine läuft eine ältere Terminal-Laufzeit; aktualisiere sie und versuche es erneut" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "cette machine Cloud utilise une ancienne version du moteur de terminal ; mettez-la à jour, puis réessayez" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "يعمل على جهاز Cloud هذا إصدار أقدم من تشغيل الطرفية؛ حدّث الجهاز ثم أعد المحاولة" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "esta máquina de Cloud usa un runtime de terminal antiguo; actualízala y vuelve a intentarlo" + "value": "切换账户…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "這台 Cloud 機器執行較舊的終端機執行環境;請先升級,再重試" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "这台 Cloud 机器运行较旧的终端运行时;请先升级,再重试" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이 Cloud 머신은 이전 터미널 런타임을 실행 중입니다. 업그레이드한 후 다시 시도하세요" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "この Cloud マシンでは古いターミナルランタイムが実行されています。アップグレードしてから再試行してください" + "value": "切換帳號…" } }, "bs": { "stringUnit": { "state": "translated", - "value": "ova Cloud mašina koristi starije izvršno okruženje terminala; nadogradite je pa pokušajte ponovo" + "value": "Promijeni račun…" } }, "da": { "stringUnit": { "state": "translated", - "value": "denne Cloud-maskine kører en ældre terminalruntime; opgrader den, og prøv igen" + "value": "Skift konto…" } }, "it": { "stringUnit": { "state": "translated", - "value": "questa macchina Cloud esegue un runtime del terminale meno recente; aggiornala e riprova" + "value": "Cambia account…" } }, "km": { "stringUnit": { "state": "translated", - "value": "ម៉ាស៊ីន Cloud នេះកំពុងដំណើរការ runtime ស្ថានីយចាស់ជាងនេះ; ធ្វើបច្ចុប្បន្នភាព រួចព្យាយាមម្ដងទៀត" + "value": "ប្ដូរគណនី…" } }, "nb": { "stringUnit": { "state": "translated", - "value": "denne Cloud-maskinen kjører en eldre terminalruntime; oppgrader den og prøv igjen" + "value": "Bytt konto…" } }, "pl": { "stringUnit": { "state": "translated", - "value": "ta maszyna Cloud korzysta ze starszego środowiska uruchomieniowego terminala; zaktualizuj ją i spróbuj ponownie" + "value": "Przełącz konto…" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "esta máquina Cloud está executando um runtime de terminal antigo; atualize-a e tente novamente" + "value": "Trocar de conta…" } }, "ru": { "stringUnit": { "state": "translated", - "value": "на этой Cloud-машине используется старая среда выполнения терминала; обновите её и повторите попытку" + "value": "Сменить аккаунт…" } }, "th": { "stringUnit": { "state": "translated", - "value": "เครื่อง Cloud นี้กำลังใช้รันไทม์เทอร์มินัลรุ่นเก่า โปรดอัปเกรดแล้วลองอีกครั้ง" + "value": "สลับบัญชี…" } }, "tr": { "stringUnit": { "state": "translated", - "value": "bu Cloud makinesi daha eski bir terminal çalışma zamanı kullanıyor; yükseltip tekrar deneyin" + "value": "Hesap değiştir…" } }, "uk": { "stringUnit": { "state": "translated", - "value": "на цій Cloud-машині працює старіше середовище термінала; оновіть її та повторіть спробу" + "value": "Змінити обліковий запис…" } } } }, - "socket.notification.effectsInvalid": { + "settings.search.alias.setting.terminal.jump-to-bottom-button": { "extractionState": "manual", "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Missing or invalid effects" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "effects が指定されていないか無効です" - } - }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "effects 缺失或无效" + "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude الانتقال إلى الأسفل تمرير" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fehlende oder ungültige effects" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "effects manquant ou invalide" + "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude zum ende springen scrollen verlauf" } }, - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "قيمة effects مفقودة أو غير صالحة" + "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude" } }, "es": { "stringUnit": { "state": "translated", - "value": "effects faltante o no válido" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "遺失或無效的 effects" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "effects가 없거나 잘못되었습니다" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Nedostaje ili je nevažeći effects" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Manglende eller ugyldig effects" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "effects mancante o non valido" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "effects បាត់ ឬមិនត្រឹមត្រូវ" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Manglende eller ugyldig effects" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Brak lub nieprawidłowa wartość effects" + "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude ir al final desplazar historial" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "effects ausente ou inválido" + "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude aller en bas défiler historique" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Отсутствует или недопустимое значение effects" + "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude 一番下へ移動 スクロール" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "effects หายไปหรือไม่ถูกต้อง" + "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude 맨 아래로 이동 스크롤" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "effects eksik veya geçersiz" + "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude 跳到底部 滚动 回滚" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Відсутнє або недійсне значення effects" + "value": "terminal.showJumpToBottomButton jump to bottom button scroll to bottom scrollback follow output latest newest pill arrow down agent codex claude 跳至底部 捲動 回溯" } } } }, - "cli.error.notifyDesktopValue": { + "settings.terminal.showJumpToBottomButton": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "--desktop must be true|false" + "value": "زر الانتقال إلى الأسفل" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يجب أن يكون --desktop إما true|false" + "value": "Schaltfläche „Zum Ende springen“" } }, - "de": { + "en": { "stringUnit": { "state": "translated", - "value": "--desktop muss true|false sein" + "value": "Jump to Bottom Button" } }, "es": { "stringUnit": { "state": "translated", - "value": "--desktop debe ser true|false" + "value": "Botón Ir al final" } }, "fr": { "stringUnit": { "state": "translated", - "value": "--desktop doit être true|false" + "value": "Bouton Aller en bas" } }, "ja": { "stringUnit": { "state": "translated", - "value": "--desktop には true|false を指定してください" + "value": "「一番下へ移動」ボタン" } }, "ko": { "stringUnit": { "state": "translated", - "value": "--desktop는 true|false여야 합니다" + "value": "맨 아래로 이동 버튼" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "--desktop 必须是 true|false" + "value": "“跳到底部”按钮" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "--desktop 必須是 true|false" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "--desktop mora biti true|false" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "--desktop skal være true|false" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "--desktop deve essere true|false" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "--desktop ត្រូវតែជា true|false" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "--desktop må være true|false" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "--desktop musi mieć wartość true|false" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "--desktop deve ser true|false" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "--desktop должен быть true|false" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "--desktop ต้องเป็น true|false" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "--desktop true|false olmalıdır" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "--desktop має бути true|false" + "value": "「跳至底部」按鈕" } } } }, - "cloud.teamPicker.switchAccount": { + "command.terminalScrollToBottom.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Switch Account…" + "value": "Scroll to Bottom" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تبديل الحساب…" + "value": "التمرير إلى الأسفل" } }, "de": { "stringUnit": { "state": "translated", - "value": "Konto wechseln…" + "value": "Zum Ende scrollen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cambiar de cuenta…" + "value": "Desplazar al final" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Changer de compte…" + "value": "Faire défiler jusqu'en bas" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アカウントを切り替え…" + "value": "一番下までスクロール" } }, "ko": { "stringUnit": { "state": "translated", - "value": "계정 전환…" + "value": "맨 아래로 스크롤" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "切换账户…" + "value": "滚动到底部" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "切換帳號…" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Promijeni račun…" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Skift konto…" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Cambia account…" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ប្ដូរគណនី…" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Bytt konto…" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Przełącz konto…" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Trocar de conta…" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Сменить аккаунт…" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "สลับบัญชี…" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Hesap değiştir…" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Змінити обліковий запис…" + "value": "捲動至底部" } } } @@ -609482,6 +609423,65 @@ } } } + }, + "pricing.native.free.feature.history": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Local session history" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ローカルセッション履歴" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "本地会话历史" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Lokaler Sitzungsverlauf" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Historique de session local" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "سجل جلسات محلي" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Historial de sesiones locales" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "本地工作階段歷程紀錄" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "로컬 세션 기록" + } + } + } } }, "version": "1.0" From 1a3ca81e2f75714e1714d730d2b08fe0961a1d61 Mon Sep 17 00:00:00 2001 From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com> Date: Fri, 2 Oct 2026 00:25:28 -0700 Subject: [PATCH 09/10] Pricing: state per-VM maximums, fix CI for 5 VMs per seat The cards said "each with 4 vCPUs and 8 GB RAM", which reads like dedicated hardware. The server enforces a per-VM maximum, so every surface (web 20 locales, macOS catalog, Stripe catalog text) now says "up to N vCPUs and M GB RAM per VM". Also advertise-exempt debug.native_pricing.show like the other debug pricing method, and update two DB/route tests for the 5-per-seat limit. Co-Authored-By: Claude Opus 5.5 --- Resources/Localizable.xcstrings | 112 ++++++++++----------- Sources/PricingPlansScreen.swift | 10 +- scripts/check-socket-capabilities.py | 1 + web/messages/ar.json | 4 +- web/messages/bs.json | 4 +- web/messages/da.json | 4 +- web/messages/de.json | 4 +- web/messages/en.json | 14 +-- web/messages/es.json | 4 +- web/messages/fr.json | 4 +- web/messages/it.json | 4 +- web/messages/ja.json | 14 +-- web/messages/km.json | 4 +- web/messages/ko.json | 4 +- web/messages/no.json | 4 +- web/messages/pl.json | 4 +- web/messages/pt-BR.json | 4 +- web/messages/ru.json | 4 +- web/messages/th.json | 4 +- web/messages/tr.json | 4 +- web/messages/uk.json | 4 +- web/messages/zh-CN.json | 4 +- web/messages/zh-TW.json | 4 +- web/scripts/stripe/provision-catalog.sh | 6 +- web/tests/app-pricing-page.test.tsx | 4 +- web/tests/pricing-page.test.tsx | 6 +- web/tests/pro-pricing.test.ts | 8 +- web/tests/stripe-provision-catalog.test.ts | 6 +- web/tests/vm-review-regressions.test.ts | 11 +- web/tests/vm-route-auth.test.ts | 2 +- 30 files changed, 135 insertions(+), 131 deletions(-) diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 3e536d75271a..e170a844d371 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -273740,55 +273740,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "Up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM" + "value": "Up to 5 Cloud VMs, up to 4 vCPUs and 8 GB RAM per VM" } }, "ja": { "stringUnit": { "state": "translated", - "value": "最大 5 台の Cloud VM、各 4 vCPU と 8 GB RAM" + "value": "最大 5 台の Cloud VM、VM あたり最大 4 vCPU と 8 GB RAM" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "最多 5 台云端虚拟机,每台 4 个虚拟 CPU 和 8 GB 内存" + "value": "最多 5 台云端虚拟机,每台最多 4 个虚拟 CPU 和 8 GB 内存" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bis zu 5 Cloud-VMs mit jeweils 4 vCPUs und 8 GB RAM" + "value": "Bis zu 5 Cloud-VMs mit bis zu 4 vCPUs und 8 GB RAM pro VM" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Jusqu’à 5 VM cloud, chacune avec 4 vCPU et 8 Go de RAM" + "value": "Jusqu’à 5 VM cloud, jusqu’à 4 vCPU et 8 Go de RAM par VM" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ما يصل إلى 5 أجهزة افتراضية سحابية، لكل منها 4 وحدات معالجة مركزية افتراضية و8 جيجابايت من الذاكرة" + "value": "ما يصل إلى 5 أجهزة افتراضية سحابية، بحد أقصى 4 وحدات معالجة مركزية افتراضية و8 جيجابايت من الذاكرة لكل جهاز" } }, "es": { "stringUnit": { "state": "translated", - "value": "Hasta 5 VM en la nube, cada una con 4 vCPU y 8 GB de RAM" + "value": "Hasta 5 VM en la nube, con hasta 4 vCPU y 8 GB de RAM por VM" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "最多 5 台雲端虛擬機,每台 4 個虛擬 CPU 與 8 GB 記憶體" + "value": "最多 5 台雲端虛擬機,每台最多 4 個虛擬 CPU 與 8 GB 記憶體" } }, "ko": { "stringUnit": { "state": "translated", - "value": "최대 5개의 클라우드 VM, 각각 vCPU 4개와 RAM 8 GB" + "value": "최대 5개의 클라우드 VM, VM당 최대 vCPU 4개와 RAM 8 GB" } } } @@ -274345,121 +274345,121 @@ "en": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro includes up to 5 Cloud VMs, with up to 4 vCPUs and 8 GB RAM per VM. Team includes the same limits per user. There is no metering or overage billing." } }, "ja": { "stringUnit": { "state": "translated", - "value": "Pro には最大 5 台の Cloud VM が含まれ、各 VM に 4 vCPU と 8 GB RAM があります。Team ではユーザーごとに同じ上限が適用されます。従量課金や超過料金はありません。" + "value": "Pro には最大 5 台の Cloud VM が含まれ、VM あたり最大 4 vCPU と 8 GB RAM を利用できます。Team ではユーザーごとに同じ上限が適用されます。従量課金や超過料金はありません。" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تتضمن باقة Pro ما يصل إلى 5 أجهزة افتراضية سحابية، لكل منها 4 وحدات معالجة مركزية افتراضية و8 جيجابايت من الذاكرة. وتمنح باقة Team الحدود نفسها لكل مستخدم. لا توجد فوترة حسب الاستهلاك أو رسوم إضافية لتجاوز الحدود." + "value": "تتضمن باقة Pro ما يصل إلى 5 أجهزة افتراضية سحابية، بحد أقصى 4 وحدات معالجة مركزية افتراضية و8 جيجابايت من الذاكرة لكل جهاز. وتمنح باقة Team الحدود نفسها لكل مستخدم. لا توجد فوترة حسب الاستهلاك أو رسوم إضافية لتجاوز الحدود." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro uključuje do 5 Cloud VM-ova, s najviše 4 vCPU-a i 8 GB RAM-a po VM-u. Team uključuje ista ograničenja po korisniku. Nema naplate prema potrošnji niti naplate prekoračenja." } }, "da": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro inkluderer op til 5 Cloud VMs med op til 4 vCPU'er og 8 GB RAM pr. VM. Team inkluderer de samme grænser pr. bruger. Der er ingen forbrugsafregning eller betaling for overforbrug." } }, "de": { "stringUnit": { "state": "translated", - "value": "Pro beinhaltet bis zu 5 Cloud-VMs mit jeweils 4 vCPUs und 8 GB RAM. Team beinhaltet dieselben Limits pro Benutzer. Es gibt keine verbrauchsabhängige Abrechnung oder Nachberechnung." + "value": "Pro beinhaltet bis zu 5 Cloud-VMs mit bis zu 4 vCPUs und 8 GB RAM pro VM. Team beinhaltet dieselben Limits pro Benutzer. Es gibt keine verbrauchsabhängige Abrechnung oder Nachberechnung." } }, "es": { "stringUnit": { "state": "translated", - "value": "Pro incluye hasta 5 VM en la nube, cada una con 4 vCPU y 8 GB de RAM. Team incluye los mismos límites por usuario. No hay facturación por consumo ni por exceso." + "value": "Pro incluye hasta 5 VM en la nube, con hasta 4 vCPU y 8 GB de RAM por VM. Team incluye los mismos límites por usuario. No hay facturación por consumo ni por exceso." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Pro inclut jusqu'à 5 VM Cloud, chacune avec 4 vCPU et 8 Go de RAM. Team inclut les mêmes limites par utilisateur. Il n'y a pas de facturation à l'utilisation ou de dépassement." + "value": "Pro inclut jusqu'à 5 VM Cloud, avec jusqu'à 4 vCPU et 8 Go de RAM par VM. Team inclut les mêmes limites par utilisateur. Il n'y a pas de facturation à l'utilisation ou de dépassement." } }, "it": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro include fino a 5 Cloud VM, con fino a 4 vCPU e 8 GB di RAM per VM. Team include gli stessi limiti per utente. Non è prevista fatturazione a consumo né per eccedenze." } }, "km": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro រួមបញ្ចូល Cloud VMs រហូតដល់ 5 ដោយមាន vCPU រហូតដល់ 4 និង RAM 8 GB ក្នុងមួយ VM។ Team រួមបញ្ចូលដែនកំណត់ដូចគ្នាសម្រាប់អ្នកប្រើម្នាក់ៗ។ មិនមានការគិតថ្លៃតាមការប្រើប្រាស់ ឬថ្លៃលើសកំណត់ទេ។" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Pro는 최대 5개의 클라우드 VM을 포함하며, 각 VM에 vCPU 4개와 RAM 8 GB가 있습니다. Team은 사용자마다 동일한 한도가 적용됩니다. 사용량 기반 과금이나 초과 요금은 없습니다." + "value": "Pro는 최대 5개의 클라우드 VM을 포함하며, VM당 최대 vCPU 4개와 RAM 8 GB를 사용할 수 있습니다. Team은 사용자마다 동일한 한도가 적용됩니다. 사용량 기반 과금이나 초과 요금은 없습니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro inkluderer opptil 5 Cloud VMs med opptil 4 vCPU-er og 8 GB RAM per VM. Team inkluderer de samme grensene per bruker. Det er ingen forbruksbasert fakturering eller betaling for overforbruk." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro obejmuje do 5 Cloud VMs, z maksymalnie 4 vCPU i 8 GB RAM na VM. Team obejmuje te same limity na użytkownika. Nie ma rozliczeń za zużycie ani opłat za przekroczenie limitów." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." + "value": "O Pro inclui até 5 Cloud VMs, com até 4 vCPUs e 8 GB de RAM por VM. O Team inclui os mesmos limites por usuário. Não há cobrança por uso nem por excedente." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro включает до 5 Cloud VMs, до 4 vCPU и 8 ГБ RAM на каждую VM. Team включает те же лимиты на пользователя. Нет оплаты по факту использования или за превышение." } }, "th": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro มี Cloud VMs ได้สูงสุด 5 เครื่อง แต่ละ VM มีได้สูงสุด 4 vCPU และ RAM 8 GB Team มีขีดจำกัดเดียวกันต่อผู้ใช้ ไม่มีการคิดค่าบริการตามการใช้งานหรือค่าใช้งานส่วนเกิน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro, VM başına en fazla 4 vCPU ve 8 GB RAM ile en fazla 5 Cloud VM içerir. Team, kullanıcı başına aynı sınırları içerir. Kullanıma göre ücretlendirme veya aşım ücreti yoktur." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." + "value": "Pro включає до 5 Cloud VMs, до 4 vCPU і 8 ГБ RAM на кожну VM. Team включає ті самі ліміти на користувача. Немає оплати за фактичне використання чи за перевищення." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Pro 最多包含 5 台云端虚拟机,每台有 4 个虚拟 CPU 和 8 GB 内存。Team 的每位用户享有相同上限。不按用量计费,也不收取超额费用。" + "value": "Pro 最多包含 5 台云端虚拟机,每台最多 4 个虚拟 CPU 和 8 GB 内存。Team 的每位用户享有相同上限。不按用量计费,也不收取超额费用。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Pro 包含最多 5 台雲端虛擬機,每台有 4 個虛擬 CPU 與 8 GB 記憶體。Team 的每位使用者享有相同上限。不按用量計費,也不收取超額費用。" + "value": "Pro 包含最多 5 台雲端虛擬機,每台最多 4 個虛擬 CPU 與 8 GB 記憶體。Team 的每位使用者享有相同上限。不按用量計費,也不收取超額費用。" } } } @@ -275126,55 +275126,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "Up to 5 Cloud VMs per user, each with 4 vCPUs and 8 GB RAM" + "value": "Up to 5 Cloud VMs per user, up to 4 vCPUs and 8 GB RAM per VM" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ユーザーごとに最大 5 台の Cloud VM、各 4 vCPU と 8 GB RAM" + "value": "ユーザーごとに最大 5 台の Cloud VM、VM あたり最大 4 vCPU と 8 GB RAM" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "每位用户最多 5 台云端虚拟机,每台 4 个虚拟 CPU 和 8 GB 内存" + "value": "每位用户最多 5 台云端虚拟机,每台最多 4 个虚拟 CPU 和 8 GB 内存" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bis zu 5 Cloud-VMs pro Benutzer mit jeweils 4 vCPUs und 8 GB RAM" + "value": "Bis zu 5 Cloud-VMs pro Benutzer mit bis zu 4 vCPUs und 8 GB RAM pro VM" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Jusqu’à 5 VM cloud par utilisateur, chacune avec 4 vCPU et 8 Go de RAM" + "value": "Jusqu’à 5 VM cloud par utilisateur, jusqu’à 4 vCPU et 8 Go de RAM par VM" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ما يصل إلى 5 أجهزة افتراضية سحابية لكل مستخدم، لكل منها 4 وحدات معالجة مركزية افتراضية و8 جيجابايت من الذاكرة" + "value": "ما يصل إلى 5 أجهزة افتراضية سحابية لكل مستخدم، بحد أقصى 4 وحدات معالجة مركزية افتراضية و8 جيجابايت من الذاكرة لكل جهاز" } }, "es": { "stringUnit": { "state": "translated", - "value": "Hasta 5 VM en la nube por usuario, cada una con 4 vCPU y 8 GB de RAM" + "value": "Hasta 5 VM en la nube por usuario, con hasta 4 vCPU y 8 GB de RAM por VM" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "每位使用者最多 5 台雲端虛擬機,每台 4 個虛擬 CPU 與 8 GB 記憶體" + "value": "每位使用者最多 5 台雲端虛擬機,每台最多 4 個虛擬 CPU 與 8 GB 記憶體" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용자당 최대 5개의 클라우드 VM, 각각 vCPU 4개와 RAM 8 GB" + "value": "사용자당 최대 5개의 클라우드 VM, VM당 최대 vCPU 4개와 RAM 8 GB" } } } @@ -521441,55 +521441,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "Max includes up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM." + "value": "Max includes up to 5 Cloud VMs, with up to 16 vCPUs and 32 GB RAM per VM." } }, "de": { "stringUnit": { "state": "translated", - "value": "Max beinhaltet bis zu 5 Cloud-VMs mit jeweils 16 vCPUs und 32 GB RAM." + "value": "Max beinhaltet bis zu 5 Cloud-VMs mit bis zu 16 vCPUs und 32 GB RAM pro VM." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Max inclut jusqu'à 5 VM Cloud, chacune avec 16 vCPU et 32 Go de RAM." + "value": "Max inclut jusqu'à 5 VM Cloud, avec jusqu'à 16 vCPU et 32 Go de RAM par VM." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تتضمن باقة Max ما يصل إلى 5 أجهزة افتراضية سحابية، لكل منها 16 وحدة معالجة مركزية افتراضية و32 جيجابايت من الذاكرة." + "value": "تتضمن باقة Max ما يصل إلى 5 أجهزة افتراضية سحابية، بحد أقصى 16 وحدة معالجة مركزية افتراضية و32 جيجابايت من الذاكرة لكل جهاز." } }, "es": { "stringUnit": { "state": "translated", - "value": "Max incluye hasta 5 VM en la nube, cada una con 16 vCPU y 32 GB de RAM." + "value": "Max incluye hasta 5 VM en la nube, con hasta 16 vCPU y 32 GB de RAM por VM." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Max 包含最多 5 台雲端虛擬機,每台有 16 個虛擬 CPU 與 32 GB 記憶體。" + "value": "Max 包含最多 5 台雲端虛擬機,每台最多 16 個虛擬 CPU 與 32 GB 記憶體。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Max 最多包含 5 台云端虚拟机,每台有 16 个虚拟 CPU 和 32 GB 内存。" + "value": "Max 最多包含 5 台云端虚拟机,每台最多 16 个虚拟 CPU 和 32 GB 内存。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Max는 최대 5개의 클라우드 VM을 포함하며, 각 VM에 vCPU 16개와 RAM 32 GB가 있습니다." + "value": "Max는 최대 5개의 클라우드 VM을 포함하며, VM당 최대 vCPU 16개와 RAM 32 GB를 사용할 수 있습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "Max には最大 5 台の Cloud VM が含まれ、各 VM に 16 vCPU と 32 GB RAM があります。" + "value": "Max には最大 5 台の Cloud VM が含まれ、VM あたり最大 16 vCPU と 32 GB RAM を利用できます。" } } } @@ -522267,55 +522267,55 @@ "en": { "stringUnit": { "state": "translated", - "value": "Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM" + "value": "Up to 5 Cloud VMs, up to 16 vCPUs and 32 GB RAM per VM" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bis zu 5 Cloud-VMs mit jeweils 16 vCPUs und 32 GB RAM" + "value": "Bis zu 5 Cloud-VMs mit bis zu 16 vCPUs und 32 GB RAM pro VM" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Jusqu’à 5 VM cloud, chacune avec 16 vCPU et 32 Go de RAM" + "value": "Jusqu’à 5 VM cloud, jusqu’à 16 vCPU et 32 Go de RAM par VM" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ما يصل إلى 5 أجهزة افتراضية سحابية، لكل منها 16 وحدة معالجة مركزية افتراضية و32 جيجابايت من الذاكرة" + "value": "ما يصل إلى 5 أجهزة افتراضية سحابية، بحد أقصى 16 وحدة معالجة مركزية افتراضية و32 جيجابايت من الذاكرة لكل جهاز" } }, "es": { "stringUnit": { "state": "translated", - "value": "Hasta 5 VM en la nube, cada una con 16 vCPU y 32 GB de RAM" + "value": "Hasta 5 VM en la nube, con hasta 16 vCPU y 32 GB de RAM por VM" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "最多 5 台雲端虛擬機,每台 16 個虛擬 CPU 與 32 GB 記憶體" + "value": "最多 5 台雲端虛擬機,每台最多 16 個虛擬 CPU 與 32 GB 記憶體" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "最多 5 台云端虚拟机,每台 16 个虚拟 CPU 和 32 GB 内存" + "value": "最多 5 台云端虚拟机,每台最多 16 个虚拟 CPU 和 32 GB 内存" } }, "ko": { "stringUnit": { "state": "translated", - "value": "최대 5개의 클라우드 VM, 각각 vCPU 16개와 RAM 32 GB" + "value": "최대 5개의 클라우드 VM, VM당 최대 vCPU 16개와 RAM 32 GB" } }, "ja": { "stringUnit": { "state": "translated", - "value": "最大 5 台の Cloud VM、各 16 vCPU と 32 GB RAM" + "value": "最大 5 台の Cloud VM、VM あたり最大 16 vCPU と 32 GB RAM" } } } diff --git a/Sources/PricingPlansScreen.swift b/Sources/PricingPlansScreen.swift index 9ea0d3e886d5..31f59943d457 100644 --- a/Sources/PricingPlansScreen.swift +++ b/Sources/PricingPlansScreen.swift @@ -475,7 +475,7 @@ private struct NativePricingPlansView: View { isProminent: !snapshot.isMax && !snapshot.isGo, features: [ String(localized: "pricing.native.pro.feature.vms", defaultValue: "Cloud agents on isolated Cloud VMs"), - String(localized: "pricing.native.pro.feature.hours", defaultValue: "Up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM"), + String(localized: "pricing.native.pro.feature.hours", defaultValue: "Up to 5 Cloud VMs, up to 4 vCPUs and 8 GB RAM per VM"), String(localized: "pricing.native.pro.feature.gateway", defaultValue: "Unlimited workspaces"), String(localized: "pricing.native.pro.feature.ios", defaultValue: "cmux iOS app and email support"), ] @@ -489,7 +489,7 @@ private struct NativePricingPlansView: View { action: snapshot.isMax ? nil : { ProUpgradePresenter.presentCheckout(source: .nativePricingPreview, plan: .max) }, isProminent: snapshot.isMax, features: [ - String(localized: "pricing.native.max.feature.sizes", defaultValue: "Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM"), + String(localized: "pricing.native.max.feature.sizes", defaultValue: "Up to 5 Cloud VMs, up to 16 vCPUs and 32 GB RAM per VM"), String(localized: "pricing.native.max.feature.pro", defaultValue: "Unlimited workspaces and the iOS app"), ] ) @@ -503,7 +503,7 @@ private struct NativePricingPlansView: View { features: [ String(localized: "pricing.native.team.feature.billing", defaultValue: "Unified billing for the whole team"), String(localized: "pricing.native.team.feature.seats", defaultValue: "Centralized seat management"), - String(localized: "pricing.native.team.feature.compute", defaultValue: "Up to 5 Cloud VMs per user, each with 4 vCPUs and 8 GB RAM"), + String(localized: "pricing.native.team.feature.compute", defaultValue: "Up to 5 Cloud VMs per user, up to 4 vCPUs and 8 GB RAM per VM"), String(localized: "pricing.native.team.feature.gateway", defaultValue: "Team-wide model gateway analytics"), String(localized: "pricing.native.team.feature.support", defaultValue: "Priority email support"), ] @@ -884,13 +884,13 @@ private struct NativePricingSizeSection: View { .foregroundStyle(.secondary) Text(String( localized: "pricing.native.sizes.body", - defaultValue: "Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same limits per user. There is no metering or overage billing." + defaultValue: "Pro includes up to 5 Cloud VMs, with up to 4 vCPUs and 8 GB RAM per VM. Team includes the same limits per user. There is no metering or overage billing." )) .font(.system(size: 13)) .foregroundStyle(.secondary) Text(String( localized: "pricing.native.sizes.max", - defaultValue: "Max includes up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM." + defaultValue: "Max includes up to 5 Cloud VMs, with up to 16 vCPUs and 32 GB RAM per VM." )) .font(.system(size: 13)) .foregroundStyle(.secondary) diff --git a/scripts/check-socket-capabilities.py b/scripts/check-socket-capabilities.py index c686bfe60ab4..29e0194c3578 100644 --- a/scripts/check-socket-capabilities.py +++ b/scripts/check-socket-capabilities.py @@ -51,6 +51,7 @@ debug.panel_snapshot.reset debug.portal.stats debug.pro_welcome_checklist.show +debug.native_pricing.show debug.right_sidebar.focus debug.session_snapshot_benchmark debug.session_snapshot_seed_scrollback diff --git a/web/messages/ar.json b/web/messages/ar.json index ee2775f74891..de7aeb395ef2 100644 --- a/web/messages/ar.json +++ b/web/messages/ar.json @@ -490,11 +490,11 @@ ], "pro": [ "وكلاء سحابيون على Cloud VMs", - "5 Cloud VMs، لكل منها 4 vCPU و8 غيغابايت RAM", + "حتى 5 Cloud VMs، بحد أقصى 4 vCPU و8 غيغابايت RAM لكل VM", "تطبيق cmux لنظام iOS" ], "max": [ - "5 Cloud VMs، لكل منها 16 vCPU و32 غيغابايت RAM", + "حتى 5 Cloud VMs، بحد أقصى 16 vCPU و32 غيغابايت RAM لكل VM", "أحجام أجهزة أكبر", "كل ما في Pro" ], diff --git a/web/messages/bs.json b/web/messages/bs.json index 358d6a8fa132..96580da31502 100644 --- a/web/messages/bs.json +++ b/web/messages/bs.json @@ -490,11 +490,11 @@ ], "pro": [ "Cloud agenti na Cloud VMs", - "5 Cloud VM-ova, svaki sa 4 vCPU-a i 8 GB RAM-a", + "Do 5 Cloud VM-ova, najviše 4 vCPU-a i 8 GB RAM-a po VM-u", "cmux aplikacija za iOS" ], "max": [ - "5 Cloud VM-ova, svaki sa 16 vCPU-a i 32 GB RAM-a", + "Do 5 Cloud VM-ova, najviše 16 vCPU-a i 32 GB RAM-a po VM-u", "Veće mašine", "Sve iz Pro" ], diff --git a/web/messages/da.json b/web/messages/da.json index 24f2dbc91b35..8fc35179b8fb 100644 --- a/web/messages/da.json +++ b/web/messages/da.json @@ -490,11 +490,11 @@ ], "pro": [ "Cloud-agenter på Cloud VMs", - "5 Cloud VMs med 4 vCPU'er og 8 GB RAM hver", + "Op til 5 Cloud VMs, op til 4 vCPU'er og 8 GB RAM pr. VM", "cmux-appen til iOS" ], "max": [ - "5 Cloud VMs med 16 vCPU'er og 32 GB RAM hver", + "Op til 5 Cloud VMs, op til 16 vCPU'er og 32 GB RAM pr. VM", "Større maskinstørrelser", "Alt i Pro" ], diff --git a/web/messages/de.json b/web/messages/de.json index d8189b99cc52..f11632b59490 100644 --- a/web/messages/de.json +++ b/web/messages/de.json @@ -490,11 +490,11 @@ ], "pro": [ "Cloud-Agenten auf Cloud VMs", - "5 Cloud VMs mit je 4 vCPUs und 8 GB RAM", + "Bis zu 5 Cloud VMs mit bis zu 4 vCPUs und 8 GB RAM pro VM", "Die cmux iOS-App" ], "max": [ - "5 Cloud VMs mit je 16 vCPUs und 32 GB RAM", + "Bis zu 5 Cloud VMs mit bis zu 16 vCPUs und 32 GB RAM pro VM", "Größere Maschinengrößen", "Alles aus Pro" ], diff --git a/web/messages/en.json b/web/messages/en.json index 33f0a998b725..09777bf42191 100644 --- a/web/messages/en.json +++ b/web/messages/en.json @@ -652,7 +652,7 @@ "activeBody": "Your Max plan is active. It renews on {date}.", "pendingBody": "Your Max plan ends on {date}.", "monthlyPrice": "${amount}/mo", - "upsell": "Max includes up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM, for $200 per month, billed monthly." + "upsell": "Max includes up to 5 Cloud VMs, with up to 16 vCPUs and 32 GB RAM per VM, for $200 per month, billed monthly." }, "teamPanel": { "notFound": "This team is not available. You may have left it, or it was deleted.", @@ -717,11 +717,11 @@ ], "pro": [ "Cloud agents on Cloud VMs", - "5 Cloud VMs with 4 vCPUs and 8 GB RAM each", + "Up to 5 Cloud VMs, up to 4 vCPUs and 8 GB RAM per VM", "The cmux iOS app" ], "max": [ - "5 Cloud VMs with 16 vCPUs and 32 GB RAM each", + "Up to 5 Cloud VMs, up to 16 vCPUs and 32 GB RAM per VM", "Larger machine sizes", "Everything in Pro" ], @@ -1667,7 +1667,7 @@ "featuresLead": "Everything in Free, plus:", "features": [ "Cloud agents on Cloud VMs in isolated remote sandboxes", - "Up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM", + "Up to 5 Cloud VMs, up to 4 vCPUs and 8 GB RAM per VM", "Unlimited workspaces", "The cmux iOS app and email support" ], @@ -1684,7 +1684,7 @@ "cta": "Get Max", "featuresLead": "Everything in Pro, plus:", "features": [ - "Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM", + "Up to 5 Cloud VMs, up to 16 vCPUs and 32 GB RAM per VM", "Unlimited workspaces and the iOS app" ] }, @@ -1901,11 +1901,11 @@ }, { "q": "What are Cloud VMs?", - "a": "Persistent Linux machines in the cloud: pets, not cattle. Following the Zen of cmux, a machine is a primitive, not a managed solution: it keeps its files, installed tools, and state, and what you build on it is yours. Agents clone repositories, run commands, and open pull requests there without touching your Mac. Pro includes up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM. Team includes the same allowance per user." + "a": "Persistent Linux machines in the cloud: pets, not cattle. Following the Zen of cmux, a machine is a primitive, not a managed solution: it keeps its files, installed tools, and state, and what you build on it is yours. Agents clone repositories, run commands, and open pull requests there without touching your Mac. Pro includes up to 5 Cloud VMs, with up to 4 vCPUs and 8 GB RAM per VM. Team includes the same allowance per user." }, { "q": "What does Max add?", - "a": "Max is $200/mo, billed monthly. It includes everything in Pro and up to 5 Cloud VMs, each with up to 16 vCPUs and 32 GB RAM. Pro and Team machines top out at 4 vCPUs and 8 GB RAM. Free accounts do not include Cloud VMs." + "a": "Max is $200/mo, billed monthly. It includes everything in Pro and up to 5 Cloud VMs, with up to 16 vCPUs and 32 GB RAM per VM. Pro and Team machines top out at 4 vCPUs and 8 GB RAM. Free accounts do not include Cloud VMs." }, { "q": "What is cmux Vault?", diff --git a/web/messages/es.json b/web/messages/es.json index e0dd1643c162..8cc1b7ce9867 100644 --- a/web/messages/es.json +++ b/web/messages/es.json @@ -490,11 +490,11 @@ ], "pro": [ "Agentes en la nube en Cloud VMs", - "5 Cloud VMs con 4 vCPU y 8 GB de RAM cada una", + "Hasta 5 Cloud VMs, con hasta 4 vCPU y 8 GB de RAM por VM", "La app cmux para iOS" ], "max": [ - "5 Cloud VMs con 16 vCPU y 32 GB de RAM cada una", + "Hasta 5 Cloud VMs, con hasta 16 vCPU y 32 GB de RAM por VM", "Máquinas más grandes", "Todo lo de Pro" ], diff --git a/web/messages/fr.json b/web/messages/fr.json index 5a80294cf305..1a4b3218b45b 100644 --- a/web/messages/fr.json +++ b/web/messages/fr.json @@ -490,11 +490,11 @@ ], "pro": [ "Agents cloud sur des Cloud VMs", - "5 Cloud VMs avec 4 vCPU et 8 Go de RAM chacune", + "Jusqu'à 5 Cloud VMs, jusqu'à 4 vCPU et 8 Go de RAM par VM", "L'app cmux pour iOS" ], "max": [ - "5 Cloud VMs avec 16 vCPU et 32 Go de RAM chacune", + "Jusqu'à 5 Cloud VMs, jusqu'à 16 vCPU et 32 Go de RAM par VM", "Des machines plus grandes", "Tout ce qu'inclut Pro" ], diff --git a/web/messages/it.json b/web/messages/it.json index 41322ea5afcf..ded2e1484a6d 100644 --- a/web/messages/it.json +++ b/web/messages/it.json @@ -490,11 +490,11 @@ ], "pro": [ "Agenti cloud su Cloud VMs", - "5 Cloud VMs con 4 vCPU e 8 GB di RAM ciascuna", + "Fino a 5 Cloud VMs, con fino a 4 vCPU e 8 GB di RAM per VM", "L'app cmux per iOS" ], "max": [ - "5 Cloud VMs con 16 vCPU e 32 GB di RAM ciascuna", + "Fino a 5 Cloud VMs, con fino a 16 vCPU e 32 GB di RAM per VM", "Macchine più grandi", "Tutto ciò che include Pro" ], diff --git a/web/messages/ja.json b/web/messages/ja.json index 2974d3d52966..09cbe397a11c 100644 --- a/web/messages/ja.json +++ b/web/messages/ja.json @@ -652,7 +652,7 @@ "activeBody": "Max プランは有効です。次回更新日は {date} です。", "pendingBody": "Max プランは {date} に終了します。", "monthlyPrice": "${amount}/月", - "upsell": "Max は月額 $200 の月払いで、最大 5 台の Cloud VM を利用でき、各 VM に 16 vCPU と 32 GB RAM が割り当てられます。" + "upsell": "Max は月額 $200 の月払いで、最大 5 台の Cloud VM を利用でき、VM あたり最大 16 vCPU と 32 GB RAM を使えます。" }, "teamPanel": { "notFound": "このチームは利用できません。チームから退出したか、チームが削除された可能性があります。", @@ -717,11 +717,11 @@ ], "pro": [ "Cloud VM 上のクラウドエージェント", - "Cloud VM 5 台、各 4 vCPU と 8 GB RAM", + "最大 5 台の Cloud VM、VM あたり最大 4 vCPU と 8 GB RAM", "cmux iOS アプリ" ], "max": [ - "Cloud VM 5 台、各 16 vCPU と 32 GB RAM", + "最大 5 台の Cloud VM、VM あたり最大 16 vCPU と 32 GB RAM", "より大きなマシンサイズ", "Pro のすべての機能" ], @@ -1667,7 +1667,7 @@ "featuresLead": "Free のすべてに加えて:", "features": [ "分離されたリモートサンドボックスの Cloud VM 上で動くクラウドエージェント", - "最大 5 台の Cloud VM、各 VM に 4 vCPU と 8 GB RAM", + "最大 5 台の Cloud VM、VM あたり最大 4 vCPU と 8 GB RAM", "ワークスペースは無制限", "cmux iOS アプリとメールサポート" ], @@ -1684,7 +1684,7 @@ "cta": "Max を入手", "featuresLead": "Pro のすべてに加えて:", "features": [ - "最大 5 台の Cloud VM、各 VM に 16 vCPU と 32 GB RAM", + "最大 5 台の Cloud VM、VM あたり最大 16 vCPU と 32 GB RAM", "無制限のワークスペースと iOS アプリ" ] }, @@ -1901,11 +1901,11 @@ }, { "q": "Cloud VM とは何ですか?", - "a": "クラウド上の永続的な Linux マシンで、使い捨て(cattle)ではなくペットです。Zen of cmux のとおり、マシンはソリューションではなくプリミティブです。ファイル、インストールしたツール、状態はそのまま保持され、その上に構築したものはあなたのものです。エージェントはそこでリポジトリをクローンし、コマンドを実行し、プルリクエストを開くため、お使いの Mac には触れません。Pro では最大 5 台の Cloud VM を利用でき、各 VM に 4 vCPU と 8 GB RAM が割り当てられます。Team ではユーザーごとに同じ枠が適用されます。" + "a": "クラウド上の永続的な Linux マシンで、使い捨て(cattle)ではなくペットです。Zen of cmux のとおり、マシンはソリューションではなくプリミティブです。ファイル、インストールしたツール、状態はそのまま保持され、その上に構築したものはあなたのものです。エージェントはそこでリポジトリをクローンし、コマンドを実行し、プルリクエストを開くため、お使いの Mac には触れません。Pro では最大 5 台の Cloud VM を利用でき、VM あたり最大 4 vCPU と 8 GB RAM を使えます。Team ではユーザーごとに同じ枠が適用されます。" }, { "q": "Max では何が追加されますか?", - "a": "Max は月払いで $200/月です。Pro のすべてを含み、最大 5 台の Cloud VM を利用でき、各 VM は最大 16 vCPU と 32 GB RAM です。Pro と Team のマシンは最大 4 vCPU と 8 GB RAM です。Free には Cloud VM は含まれません。" + "a": "Max は月払いで $200/月です。Pro のすべてを含み、最大 5 台の Cloud VM を利用でき、VM あたり最大 16 vCPU と 32 GB RAM です。Pro と Team のマシンは最大 4 vCPU と 8 GB RAM です。Free には Cloud VM は含まれません。" }, { "q": "cmux Vault とは何ですか?", diff --git a/web/messages/km.json b/web/messages/km.json index 124ab774e923..f4a4221857d5 100644 --- a/web/messages/km.json +++ b/web/messages/km.json @@ -490,11 +490,11 @@ ], "pro": [ "ភ្នាក់ងារពពកនៅលើ Cloud VMs", - "Cloud VMs ចំនួន 5 ដែលនីមួយៗមាន vCPU 4 និង RAM 8 GB", + "Cloud VMs រហូតដល់ 5 ដោយមាន vCPU រហូតដល់ 4 និង RAM 8 GB ក្នុងមួយ VM", "កម្មវិធី cmux សម្រាប់ iOS" ], "max": [ - "Cloud VMs ចំនួន 5 ដែលនីមួយៗមាន vCPU 16 និង RAM 32 GB", + "Cloud VMs រហូតដល់ 5 ដោយមាន vCPU រហូតដល់ 16 និង RAM 32 GB ក្នុងមួយ VM", "ម៉ាស៊ីនធំជាងមុន", "អ្វីៗទាំងអស់ក្នុង Pro" ], diff --git a/web/messages/ko.json b/web/messages/ko.json index 4d4a986b8d98..3c8c877563ca 100644 --- a/web/messages/ko.json +++ b/web/messages/ko.json @@ -490,11 +490,11 @@ ], "pro": [ "Cloud VM의 클라우드 에이전트", - "각각 vCPU 4개와 8 GB RAM을 갖춘 Cloud VM 5대", + "최대 5대의 Cloud VM, VM당 최대 vCPU 4개와 8 GB RAM", "cmux iOS 앱" ], "max": [ - "각각 vCPU 16개와 32 GB RAM을 갖춘 Cloud VM 5대", + "최대 5대의 Cloud VM, VM당 최대 vCPU 16개와 32 GB RAM", "더 큰 머신 크기", "Pro의 모든 기능" ], diff --git a/web/messages/no.json b/web/messages/no.json index 78f64b6520d0..fdc5c855c745 100644 --- a/web/messages/no.json +++ b/web/messages/no.json @@ -490,11 +490,11 @@ ], "pro": [ "Skyagenter på Cloud VMs", - "5 Cloud VMs med 4 vCPU-er og 8 GB RAM hver", + "Opptil 5 Cloud VMs, opptil 4 vCPU-er og 8 GB RAM per VM", "cmux-appen for iOS" ], "max": [ - "5 Cloud VMs med 16 vCPU-er og 32 GB RAM hver", + "Opptil 5 Cloud VMs, opptil 16 vCPU-er og 32 GB RAM per VM", "Større maskinstørrelser", "Alt i Pro" ], diff --git a/web/messages/pl.json b/web/messages/pl.json index e3bda7789c09..0caff8778299 100644 --- a/web/messages/pl.json +++ b/web/messages/pl.json @@ -490,11 +490,11 @@ ], "pro": [ "Agenci w chmurze na Cloud VMs", - "5 Cloud VMs, każda z 4 vCPU i 8 GB RAM", + "Do 5 Cloud VMs, maksymalnie 4 vCPU i 8 GB RAM na VM", "Aplikacja cmux na iOS" ], "max": [ - "5 Cloud VMs, każda z 16 vCPU i 32 GB RAM", + "Do 5 Cloud VMs, maksymalnie 16 vCPU i 32 GB RAM na VM", "Większe maszyny", "Wszystko z planu Pro" ], diff --git a/web/messages/pt-BR.json b/web/messages/pt-BR.json index 04e80365930b..bba7318c4b16 100644 --- a/web/messages/pt-BR.json +++ b/web/messages/pt-BR.json @@ -490,11 +490,11 @@ ], "pro": [ "Agentes na nuvem em Cloud VMs", - "5 Cloud VMs com 4 vCPUs e 8 GB de RAM cada", + "Até 5 Cloud VMs, com até 4 vCPUs e 8 GB de RAM por VM", "O app cmux para iOS" ], "max": [ - "5 Cloud VMs com 16 vCPUs e 32 GB de RAM cada", + "Até 5 Cloud VMs, com até 16 vCPUs e 32 GB de RAM por VM", "Máquinas maiores", "Tudo do Pro" ], diff --git a/web/messages/ru.json b/web/messages/ru.json index 253364389168..a85652beb204 100644 --- a/web/messages/ru.json +++ b/web/messages/ru.json @@ -490,11 +490,11 @@ ], "pro": [ "Облачные агенты на Cloud VMs", - "5 Cloud VMs, у каждой 4 vCPU и 8 ГБ RAM", + "До 5 Cloud VMs, до 4 vCPU и 8 ГБ RAM на каждую VM", "Приложение cmux для iOS" ], "max": [ - "5 Cloud VMs, у каждой 16 vCPU и 32 ГБ RAM", + "До 5 Cloud VMs, до 16 vCPU и 32 ГБ RAM на каждую VM", "Более крупные машины", "Всё из Pro" ], diff --git a/web/messages/th.json b/web/messages/th.json index d4cffcc7a34a..30ea4bd0be8c 100644 --- a/web/messages/th.json +++ b/web/messages/th.json @@ -490,11 +490,11 @@ ], "pro": [ "เอเจนต์บนคลาวด์ใน Cloud VMs", - "Cloud VMs 5 เครื่อง แต่ละเครื่องมี 4 vCPU และ RAM 8 GB", + "Cloud VMs สูงสุด 5 เครื่อง แต่ละเครื่องมีได้สูงสุด 4 vCPU และ RAM 8 GB", "แอป cmux สำหรับ iOS" ], "max": [ - "Cloud VMs 5 เครื่อง แต่ละเครื่องมี 16 vCPU และ RAM 32 GB", + "Cloud VMs สูงสุด 5 เครื่อง แต่ละเครื่องมีได้สูงสุด 16 vCPU และ RAM 32 GB", "เครื่องขนาดใหญ่ขึ้น", "ทุกอย่างใน Pro" ], diff --git a/web/messages/tr.json b/web/messages/tr.json index 0915071d7be2..6436b65efa8b 100644 --- a/web/messages/tr.json +++ b/web/messages/tr.json @@ -490,11 +490,11 @@ ], "pro": [ "Cloud VMs üzerinde bulut ajanları", - "Her biri 4 vCPU ve 8 GB RAM'e sahip 5 Cloud VM", + "VM başına en fazla 4 vCPU ve 8 GB RAM ile en fazla 5 Cloud VM", "cmux iOS uygulaması" ], "max": [ - "Her biri 16 vCPU ve 32 GB RAM'e sahip 5 Cloud VM", + "VM başına en fazla 16 vCPU ve 32 GB RAM ile en fazla 5 Cloud VM", "Daha büyük makine boyutları", "Pro'daki her şey" ], diff --git a/web/messages/uk.json b/web/messages/uk.json index 0ea473d0aacb..dd956fcdf079 100644 --- a/web/messages/uk.json +++ b/web/messages/uk.json @@ -490,11 +490,11 @@ ], "pro": [ "Хмарні агенти на Cloud VMs", - "5 Cloud VMs, кожна з 4 vCPU і 8 ГБ RAM", + "До 5 Cloud VMs, до 4 vCPU і 8 ГБ RAM на кожну VM", "Застосунок cmux для iOS" ], "max": [ - "5 Cloud VMs, кожна з 16 vCPU і 32 ГБ RAM", + "До 5 Cloud VMs, до 16 vCPU і 32 ГБ RAM на кожну VM", "Більші машини", "Усе з Pro" ], diff --git a/web/messages/zh-CN.json b/web/messages/zh-CN.json index 2f51af77fcd0..a4abda0f2c88 100644 --- a/web/messages/zh-CN.json +++ b/web/messages/zh-CN.json @@ -490,11 +490,11 @@ ], "pro": [ "在 Cloud VM 上运行云端智能体", - "5 台 Cloud VM,每台 4 个 vCPU 和 8 GB 内存", + "最多 5 台 Cloud VM,每台最多 4 个 vCPU 和 8 GB 内存", "cmux iOS 应用" ], "max": [ - "5 台 Cloud VM,每台 16 个 vCPU 和 32 GB 内存", + "最多 5 台 Cloud VM,每台最多 16 个 vCPU 和 32 GB 内存", "更大的机器规格", "Pro 的全部功能" ], diff --git a/web/messages/zh-TW.json b/web/messages/zh-TW.json index 0cb093f3e64f..f35cb53e1274 100644 --- a/web/messages/zh-TW.json +++ b/web/messages/zh-TW.json @@ -490,11 +490,11 @@ ], "pro": [ "在 Cloud VM 上執行雲端代理", - "5 台 Cloud VM,每台 4 個 vCPU 和 8 GB RAM", + "最多 5 台 Cloud VM,每台最多 4 個 vCPU 和 8 GB RAM", "cmux iOS App" ], "max": [ - "5 台 Cloud VM,每台 16 個 vCPU 和 32 GB RAM", + "最多 5 台 Cloud VM,每台最多 16 個 vCPU 和 32 GB RAM", "更大的機器規格", "Pro 的所有功能" ], diff --git a/web/scripts/stripe/provision-catalog.sh b/web/scripts/stripe/provision-catalog.sh index face09d5c5f8..7a8b2b929435 100755 --- a/web/scripts/stripe/provision-catalog.sh +++ b/web/scripts/stripe/provision-catalog.sh @@ -380,9 +380,9 @@ ensure_product_description() { --data-urlencode "description=${description}" >/dev/null echo "Set description for ${product_id}." >&2 } -ensure_product_description "$pro_product_id" "5 Cloud VMs with 4 vCPUs and 8 GB RAM each, plus the cmux iOS app." -ensure_product_description "$max_product_id" "Everything in Pro, with 5 Cloud VMs of up to 16 vCPUs and 32 GB RAM each." -ensure_product_description "$team_product_id" "Per seat: 5 Cloud VMs with 4 vCPUs and 8 GB RAM each, the cmux iOS app, and priority support." +ensure_product_description "$pro_product_id" "Up to 5 Cloud VMs, up to 4 vCPUs and 8 GB RAM per VM, plus the cmux iOS app." +ensure_product_description "$max_product_id" "Everything in Pro, with up to 5 Cloud VMs, up to 16 vCPUs and 32 GB RAM per VM." +ensure_product_description "$team_product_id" "Per seat: up to 5 Cloud VMs, up to 4 vCPUs and 8 GB RAM per VM, the cmux iOS app, and priority support." # Current catalog (web/services/billing/plans.ts). Stripe Price amounts are # immutable, so each price change mints a new lookup key carrying the amount. diff --git a/web/tests/app-pricing-page.test.tsx b/web/tests/app-pricing-page.test.tsx index 095d9d4bef5e..0feab0981e74 100644 --- a/web/tests/app-pricing-page.test.tsx +++ b/web/tests/app-pricing-page.test.tsx @@ -111,11 +111,11 @@ describe("app pricing page", () => { expect(html).toContain("For individuals"); expect(html).toContain("For teams and businesses"); expect(html).toContain("Get Max"); - expect(html).toContain("Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM"); + expect(html).toContain("Up to 5 Cloud VMs, up to 16 vCPUs and 32 GB RAM per VM"); expect(html).toContain("Largest Cloud VM"); expect(html).toContain("$60/user/mo"); expect(html).toContain( - "Up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM", + "Up to 5 Cloud VMs, up to 4 vCPUs and 8 GB RAM per VM", ); expect(html).toContain('

    Includes:

    '); expect(html).not.toContain('style="min-height:4rem"'); diff --git a/web/tests/pricing-page.test.tsx b/web/tests/pricing-page.test.tsx index 4de126cfe933..05b93d6a93af 100644 --- a/web/tests/pricing-page.test.tsx +++ b/web/tests/pricing-page.test.tsx @@ -130,7 +130,7 @@ describe("localized pricing page", () => { try { const first = await readInitialMain(reader); expect(first.includes("$50") && first.includes("$200")).toBe(true); - expect(first.includes("Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM")).toBe(true); + expect(first.includes("Up to 5 Cloud VMs, up to 16 vCPUs and 32 GB RAM per VM")).toBe(true); expect(first.includes("animate-pulse")).toBe(false); expect(first.includes("Current plan")).toBe(false); } finally { @@ -302,7 +302,7 @@ describe("localized pricing page", () => { expect(html).toContain("$200"); expect(html).toContain("$200 /mo"); expect(html).not.toContain("$200/mo, billed yearly"); - expect(html).toContain("Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM"); + expect(html).toContain("Up to 5 Cloud VMs, up to 16 vCPUs and 32 GB RAM per VM"); expect(html).toContain("Get Go"); expect(html).toContain("2 vCPU, 4 GiB RAM, and 16 GiB disk"); expect(html).toContain("For individuals"); @@ -417,7 +417,7 @@ describe("localized pricing page", () => { expect(html).toContain("$50"); expect(html).toContain("$60"); expect(html).toContain( - "Up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM", + "Up to 5 Cloud VMs, up to 4 vCPUs and 8 GB RAM per VM", ); expect(html).toContain("Unlimited workspaces"); expect(html).not.toContain("Unlimited active Cloud VMs"); diff --git a/web/tests/pro-pricing.test.ts b/web/tests/pro-pricing.test.ts index dcdf79a3b9d8..d6adfc6f44a2 100644 --- a/web/tests/pro-pricing.test.ts +++ b/web/tests/pro-pricing.test.ts @@ -129,7 +129,7 @@ describe("VM defaults and pricing copy", () => { ["en", enMessages, "Resources per Cloud VM"], ["ja", jaMessages, "Cloud VM あたりのリソース"], ] as const) { - test(`${locale} pricing advertises 5 VMs with 4 vCPUs and 8 GB RAM each`, () => { + test(`${locale} pricing advertises up to 5 VMs with up to 4 vCPUs and 8 GB RAM per VM`, () => { const features = messages.pricing.pro.features.join("\n"); expect(features).toMatch(/(?:^|\D)5(?:\D|$)/); const row = messages.pricing.compare.rows.find(row => row.label === label); @@ -153,7 +153,7 @@ describe("VM defaults and pricing copy", () => { ["en", enMessages, "Largest Cloud VM", "What does Max add?"], ["ja", jaMessages, "最大の Cloud VM", "Max では何が追加されますか?"], ] as const) { - test(`${locale} Max copy sells 5 VMs with 16 vCPUs and 32 GB RAM each`, () => { + test(`${locale} Max copy sells up to 5 VMs with up to 16 vCPUs and 32 GB RAM per VM`, () => { const features = messages.pricing.max.features.join("\n"); expect(features).toContain("32 GB"); expect(features).toContain("16 vCPU"); @@ -189,8 +189,8 @@ describe("VM defaults and pricing copy", () => { for (const locale of locales) { if (locale === "en" || locale === "ja") continue; const messages = await loadMessages(locale) as unknown as typeof enMessages; - expect(messages.pricing.pro.features.join("\n")).toContain("Up to 5 Cloud VMs, each with 4 vCPUs and 8 GB RAM"); - expect(messages.pricing.max.features[0]).toBe("Up to 5 Cloud VMs, each with 16 vCPUs and 32 GB RAM"); + expect(messages.pricing.pro.features.join("\n")).toContain("Up to 5 Cloud VMs, up to 4 vCPUs and 8 GB RAM per VM"); + expect(messages.pricing.max.features[0]).toBe("Up to 5 Cloud VMs, up to 16 vCPUs and 32 GB RAM per VM"); expect(messages.pricing.compare.rows.find(row => row.label === "Resources per Cloud VM")).toBeDefined(); } }); diff --git a/web/tests/stripe-provision-catalog.test.ts b/web/tests/stripe-provision-catalog.test.ts index 36fe907fba91..12cfa8736c3d 100644 --- a/web/tests/stripe-provision-catalog.test.ts +++ b/web/tests/stripe-provision-catalog.test.ts @@ -110,9 +110,9 @@ describe("Stripe catalog provisioning", () => { const description = (productId: string) => result.calls .find((call) => call.args.includes(`https://api.stripe.com/v1/products/${productId}`) && call.args.includes("POST")) ?.args.find((argument) => argument.startsWith("description=")); - expect(description("prod_pro")).toBe("description=5 Cloud VMs with 4 vCPUs and 8 GB RAM each, plus the cmux iOS app."); - expect(description("prod_max")).toBe("description=Everything in Pro, with 5 Cloud VMs of up to 16 vCPUs and 32 GB RAM each."); - expect(description("prod_team")).toBe("description=Per seat: 5 Cloud VMs with 4 vCPUs and 8 GB RAM each, the cmux iOS app, and priority support."); + expect(description("prod_pro")).toBe("description=Up to 5 Cloud VMs, up to 4 vCPUs and 8 GB RAM per VM, plus the cmux iOS app."); + expect(description("prod_max")).toBe("description=Everything in Pro, with up to 5 Cloud VMs, up to 16 vCPUs and 32 GB RAM per VM."); + expect(description("prod_team")).toBe("description=Per seat: up to 5 Cloud VMs, up to 4 vCPUs and 8 GB RAM per VM, the cmux iOS app, and priority support."); }); test("provisions the monthly-only Max price and the Pro/Max plan switch portal", async () => { diff --git a/web/tests/vm-review-regressions.test.ts b/web/tests/vm-review-regressions.test.ts index e9cf9154f414..655379a1a3ac 100644 --- a/web/tests/vm-review-regressions.test.ts +++ b/web/tests/vm-review-regressions.test.ts @@ -5,6 +5,7 @@ import * as Layer from "effect/Layer"; import postgres, { type Sql } from "postgres"; import { closeCloudDbForTests } from "../db/client"; import { maxActiveVmsForPlan } from "../services/vms/entitlements"; +import { PAID_MAX_ACTIVE_VMS_DEFAULT } from "../services/vms/machineSpec"; import { VmBillingGateway, noOpVmBillingGateway } from "../services/vms/billingGateway"; import { VmRepository, VmRepositoryLive } from "../services/vms/repository"; import { VmProviderGateway, type VmProviderGatewayShape } from "../services/vms/providerGateway"; @@ -54,12 +55,12 @@ describe("VM review regressions", () => { })); for (const operation of ["resize", "exec", "attach", "session", "cmux-remote"] as const) { - for (const allowance of [maxActiveVmsForPlan("team", {}, { seats: 4 }), null, 50, undefined]) { + for (const allowance of [maxActiveVmsForPlan("team", {}, { seats: 10 }), null, 20, undefined]) { dbTest(`${operation} resumes a paused Team VM using allowance ${allowance}`, () => withTeam(async team => { await sql` insert into cloud_vms (user_id, billing_team_id, billing_plan_id, provider, provider_vm_id, image_id, status) select ${team}, ${team}, 'team', 'freestyle', ${team} || '-' || n, 'snapshot-test', 'running' - from generate_series(1, 51) n + from generate_series(1, 21) n `; const providerVmId = `${team}-paused`; await sql` @@ -118,9 +119,11 @@ describe("VM review regressions", () => { Layer.succeed(VmBillingGateway, noOpVmBillingGateway()), )), )); - if (allowance === 50 || allowance === undefined) { + if (allowance === 20 || allowance === undefined) { expect(result._tag).toBe("Left"); - if (result._tag === "Left") expect(result.left).toMatchObject({ _tag: "VmLimitExceededError", limit: 50 }); + // Without an explicit allowance, a Team row without seat data gets one seat's machines. + const limit = allowance ?? PAID_MAX_ACTIVE_VMS_DEFAULT; + if (result._tag === "Left") expect(result.left).toMatchObject({ _tag: "VmLimitExceededError", limit }); expect(resumes).toBe(0); expect(operations).toBe(0); } else { diff --git a/web/tests/vm-route-auth.test.ts b/web/tests/vm-route-auth.test.ts index f4807ac9696a..dd1923f9752d 100644 --- a/web/tests/vm-route-auth.test.ts +++ b/web/tests/vm-route-auth.test.ts @@ -567,7 +567,7 @@ describe("VM REST auth", () => { expect(response.status).toBe(200); expect(await response.json()).toMatchObject({ - limits: { planId: "team", maxActiveVms: 200, activeVmCount: 1, freeAccessWindowDays: 0, freeAccessExpiresAt: null }, + limits: { planId: "team", maxActiveVms: 20, activeVmCount: 1, freeAccessWindowDays: 0, freeAccessExpiresAt: null }, vms: [{ freeAccessExpiresAt: null }], }); expect(listUserVms).toHaveBeenCalledWith("user-1", "team-1"); From 2ad13ab7769e6905b4bc0b3299f52216fec26cdc Mon Sep 17 00:00:00 2001 From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com> Date: Fri, 2 Oct 2026 01:10:04 -0700 Subject: [PATCH 10/10] Pricing: translate the history label in all catalog languages; scope the $50 test exception Co-Authored-By: Claude Opus 5.5 --- Resources/Localizable.xcstrings | 66 +++++++++++++++++++++++++++++++++ web/tests/pro-pricing.test.ts | 6 ++- 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 71b48fab7d92..f0e8cad803a0 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -609480,6 +609480,72 @@ "state": "translated", "value": "로컬 세션 기록" } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Lokalna historija sesija" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Lokal sessionshistorik" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Cronologia sessioni locale" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ប្រវត្តិវគ្គក្នុងម៉ាស៊ីន" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Lokal øktlogg" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Lokalna historia sesji" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Histórico de sessões local" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Локальная история сеансов" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ประวัติเซสชันในเครื่อง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Yerel oturum geçmişi" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Локальна історія сеансів" + } } } }, diff --git a/web/tests/pro-pricing.test.ts b/web/tests/pro-pricing.test.ts index d6adfc6f44a2..b591aca7eb8a 100644 --- a/web/tests/pro-pricing.test.ts +++ b/web/tests/pro-pricing.test.ts @@ -202,8 +202,10 @@ describe("VM defaults and pricing copy", () => { if (!key.startsWith("pricing.native.") && !key.startsWith("settings.account.pro.")) continue; for (const [locale, localization] of Object.entries(entry.localizations ?? {})) { const value = localization.stringUnit?.value ?? ""; - if (/(?