Internationalize website with next-intl for 19 languages (#1216)

* Add i18n framework with next-intl for 19 languages

Set up complete internationalization infrastructure:
- Install next-intl v4 with App Router support
- Create i18n config (routing, request, navigation)
- Add middleware for automatic locale detection from Accept-Language
- Restructure all routes under app/[locale]/
- Extract UI strings to messages/en.json
- Update all components to use useTranslations()
- Add language switcher dropdown in footer
- Support RTL for Arabic and Khmer
- Update sitemap with locale alternates
- Add generateStaticParams for all 19 locales

Languages: en, ja, zh-CN, zh-TW, ko, de, es, fr, it, da, pl, ru, bs, ar, no, pt-BR, th, tr, km

Locale detection: auto-detect from browser Accept-Language header,
with cookie persistence and locale prefix only for non-default (en).

* Add translations for de, fr, it, ja, zh-CN, zh-TW

* Add translations for ar, bs, da, es, km, no, pl, pt-BR, ru, th, tr

* Convert docs and legal pages to use useTranslations()

* Add i18n to keyboard shortcuts component

* Add i18n to wall-of-love, add missing blog posts to sitemap

* Add keyboard shortcuts and wallOfLove translations to all locales

* Update bun lockfile for next-intl dependency

* Fix t.rich() configPath: pass ReactNode not function for {var} interpolation

* Fix configPath: use rich text tag instead of plain interpolation for ReactNode

* Fix t.rich() interpolation: use rich text tags for all ReactNode placeholders

Changed {legacy}, {openShortcut}, {jumpShortcut} from plain variable
interpolation to <tag>content</tag> format so t.rich() gets proper
functions instead of values.

* Escape ICU curly braces in socketCallout rich text across all locales

* Fix i18n issues: Khmer RTL, zh-CN quality, locale-aware testimonials, hardcoded strings

- Fix Khmer (km) incorrectly marked as RTL (it's LTR, only Arabic is RTL)
- Fix zh-CN/zh-TW taglinePrefix to mention terminals and open source
- Add locale-aware testimonial translations: show original text, translate
  for non-matching locales, skip translation when locale matches original
- Translate hardcoded English table content in notifications page
- Add testimonial translations to all 19 locale files
- Remove unused setRequestLocale import and params from home page

* Address PR review comments: metadata localization, blog fixes, legal pages, accessibility

- Convert hardcoded metadata to generateMetadata with getTranslations on all docs, blog, community, and wall-of-love pages
- Fix blog canonical/OG URLs to be locale-aware
- Fix introducing-cmux .split(": ") by using separate label/desc translation keys
- Revert legal page titles to English (legal content stays English-only)
- Add focus-visible ring to language switcher for keyboard accessibility
- Preserve query string and hash when switching locale
- Convert site-footer to server component (remove unnecessary "use client")
- Remove .toLowerCase() on translated text in community page
- Add /docs/browser-automation and /wall-of-love to sitemap
- Fix keyboard-shortcuts jump link visibility with trimmed query
- Deduplicate blogSlugs by importing from blog-posts.ts
- Add typingCodingAgents/typingMultitasking translation keys to all locales
- Fix Spanish accent/tilde issues in es.json testimonials
- Fix nested <a> tag in homepage keyboard shortcuts feature
- Remove unused setRequestLocale import from homepage

* Convert remaining layout/index metadata to generateMetadata

- Root layout: locale-aware title, description, OG, and Twitter card metadata
- Docs layout: translated title template
- Blog layout: translated title template
- Blog index: locale-aware metadata

* Add translated metadata keys to all locales, fix docs redirect

- Add meta.title/description/ogDescription to all 18 non-English locales
- Add docs.layoutTitle, blog.layoutTitle/metaTitle/metaDescription to all locales
- Add blog post metadata (zenOfCmux, cmdShiftU, showHnLaunch, introducingCmux) to all locales
- Add community.metaTitle/metaDescription to all locales
- Fix docs index redirect to preserve locale prefix

* Add translated docs page metaTitle keys to all locales
This commit is contained in:
Lawrence Chen 2026-03-12 05:36:58 -07:00 committed by GitHub
parent 054b91f641
commit cf75da8f8a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
97 changed files with 14219 additions and 2215 deletions

View file

@ -8,7 +8,7 @@ export const metadata: Metadata = {
export default function EulaPage() {
return (
<>
<h1>End-User License Agreement</h1>
<h1>EULA</h1>
<p>Last updated: December 2, 2025</p>
<p>

View file

@ -1,4 +1,5 @@
import type { Metadata } from "next";
import { Link } from "../../../../i18n/navigation";
export const metadata: Metadata = {
title: "Privacy Policy — cmux",
@ -29,7 +30,7 @@ export default function PrivacyPolicyPage() {
</p>
<p>
By using our Service, you accept this Privacy Policy and our{" "}
<a href="/terms-of-service">Terms of Service</a>, and you consent to
<Link href="/terms-of-service">Terms of Service</Link>, and you consent to
our collection, storage, use and disclosure of your information as
described here.
</p>

View file

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 1.8 MiB

Before After
Before After

View file

@ -0,0 +1,74 @@
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { Link } from "../../../../i18n/navigation";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "blog.cmdShiftU" });
const url = locale === "en" ? "/blog/cmd-shift-u" : `/${locale}/blog/cmd-shift-u`;
return {
title: t("metaTitle"),
description: t("metaDescription"),
keywords: [
"cmux", "terminal", "macOS", "notifications", "AI coding agents",
"keyboard shortcuts", "developer tools", "workflow",
],
openGraph: {
title: t("metaTitle"),
description: t("metaDescription"),
type: "article",
publishedTime: "2026-03-04T00:00:00Z",
url,
},
twitter: {
card: "summary",
title: t("metaTitle"),
description: t("metaDescription"),
},
alternates: { canonical: url },
};
}
export default function CmdShiftUPage() {
const t = useTranslations("blog.posts.cmdShiftU");
const tc = useTranslations("common");
return (
<>
<div className="mb-8">
<Link
href="/blog"
className="text-sm text-muted hover:text-foreground transition-colors"
>
&larr; {tc("backToBlog")}
</Link>
</div>
<h1>{t("title")}</h1>
<time dateTime="2026-03-04" className="text-sm text-muted">
{t("date")}
</time>
<p className="mt-6">{t("p1")}</p>
<video
src="/blog/cmd-shift-u.mp4"
width={1824}
height={1080}
autoPlay
loop
muted
playsInline
className="my-6 rounded-lg w-full h-auto"
/>
<p>
{t.rich("p2", {
link: (chunks) => (
<Link href="/docs/notifications">{chunks}</Link>
),
})}
</p>
</>
);
}

View file

@ -0,0 +1,72 @@
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { Link } from "../../../../i18n/navigation";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "blog.introducingCmux" });
const url = locale === "en" ? "/blog/introducing-cmux" : `/${locale}/blog/introducing-cmux`;
return {
title: t("metaTitle"),
description: t("metaDescription"),
keywords: [
"cmux", "terminal", "macOS", "Ghostty", "libghostty",
"AI coding agents", "Claude Code", "vertical tabs", "split panes", "socket API",
],
openGraph: {
title: t("metaTitle"),
description: t("metaDescription"),
type: "article",
publishedTime: "2026-02-12T00:00:00Z",
url,
},
twitter: {
card: "summary",
title: t("metaTitle"),
description: t("metaDescription"),
},
alternates: { canonical: url },
};
}
export default function IntroducingCmuxPage() {
const t = useTranslations("blog.posts.introducingCmux");
const tc = useTranslations("common");
return (
<>
<div className="mb-8">
<Link
href="/blog"
className="text-sm text-muted hover:text-foreground transition-colors"
>
&larr; {tc("backToBlog")}
</Link>
</div>
<h1>{t("title")}</h1>
<time dateTime="2026-02-12" className="text-sm text-muted">{t("date")}</time>
<p className="mt-6">{t("p1")}</p>
<h2>{t("whyTitle")}</h2>
<p>{t("whyP")}</p>
<h2>{t("featuresTitle")}</h2>
<ul>
<li><strong>{t("featureVerticalTabsLabel")}</strong>: {t("featureVerticalTabsDesc")}</li>
<li><strong>{t("featureNotificationsLabel")}</strong>: {t("featureNotificationsDesc")}</li>
<li><strong>{t("featureSplitPanesLabel")}</strong>: {t("featureSplitPanesDesc")}</li>
<li><strong>{t("featureSocketApiLabel")}</strong>: {t("featureSocketApiDesc")}</li>
<li><strong>{t("featureGpuLabel")}</strong>: {t("featureGpuDesc")}</li>
</ul>
<h2>{t("getStartedTitle")}</h2>
<p>
{t.rich("getStartedP", {
link: (chunks) => <Link href="/docs/getting-started">{chunks}</Link>,
})}
</p>
</>
);
}

View file

@ -1,21 +1,29 @@
import type { Metadata } from "next";
import { getTranslations } from "next-intl/server";
import { SiteHeader } from "../components/site-header";
import { BlogPager } from "../components/blog-pager";
import { BlogCTA } from "../components/blog-cta";
export const metadata: Metadata = {
title: {
template: "%s — cmux blog",
default: "cmux blog",
},
openGraph: {
siteName: "cmux",
type: "article",
},
alternates: {
canonical: "./",
},
};
export async function generateMetadata({
params,
}: {
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "blog" });
return {
title: {
template: `%s — ${t("layoutTitle")}`,
default: t("layoutTitle"),
},
openGraph: {
siteName: "cmux",
type: "article" as const,
},
alternates: {
canonical: "./",
},
};
}
export default function BlogLayout({
children,

View file

@ -0,0 +1,60 @@
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { Link } from "../../../i18n/navigation";
export async function generateMetadata({
params,
}: {
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "blog" });
return {
title: t("metaTitle"),
description: t("metaDescription"),
};
}
const blogSlugs = [
"cmdShiftU",
"zenOfCmux",
"showHnLaunch",
"introducingCmux",
] as const;
const slugToPath: Record<string, string> = {
cmdShiftU: "cmd-shift-u",
zenOfCmux: "zen-of-cmux",
showHnLaunch: "show-hn-launch",
introducingCmux: "introducing-cmux",
};
export default function BlogPage() {
const t = useTranslations("blog");
return (
<>
<h1>{t("title")}</h1>
<div className="space-y-4 mt-6">
{blogSlugs.map((slug) => (
<article key={slug}>
<Link
href={`/blog/${slugToPath[slug]}`}
className="block group"
>
<h2 className="text-lg font-medium group-hover:underline">
{t(`posts.${slug}.title`)}
</h2>
<time className="text-sm text-muted">
{t(`posts.${slug}.date`)}
</time>
<p className="mt-1 text-muted">
{t(`posts.${slug}.summary`)}
</p>
</Link>
</article>
))}
</div>
</>
);
}

View file

@ -0,0 +1,151 @@
import Image from "next/image";
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { Link } from "../../../../i18n/navigation";
import { Tweet } from "react-tweet";
import starHistory from "./star-history.png";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "blog.showHnLaunch" });
const url = locale === "en" ? "/blog/show-hn-launch" : `/${locale}/blog/show-hn-launch`;
return {
title: t("metaTitle"),
description: t("metaDescription"),
keywords: [
"cmux", "Show HN", "Hacker News", "terminal", "macOS", "Ghostty",
"libghostty", "AI coding agents", "Claude Code", "Codex", "launch",
"vertical tabs", "notification rings",
],
openGraph: {
title: t("metaTitle"),
description: t("metaDescription"),
type: "article",
publishedTime: "2026-02-21T00:00:00Z",
url,
},
twitter: {
card: "summary",
title: t("metaTitle"),
description: t("metaDescription"),
},
alternates: { canonical: url },
};
}
export default function ShowHNLaunchPage() {
const t = useTranslations("blog.posts.showHnLaunch");
const tc = useTranslations("common");
return (
<>
<div className="mb-8">
<Link
href="/blog"
className="text-sm text-muted hover:text-foreground transition-colors"
>
&larr; {tc("backToBlog")}
</Link>
</div>
<h1>{t("title")}</h1>
<time dateTime="2026-02-21" className="text-sm text-muted">{t("date")}</time>
<p className="mt-6">
{t.rich("intro", {
link: (chunks) => (
<a href="https://news.ycombinator.com/item?id=47079718">{chunks}</a>
),
})}
</p>
<blockquote className="border-l-2 border-border pl-4 my-6 text-muted space-y-3 text-[15px]">
<p>{t("blockquote1")}</p>
<p>{t("blockquote2")}</p>
<p>{t("blockquote3")}</p>
<p>{t("blockquote4")}</p>
<p>{t("blockquote5")}</p>
</blockquote>
<p>{t("hitNumber2")}</p>
<Tweet id="2024913161238053296" />
<p>
{t.rich("favoriteComment", {
link: (chunks) => (
<a href="https://news.ycombinator.com/item?id=47079718">{chunks}</a>
),
})}
</p>
{/* Keep the HN comment blockquote in English as it's a direct quote */}
<blockquote className="border-l-2 border-border pl-4 my-6 text-muted space-y-3 text-[15px]">
<p>
Hey, this looks seriously awesome. Love the ideas here, specifically:
the programmability (I haven&apos;t tried it yet, but had been
considering learning tmux partly for this), layered UI, browser w/
api. Looking forward to giving this a spin. Also want to add that I
really appreciate Mitchell Hashimoto creating libghostty; it feels
like an exciting time to be a terminal user.
</p>
<p>Some feedback (since you were asking for it elsewhere in the thread!):</p>
<ul className="list-disc pl-5 space-y-1">
<li>
It&apos;s not obvious/easy to open browser dev tools (cmd-alt-i
didn&apos;t work), and when I did find it (right click page &rarr;
inspect element) none of the controls were visible but I could see
stuff happening when I moved my mouse over the panel
</li>
<li>
Would be cool to borrow more of ghostty&apos;s behavior:
<ul className="list-disc pl-5 mt-1 space-y-1">
<li>hotkey overrides</li>
<li>command palette (cmd-shift-p)</li>
<li>cmd-z to &quot;zoom in&quot; to a pane</li>
</ul>
</li>
</ul>
<p className="text-xs">
{" "}
<a href="https://news.ycombinator.com/item?id=47083596" className="hover:text-foreground transition-colors">
johnthedebs
</a>
</p>
</blockquote>
<p>{t("viralJapan")}</p>
<Tweet id="2025129675262251026" />
<p>{t("translation")}</p>
<p>{t("viralChina")}</p>
<Tweet id="2024867449947275444" />
<p>{t("extensions")}</p>
<Tweet id="2024978414822916358" />
<p>{t("scriptable")}</p>
<p>
{t.rich("cta", {
link: (chunks) => (
<a href="https://github.com/manaflow-ai/cmux">{chunks}</a>
),
})}
</p>
<div className="my-6">
<Image
src={starHistory}
alt="cmux GitHub star history showing growth from near 0 to 900+ stars after the Show HN launch"
placeholder="blur"
className="w-full rounded-xl"
/>
</div>
</>
);
}

View file

Before

Width:  |  Height:  |  Size: 428 KiB

After

Width:  |  Height:  |  Size: 428 KiB

Before After
Before After

View file

@ -0,0 +1,58 @@
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { Link } from "../../../../i18n/navigation";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "blog.zenOfCmux" });
const url = locale === "en" ? "/blog/zen-of-cmux" : `/${locale}/blog/zen-of-cmux`;
return {
title: t("metaTitle"),
description: t("metaDescription"),
keywords: [
"cmux", "terminal", "macOS", "CLI", "composable",
"developer tools", "AI coding agents", "workflow",
],
openGraph: {
title: t("metaTitle"),
description: t("metaDescription"),
type: "article",
publishedTime: "2026-02-27T00:00:00Z",
url,
},
twitter: {
card: "summary",
title: t("metaTitle"),
description: t("metaDescription"),
},
alternates: { canonical: url },
};
}
export default function ZenOfCmuxPage() {
const t = useTranslations("blog.posts.zenOfCmux");
const tc = useTranslations("common");
return (
<>
<div className="mb-8">
<Link
href="/blog"
className="text-sm text-muted hover:text-foreground transition-colors"
>
&larr; {tc("backToBlog")}
</Link>
</div>
<h1>{t("title")}</h1>
<time dateTime="2026-02-27" className="text-sm text-muted">
{t("date")}
</time>
<p className="mt-6">{t("p1")}</p>
<p>{t("p2")}</p>
<p>{t("p3")}</p>
<p>{t("p4")}</p>
</>
);
}

View file

@ -1,10 +1,15 @@
import type { Metadata } from "next";
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { SiteHeader } from "../components/site-header";
export const metadata: Metadata = {
title: "Community — cmux",
description: "Join the cmux community on Discord, Twitter, GitHub, and more",
};
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "community" });
return {
title: t("metaTitle"),
description: t("metaDescription"),
};
}
function CommunityLink({
href,
@ -41,23 +46,25 @@ function CommunityLink({
}
export default function CommunityPage() {
const t = useTranslations("community");
return (
<div className="min-h-screen">
<SiteHeader section="community" />
<SiteHeader section={t("title")} />
<main className="w-full max-w-6xl mx-auto px-6 py-10">
<h1 className="text-2xl font-semibold tracking-tight mb-2">
Community
{t("title")}
</h1>
<p className="text-muted text-[15px] mb-8">
Connect with other cmux users and the team behind it.
{t("description")}
</p>
<div className="grid gap-4 sm:grid-cols-2">
<CommunityLink
href="https://discord.gg/xsgFEVrWCZ"
name="Discord"
action="Join our Discord"
description="Chat with the community, get help, and share feedback"
name={t("discord")}
action={t("discordAction")}
description={t("discordDesc")}
icon={
<svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
<path d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z" />
@ -68,8 +75,8 @@ export default function CommunityPage() {
<CommunityLink
href="https://github.com/manaflow-ai/cmux"
name="GitHub"
action="View on GitHub"
description="Star the repo, report issues, and contribute"
action={t("githubAction")}
description={t("githubDesc")}
icon={
<svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" />
@ -79,9 +86,9 @@ export default function CommunityPage() {
<CommunityLink
href="https://twitter.com/manaflowai"
name="Twitter"
action="Follow on X"
description="Updates, announcements, and tips"
name={t("twitter")}
action={t("twitterAction")}
description={t("twitterDesc")}
icon={
<svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
@ -91,9 +98,9 @@ export default function CommunityPage() {
<CommunityLink
href="https://www.youtube.com/channel/UCAa89_j-TWkrXfk9A3CbASw"
name="YouTube"
action="Subscribe"
description="Demos, tutorials, and walkthroughs"
name={t("youtube")}
action={t("youtubeAction")}
description={t("youtubeDesc")}
icon={
<svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
<path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z" />
@ -103,9 +110,9 @@ export default function CommunityPage() {
<CommunityLink
href="https://www.linkedin.com/company/manaflow-ai/"
name="LinkedIn"
action="Follow us"
description="Company news and engineering updates"
name={t("linkedin")}
action={t("linkedinAction")}
description={t("linkedinDesc")}
icon={
<svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" />

View file

@ -1,6 +1,6 @@
"use client";
import { usePathname } from "next/navigation";
import { usePathname } from "../../../i18n/navigation";
import { DownloadButton } from "./download-button";
import { GitHubButton } from "./github-button";

View file

@ -1,11 +1,12 @@
"use client";
import Link from "next/link";
import { usePathname } from "next/navigation";
import { useTranslations } from "next-intl";
import { Link, usePathname } from "../../../i18n/navigation";
import { blogPosts } from "./blog-posts";
export function BlogPager() {
const pathname = usePathname();
const t = useTranslations("blog.posts");
const index = blogPosts.findIndex(
(post) => `/blog/${post.slug}` === pathname
);
@ -22,7 +23,7 @@ export function BlogPager() {
className="flex items-center gap-1.5 text-muted hover:text-foreground transition-colors"
>
<span aria-hidden>&larr;</span>
{prev.title}
{t(`${prev.key}.title`)}
</Link>
) : (
<span />
@ -32,7 +33,7 @@ export function BlogPager() {
href={`/blog/${next.slug}`}
className="flex items-center gap-1.5 text-muted hover:text-foreground transition-colors"
>
{next.title}
{t(`${next.key}.title`)}
<span aria-hidden>&rarr;</span>
</Link>
) : (

View file

@ -1,6 +1,7 @@
export const blogPosts = [
{
slug: "cmd-shift-u",
key: "cmdShiftU",
title: "Cmd+Shift+U",
date: "2026-03-04",
summary:
@ -8,6 +9,7 @@ export const blogPosts = [
},
{
slug: "zen-of-cmux",
key: "zenOfCmux",
title: "The Zen of cmux",
date: "2026-02-27",
summary:
@ -15,6 +17,7 @@ export const blogPosts = [
},
{
slug: "show-hn-launch",
key: "showHnLaunch",
title: "Launching cmux on Show HN",
date: "2026-02-21",
summary:
@ -22,6 +25,7 @@ export const blogPosts = [
},
{
slug: "introducing-cmux",
key: "introducingCmux",
title: "Introducing cmux",
date: "2026-02-12",
summary:

View file

@ -0,0 +1,10 @@
export const navItems = [
{ titleKey: "gettingStarted" as const, href: "/docs/getting-started" },
{ titleKey: "concepts" as const, href: "/docs/concepts" },
{ titleKey: "configuration" as const, href: "/docs/configuration" },
{ titleKey: "keyboardShortcuts" as const, href: "/docs/keyboard-shortcuts" },
{ titleKey: "apiReference" as const, href: "/docs/api" },
{ titleKey: "browserAutomation" as const, href: "/docs/browser-automation" },
{ titleKey: "notifications" as const, href: "/docs/notifications" },
{ titleKey: "changelog" as const, href: "/docs/changelog" },
];

View file

@ -1,11 +1,12 @@
"use client";
import Link from "next/link";
import { usePathname } from "next/navigation";
import { useTranslations } from "next-intl";
import { Link, usePathname } from "../../../i18n/navigation";
import { navItems } from "./docs-nav-items";
export function DocsPager() {
const pathname = usePathname();
const t = useTranslations("docs.navItems");
const index = navItems.findIndex((item) => item.href === pathname);
const prev = index > 0 ? navItems[index - 1] : null;
const next = index < navItems.length - 1 ? navItems[index + 1] : null;
@ -20,7 +21,7 @@ export function DocsPager() {
className="flex items-center gap-1.5 text-muted hover:text-foreground transition-colors"
>
<span aria-hidden>&larr;</span>
{prev.title}
{t(prev.titleKey)}
</Link>
) : (
<span />
@ -30,7 +31,7 @@ export function DocsPager() {
href={next.href}
className="flex items-center gap-1.5 text-muted hover:text-foreground transition-colors"
>
{next.title}
{t(next.titleKey)}
<span aria-hidden>&rarr;</span>
</Link>
) : (

View file

@ -1,11 +1,12 @@
"use client";
import Link from "next/link";
import { usePathname } from "next/navigation";
import { useTranslations } from "next-intl";
import { Link, usePathname } from "../../../i18n/navigation";
import { navItems } from "./docs-nav-items";
export function DocsSidebar({ onNavigate }: { onNavigate?: () => void }) {
const pathname = usePathname();
const t = useTranslations("docs.navItems");
return (
<nav className="space-y-0.5">
@ -22,7 +23,7 @@ export function DocsSidebar({ onNavigate }: { onNavigate?: () => void }) {
: "text-muted hover:text-foreground"
}`}
>
{item.title}
{t(item.titleKey)}
</Link>
);
})}

View file

@ -1,5 +1,6 @@
"use client";
import { useTranslations } from "next-intl";
import posthog from "posthog-js";
export function DownloadButton({
@ -9,6 +10,7 @@ export function DownloadButton({
size?: "default" | "sm";
location?: string;
}) {
const t = useTranslations("common");
const isSmall = size === "sm";
return (
<a
@ -27,7 +29,7 @@ export function DownloadButton({
>
<path d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57.8-155.5-127.4c-58.3-81.6-105.6-208.4-105.6-328.6 0-193 125.6-295.5 249.2-295.5 65.7 0 120.5 43.1 161.7 43.1 39.2 0 100.4-45.8 175.1-45.8 28.3 0 130.3 2.6 197.2 99.2zM554.1 159.4c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.9 32.4-57.2 83.6-57.2 135.4 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 137.6-71.2z" />
</svg>
Download for Mac
{t("downloadForMac")}
</a>
);
}

View file

@ -1,8 +1,10 @@
"use client";
import { useTranslations } from "next-intl";
import posthog from "posthog-js";
export function GitHubButton({ location = "hero" }: { location?: string }) {
const t = useTranslations("common");
return (
<a
href="https://github.com/manaflow-ai/cmux"
@ -14,7 +16,7 @@ export function GitHubButton({ location = "hero" }: { location?: string }) {
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" />
</svg>
View on GitHub
{t("viewOnGitHub")}
</a>
);
}

View file

@ -0,0 +1,52 @@
"use client";
import { useLocale } from "next-intl";
import { useRouter, usePathname } from "../../../i18n/navigation";
import { locales, localeNames, type Locale } from "../../../i18n/routing";
export function LanguageSwitcher() {
const locale = useLocale() as Locale;
const router = useRouter();
const pathname = usePathname();
function onChange(e: React.ChangeEvent<HTMLSelectElement>) {
const newLocale = e.target.value as Locale;
const qs = typeof window !== "undefined"
? window.location.search + window.location.hash
: "";
router.replace(pathname + qs, { locale: newLocale });
}
return (
<div className="flex items-center gap-2">
<svg
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
className="text-muted"
aria-hidden="true"
>
<circle cx="12" cy="12" r="10" />
<path d="M2 12h20" />
<path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" />
</svg>
<select
value={locale}
onChange={onChange}
className="text-xs text-muted bg-transparent border-none cursor-pointer hover:text-foreground transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1"
aria-label="Language"
>
{locales.map((loc) => (
<option key={loc} value={loc}>
{localeNames[loc]}
</option>
))}
</select>
</div>
);
}

View file

@ -1,34 +1,36 @@
"use client";
import Link from "next/link";
import { useTranslations } from "next-intl";
import { Link } from "../../../i18n/navigation";
import posthog from "posthog-js";
export function NavLinks() {
const t = useTranslations("nav");
return (
<>
<Link
href="/docs/getting-started"
className="hover:text-foreground transition-colors"
>
Docs
{t("docs")}
</Link>
<Link
href="/blog"
className="hover:text-foreground transition-colors"
>
Blog
{t("blog")}
</Link>
<Link
href="/docs/changelog"
className="hover:text-foreground transition-colors"
>
Changelog
{t("changelog")}
</Link>
<Link
href="/community"
className="hover:text-foreground transition-colors"
>
Community
{t("community")}
</Link>
<a
href="https://github.com/manaflow-ai/cmux"
@ -37,9 +39,8 @@ export function NavLinks() {
onClick={() => posthog.capture("cmuxterm_github_clicked", { location: "navbar" })}
className="hover:text-foreground transition-colors"
>
GitHub
{t("github")}
</a>
</>
);
}

View file

@ -1,46 +1,49 @@
import Link from "next/link";
const columns = [
{
heading: "Product",
links: [
{ label: "Blog", href: "/blog" },
{ label: "Community", href: "/community" },
],
},
{
heading: "Resources",
links: [
{ label: "Docs", href: "/docs/getting-started" },
{ label: "Changelog", href: "/docs/changelog" },
],
},
{
heading: "Legal",
links: [
{ label: "Privacy", href: "/privacy-policy" },
{ label: "Terms", href: "/terms-of-service" },
{ label: "EULA", href: "/eula" },
],
},
{
heading: "Social",
links: [
{ label: "GitHub", href: "https://github.com/manaflow-ai/cmux" },
{ label: "X / Twitter", href: "https://twitter.com/manaflowai" },
{ label: "Discord", href: "https://discord.gg/xsgFEVrWCZ" },
{ label: "Contact", href: "mailto:founders@manaflow.com" },
],
},
];
import { getTranslations } from "next-intl/server";
import { Link } from "../../../i18n/navigation";
import { LanguageSwitcher } from "./language-switcher";
function isExternal(href: string) {
return href.startsWith("http") || href.startsWith("mailto:");
}
export function SiteFooter() {
export async function SiteFooter() {
const t = await getTranslations("footer");
const year = new Date().getFullYear();
const columns = [
{
heading: t("product"),
links: [
{ label: t("blog"), href: "/blog" },
{ label: t("community"), href: "/community" },
],
},
{
heading: t("resources"),
links: [
{ label: t("docs"), href: "/docs/getting-started" },
{ label: t("changelog"), href: "/docs/changelog" },
],
},
{
heading: t("legal"),
links: [
{ label: t("privacy"), href: "/privacy-policy" },
{ label: t("terms"), href: "/terms-of-service" },
{ label: t("eula"), href: "/eula" },
],
},
{
heading: t("social"),
links: [
{ label: t("github"), href: "https://github.com/manaflow-ai/cmux" },
{ label: t("twitter"), href: "https://twitter.com/manaflowai" },
{ label: t("discord"), href: "https://discord.gg/xsgFEVrWCZ" },
{ label: t("contact"), href: "mailto:founders@manaflow.com" },
],
},
];
return (
<footer className="mt-16">
<div className="max-w-2xl mx-auto px-6 py-12">
@ -76,9 +79,12 @@ export function SiteFooter() {
</div>
))}
</div>
<p className="text-xs text-muted mt-10">
&copy; {year} Manaflow
</p>
<div className="flex items-center justify-between mt-10">
<p className="text-xs text-muted">
{t("copyright", { year })}
</p>
<LanguageSwitcher />
</div>
</div>
</footer>
);

View file

@ -1,6 +1,7 @@
"use client";
import Link from "next/link";
import { useTranslations } from "next-intl";
import { Link } from "../../../i18n/navigation";
import { NavLinks } from "./nav-links";
import { DownloadButton } from "./download-button";
import { ThemeToggle } from "../theme";
@ -18,6 +19,8 @@ export function SiteHeader({
section?: string;
hideLogo?: boolean;
}) {
const t = useTranslations("nav");
const tc = useTranslations("common");
const { open, toggle, close, drawerRef, buttonRef } = useMobileDrawer();
return (
@ -71,7 +74,7 @@ export function SiteHeader({
</div>
</header>
{/* Mobile overlay + drawer — outside header to avoid backdrop-filter breaking fixed positioning on iOS */}
{/* Mobile overlay + drawer */}
<MobileDrawerOverlay open={open} onClose={close} />
<nav
ref={drawerRef}
@ -81,13 +84,12 @@ export function SiteHeader({
open ? "translate-x-0" : "translate-x-full invisible"
}`}
>
{/* Drawer header — mirrors the site header row */}
<div className="flex items-center justify-end gap-1 px-4 h-12">
<ThemeToggle />
<button
onClick={close}
className="w-8 h-8 flex items-center justify-center text-muted hover:text-foreground transition-colors"
aria-label="Close menu"
aria-label={tc("closeMenu")}
>
<svg
width="16"
@ -111,28 +113,28 @@ export function SiteHeader({
onClick={close}
className="hover:text-foreground transition-colors py-1"
>
Docs
{t("docs")}
</Link>
<Link
href="/blog"
onClick={close}
className="hover:text-foreground transition-colors py-1"
>
Blog
{t("blog")}
</Link>
<Link
href="/docs/changelog"
onClick={close}
className="hover:text-foreground transition-colors py-1"
>
Changelog
{t("changelog")}
</Link>
<Link
href="/community"
onClick={close}
className="hover:text-foreground transition-colors py-1"
>
Community
{t("community")}
</Link>
<GitHubStarsBadge location="mobile_drawer" />
<div className="pt-2">

View file

@ -1,12 +1,16 @@
import type { Metadata } from "next";
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { CodeBlock } from "../../components/code-block";
import { Callout } from "../../components/callout";
export const metadata: Metadata = {
title: "API Reference",
description:
"cmux CLI and Unix socket API reference. Workspace management, split panes, input control, notifications, sidebar metadata (status, progress, logs), environment variables, and detection methods.",
};
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "docs.api" });
return {
title: t("metaTitle"),
description: t("metaDescription"),
};
}
function Cmd({
name,
@ -32,63 +36,59 @@ function Cmd({
}
export default function ApiPage() {
const t = useTranslations("docs.api");
return (
<>
<h1>API Reference</h1>
<p>
cmux provides both a CLI tool and a Unix socket for programmatic
control. Every command is available through both interfaces.
</p>
<h1>{t("title")}</h1>
<p>{t("intro")}</p>
<h2>Socket</h2>
<h2>{t("socket")}</h2>
<table>
<thead>
<tr>
<th>Build</th>
<th>Path</th>
<th>{t("buildHeader")}</th>
<th>{t("pathHeader")}</th>
</tr>
</thead>
<tbody>
<tr>
<td>Release</td>
<td>{t("release")}</td>
<td>
<code>/tmp/cmux.sock</code>
</td>
</tr>
<tr>
<td>Debug</td>
<td>{t("debug")}</td>
<td>
<code>/tmp/cmux-debug.sock</code>
</td>
</tr>
<tr>
<td>Tagged debug build</td>
<td>{t("taggedDebug")}</td>
<td>
<code>/tmp/cmux-debug-&lt;tag&gt;.sock</code>
</td>
</tr>
</tbody>
</table>
<p>
Override with the <code>CMUX_SOCKET_PATH</code> environment variable.
Send one newline-terminated JSON request per call:
</p>
<p>{t("socketOverride")}</p>
<CodeBlock lang="json">{`{"id":"req-1","method":"workspace.list","params":{}}
// Response:
{"id":"req-1","ok":true,"result":{"workspaces":[...]}}`}</CodeBlock>
<Callout>
JSON socket requests must use <code>method</code> and{" "}
<code>params</code>. Legacy v1 JSON payloads such as{" "}
<code>{`{"command":"..."}`}</code> are not supported.
{t.rich("socketCallout", {
legacy: (chunks) => <code>{chunks}</code>,
})}
</Callout>
<h2>Access modes</h2>
<h2>{t("accessModes")}</h2>
<table>
<thead>
<tr>
<th>Mode</th>
<th>Description</th>
<th>How to enable</th>
<th>{t("modeHeader")}</th>
<th>{t("descriptionHeader")}</th>
<th>{t("howToEnableHeader")}</th>
</tr>
</thead>
<tbody>
@ -96,40 +96,35 @@ export default function ApiPage() {
<td>
<strong>Off</strong>
</td>
<td>Socket disabled</td>
<td>Settings UI or <code>CMUX_SOCKET_MODE=off</code></td>
<td>{t("offMode")}</td>
<td>{t("offEnable")}</td>
</tr>
<tr>
<td>
<strong>cmux processes only</strong>
</td>
<td>
Only processes spawned inside cmux terminals can connect.
</td>
<td>Default mode in Settings UI</td>
<td>{t("cmuxOnlyMode")}</td>
<td>{t("cmuxOnlyEnable")}</td>
</tr>
<tr>
<td>
<strong>allowAll</strong>
</td>
<td>Allow any local process to connect (no ancestry check).</td>
<td>
Environment override only: <code>CMUX_SOCKET_MODE=allowAll</code>
</td>
<td>{t("allowAllMode")}</td>
<td>{t("allowAllEnable")}</td>
</tr>
</tbody>
</table>
<Callout type="warn">
On shared machines, use <strong>Off</strong> or{" "}
<strong>cmux processes only</strong>.
{t("accessCallout")}
</Callout>
<h2>CLI options</h2>
<h2>{t("cliOptions")}</h2>
<table>
<thead>
<tr>
<th>Flag</th>
<th>Description</th>
<th>{t("flagHeader")}</th>
<th>{t("descriptionHeader")}</th>
</tr>
</thead>
<tbody>
@ -137,192 +132,188 @@ export default function ApiPage() {
<td>
<code>--socket PATH</code>
</td>
<td>Custom socket path</td>
<td>{t("customSocketPath")}</td>
</tr>
<tr>
<td>
<code>--json</code>
</td>
<td>Output in JSON format</td>
<td>{t("outputJson")}</td>
</tr>
<tr>
<td>
<code>--window ID</code>
</td>
<td>Target a specific window</td>
<td>{t("targetWindow")}</td>
</tr>
<tr>
<td>
<code>--workspace ID</code>
</td>
<td>Target a specific workspace</td>
<td>{t("targetWorkspace")}</td>
</tr>
<tr>
<td>
<code>--surface ID</code>
</td>
<td>Target a specific surface</td>
<td>{t("targetSurface")}</td>
</tr>
<tr>
<td>
<code>--id-format refs|uuids|both</code>
</td>
<td>Control identifier format in JSON output</td>
<td>{t("idFormat")}</td>
</tr>
</tbody>
</table>
<h2>Workspace commands</h2>
<h2>{t("workspaceCommands")}</h2>
<Cmd
name="list-workspaces"
desc="List all open workspaces."
desc={t("listWorkspacesDesc")}
cli={`cmux list-workspaces
cmux list-workspaces --json`}
socket={`{"id":"ws-list","method":"workspace.list","params":{}}`}
/>
<Cmd
name="new-workspace"
desc="Create a new workspace."
desc={t("newWorkspaceDesc")}
cli={`cmux new-workspace`}
socket={`{"id":"ws-new","method":"workspace.create","params":{}}`}
/>
<Cmd
name="select-workspace"
desc="Switch to a specific workspace."
desc={t("selectWorkspaceDesc")}
cli={`cmux select-workspace --workspace <id>`}
socket={`{"id":"ws-select","method":"workspace.select","params":{"workspace_id":"<id>"}}`}
/>
<Cmd
name="current-workspace"
desc="Get the currently active workspace."
desc={t("currentWorkspaceDesc")}
cli={`cmux current-workspace
cmux current-workspace --json`}
socket={`{"id":"ws-current","method":"workspace.current","params":{}}`}
/>
<Cmd
name="close-workspace"
desc="Close a workspace."
desc={t("closeWorkspaceDesc")}
cli={`cmux close-workspace --workspace <id>`}
socket={`{"id":"ws-close","method":"workspace.close","params":{"workspace_id":"<id>"}}`}
/>
<h2>Split commands</h2>
<h2>{t("splitCommands")}</h2>
<Cmd
name="new-split"
desc="Create a new split pane. Directions: left, right, up, down."
desc={t("newSplitDesc")}
cli={`cmux new-split right
cmux new-split down`}
socket={`{"id":"split-new","method":"surface.split","params":{"direction":"right"}}`}
/>
<Cmd
name="list-surfaces"
desc="List all surfaces in the current workspace."
desc={t("listSurfacesDesc")}
cli={`cmux list-surfaces
cmux list-surfaces --json`}
socket={`{"id":"surface-list","method":"surface.list","params":{}}`}
/>
<Cmd
name="focus-surface"
desc="Focus a specific surface."
desc={t("focusSurfaceDesc")}
cli={`cmux focus-surface --surface <id>`}
socket={`{"id":"surface-focus","method":"surface.focus","params":{"surface_id":"<id>"}}`}
/>
<h2>Input commands</h2>
<h2>{t("inputCommands")}</h2>
<Cmd
name="send"
desc="Send text input to the focused terminal."
desc={t("sendDesc")}
cli={`cmux send "echo hello"
cmux send "ls -la\\n"`}
socket={`{"id":"send-text","method":"surface.send_text","params":{"text":"echo hello\\n"}}`}
/>
<Cmd
name="send-key"
desc="Send a key press. Keys: enter, tab, escape, backspace, delete, up, down, left, right."
desc={t("sendKeyDesc")}
cli={`cmux send-key enter`}
socket={`{"id":"send-key","method":"surface.send_key","params":{"key":"enter"}}`}
/>
<Cmd
name="send-surface"
desc="Send text to a specific surface."
desc={t("sendSurfaceDesc")}
cli={`cmux send-surface --surface <id> "command"`}
socket={`{"id":"send-surface","method":"surface.send_text","params":{"surface_id":"<id>","text":"command"}}`}
/>
<Cmd
name="send-key-surface"
desc="Send a key press to a specific surface."
desc={t("sendKeySurfaceDesc")}
cli={`cmux send-key-surface --surface <id> enter`}
socket={`{"id":"send-key-surface","method":"surface.send_key","params":{"surface_id":"<id>","key":"enter"}}`}
/>
<h2>Notification commands</h2>
<h2>{t("notificationCommands")}</h2>
<Cmd
name="notify"
desc="Send a notification."
desc={t("notifyDesc")}
cli={`cmux notify --title "Title" --body "Body"
cmux notify --title "T" --subtitle "S" --body "B"`}
socket={`{"id":"notify","method":"notification.create","params":{"title":"Title","subtitle":"S","body":"Body"}}`}
/>
<Cmd
name="list-notifications"
desc="List all notifications."
desc={t("listNotificationsDesc")}
cli={`cmux list-notifications
cmux list-notifications --json`}
socket={`{"id":"notif-list","method":"notification.list","params":{}}`}
/>
<Cmd
name="clear-notifications"
desc="Clear all notifications."
desc={t("clearNotificationsDesc")}
cli={`cmux clear-notifications`}
socket={`{"id":"notif-clear","method":"notification.clear","params":{}}`}
/>
<h2>Sidebar metadata commands</h2>
<p>
Set status pills, progress bars, and log entries in the sidebar for any
workspace. Useful for build scripts, CI integrations, and AI coding
agents that want to surface state at a glance.
</p>
<h2>{t("sidebarMetadata")}</h2>
<p>{t("sidebarMetadataDesc")}</p>
<Cmd
name="set-status"
desc="Set a sidebar status pill. Use a unique key so different tools can manage their own entries."
desc={t("setStatusDesc")}
cli={`cmux set-status build "compiling" --icon hammer --color "#ff9500"
cmux set-status deploy "v1.2.3" --workspace workspace:2`}
socket={`set_status build compiling --icon=hammer --color=#ff9500 --tab=<workspace-uuid>`}
/>
<Cmd
name="clear-status"
desc="Remove a sidebar status entry by key."
desc={t("clearStatusDesc")}
cli={`cmux clear-status build`}
socket={`clear_status build --tab=<workspace-uuid>`}
/>
<Cmd
name="list-status"
desc="List all sidebar status entries for a workspace."
desc={t("listStatusDesc")}
cli={`cmux list-status`}
socket={`list_status --tab=<workspace-uuid>`}
/>
<Cmd
name="set-progress"
desc="Set a progress bar in the sidebar (0.0 to 1.0)."
desc={t("setProgressDesc")}
cli={`cmux set-progress 0.5 --label "Building..."
cmux set-progress 1.0 --label "Done"`}
socket={`set_progress 0.5 --label=Building... --tab=<workspace-uuid>`}
/>
<Cmd
name="clear-progress"
desc="Clear the sidebar progress bar."
desc={t("clearProgressDesc")}
cli={`cmux clear-progress`}
socket={`clear_progress --tab=<workspace-uuid>`}
/>
<Cmd
name="log"
desc="Append a log entry to the sidebar. Levels: info, progress, success, warning, error."
desc={t("logDesc")}
cli={`cmux log "Build started"
cmux log --level error --source build "Compilation failed"
cmux log --level success -- "All 42 tests passed"`}
@ -330,55 +321,55 @@ cmux log --level success -- "All 42 tests passed"`}
/>
<Cmd
name="clear-log"
desc="Clear all sidebar log entries."
desc={t("clearLogDesc")}
cli={`cmux clear-log`}
socket={`clear_log --tab=<workspace-uuid>`}
/>
<Cmd
name="list-log"
desc="List sidebar log entries."
desc={t("listLogDesc")}
cli={`cmux list-log
cmux list-log --limit 5`}
socket={`list_log --limit=5 --tab=<workspace-uuid>`}
/>
<Cmd
name="sidebar-state"
desc="Dump all sidebar metadata (cwd, git branch, ports, status, progress, logs)."
desc={t("sidebarStateDesc")}
cli={`cmux sidebar-state
cmux sidebar-state --workspace workspace:2`}
socket={`sidebar_state --tab=<workspace-uuid>`}
/>
<h2>Utility commands</h2>
<h2>{t("utilityCommands")}</h2>
<Cmd
name="ping"
desc="Check if cmux is running and responsive."
desc={t("pingDesc")}
cli={`cmux ping`}
socket={`{"id":"ping","method":"system.ping","params":{}}
// Response: {"id":"ping","ok":true,"result":{"pong":true}}`}
/>
<Cmd
name="capabilities"
desc="List available socket methods and current access mode."
desc={t("capabilitiesDesc")}
cli={`cmux capabilities
cmux capabilities --json`}
socket={`{"id":"caps","method":"system.capabilities","params":{}}`}
/>
<Cmd
name="identify"
desc="Show focused window/workspace/pane/surface context."
desc={t("identifyDesc")}
cli={`cmux identify
cmux identify --json`}
socket={`{"id":"identify","method":"system.identify","params":{}}`}
/>
<h2>Environment variables</h2>
<h2>{t("envVariables")}</h2>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Description</th>
<th>{t("variableHeader")}</th>
<th>{t("descriptionHeader")}</th>
</tr>
</thead>
<tbody>
@ -386,65 +377,51 @@ cmux identify --json`}
<td>
<code>CMUX_SOCKET_PATH</code>
</td>
<td>Override the socket path used by CLI and integrations</td>
<td>{t("socketPathDesc")}</td>
</tr>
<tr>
<td>
<code>CMUX_SOCKET_ENABLE</code>
</td>
<td>
Force-enable/disable socket (<code>1</code>/<code>0</code>,{" "}
<code>true</code>/<code>false</code>, <code>on</code>/
<code>off</code>)
</td>
<td>{t("socketEnableDesc")}</td>
</tr>
<tr>
<td>
<code>CMUX_SOCKET_MODE</code>
</td>
<td>
Override access mode (<code>cmuxOnly</code>,{" "}
<code>allowAll</code>, <code>off</code>). Also accepts{" "}
<code>cmux-only</code>/<code>cmux_only</code> and{" "}
<code>allow-all</code>/<code>allow_all</code>
</td>
<td>{t("socketModeDesc")}</td>
</tr>
<tr>
<td>
<code>CMUX_WORKSPACE_ID</code>
</td>
<td>Auto-set: current workspace ID</td>
<td>{t("workspaceIdDesc")}</td>
</tr>
<tr>
<td>
<code>CMUX_SURFACE_ID</code>
</td>
<td>Auto-set: current surface ID</td>
<td>{t("surfaceIdDesc")}</td>
</tr>
<tr>
<td>
<code>TERM_PROGRAM</code>
</td>
<td>
Set to <code>ghostty</code>
</td>
<td>{t("termProgramDesc")}</td>
</tr>
<tr>
<td>
<code>TERM</code>
</td>
<td>
Set to <code>xterm-ghostty</code>
</td>
<td>{t("termDesc")}</td>
</tr>
</tbody>
</table>
<Callout>
Legacy <code>CMUX_SOCKET_MODE</code> values <code>full</code> and{" "}
<code>notifications</code> are still accepted for compatibility.
{t("envCallout")}
</Callout>
<h2>Detecting cmux</h2>
<h2>{t("detectingCmux")}</h2>
<CodeBlock title="bash" lang="bash">{`# Prefer explicit socket path if set
SOCK="\${CMUX_SOCKET_PATH:-/tmp/cmux.sock}"
[ -S "$SOCK" ] && echo "Socket available"
@ -458,9 +435,9 @@ command -v cmux &>/dev/null && echo "cmux available"
# Distinguish from regular Ghostty
[ "$TERM_PROGRAM" = "ghostty" ] && [ -n "\${CMUX_WORKSPACE_ID:-}" ] && echo "In cmux"`}</CodeBlock>
<h2>Examples</h2>
<h2>{t("examples")}</h2>
<h3>Python client</h3>
<h3>{t("pythonClient")}</h3>
<CodeBlock title="python" lang="python">{`import json
import os
import socket
@ -484,7 +461,7 @@ print(rpc(
req_id="notify"
))`}</CodeBlock>
<h3>Shell script</h3>
<h3>{t("shellScript")}</h3>
<CodeBlock title="bash" lang="bash">{`#!/bin/bash
SOCK="\${CMUX_SOCKET_PATH:-/tmp/cmux.sock}"
@ -495,7 +472,7 @@ cmux_cmd() {
cmux_cmd '{"id":"ws","method":"workspace.list","params":{}}'
cmux_cmd '{"id":"notify","method":"notification.create","params":{"title":"Done","body":"Task complete"}}'`}</CodeBlock>
<h3>Build script with notification</h3>
<h3>{t("buildScriptNotification")}</h3>
<CodeBlock title="bash" lang="bash">{`#!/bin/bash
npm run build
if [ $? -eq 0 ]; then

View file

@ -1,35 +1,35 @@
import type { Metadata } from "next";
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { CodeBlock } from "../../components/code-block";
import { Callout } from "../../components/callout";
export const metadata: Metadata = {
title: "Browser Automation",
description:
"cmux browser command reference for navigation, DOM interaction, waiting, inspection, JavaScript evaluation, tabs, dialogs, frames, downloads, and browser state.",
};
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "docs.browserAutomation" });
return {
title: t("metaTitle"),
description: t("metaDescription"),
};
}
export default function BrowserAutomationPage() {
const t = useTranslations("docs.browserAutomation");
return (
<>
<h1>Browser Automation</h1>
<p>
The <code>cmux browser</code> command group provides browser automation
against cmux browser surfaces. Use it to navigate, interact with DOM
elements, inspect page state, evaluate JavaScript, and manage browser
session data.
</p>
<h1>{t("title")}</h1>
<p>{t("intro")}</p>
<h2>Command Index</h2>
<h2>{t("commandIndex")}</h2>
<table>
<thead>
<tr>
<th>Category</th>
<th>Subcommands</th>
<th>{t("categoryHeader")}</th>
<th>{t("subcommandsHeader")}</th>
</tr>
</thead>
<tbody>
<tr>
<td>Navigation and targeting</td>
<td>{t("navAndTargeting")}</td>
<td>
<code>identify</code>, <code>open</code>, <code>open-split</code>,{" "}
<code>navigate</code>, <code>back</code>, <code>forward</code>,{" "}
@ -38,13 +38,13 @@ export default function BrowserAutomationPage() {
</td>
</tr>
<tr>
<td>Waiting</td>
<td>{t("waiting")}</td>
<td>
<code>wait</code>
</td>
</tr>
<tr>
<td>DOM interaction</td>
<td>{t("domInteraction")}</td>
<td>
<code>click</code>, <code>dblclick</code>, <code>hover</code>,{" "}
<code>focus</code>, <code>check</code>, <code>uncheck</code>,{" "}
@ -54,33 +54,33 @@ export default function BrowserAutomationPage() {
</td>
</tr>
<tr>
<td>Inspection</td>
<td>{t("inspection")}</td>
<td>
<code>snapshot</code>, <code>screenshot</code>, <code>get</code>,{" "}
<code>is</code>, <code>find</code>, <code>highlight</code>
</td>
</tr>
<tr>
<td>JavaScript and injection</td>
<td>{t("jsAndInjection")}</td>
<td>
<code>eval</code>, <code>addinitscript</code>, <code>addscript</code>,{" "}
<code>addstyle</code>
</td>
</tr>
<tr>
<td>Frames, dialogs, downloads</td>
<td>{t("framesDialogsDownloads")}</td>
<td>
<code>frame</code>, <code>dialog</code>, <code>download</code>
</td>
</tr>
<tr>
<td>State and session data</td>
<td>{t("stateAndSession")}</td>
<td>
<code>cookies</code>, <code>storage</code>, <code>state</code>
</td>
</tr>
<tr>
<td>Tabs and logs</td>
<td>{t("tabsAndLogs")}</td>
<td>
<code>tab</code>, <code>console</code>, <code>errors</code>
</td>
@ -88,11 +88,8 @@ export default function BrowserAutomationPage() {
</tbody>
</table>
<h2>Targeting a browser surface</h2>
<p>
Most subcommands require a target surface. You can pass it positionally
or with <code>--surface</code>.
</p>
<h2>{t("targetingSurface")}</h2>
<p>{t("targetingDesc")}</p>
<CodeBlock lang="bash">{`# Open a new browser split
cmux browser open https://example.com
@ -104,7 +101,7 @@ cmux browser identify --surface surface:2
cmux browser surface:2 url
cmux browser --surface surface:2 url`}</CodeBlock>
<h2>Navigation</h2>
<h2>{t("navigation")}</h2>
<CodeBlock lang="bash">{`cmux browser open https://example.com
cmux browser open-split https://news.ycombinator.com
@ -117,22 +114,16 @@ cmux browser surface:2 url
cmux browser surface:2 focus-webview
cmux browser surface:2 is-webview-focused`}</CodeBlock>
<h2>Waiting</h2>
<p>
Use <code>wait</code> to block until selectors, text, URL fragments,
load state, or a JavaScript condition is satisfied.
</p>
<h2>{t("waitingSection")}</h2>
<p>{t("waitingDesc")}</p>
<CodeBlock lang="bash">{`cmux browser surface:2 wait --load-state complete --timeout-ms 15000
cmux browser surface:2 wait --selector "#checkout" --timeout-ms 10000
cmux browser surface:2 wait --text "Order confirmed"
cmux browser surface:2 wait --url-contains "/dashboard"
cmux browser surface:2 wait --function "window.__appReady === true"`}</CodeBlock>
<h2>DOM Interaction</h2>
<p>
Mutating actions support <code>--snapshot-after</code> for fast
verification in scripts.
</p>
<h2>{t("domSection")}</h2>
<p>{t("domDesc")}</p>
<CodeBlock lang="bash">{`cmux browser surface:2 click "button[type='submit']" --snapshot-after
cmux browser surface:2 dblclick ".item-row"
cmux browser surface:2 hover "#menu"
@ -151,11 +142,8 @@ cmux browser surface:2 select "#region" "us-east"
cmux browser surface:2 scroll --dy 800 --snapshot-after
cmux browser surface:2 scroll --selector "#log-view" --dx 0 --dy 400`}</CodeBlock>
<h2>Inspection</h2>
<p>
Use structured getters for scripts and snapshots/screenshots for human
review.
</p>
<h2>{t("inspectionSection")}</h2>
<p>{t("inspectionDesc")}</p>
<CodeBlock lang="bash">{`cmux browser surface:2 snapshot --interactive --compact
cmux browser surface:2 snapshot --selector "main" --max-depth 5
cmux browser surface:2 screenshot --out /tmp/cmux-page.png
@ -187,7 +175,7 @@ cmux browser surface:2 find nth 2 ".row"
cmux browser surface:2 highlight "#checkout"`}</CodeBlock>
<h2>JavaScript Eval and Injection</h2>
<h2>{t("jsSection")}</h2>
<CodeBlock lang="bash">{`cmux browser surface:2 eval "document.title"
cmux browser surface:2 eval --script "window.location.href"
@ -195,11 +183,8 @@ cmux browser surface:2 addinitscript "window.__cmuxReady = true;"
cmux browser surface:2 addscript "document.querySelector('#name')?.focus()"
cmux browser surface:2 addstyle "#debug-banner { display: none !important; }"`}</CodeBlock>
<h2>State</h2>
<p>
Session data commands cover cookies, local/session storage, and full
browser state snapshots.
</p>
<h2>{t("stateSection")}</h2>
<p>{t("stateDesc")}</p>
<CodeBlock lang="bash">{`cmux browser surface:2 cookies get
cmux browser surface:2 cookies get --name session_id
cmux browser surface:2 cookies set session_id abc123 --domain example.com --path /
@ -215,11 +200,8 @@ cmux browser surface:2 storage session get flow
cmux browser surface:2 state save /tmp/cmux-browser-state.json
cmux browser surface:2 state load /tmp/cmux-browser-state.json`}</CodeBlock>
<h2>Tabs</h2>
<p>
Browser tab operations map to browser surfaces in the active browser tab
group.
</p>
<h2>{t("tabsSection")}</h2>
<p>{t("tabsDesc")}</p>
<CodeBlock lang="bash">{`cmux browser surface:2 tab list
cmux browser surface:2 tab new https://example.com/pricing
@ -231,19 +213,19 @@ cmux browser surface:2 tab switch surface:7
cmux browser surface:2 tab close
cmux browser surface:2 tab close surface:7`}</CodeBlock>
<h2>Console and Errors</h2>
<h2>{t("consoleSection")}</h2>
<CodeBlock lang="bash">{`cmux browser surface:2 console list
cmux browser surface:2 console clear
cmux browser surface:2 errors list
cmux browser surface:2 errors clear`}</CodeBlock>
<h2>Dialogs</h2>
<h2>{t("dialogsSection")}</h2>
<CodeBlock lang="bash">{`cmux browser surface:2 dialog accept
cmux browser surface:2 dialog accept "Confirmed by automation"
cmux browser surface:2 dialog dismiss`}</CodeBlock>
<h2>Frames</h2>
<h2>{t("framesSection")}</h2>
<CodeBlock lang="bash">{`# Enter an iframe context
cmux browser surface:2 frame "iframe[name='checkout']"
cmux browser surface:2 click "#pay-now"
@ -251,32 +233,32 @@ cmux browser surface:2 click "#pay-now"
# Return to the top-level document
cmux browser surface:2 frame main`}</CodeBlock>
<h2>Downloads</h2>
<h2>{t("downloadsSection")}</h2>
<CodeBlock lang="bash">{`cmux browser surface:2 click "a#download-report"
cmux browser surface:2 download --path /tmp/report.csv --timeout-ms 30000`}</CodeBlock>
<h2>Common Patterns</h2>
<h2>{t("commonPatterns")}</h2>
<h3>Navigate, wait, inspect</h3>
<h3>{t("patternNavigate")}</h3>
<CodeBlock lang="bash">{`cmux browser open https://example.com/login
cmux browser surface:2 wait --load-state complete --timeout-ms 15000
cmux browser surface:2 snapshot --interactive --compact
cmux browser surface:2 get title`}</CodeBlock>
<h3>Fill a form and verify success text</h3>
<h3>{t("patternForm")}</h3>
<CodeBlock lang="bash">{`cmux browser surface:2 fill "#email" --text "ops@example.com"
cmux browser surface:2 fill "#password" --text "$PASSWORD"
cmux browser surface:2 click "button[type='submit']" --snapshot-after
cmux browser surface:2 wait --text "Welcome"
cmux browser surface:2 is visible "#dashboard"`}</CodeBlock>
<h3>Capture debug artifacts on failure</h3>
<h3>{t("patternDebug")}</h3>
<CodeBlock lang="bash">{`cmux browser surface:2 console list
cmux browser surface:2 errors list
cmux browser surface:2 screenshot --out /tmp/cmux-failure.png
cmux browser surface:2 snapshot --interactive --compact`}</CodeBlock>
<h3>Persist and restore browser session</h3>
<h3>{t("patternSession")}</h3>
<CodeBlock lang="bash">{`cmux browser surface:2 state save /tmp/session.json
# ...later...
cmux browser surface:2 state load /tmp/session.json

View file

@ -1,7 +1,8 @@
import type { Metadata } from "next";
import fs from "fs";
import path from "path";
import Image from "next/image";
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { changelogMedia, type VersionMedia } from "./changelog-media";
/** Read PNG dimensions from the IHDR chunk (bytes 16-23). */
@ -14,11 +15,14 @@ function pngDimensions(filePath: string): { width: number; height: number } {
};
}
export const metadata: Metadata = {
title: "Changelog",
description:
"cmux release notes and version history. New features, bug fixes, and changes for the native macOS terminal.",
};
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "docs.changelog" });
return {
title: t("metaTitle"),
description: t("metaDescription"),
};
}
interface ChangelogSection {
heading: string;
@ -238,13 +242,14 @@ function SectionBadge({ heading }: { heading: string }) {
}
export default function ChangelogPage() {
const t = useTranslations("docs.changelog");
const changelogPath = path.join(process.cwd(), "..", "CHANGELOG.md");
const markdown = fs.readFileSync(changelogPath, "utf-8");
const versions = parseChangelog(markdown);
return (
<div className="max-w-[640px] overflow-hidden">
<h1 style={{ margin: 0, padding: 0, paddingBottom: 8 }}>Changelog</h1>
<h1 style={{ margin: 0, padding: 0, paddingBottom: 8 }}>{t("title")}</h1>
<div style={{ paddingTop: 16 }}>
{versions.map((v, vi) => {

View file

@ -0,0 +1,193 @@
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { CodeBlock } from "../../components/code-block";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "docs.concepts" });
return {
title: t("metaTitle"),
description: t("metaDescription"),
};
}
export default function ConceptsPage() {
const t = useTranslations("docs.concepts");
return (
<>
<h1>{t("title")}</h1>
<p>{t("intro")}</p>
<h2>{t("hierarchy")}</h2>
<CodeBlock lang="text">{`Window
Workspace (sidebar entry)
Pane (split region)
Surface (tab within pane)
Panel (terminal or browser content)`}</CodeBlock>
<h3>{t("windowTitle")}</h3>
<p>
{t("windowDesc", { shortcut: "⌘⇧N" })}
</p>
<h3>{t("workspaceTitle")}</h3>
<p>{t("workspaceDesc")}</p>
<p>{t("workspaceNote")}</p>
<table>
<thead>
<tr>
<th>{t("contextHeader")}</th>
<th>{t("termUsedHeader")}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{t("sidebarUI")}</td>
<td>{t("tab")}</td>
</tr>
<tr>
<td>{t("keyboardShortcuts")}</td>
<td>{t("workspaceOrTab")}</td>
</tr>
<tr>
<td>{t("socketAPI")}</td>
<td>
<code>workspace</code>
</td>
</tr>
<tr>
<td>{t("environmentVariable")}</td>
<td>
<code>CMUX_WORKSPACE_ID</code>
</td>
</tr>
</tbody>
</table>
<p>
<strong>
{t("workspaceShortcuts", {
new: "⌘N",
jump: "⌘1⌘9",
close: "⌘⇧W",
prevNext: "⌘⇧[ / ⌘⇧]",
})}
</strong>
</p>
<h3>{t("paneTitle")}</h3>
<p>
{t("paneDesc", {
right: "⌘D",
down: "⌘⇧D",
nav: "⌥⌘",
})}
</p>
<p>{t("paneNote")}</p>
<h3>{t("surfaceTitle")}</h3>
<p>
{t("surfaceDesc", {
new: "⌘T",
prev: "⌘[",
next: "⌘]",
jump: "⌃1⌃9",
})}
</p>
<p>{t("surfaceNote")}</p>
<h3>{t("panelTitle")}</h3>
<p>{t("panelDesc")}</p>
<ul>
<li>
<strong>{t("panelTerminal")}</strong>
</li>
<li>
<strong>{t("panelBrowser")}</strong>
</li>
</ul>
<p>{t("panelNote")}</p>
<h2>{t("visualExample")}</h2>
<CodeBlock variant="ascii">{`┌──────────────────────────────────────────────────────┐
Sidebar Workspace "dev"
> dev Pane 1 Pane 2
server [S1] [S2] [S1]
logs
Terminal Terminal
`}</CodeBlock>
<p>{t("visualExampleDesc")}</p>
<ul>
<li>{t("visualItem1")}</li>
<li>{t("visualItem2")}</li>
<li>{t("visualItem3")}</li>
<li>{t("visualItem4")}</li>
<li>{t("visualItem5")}</li>
</ul>
<h2>{t("summary")}</h2>
<table>
<thead>
<tr>
<th>{t("levelHeader")}</th>
<th>{t("whatItIsHeader")}</th>
<th>{t("createdByHeader")}</th>
<th>{t("identifiedByHeader")}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{t("windowTitle")}</td>
<td>{t("macosWindow")}</td>
<td>
<code>N</code>
</td>
<td></td>
</tr>
<tr>
<td>{t("workspaceTitle")}</td>
<td>{t("sidebarEntry")}</td>
<td>
<code>N</code>
</td>
<td>
<code>CMUX_WORKSPACE_ID</code>
</td>
</tr>
<tr>
<td>{t("paneTitle")}</td>
<td>{t("splitRegion")}</td>
<td>
<code>D</code> / <code>D</code>
</td>
<td>{t("paneIdSocket")}</td>
</tr>
<tr>
<td>{t("surfaceTitle")}</td>
<td>{t("tabWithinPane")}</td>
<td>
<code>T</code>
</td>
<td>
<code>CMUX_SURFACE_ID</code>
</td>
</tr>
<tr>
<td>{t("panelTitle")}</td>
<td>{t("terminalOrBrowser")}</td>
<td>{t("automatic")}</td>
<td>{t("panelIdInternal")}</td>
</tr>
</tbody>
</table>
</>
);
}

View file

@ -0,0 +1,136 @@
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { CodeBlock } from "../../components/code-block";
import { Callout } from "../../components/callout";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "docs.configuration" });
return {
title: t("metaTitle"),
description: t("metaDescription"),
};
}
export default function ConfigurationPage() {
const t = useTranslations("docs.configuration");
return (
<>
<h1>{t("title")}</h1>
<p>{t("intro")}</p>
<h2>{t("configLocations")}</h2>
<p>{t("configLocationsDesc")}</p>
<ol>
<li>
<code>~/.config/ghostty/config</code>
</li>
<li>
<code>~/Library/Application Support/com.mitchellh.ghostty/config</code>
</li>
</ol>
<p>{t("createConfig")}</p>
<CodeBlock lang="bash">{`mkdir -p ~/.config/ghostty
touch ~/.config/ghostty/config`}</CodeBlock>
<h2>{t("appearance")}</h2>
<h3>{t("font")}</h3>
<CodeBlock title="~/.config/ghostty/config" lang="ini">{`font-family = JetBrains Mono
font-size = 14`}</CodeBlock>
<h3>{t("colors")}</h3>
<CodeBlock title="~/.config/ghostty/config" lang="ini">{`# Theme (or use individual colors below)
theme = Dracula
# Custom colors
background = #1e1e2e
foreground = #cdd6f4
cursor-color = #f5e0dc
cursor-text = #1e1e2e
selection-background = #585b70
selection-foreground = #cdd6f4`}</CodeBlock>
<h3>{t("splitPanes")}</h3>
<CodeBlock title="~/.config/ghostty/config" lang="ini">{`# Opacity for unfocused splits (0.0 to 1.0)
unfocused-split-opacity = 0.7
# Fill color for unfocused splits
unfocused-split-fill = #1e1e2e
# Divider color between splits
split-divider-color = #45475a`}</CodeBlock>
<h2>{t("behavior")}</h2>
<h3>{t("scrollback")}</h3>
<CodeBlock title="~/.config/ghostty/config" lang="ini">{`# Number of lines to keep in scrollback buffer
scrollback-limit = 10000`}</CodeBlock>
<h3>{t("workingDirectory")}</h3>
<CodeBlock title="~/.config/ghostty/config" lang="ini">{`# Default directory for new terminals
working-directory = ~/Projects`}</CodeBlock>
<h2>{t("appSettings")}</h2>
<p>{t("appSettingsDesc", { shortcut: "⌘," })}</p>
<h3>{t("themeMode")}</h3>
<ul>
<li>
<strong>{t("themeSystem")}</strong>
</li>
<li>
<strong>{t("themeLight")}</strong>
</li>
<li>
<strong>{t("themeDark")}</strong>
</li>
</ul>
<h3>{t("automationMode")}</h3>
<p>{t("automationModeDesc")}</p>
<ul>
<li>
<strong>{t("automationOff")}</strong>
</li>
<li>
<strong>{t("automationCmux")}</strong>
</li>
<li>
<strong>{t("automationAll")}</strong>
</li>
</ul>
<Callout type="warn">{t("automationCallout")}</Callout>
<h3>{t("browserLinkBehavior")}</h3>
<p>{t("browserLinkDesc")}</p>
<ul>
<li>
<strong>{t("browserHostsEmbed")}</strong>
</li>
<li>
<strong>{t("browserHostsHttp")}</strong>
</li>
</ul>
<h2>{t("exampleConfig")}</h2>
<CodeBlock title="~/.config/ghostty/config" lang="ini">{`# Font
font-family = SF Mono
font-size = 13
# Colors
theme = One Dark
# Scrollback
scrollback-limit = 50000
# Splits
unfocused-split-opacity = 0.85
split-divider-color = #3e4451
# Working directory
working-directory = ~/code`}</CodeBlock>
</>
);
}

View file

@ -0,0 +1,79 @@
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { CodeBlock } from "../../components/code-block";
import { Callout } from "../../components/callout";
import { DownloadButton } from "../../components/download-button";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "docs.gettingStarted" });
return {
title: t("metaTitle"),
description: t("metaDescription"),
};
}
export default function GettingStartedPage() {
const t = useTranslations("docs.gettingStarted");
return (
<>
<h1>{t("title")}</h1>
<p>{t("intro")}</p>
<h2>{t("install")}</h2>
<h3>{t("dmgRecommended")}</h3>
<div className="my-4">
<DownloadButton />
</div>
<p>{t("dmgDesc")}</p>
<h3>{t("homebrew")}</h3>
<CodeBlock lang="bash">{`brew tap manaflow-ai/cmux
brew install --cask cmux`}</CodeBlock>
<p>{t("updateLater")}</p>
<CodeBlock lang="bash">{`brew upgrade --cask cmux`}</CodeBlock>
<Callout>
{t.rich("firstLaunchCallout", {
strong: (chunks) => <strong>{chunks}</strong>,
})}
</Callout>
<h2>{t("verifyTitle")}</h2>
<p>{t("verifyDesc")}</p>
<ul>
<li>{t("verifyItem1")}</li>
<li>{t("verifyItem2")}</li>
<li>{t("verifyItem3")}</li>
</ul>
<h2>{t("cliSetup")}</h2>
<p>{t("cliDesc")}</p>
<CodeBlock lang="bash">{`sudo ln -sf "/Applications/cmux.app/Contents/Resources/bin/cmux" /usr/local/bin/cmux`}</CodeBlock>
<p>{t("cliThen")}</p>
<CodeBlock lang="bash">{`cmux list-workspaces
cmux notify --title "Build Complete" --body "Your build finished"`}</CodeBlock>
<h2>{t("autoUpdates")}</h2>
<p>{t("autoUpdatesDesc")}</p>
<h2>{t("sessionRestore")}</h2>
<p>{t("sessionRestoreDesc")}</p>
<ul>
<li>{t("sessionItem1")}</li>
<li>{t("sessionItem2")}</li>
<li>{t("sessionItem3")}</li>
<li>{t("sessionItem4")}</li>
</ul>
<Callout>{t("sessionCallout")}</Callout>
<h2>{t("requirements")}</h2>
<ul>
<li>{t("reqItem1")}</li>
<li>{t("reqItem2")}</li>
</ul>
</>
);
}

View file

@ -0,0 +1,24 @@
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { KeyboardShortcuts } from "../../keyboard-shortcuts";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "docs.keyboardShortcuts" });
return {
title: t("metaTitle"),
description: t("metaDescription"),
};
}
export default function KeyboardShortcutsPage() {
const t = useTranslations("docs.keyboardShortcuts");
return (
<>
<h1>{t("title")}</h1>
<p>{t("description")}</p>
<KeyboardShortcuts />
</>
);
}

View file

@ -0,0 +1,38 @@
import { getTranslations } from "next-intl/server";
import { DocsNav } from "./docs-nav";
import { SiteHeader } from "../components/site-header";
export async function generateMetadata({
params,
}: {
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "docs" });
return {
title: {
template: `%s — ${t("layoutTitle")}`,
default: t("layoutTitle"),
},
openGraph: {
siteName: "cmux",
type: "article" as const,
},
alternates: {
canonical: "./",
},
};
}
export default function DocsLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<div className="min-h-screen">
<SiteHeader section="docs" />
<DocsNav>{children}</DocsNav>
</div>
);
}

View file

@ -1,79 +1,70 @@
import type { Metadata } from "next";
import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server";
import { CodeBlock } from "../../components/code-block";
import { Callout } from "../../components/callout";
export const metadata: Metadata = {
title: "Notifications",
description:
"Send desktop notifications from AI agents and scripts in cmux. CLI, OSC 99/777 escape sequences, and Claude Code hooks integration.",
};
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "docs.notifications" });
return {
title: t("metaTitle"),
description: t("metaDescription"),
};
}
export default function NotificationsPage() {
const t = useTranslations("docs.notifications");
return (
<>
<h1>Notifications</h1>
<p>
cmux supports desktop notifications, allowing AI agents and scripts to
alert you when they need attention.
</p>
<h1>{t("title")}</h1>
<p>{t("intro")}</p>
<h2>Lifecycle</h2>
<h2>{t("lifecycle")}</h2>
<ol>
<li>
<strong>Received</strong> notification appears in panel, desktop
alert fires (if not suppressed)
</li>
<li>
<strong>Unread</strong> badge shown on workspace tab
</li>
<li>
<strong>Read</strong> cleared when you view that workspace
</li>
<li>
<strong>Cleared</strong> removed from panel
</li>
<li>{t("received")}</li>
<li>{t("unread")}</li>
<li>{t("read")}</li>
<li>{t("cleared")}</li>
</ol>
<h3>Suppression</h3>
<p>Desktop alerts are suppressed when:</p>
<h3>{t("suppression")}</h3>
<p>{t("suppressionDesc")}</p>
<ul>
<li>The cmux window is focused</li>
<li>The specific workspace sending the notification is active</li>
<li>The notification panel is open</li>
<li>{t("suppressItem1")}</li>
<li>{t("suppressItem2")}</li>
<li>{t("suppressItem3")}</li>
</ul>
<h3>Notification panel</h3>
<h3>{t("notificationPanel")}</h3>
<p>
Press <code>I</code> to open the notification panel. Click a
notification to jump to that workspace. Press <code>U</code> to jump
directly to the workspace with the most recent unread notification.
{t.rich("notificationPanelDesc", {
openShortcut: (chunks) => <code>{chunks}</code>,
jumpShortcut: (chunks) => <code>{chunks}</code>,
})}
</p>
<h2>Custom command</h2>
<p>
Run a shell command every time a notification is scheduled. Set it in{" "}
<strong>Settings App Notification Command</strong>. The command
runs via <code>/bin/sh -c</code> with these environment variables:
</p>
<h2>{t("customCommand")}</h2>
<p>{t("customCommandDesc")}</p>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Description</th>
<th>{t("variableHeader")}</th>
<th>{t("descriptionHeader")}</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>CMUX_NOTIFICATION_TITLE</code></td>
<td>Notification title (workspace name or app name)</td>
<td>{t("envTitle")}</td>
</tr>
<tr>
<td><code>CMUX_NOTIFICATION_SUBTITLE</code></td>
<td>Notification subtitle</td>
<td>{t("envSubtitle")}</td>
</tr>
<tr>
<td><code>CMUX_NOTIFICATION_BODY</code></td>
<td>Notification body text</td>
<td>{t("envBody")}</td>
</tr>
</tbody>
</table>
@ -85,22 +76,16 @@ afplay /path/to/sound.aiff
# Log to file
echo "$CMUX_NOTIFICATION_TITLE: $CMUX_NOTIFICATION_BODY" >> ~/notifications.log`}</CodeBlock>
<p>
The command runs independently of the system sound picker. Set the
picker to "None" to use only the custom command, or keep both for a
system sound plus a custom action.
</p>
<p>{t("customCommandNote")}</p>
<h2>Sending notifications</h2>
<h2>{t("sending")}</h2>
<h3>CLI</h3>
<h3>{t("cli")}</h3>
<CodeBlock lang="bash">{`cmux notify --title "Task Complete" --body "Your build finished"
cmux notify --title "Claude Code" --subtitle "Waiting" --body "Agent needs input"`}</CodeBlock>
<h3>OSC 777 (simple)</h3>
<p>
The RXVT protocol uses a fixed format with title and body:
</p>
<h3>{t("osc777Title")}</h3>
<p>{t("osc777Desc")}</p>
<CodeBlock lang="bash">{`printf '\\e]777;notify;My Title;Message body here\\a'`}</CodeBlock>
<CodeBlock title="Shell function" lang="bash">{`notify_osc777() {
local title="$1"
@ -110,10 +95,8 @@ cmux notify --title "Claude Code" --subtitle "Waiting" --body "Agent needs input
notify_osc777 "Build Complete" "All tests passed"`}</CodeBlock>
<h3>OSC 99 (rich)</h3>
<p>
The Kitty protocol supports subtitles and notification IDs:
</p>
<h3>{t("osc99Title")}</h3>
<p>{t("osc99Desc")}</p>
<CodeBlock lang="bash">{`# Format: ESC ] 99 ; <params> ; <payload> ESC \\
# Simple notification
@ -127,49 +110,49 @@ printf '\\e]99;i=1;e=1;d=1;p=body:All tests passed\\e\\\\'`}</CodeBlock>
<table>
<thead>
<tr>
<th>Feature</th>
<th>{t("featureHeader")}</th>
<th>OSC 99</th>
<th>OSC 777</th>
</tr>
</thead>
<tbody>
<tr>
<td>Title + body</td>
<td>Yes</td>
<td>Yes</td>
<td>{t("cmpTitleBody")}</td>
<td>{t("cmpYes")}</td>
<td>{t("cmpYes")}</td>
</tr>
<tr>
<td>Subtitle</td>
<td>Yes</td>
<td>No</td>
<td>{t("cmpSubtitle")}</td>
<td>{t("cmpYes")}</td>
<td>{t("cmpNo")}</td>
</tr>
<tr>
<td>Notification ID</td>
<td>Yes</td>
<td>No</td>
<td>{t("cmpNotificationId")}</td>
<td>{t("cmpYes")}</td>
<td>{t("cmpNo")}</td>
</tr>
<tr>
<td>Complexity</td>
<td>Higher</td>
<td>Lower</td>
<td>{t("cmpComplexity")}</td>
<td>{t("cmpHigher")}</td>
<td>{t("cmpLower")}</td>
</tr>
</tbody>
</table>
<Callout>
Use OSC 777 for simple notifications. Use OSC 99 when you need subtitles
or notification IDs. Use the CLI (<code>cmux notify</code>) for the
easiest integration.
{t("comparisonCallout")}
</Callout>
<h2>Claude Code hooks</h2>
<h2>{t("claudeCodeHooks")}</h2>
<p>
cmux integrates with{" "}
<a href="https://docs.anthropic.com/en/docs/claude-code">Claude Code</a>{" "}
via hooks to notify you when tasks complete.
{t.rich("claudeCodeHooksDesc", {
link: (chunks) => (
<a href="https://docs.anthropic.com/en/docs/claude-code">{chunks}</a>
),
})}
</p>
<h3>1. Create the hook script</h3>
<h3>{t("createHookScript")}</h3>
<CodeBlock title="~/.claude/hooks/cmux-notify.sh" lang="bash">{`#!/bin/bash
# Skip if not in cmux
[ -S /tmp/cmux.sock ] || exit 0
@ -188,7 +171,7 @@ case "$EVENT_TYPE" in
esac`}</CodeBlock>
<CodeBlock lang="bash">{`chmod +x ~/.claude/hooks/cmux-notify.sh`}</CodeBlock>
<h3>2. Configure Claude Code</h3>
<h3>{t("configureClaude")}</h3>
<CodeBlock title="~/.claude/settings.json" lang="json">{`{
"hooks": {
"Stop": ["~/.claude/hooks/cmux-notify.sh"],
@ -200,11 +183,11 @@ esac`}</CodeBlock>
]
}
}`}</CodeBlock>
<p>Restart Claude Code to apply the hooks.</p>
<p>{t("restartNote")}</p>
<h2>Integration examples</h2>
<h2>{t("integrationExamples")}</h2>
<h3>Notify after long command</h3>
<h3>{t("notifyAfterLong")}</h3>
<CodeBlock title="~/.zshrc" lang="bash">{`# Add to your shell config
notify-after() {
"$@"
@ -219,7 +202,7 @@ notify-after() {
# Usage: notify-after npm run build`}</CodeBlock>
<h3>Python</h3>
<h3>{t("python")}</h3>
<CodeBlock title="python" lang="python">{`import sys
def notify(title: str, body: str):
@ -229,15 +212,15 @@ def notify(title: str, body: str):
notify("Script Complete", "Processing finished")`}</CodeBlock>
<h3>Node.js</h3>
<h3>{t("nodejs")}</h3>
<CodeBlock title="node" lang="javascript">{`function notify(title, body) {
process.stdout.write(\`\\x1b]777;notify;\${title};\${body}\\x07\`);
}
notify('Build Done', 'webpack finished');`}</CodeBlock>
<h3>tmux passthrough</h3>
<p>If using tmux inside cmux, enable passthrough:</p>
<h3>{t("tmuxPassthrough")}</h3>
<p>{t("tmuxDesc")}</p>
<CodeBlock title=".tmux.conf" lang="bash">{`set -g allow-passthrough on`}</CodeBlock>
<CodeBlock lang="bash">{`printf '\\ePtmux;\\e\\e]777;notify;Title;Body\\a\\e\\\\'`}</CodeBlock>
</>

View file

@ -0,0 +1,11 @@
import { redirect } from "next/navigation";
export default async function DocsPage({
params,
}: {
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
const prefix = locale === "en" ? "" : `/${locale}`;
redirect(`${prefix}/docs/getting-started`);
}

View file

@ -0,0 +1,268 @@
"use client";
import { useMemo, useState } from "react";
import { useTranslations } from "next-intl";
type Shortcut = {
id: string;
combos: string[][];
note?: string;
};
type ShortcutCategory = {
id: string;
titleKey: string;
blurbKey?: string;
shortcuts: Shortcut[];
};
const CATEGORIES: ShortcutCategory[] = [
{
id: "workspaces",
titleKey: "workspaces",
blurbKey: "workspacesBlurb",
shortcuts: [
{ id: "ws-new", combos: [["⌘", "N"]] },
{ id: "ws-jump-1-8", combos: [["⌘", "18"]] },
{ id: "ws-jump-last", combos: [["⌘", "9"]] },
{ id: "ws-close", combos: [["⌘", "⇧", "W"]] },
{ id: "ws-rename", combos: [["⌘", "⇧", "R"]] },
],
},
{
id: "surfaces",
titleKey: "surfaces",
blurbKey: "surfacesBlurb",
shortcuts: [
{ id: "sf-new", combos: [["⌘", "T"]] },
{ id: "sf-prev-1", combos: [["⌘", "⇧", "["]] },
{ id: "sf-prev-2", combos: [["⌃", "⇧", "Tab"]] },
{ id: "sf-jump-1-8", combos: [["⌃", "18"]] },
{ id: "sf-jump-last", combos: [["⌃", "9"]] },
{ id: "sf-close", combos: [["⌘", "W"]] },
],
},
{
id: "split-panes",
titleKey: "splitPanes",
shortcuts: [
{ id: "sp-right", combos: [["⌘", "D"]] },
{ id: "sp-down", combos: [["⌘", "⇧", "D"]] },
{ id: "sp-focus", combos: [["⌥", "⌘", "←/→/↑/↓"]] },
{ id: "sp-browser-right", combos: [["⌥", "⌘", "D"]] },
{ id: "sp-browser-down", combos: [["⌥", "⌘", "⇧", "D"]] },
],
},
{
id: "browser",
titleKey: "browser",
shortcuts: [
{ id: "br-open", combos: [["⌘", "⇧", "L"]] },
{ id: "br-addr", combos: [["⌘", "L"]] },
{ id: "br-forward", combos: [["⌘", "]"]] },
{ id: "br-reload", combos: [["⌘", "R"]] },
{ id: "br-devtools", combos: [["⌥", "⌘", "I"]] },
],
},
{
id: "notifications",
titleKey: "notifications",
shortcuts: [
{ id: "nt-panel", combos: [["⌘", "⇧", "I"]] },
{ id: "nt-latest", combos: [["⌘", "⇧", "U"]] },
{ id: "nt-flash", combos: [["⌘", "⇧", "L"]] },
],
},
{
id: "find",
titleKey: "find",
shortcuts: [
{ id: "fd-find", combos: [["⌘", "F"]] },
{ id: "fd-next-prev", combos: [["⌘", "G"], ["⌘", "⇧", "G"]] },
{ id: "fd-hide", combos: [["⌘", "⇧", "F"]] },
{ id: "fd-selection", combos: [["⌘", "E"]] },
],
},
{
id: "terminal",
titleKey: "terminal",
shortcuts: [
{ id: "tm-clear", combos: [["⌘", "K"]] },
{ id: "tm-copy", combos: [["⌘", "C"]] },
{ id: "tm-paste", combos: [["⌘", "V"]] },
{ id: "tm-font", combos: [["⌘", "+"], ["⌘", "-"]] },
{ id: "tm-reset", combos: [["⌘", "0"]] },
],
},
{
id: "window",
titleKey: "window",
shortcuts: [
{ id: "wn-new", combos: [["⌘", "⇧", "N"]] },
{ id: "wn-settings", combos: [["⌘", ","]] },
{ id: "wn-reload", combos: [["⌘", "⇧", "R"]] },
{ id: "wn-quit", combos: [["⌘", "Q"]] },
],
},
];
function normalize(s: string) {
return s.toLowerCase().replace(/\s+/g, " ").trim();
}
function comboToText(combo: string[]) {
return combo.join(" ");
}
function KeyCombo({ combo }: { combo: string[] }) {
return (
<span className="inline-flex items-center">
{combo.map((k, idx) => (
<span key={`${k}-${idx}`} className="inline-flex items-center">
<kbd>{k}</kbd>
{idx < combo.length - 1 && (
<span className="text-muted/30 text-[10px] mx-[3px] select-none font-mono">
+
</span>
)}
</span>
))}
</span>
);
}
function ShortcutRow({ shortcut, description, note }: { shortcut: Shortcut; description: string; note?: string }) {
return (
<div className="flex items-center justify-between gap-4 py-[11px] px-4 hover:bg-foreground/[0.025] transition-colors">
<div className="min-w-0">
<span className="text-[14px] text-foreground/90">
{description}
</span>
{note && (
<span className="text-[12px] text-muted/50 ml-2">
{note}
</span>
)}
</div>
<div className="flex items-center gap-3 shrink-0">
{shortcut.combos.map((combo, idx) => (
<span
key={`${shortcut.id}-combo-${idx}`}
className="inline-flex items-center"
>
{idx > 0 && (
<span className="text-muted/30 text-[11px] select-none mr-3 font-mono">
/
</span>
)}
<KeyCombo combo={combo} />
</span>
))}
</div>
</div>
);
}
export function KeyboardShortcuts() {
const [query, setQuery] = useState("");
const t = useTranslations("docs.keyboardShortcuts");
const trimmedQuery = query.trim();
const filtered = useMemo(() => {
const q = normalize(query);
if (!q) return CATEGORIES;
return CATEGORIES.map((cat) => ({
...cat,
shortcuts: cat.shortcuts.filter((s) => {
const catTitle = t(`cat.${cat.titleKey}`);
const desc = t(`sc.${s.id}`);
const combos = s.combos.map(comboToText).join(" ");
return normalize(`${catTitle} ${combos} ${desc} ${s.note ?? ""}`).includes(q);
}),
})).filter((cat) => cat.shortcuts.length > 0);
}, [query, t]);
return (
<div className="mt-2 mb-12">
{/* Search */}
<div className="relative mb-8">
<div className="pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-muted/40">
<svg
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
>
<circle cx="11" cy="11" r="8" />
<path d="M21 21l-4.3-4.3" />
</svg>
</div>
<input
value={query}
onChange={(e) => setQuery(e.target.value)}
placeholder={t("searchPlaceholder")}
className="w-full pl-9 pr-3 py-1.5 rounded-lg border border-border bg-transparent text-[13px] placeholder:text-muted/40 focus:outline-none focus:border-foreground/20 transition-colors"
aria-label={t("searchLabel")}
/>
</div>
{/* Category jump links */}
{!trimmedQuery && (
<nav className="flex flex-wrap items-center gap-y-2 mb-10">
{CATEGORIES.map((cat, idx) => (
<span key={cat.id} className="inline-flex items-center">
<a
href={`#${cat.id}`}
className="text-[13px] text-muted hover:text-foreground transition-colors"
>
{t(`cat.${cat.titleKey}`)}
</a>
{idx < CATEGORIES.length - 1 && (
<span className="text-border mx-2.5 text-[10px] select-none">
·
</span>
)}
</span>
))}
</nav>
)}
{/* Content */}
{filtered.length === 0 ? (
<div className="py-16 text-center">
<p className="text-[14px] text-muted/70">{t("noResults")}</p>
<p className="text-[13px] text-muted/40 mt-1.5">
{t("noResultsHint")}
</p>
</div>
) : (
<div className="space-y-10">
{filtered.map((cat) => (
<section key={cat.id} id={cat.id} className="scroll-mt-20">
<div className="mb-3">
<div className="text-[13px] font-medium text-muted/60">
{t(`cat.${cat.titleKey}`)}
</div>
{cat.blurbKey && (
<p className="text-[13px] text-muted/50 mt-1">{t(`cat.${cat.blurbKey}`)}</p>
)}
</div>
<div className="rounded-xl border border-border overflow-hidden">
<div className="divide-y divide-border/60">
{cat.shortcuts.map((s) => (
<ShortcutRow key={s.id} shortcut={s} description={t(`sc.${s.id}`)} />
))}
</div>
</div>
</section>
))}
</div>
)}
</div>
);
}

134
web/app/[locale]/layout.tsx Normal file
View file

@ -0,0 +1,134 @@
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import { NextIntlClientProvider } from "next-intl";
import {
getMessages,
getTranslations,
setRequestLocale,
} from "next-intl/server";
import { notFound } from "next/navigation";
import { routing } from "../../i18n/routing";
import { Providers } from "./providers";
import { DevPanel } from "./components/spacing-control";
import { SiteFooter } from "./components/site-footer";
import "../globals.css";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export async function generateMetadata({
params,
}: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "meta" });
const url =
locale === "en" ? "https://cmux.dev" : `https://cmux.dev/${locale}`;
return {
title: t("title"),
description: t("description"),
keywords: [
"terminal",
"macOS",
"coding agents",
"Claude Code",
"Codex",
"OpenCode",
"Gemini CLI",
"Kiro",
"Aider",
"Ghostty",
"AI",
"terminal for AI agents",
],
openGraph: {
title: t("title"),
description: t("ogDescription"),
url,
siteName: "cmux",
type: "website",
},
twitter: {
card: "summary",
title: t("title"),
description: t("ogDescription"),
},
metadataBase: new URL("https://cmux.dev"),
};
}
export function generateStaticParams() {
return routing.locales.map((locale) => ({ locale }));
}
export default async function LocaleLayout({
children,
params,
}: {
children: React.ReactNode;
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
if (!routing.locales.includes(locale as typeof routing.locales[number])) {
notFound();
}
setRequestLocale(locale);
const messages = await getMessages();
const dir = locale === "ar" ? "rtl" : "ltr";
const jsonLd = {
"@context": "https://schema.org",
"@type": "SoftwareApplication",
name: "cmux",
operatingSystem: "macOS",
applicationCategory: "DeveloperApplication",
url: "https://cmux.dev",
downloadUrl:
"https://github.com/manaflow-ai/cmux/releases/latest/download/cmux-macos.dmg",
description:
"Native macOS terminal built on Ghostty. Works with Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, and any CLI tool. Vertical tabs, notification rings, split panes, and a socket API.",
keywords:
"terminal, macOS, Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, AI coding agents, Ghostty",
offers: { "@type": "Offer", price: "0", priceCurrency: "USD" },
};
return (
<html lang={locale} dir={dir} suppressHydrationWarning>
<head>
<meta name="theme-color" content="#0a0a0a" />
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
<script
dangerouslySetInnerHTML={{
__html: `(function(){try{var t=localStorage.getItem("theme");var light=t==="light"||(t==="system"&&window.matchMedia("(prefers-color-scheme:light)").matches);if(!light)document.documentElement.classList.add("dark");var m=document.querySelector('meta[name="theme-color"]');if(m)m.content=light?"#fafafa":"#0a0a0a"}catch(e){}})()`,
}}
/>
</head>
<body
className={`${geistSans.variable} ${geistMono.variable} font-sans antialiased`}
>
<NextIntlClientProvider messages={messages}>
<Providers>
{children}
<SiteFooter />
<DevPanel />
</Providers>
</NextIntlClientProvider>
</body>
</html>
);
}

310
web/app/[locale]/page.tsx Normal file
View file

@ -0,0 +1,310 @@
import { useTranslations, useLocale } from "next-intl";
import { FadeImage } from "./components/fade-image";
import Balancer from "react-wrap-balancer";
import landingImage from "./assets/landing-image.png";
import { TypingTagline } from "./typing";
import { DownloadButton } from "./components/download-button";
import { GitHubButton } from "./components/github-button";
import { SiteHeader } from "./components/site-header";
import { testimonials, getTestimonialTranslation } from "./testimonials";
import { Link } from "../../i18n/navigation";
export default function Home() {
return <HomeContent />;
}
function HomeContent() {
const t = useTranslations("home");
const tc = useTranslations("common");
const tt = useTranslations("testimonials");
const locale = useLocale();
const linkClass =
"underline underline-offset-2 decoration-border hover:decoration-foreground transition-colors";
return (
<div className="min-h-screen">
<SiteHeader hideLogo />
<main className="w-full max-w-2xl mx-auto px-6 py-16 sm:py-24">
{/* Header */}
<div className="flex items-center gap-4 mb-10" data-dev="header">
<img
src="/logo.png"
alt="cmux icon"
width={48}
height={48}
className="rounded-xl"
/>
<h1 className="text-2xl font-semibold tracking-tight">cmux</h1>
</div>
{/* Tagline */}
<p className="text-lg leading-relaxed mb-3 text-foreground">
{t("taglinePrefix")}
<TypingTagline />
</p>
<p
className="text-base text-muted"
data-dev="subtitle"
style={{ lineHeight: 1.5 }}
>
<Balancer>{t("subtitle")}</Balancer>
</p>
{/* Download */}
<div
className="flex flex-wrap items-center gap-3"
data-dev="download"
style={{ marginTop: 21, marginBottom: 16 }}
>
<DownloadButton location="hero" />
<GitHubButton />
</div>
{/* Features */}
<section
data-dev="features"
style={{ paddingTop: 12, paddingBottom: 15 }}
>
<h2 className="text-xs font-medium text-muted tracking-tight mb-3">
{t("features")}
</h2>
<ul
className="space-y-3 text-[15px]"
data-dev="features-ul"
style={{ lineHeight: 1.275 }}
>
{(
[
["verticalTabs", "verticalTabsDesc"],
["notificationRings", "notificationRingsDesc"],
["inAppBrowser", "inAppBrowserDesc"],
["splitPanes", "splitPanesDesc"],
["scriptable", "scriptableDesc"],
["gpuAccelerated", "gpuAcceleratedDesc"],
["lightweight", "lightweightDesc"],
] as const
).map(([title, desc]) => (
<li key={title} className="flex gap-3">
<span className="text-muted shrink-0">-</span>
<span>
<strong className="font-medium">
{t(`feature.${title}`)}
</strong>
<span className="text-muted">{t(`feature.${desc}`)}</span>
</span>
</li>
))}
<li className="flex gap-3">
<span className="text-muted shrink-0">-</span>
<span>
<strong className="font-medium">
{t("feature.keyboardShortcuts")}
</strong>
<span className="text-muted">
{t.rich("feature.keyboardShortcutsDesc", {
link: (chunks) => (
<a
href="/docs/keyboard-shortcuts"
className={linkClass}
>
{chunks}
</a>
),
})}
</span>
</span>
</li>
</ul>
</section>
{/* Screenshot */}
<div
data-dev="screenshot"
className="mb-12 -mx-6 sm:-mx-24 md:-mx-40 lg:-mx-72 xl:-mx-96"
>
<FadeImage
src={landingImage}
alt="cmux terminal app screenshot"
priority
className="w-full rounded-xl"
/>
</div>
{/* FAQ */}
<div data-dev="faq-top-spacer" style={{ height: 0 }} />
<section data-dev="faq" className="mb-10">
<h2 className="text-xs font-medium text-muted tracking-tight mb-3">
{t("faq")}
</h2>
<div
className="space-y-5 text-[15px]"
style={{ lineHeight: 1.5 }}
>
<div>
<p className="font-medium mb-1">{t("faqGhosttyQ")}</p>
<p className="text-muted">
{t.rich("faqGhosttyA", {
link: (chunks) => (
<a
href="https://github.com/ghostty-org/ghostty"
className={linkClass}
>
{chunks}
</a>
),
})}
</p>
</div>
<div>
<p className="font-medium mb-1">{t("faqPlatformQ")}</p>
<p className="text-muted">{t("faqPlatformA")}</p>
</div>
<div>
<p className="font-medium mb-1">{t("faqAgentsQ")}</p>
<p className="text-muted">{t("faqAgentsA")}</p>
</div>
<div>
<p className="font-medium mb-1">{t("faqNotificationsQ")}</p>
<p className="text-muted">
{t.rich("faqNotificationsA", {
cliLink: (chunks) => (
<a href="/docs/notifications" className={linkClass}>
{chunks}
</a>
),
hooksLink: (chunks) => (
<a href="/docs/notifications" className={linkClass}>
{chunks}
</a>
),
})}
</p>
</div>
<div>
<p className="font-medium mb-1">{t("faqShortcutsQ")}</p>
<p className="text-muted">
{t.rich("faqShortcutsA", {
configPath: (chunks) => (
<code className="text-xs bg-code-bg px-1.5 py-0.5 rounded">
{chunks}
</code>
),
link: (chunks) => (
<a href="/docs/keyboard-shortcuts" className={linkClass}>
{chunks}
</a>
),
})}
</p>
</div>
<div>
<p className="font-medium mb-1">{t("faqTmuxQ")}</p>
<p className="text-muted">{t("faqTmuxA")}</p>
</div>
<div>
<p className="font-medium mb-1">{t("faqFreeQ")}</p>
<p className="text-muted">
{t.rich("faqFreeA", {
link: (chunks) => (
<a
href="https://github.com/manaflow-ai/cmux"
className={linkClass}
>
{chunks}
</a>
),
})}
</p>
</div>
</div>
</section>
{/* Community */}
<section data-dev="community" className="mb-10">
<h2 className="text-xs font-medium text-muted tracking-tight mb-3">
{t("communitySection")}
</h2>
<ul
data-dev="community-ul"
className="text-[15px]"
style={{
lineHeight: 1.5,
display: "flex",
flexDirection: "column",
gap: 16,
}}
>
{testimonials.map((item) => {
const translation = getTestimonialTranslation(item, locale, tt);
return (
<li key={item.url}>
<span>
<a
href={item.url}
target="_blank"
rel="noopener noreferrer"
className="group"
>
<span className="text-muted group-hover:text-foreground transition-colors">
&quot;{item.text}&quot;
</span>
{translation && (
<span className="text-muted/60 text-xs italic">
{" "}
{translation}
</span>
)}
</a>{" "}
<a
href={item.url}
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-1 text-muted hover:text-foreground transition-colors"
>
{item.avatar && (
<img
src={item.avatar}
alt={item.name}
width={16}
height={16}
className="rounded-full inline-block"
/>
)}
{item.name}
{"subtitle" in item && item.subtitle
? `, ${item.subtitle}`
: ""}
</a>
</span>
</li>
);
})}
</ul>
</section>
{/* Bottom CTA */}
<div className="flex flex-wrap items-center justify-center gap-3 mt-12">
<DownloadButton location="bottom" />
<GitHubButton />
</div>
<div className="flex justify-center gap-4 mt-6">
<Link
href="/docs"
className="text-sm text-muted hover:text-foreground transition-colors underline underline-offset-2 decoration-border hover:decoration-foreground"
>
{tc("readTheDocs")}
</Link>
<Link
href="/docs/changelog"
className="text-sm text-muted hover:text-foreground transition-colors underline underline-offset-2 decoration-border hover:decoration-foreground"
>
{tc("viewChangelog")}
</Link>
</div>
</main>
</div>
);
}

View file

@ -1,145 +1,174 @@
export const testimonials = [
{
key: "mitchellh",
name: "Mitchell Hashimoto",
handle: "@mitchellh",
subtitle: "Creator of Ghostty and founder of HashiCorp",
avatar: "/avatars/mitchellh.jpg",
text: "Another day another libghostty-based project, this time a macOS terminal with vertical tabs, better organization/notifications, embedded/scriptable browser specifically targeted towards people who use a ton of terminal-based agentic workflows.",
lang: "en",
url: "https://x.com/mitchellh/status/2024913161238053296",
platform: "x" as const,
},
{
key: "schrockn",
name: "Nick Schrock",
handle: "@schrockn",
subtitle: "Creator of Dagster. GraphQL co-creator.",
avatar: "/avatars/schrockn.jpg",
text: "This is exactly the product I've been looking for. After two hours this am I've in love.",
lang: "en",
url: "https://x.com/schrockn/status/2025182278637207857",
platform: "x" as const,
},
{
key: "egrefen",
name: "Edward Grefenstette",
handle: "@egrefen",
subtitle: "Director of Research at Google DeepMind",
avatar: "/avatars/egrefen.jpg",
text: "I've been using this all weekend and it's amazing.",
lang: "en",
url: "https://x.com/egrefen/status/2026806171563184199",
platform: "x" as const,
},
{
key: "max4c",
name: "Max Forsey",
handle: "@max4c_",
avatar: "/avatars/max4c_.jpg",
text: "this has been my favorite tool for past two weeks",
lang: "en",
url: "https://x.com/max4c_/status/2027266664270889204",
platform: "x" as const,
},
{
key: "asaza",
name: "あさざ",
handle: "@asaza_0928",
avatar: "/avatars/asaza_0928.jpg",
text: "cmux 良さそうすぎてついにバイバイ VSCode するときなのかもしれない",
translation: "cmux looks so good it might finally be time to say goodbye to VSCode",
lang: "ja",
url: "https://x.com/asaza_0928/status/2026057269075698015",
platform: "x" as const,
},
{
key: "johnthedebs",
name: "johnthedebs",
handle: "johnthedebs",
avatar: null,
text: "Hey, this looks seriously awesome. Love the ideas here, specifically: the programmability, layered UI, browser w/ api. Looking forward to giving this a spin. Also want to add that I really appreciate Mitchell Hashimoto creating libghostty; it feels like an exciting time to be a terminal user.",
lang: "en",
url: "https://news.ycombinator.com/item?id=47083596",
platform: "hn" as const,
},
{
key: "joeriddles",
name: "Joe Riddle",
handle: "@joeriddles10",
avatar: "/avatars/joeriddles10.jpg",
text: "Vertical tabs in my terminal \u{1F924} I never thought of that before. I use and love Firefox vertical tabs.",
lang: "en",
url: "https://x.com/joeriddles10/status/2024914132416561465",
platform: "x" as const,
},
{
key: "dchu17",
name: "dchu17",
handle: "dchu17",
avatar: null,
text: "Gave this a run and it was pretty intuitive. Good work!",
lang: "en",
url: "https://news.ycombinator.com/item?id=47082577",
platform: "hn" as const,
},
{
key: "afruth",
name: "afruth",
handle: "u/afruth",
avatar: null,
text: "I like it, ran it in the past day on three parallel projects each with several worktrees. Having this paired with lazygit and yazi / nvim made me a bit more productive than usual without having to chase multiple ghostty / iTerm instances. Also feels more natural than tmux.",
lang: "en",
url: "https://www.reddit.com/r/ClaudeCode/comments/1r9g45u/comment/o6sxbr3/",
platform: "reddit" as const,
},
{
key: "northprint",
name: "Norihiro Narayama",
handle: "@northprint",
avatar: "/avatars/northprint.jpg",
text: "cmux良さそうなので入れてみたけれど、良い",
translation: "Tried cmux since it looked good — it's good",
lang: "ja",
url: "https://x.com/northprint/status/2025740286677434581",
platform: "x" as const,
},
{
key: "indykish",
name: "Kishore Neelamegam",
handle: "@indykish",
avatar: "/avatars/indykish.jpg",
text: "cmux is pretty good.",
lang: "en",
url: "https://x.com/indykish/status/2025318347970412673",
platform: "x" as const,
},
{
key: "kataring",
name: "かたりん",
handle: "@kataring",
avatar: "/avatars/kataring.jpg",
text: "cmux.dev に乗り換えた",
translation: "Switched to cmux.dev",
lang: "ja",
url: "https://x.com/kataring/status/2026189035056832718",
platform: "x" as const,
},
{
key: "scottw",
name: "Scott Watermasysk",
handle: "@scottw",
avatar: "/avatars/scottw.jpg",
text: "This has been such a useful find. I can't recommend it enough.",
lang: "en",
url: "https://x.com/scottw/status/2026806893067551084",
platform: "x" as const,
},
{
key: "johnblythe",
name: "John Blythe",
handle: "@johnblythe",
avatar: "/avatars/johnblythe.jpg",
text: "grabbed this over the weekend and loved it. been waiting for something like this.",
lang: "en",
url: "https://x.com/johnblythe/status/2026812731844637010",
platform: "x" as const,
},
{
key: "bchris91",
name: "Christopher",
handle: "@BChris91",
avatar: "/avatars/bchris91.jpg",
text: "This is exactly what I've wanted. Amazing job thank you!",
lang: "en",
url: "https://x.com/BChris91/status/2026821091637838273",
platform: "x" as const,
},
{
key: "connorelsea",
name: "Connor",
handle: "@connorelsea",
avatar: "/avatars/connorelsea.jpg",
text: "Been using this for a week and it's fantastic. Vert tab for each WIP task. Inside, claudes on one side and browser with PR and resources on the other, switch between tasks and stay organized. Mix that with skills to have Claude watch CI recursively, etc. feeling enlightened tbh",
lang: "en",
url: "https://x.com/connorelsea/status/2026867085750440390",
platform: "x" as const,
},
{
key: "tonkotsuboy",
name: "鹿野 壮 Takeshi Kano",
handle: "@tonkotsuboy_com",
avatar: "/avatars/tonkotsuboy_com.jpg",
text: "年初にWarpからGhosttyに乗り換えたけど、今はcmuxに乗り換えた\uD83D\uDCBB 垂直タブが便利で、Claude Codeのタスクの終了が通知されるのがありがたい。Ghosttyベースだから爆速動作はそのまま。ghosttyでやったブランチ表示や補完もそのまま使える",
translation:
"I switched from Warp to Ghostty at the start of the year, but now I've switched to cmux. The vertical tabs are convenient, and I appreciate getting notified when Claude Code tasks finish. It's Ghostty-based so the blazing fast performance carries over. Branch display and completions I set up in Ghostty still work too.",
lang: "ja",
url: "https://x.com/tonkotsuboy_com/status/2028458464801108212",
platform: "x" as const,
},
@ -211,10 +240,38 @@ function Initials({ name }: { name: string }) {
);
}
/**
* Returns the language family prefix for a locale (e.g., "zh" for "zh-CN").
*/
function langFamily(locale: string): string {
return locale.split("-")[0];
}
/**
* Get the translation to display for a testimonial in the given locale.
* Returns null if the testimonial is in the user's language.
*/
export function getTestimonialTranslation(
testimonial: Testimonial,
locale: string,
t: (key: string) => string
): string | null {
if (langFamily(locale) === langFamily(testimonial.lang)) {
return null;
}
try {
return t(testimonial.key);
} catch {
return null;
}
}
export function TestimonialCard({
testimonial,
translation,
}: {
testimonial: Testimonial;
translation?: string | null;
}) {
return (
<a
@ -253,9 +310,9 @@ export function TestimonialCard({
<p className="text-[15px] leading-relaxed text-muted group-hover:text-foreground transition-colors">
{testimonial.text}
</p>
{"translation" in testimonial && testimonial.translation && (
{translation && (
<p className="text-xs text-muted/60 mt-1.5 italic">
{testimonial.translation}
{translation}
</p>
)}
</a>

View file

@ -1,18 +1,23 @@
"use client";
import { useEffect, useState } from "react";
import { useTranslations } from "next-intl";
import { useDevValues } from "./components/spacing-control";
const phrases = [
"coding agents",
"multitasking",
"Claude Code",
"Codex",
"OpenCode",
"Gemini CLI",
];
function usePhrases() {
const t = useTranslations("home");
return [
t("typingCodingAgents"),
t("typingMultitasking"),
"Claude Code",
"Codex",
"OpenCode",
"Gemini CLI",
];
}
export function TypingTagline() {
const phrases = usePhrases();
const [phraseIndex, setPhraseIndex] = useState(0);
const [charIndex, setCharIndex] = useState(0);
const [deleting, setDeleting] = useState(false);

View file

@ -0,0 +1,43 @@
import { useTranslations, useLocale } from "next-intl";
import { getTranslations } from "next-intl/server";
import { SiteHeader } from "../components/site-header";
import { testimonials, TestimonialCard, getTestimonialTranslation } from "../testimonials";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "wallOfLove" });
return {
title: t("metaTitle"),
description: t("metaDescription"),
};
}
export default function WallOfLovePage() {
const t = useTranslations("wallOfLove");
const tt = useTranslations("testimonials");
const locale = useLocale();
return (
<div className="min-h-screen">
<SiteHeader section="wall of love" />
<main className="w-full max-w-6xl mx-auto px-6 py-10">
<h1 className="text-2xl font-semibold tracking-tight mb-2">
{t("title")}
</h1>
<p className="text-muted text-[15px] mb-8">
{t("description")}
</p>
<div className="columns-1 sm:columns-2 lg:columns-3 gap-4">
{testimonials.map((testimonial) => (
<TestimonialCard
key={testimonial.url}
testimonial={testimonial}
translation={getTestimonialTranslation(testimonial, locale, tt)}
/>
))}
</div>
</main>
</div>
);
}

View file

@ -1,82 +0,0 @@
import type { Metadata } from "next";
import Link from "next/link";
export const metadata: Metadata = {
title: "Cmd+Shift+U",
description:
"How Cmd+Shift+U navigates between finished agents across workspaces in cmux.",
keywords: [
"cmux",
"terminal",
"macOS",
"notifications",
"AI coding agents",
"keyboard shortcuts",
"developer tools",
"workflow",
],
openGraph: {
title: "Cmd+Shift+U",
description:
"How Cmd+Shift+U navigates between finished agents across workspaces in cmux.",
type: "article",
publishedTime: "2026-03-04T00:00:00Z",
url: "https://cmux.dev/blog/cmd-shift-u",
},
twitter: {
card: "summary",
title: "Cmd+Shift+U",
description:
"How Cmd+Shift+U navigates between finished agents across workspaces in cmux.",
},
alternates: {
canonical: "https://cmux.dev/blog/cmd-shift-u",
},
};
export default function CmdShiftUPage() {
return (
<>
<div className="mb-8">
<Link
href="/blog"
className="text-sm text-muted hover:text-foreground transition-colors"
>
&larr; Back to blog
</Link>
</div>
<h1>Cmd+Shift+U</h1>
<time dateTime="2026-03-04" className="text-sm text-muted">
March 4, 2026
</time>
<p className="mt-6">
My favorite cmux feature is <kbd>Cmd+Shift+U</kbd>. I have 17
workspaces open right now, each running an agent. I used to click
through tabs and the notification panel to figure out what completed.
Typing is faster.
</p>
<video
src="/blog/cmd-shift-u.mp4"
width={1824}
height={1080}
autoPlay
loop
muted
playsInline
className="my-6 rounded-lg w-full h-auto"
/>
<p>
<kbd>Cmd+Shift+U</kbd> jumps to the newest unread{" "}
<Link href="/docs/notifications">notification</Link>. In practice
that means the last agent that finished. It switches to the right
workspace, focuses the exact pane, flashes it so you see where to
look, and marks it read. If the notification came from another window,
that window comes forward.
</p>
</>
);
}

View file

@ -1,99 +0,0 @@
import type { Metadata } from "next";
import Link from "next/link";
export const metadata: Metadata = {
title: "Introducing cmux",
description:
"A native macOS terminal built on Ghostty, designed for running multiple AI coding agents side by side.",
keywords: [
"cmux",
"terminal",
"macOS",
"Ghostty",
"libghostty",
"AI coding agents",
"Claude Code",
"vertical tabs",
"split panes",
"socket API",
],
openGraph: {
title: "Introducing cmux",
description:
"A native macOS terminal built on Ghostty, designed for running multiple AI coding agents side by side.",
type: "article",
publishedTime: "2026-02-12T00:00:00Z",
url: "https://cmux.dev/blog/introducing-cmux",
},
twitter: {
card: "summary",
title: "Introducing cmux",
description:
"A native macOS terminal built on Ghostty, designed for running multiple AI coding agents side by side.",
},
alternates: {
canonical: "https://cmux.dev/blog/introducing-cmux",
},
};
export default function IntroducingCmuxPage() {
return (
<>
<div className="mb-8">
<Link
href="/blog"
className="text-sm text-muted hover:text-foreground transition-colors"
>
&larr; Back to blog
</Link>
</div>
<h1>Introducing cmux</h1>
<time dateTime="2026-02-12" className="text-sm text-muted">February 12, 2026</time>
<p className="mt-6">
cmux is a native macOS terminal application built on top of Ghostty,
designed from the ground up for developers who run multiple AI coding
agents simultaneously.
</p>
<h2>Why cmux?</h2>
<p>
Modern development workflows often involve running several agents at
once. Claude Code, Codex, and other tools each in their own
terminal. Keeping track of which ones need attention and switching
between them quickly is the problem cmux solves.
</p>
<h2>Key features</h2>
<ul>
<li>
<strong>Vertical tabs</strong> : see all your terminals at a
glance in a sidebar
</li>
<li>
<strong>Notification rings</strong> : tabs flash when an agent
needs your input
</li>
<li>
<strong>Split panes</strong> : horizontal and vertical splits
within each workspace
</li>
<li>
<strong>Socket API</strong> : programmatic control for creating
tabs and sending input
</li>
<li>
<strong>GPU-accelerated</strong> : powered by libghostty for
smooth rendering
</li>
</ul>
<h2>Get started</h2>
<p>
Install cmux via Homebrew or download the DMG from the{" "}
<Link href="/docs/getting-started">getting started guide</Link>.
</p>
</>
);
}

View file

@ -1,32 +0,0 @@
import type { Metadata } from "next";
import Link from "next/link";
import { blogPosts } from "../components/blog-posts";
export const metadata: Metadata = {
title: "Blog",
description: "News and updates from the cmux team",
};
export default function BlogPage() {
return (
<>
<h1>Blog</h1>
<div className="space-y-4 mt-6">
{blogPosts.map((post) => (
<article key={post.slug}>
<Link
href={`/blog/${post.slug}`}
className="block group"
>
<h2 className="text-lg font-medium group-hover:underline">
{post.title}
</h2>
<time className="text-sm text-muted">{post.date}</time>
<p className="mt-1 text-muted">{post.summary}</p>
</Link>
</article>
))}
</div>
</>
);
}

View file

@ -1,212 +0,0 @@
import type { Metadata } from "next";
import Image from "next/image";
import Link from "next/link";
import { Tweet } from "react-tweet";
import starHistory from "./star-history.png";
export const metadata: Metadata = {
title: "Launching cmux on Show HN",
description:
"cmux launched on Hacker News, hit #2, went viral in Japan, and people started building extensions on the CLI. Here's what happened.",
keywords: [
"cmux",
"Show HN",
"Hacker News",
"terminal",
"macOS",
"Ghostty",
"libghostty",
"AI coding agents",
"Claude Code",
"Codex",
"launch",
"vertical tabs",
"notification rings",
],
openGraph: {
title: "Launching cmux on Show HN",
description:
"cmux launched on Hacker News, hit #2, went viral in Japan, and people started building extensions on the CLI.",
type: "article",
publishedTime: "2026-02-21T00:00:00Z",
url: "https://cmux.dev/blog/show-hn-launch",
},
twitter: {
card: "summary",
title: "Launching cmux on Show HN",
description:
"cmux launched on Hacker News, hit #2, went viral in Japan, and people started building extensions on the CLI.",
},
alternates: {
canonical: "https://cmux.dev/blog/show-hn-launch",
},
};
export default function ShowHNLaunchPage() {
return (
<>
<div className="mb-8">
<Link
href="/blog"
className="text-sm text-muted hover:text-foreground transition-colors"
>
&larr; Back to blog
</Link>
</div>
<h1>Launching cmux on Show HN</h1>
<time dateTime="2026-02-21" className="text-sm text-muted">February 21, 2026</time>
<p className="mt-6">
We posted cmux on{" "}
<a href="https://news.ycombinator.com/item?id=47079718">Show HN</a>{" "}
on Feb 19:
</p>
<blockquote className="border-l-2 border-border pl-4 my-6 text-muted space-y-3 text-[15px]">
<p>
I run a lot of Claude Code and Codex sessions in parallel. I was using
Ghostty with a bunch of split panes, and relying on native macOS
notifications to know when an agent needed me. But Claude Code&apos;s
notification body is always just &quot;Claude is waiting for your
input&quot; with no context, and with enough tabs open, I couldn&apos;t
even read the titles anymore.
</p>
<p>
I tried a few coding orchestrators but most of them were Electron/Tauri
apps and the performance bugged me. I also just prefer the terminal
since GUI orchestrators lock you into their workflow. So I built cmux as
a native macOS app in Swift/AppKit. It uses libghostty for terminal
rendering and reads your existing Ghostty config for themes, fonts,
colors, and more.
</p>
<p>
The main additions are the sidebar and notification system. The sidebar
has vertical tabs that show git branch, working directory, listening
ports, and the latest notification text for each workspace. The
notification system picks up terminal sequences (OSC 9/99/777) and has a
CLI (cmux notify) you can wire into agent hooks for Claude Code,
OpenCode, etc. When an agent is waiting, its pane gets a blue ring and
the tab lights up in the sidebar, so I can tell which one needs me
across splits and tabs. Cmd+Shift+U jumps to the most recent unread.
</p>
<p>
The in-app browser has a scriptable API. Agents can snapshot the
accessibility tree, get element refs, click, fill forms, evaluate JS,
and read console logs. You can split a browser pane next to your
terminal and have Claude Code interact with your dev server directly.
</p>
<p>
Everything is scriptable through the CLI and socket API: create
workspaces/tabs, split panes, send keystrokes, open URLs in the browser.
</p>
</blockquote>
<p>
At peak it hit #2 on Hacker News. Mitchell Hashimoto shared it:
</p>
<Tweet id="2024913161238053296" />
<p>
My favorite comment from the{" "}
<a href="https://news.ycombinator.com/item?id=47079718">HN thread</a>:
</p>
<blockquote className="border-l-2 border-border pl-4 my-6 text-muted space-y-3 text-[15px]">
<p>
Hey, this looks seriously awesome. Love the ideas here, specifically:
the programmability (I haven&apos;t tried it yet, but had been
considering learning tmux partly for this), layered UI, browser w/
api. Looking forward to giving this a spin. Also want to add that I
really appreciate Mitchell Hashimoto creating libghostty; it feels
like an exciting time to be a terminal user.
</p>
<p>Some feedback (since you were asking for it elsewhere in the thread!):</p>
<ul className="list-disc pl-5 space-y-1">
<li>
It&apos;s not obvious/easy to open browser dev tools (cmd-alt-i
didn&apos;t work), and when I did find it (right click page
inspect element) none of the controls were visible but I could see
stuff happening when I moved my mouse over the panel
</li>
<li>
Would be cool to borrow more of ghostty&apos;s behavior:
<ul className="list-disc pl-5 mt-1 space-y-1">
<li>
hotkey overrides I have some things explicitly unmapped /
remapped in my ghostty config that conflict with some cmux
keybindings and weren&apos;t respected
</li>
<li>
command palette (cmd-shift-p) for less-often-used actions +
discoverability
</li>
<li>
cmd-z to &quot;zoom in&quot; to a pane is enormously useful imo
</li>
</ul>
</li>
</ul>
<p className="text-xs">
{" "}
<a href="https://news.ycombinator.com/item?id=47083596" className="hover:text-foreground transition-colors">
johnthedebs
</a>
</p>
</blockquote>
<p>
Surprisingly, cmux went viral in Japan:
</p>
<Tweet id="2025129675262251026" />
<p>
Translation: &quot;This looks good. A Ghostty-based terminal app
designed so you don&apos;t get lost running multiple CLIs like Claude
Code in parallel. The waiting-for-input panel gets a blue frame, and
it has its own notification system.&quot;
</p>
<p>
And semi-viral in China:
</p>
<Tweet id="2024867449947275444" />
<p>
Another exciting thing was seeing people build on top of the cmux
CLI. sasha built a pi-cmux extension that shows model info, token
usage, and agent state in the sidebar:
</p>
<Tweet id="2024978414822916358" />
<p>
Everything in cmux is scriptable through the CLI: creating workspaces,
sending keystrokes, controlling the browser, reading notifications.
Part of the cmux philosophy is being programmable and composable, so
people can customize the way they work with coding agents. The
state of the art for coding agents is changing fast, and you don&apos;t
want to be locked into an inflexible GUI orchestrator that can&apos;t
keep up.
</p>
<p>
If you&apos;re running multiple coding agents,{" "}
<a href="https://github.com/manaflow-ai/cmux">give cmux a try</a>.
</p>
<div className="my-6">
<Image
src={starHistory}
alt="cmux GitHub star history showing growth from near 0 to 900+ stars after the Show HN launch"
placeholder="blur"
className="w-full rounded-xl"
/>
</div>
</>
);
}

View file

@ -1,80 +0,0 @@
import type { Metadata } from "next";
import Link from "next/link";
export const metadata: Metadata = {
title: "The Zen of cmux",
description:
"cmux is a primitive, not a solution. It gives you composable pieces and your workflow is up to you.",
keywords: [
"cmux",
"terminal",
"macOS",
"CLI",
"composable",
"developer tools",
"AI coding agents",
"workflow",
],
openGraph: {
title: "The Zen of cmux",
description:
"cmux is a primitive, not a solution. It gives you composable pieces and your workflow is up to you.",
type: "article",
publishedTime: "2026-02-27T00:00:00Z",
url: "https://cmux.dev/blog/zen-of-cmux",
},
twitter: {
card: "summary",
title: "The Zen of cmux",
description:
"cmux is a primitive, not a solution. It gives you composable pieces and your workflow is up to you.",
},
alternates: {
canonical: "https://cmux.dev/blog/zen-of-cmux",
},
};
export default function ZenOfCmuxPage() {
return (
<>
<div className="mb-8">
<Link
href="/blog"
className="text-sm text-muted hover:text-foreground transition-colors"
>
&larr; Back to blog
</Link>
</div>
<h1>The Zen of cmux</h1>
<time dateTime="2026-02-27" className="text-sm text-muted">
February 27, 2026
</time>
<p className="mt-6">
cmux is not prescriptive about how developers hold their tools.
It&apos;s a terminal and browser with a CLI, and the rest is up to you.
</p>
<p>
cmux is a primitive, not a solution. It gives you a terminal, a browser,
notifications, workspaces, splits, tabs, and a CLI to control all of
it. cmux doesn&apos;t force you into an opinionated
way to use coding agents. What you build with the primitives is yours.
</p>
<p>
The best developers have always built their own tools. Nobody has figured
out the best way to work with agents yet, and the teams building closed
products definitely haven&apos;t either. The developers closest to their
own codebases will figure it out first.
</p>
<p>
Give a million developers composable primitives and they&apos;ll
collectively find the most efficient workflows faster than any product
team could design top-down.
</p>
</>
);
}

View file

@ -1,10 +0,0 @@
export const navItems = [
{ title: "Getting Started", href: "/docs/getting-started" },
{ title: "Concepts", href: "/docs/concepts" },
{ title: "Configuration", href: "/docs/configuration" },
{ title: "Keyboard Shortcuts", href: "/docs/keyboard-shortcuts" },
{ title: "API Reference", href: "/docs/api" },
{ title: "Browser Automation", href: "/docs/browser-automation" },
{ title: "Notifications", href: "/docs/notifications" },
{ title: "Changelog", href: "/docs/changelog" },
];

View file

@ -1,212 +0,0 @@
import type { Metadata } from "next";
import { CodeBlock } from "../../components/code-block";
export const metadata: Metadata = {
title: "Concepts",
description:
"How cmux organizes terminals: windows, workspaces, panes, and surfaces. The hierarchy behind the sidebar, splits, and socket API.",
};
export default function ConceptsPage() {
return (
<>
<h1>Concepts</h1>
<p>
cmux organizes your terminals in a four-level hierarchy. Understanding
these levels helps when using the socket API, CLI, and keyboard
shortcuts.
</p>
<h2>Hierarchy</h2>
<CodeBlock lang="text">{`Window
Workspace (sidebar entry)
Pane (split region)
Surface (tab within pane)
Panel (terminal or browser content)`}</CodeBlock>
<h3>Window</h3>
<p>
A macOS window. Open multiple windows with <code>N</code>. Each
window has its own sidebar with independent workspaces.
</p>
<h3>Workspace</h3>
<p>
A sidebar entry. Each workspace contains one or more split panes.
Workspaces are what you see listed in the left sidebar.
</p>
<p>
In the UI and keyboard shortcuts, workspaces are often called
&ldquo;tabs&rdquo; since they behave like tabs in the sidebar. The
socket API and environment variables use the term
&ldquo;workspace&rdquo;.
</p>
<table>
<thead>
<tr>
<th>Context</th>
<th>Term used</th>
</tr>
</thead>
<tbody>
<tr>
<td>Sidebar UI</td>
<td>Tab</td>
</tr>
<tr>
<td>Keyboard shortcuts</td>
<td>Workspace or tab</td>
</tr>
<tr>
<td>Socket API</td>
<td>
<code>workspace</code>
</td>
</tr>
<tr>
<td>Environment variable</td>
<td>
<code>CMUX_WORKSPACE_ID</code>
</td>
</tr>
</tbody>
</table>
<p>
<strong>Shortcuts:</strong> <code>N</code> (new),{" "}
<code>1</code><code>9</code> (jump), <code>W</code> (close),{" "}
<code>[</code> / <code>]</code> (prev/next)
</p>
<h3>Pane</h3>
<p>
A split region within a workspace. Created by splitting with{" "}
<code>D</code> (right) or <code>D</code> (down). Navigate between
panes with <code></code> + arrow keys.
</p>
<p>Each pane can hold multiple surfaces (tabs within the pane).</p>
<h3>Surface</h3>
<p>
A tab within a pane. Each pane has its own tab bar and can hold multiple
surfaces. Created with <code>T</code>, navigated with{" "}
<code>[</code> / <code>]</code> or <code>1</code>
<code>9</code>.
</p>
<p>
Surfaces are the individual terminal or browser sessions you interact
with. Each surface has its own <code>CMUX_SURFACE_ID</code> environment
variable.
</p>
<h3>Panel</h3>
<p>The content inside a surface. Currently two types:</p>
<ul>
<li>
<strong>Terminal</strong> a Ghostty terminal session
</li>
<li>
<strong>Browser</strong> an embedded web view
</li>
</ul>
<p>
Panel is mostly an internal concept. In the socket API and CLI, you
interact with surfaces rather than panels directly.
</p>
<h2>Visual example</h2>
<CodeBlock variant="ascii">{`┌──────────────────────────────────────────────────────┐
Sidebar Workspace "dev"
> dev Pane 1 Pane 2
server [S1] [S2] [S1]
logs
Terminal Terminal
`}</CodeBlock>
<p>In this example:</p>
<ul>
<li>
The <strong>window</strong> contains a sidebar with three workspaces
(dev, server, logs)
</li>
<li>
<strong>Workspace &ldquo;dev&rdquo;</strong> is selected, showing two{" "}
<strong>panes</strong> side by side
</li>
<li>
<strong>Pane 1</strong> has two <strong>surfaces</strong> ([S1] and
[S2] in the tab bar), with S1 active
</li>
<li>
<strong>Pane 2</strong> has one surface
</li>
<li>
Each surface contains a <strong>panel</strong> (a terminal in this
case)
</li>
</ul>
<h2>Summary</h2>
<table>
<thead>
<tr>
<th>Level</th>
<th>What it is</th>
<th>Created by</th>
<th>Identified by</th>
</tr>
</thead>
<tbody>
<tr>
<td>Window</td>
<td>macOS window</td>
<td>
<code>N</code>
</td>
<td></td>
</tr>
<tr>
<td>Workspace</td>
<td>Sidebar entry</td>
<td>
<code>N</code>
</td>
<td>
<code>CMUX_WORKSPACE_ID</code>
</td>
</tr>
<tr>
<td>Pane</td>
<td>Split region</td>
<td>
<code>D</code> / <code>D</code>
</td>
<td>Pane ID (socket API)</td>
</tr>
<tr>
<td>Surface</td>
<td>Tab within pane</td>
<td>
<code>T</code>
</td>
<td>
<code>CMUX_SURFACE_ID</code>
</td>
</tr>
<tr>
<td>Panel</td>
<td>Terminal or browser</td>
<td>Automatic</td>
<td>Panel ID (internal)</td>
</tr>
</tbody>
</table>
</>
);
}

View file

@ -1,152 +0,0 @@
import type { Metadata } from "next";
import { CodeBlock } from "../../components/code-block";
import { Callout } from "../../components/callout";
export const metadata: Metadata = {
title: "Configuration",
description:
"Configure cmux via Ghostty config files. Font, theme, colors, split pane styling, scrollback, and app settings for automation mode.",
};
export default function ConfigurationPage() {
return (
<>
<h1>Configuration</h1>
<p>
cmux reads configuration from Ghostty config files, giving you familiar
options if you&apos;re coming from Ghostty.
</p>
<h2>Config file locations</h2>
<p>cmux looks for configuration in these locations (in order):</p>
<ol>
<li>
<code>~/.config/ghostty/config</code>
</li>
<li>
<code>~/Library/Application Support/com.mitchellh.ghostty/config</code>
</li>
</ol>
<p>Create the config file if it doesn&apos;t exist:</p>
<CodeBlock lang="bash">{`mkdir -p ~/.config/ghostty
touch ~/.config/ghostty/config`}</CodeBlock>
<h2>Appearance</h2>
<h3>Font</h3>
<CodeBlock title="~/.config/ghostty/config" lang="ini">{`font-family = JetBrains Mono
font-size = 14`}</CodeBlock>
<h3>Colors</h3>
<CodeBlock title="~/.config/ghostty/config" lang="ini">{`# Theme (or use individual colors below)
theme = Dracula
# Custom colors
background = #1e1e2e
foreground = #cdd6f4
cursor-color = #f5e0dc
cursor-text = #1e1e2e
selection-background = #585b70
selection-foreground = #cdd6f4`}</CodeBlock>
<h3>Split panes</h3>
<CodeBlock title="~/.config/ghostty/config" lang="ini">{`# Opacity for unfocused splits (0.0 to 1.0)
unfocused-split-opacity = 0.7
# Fill color for unfocused splits
unfocused-split-fill = #1e1e2e
# Divider color between splits
split-divider-color = #45475a`}</CodeBlock>
<h2>Behavior</h2>
<h3>Scrollback</h3>
<CodeBlock title="~/.config/ghostty/config" lang="ini">{`# Number of lines to keep in scrollback buffer
scrollback-limit = 10000`}</CodeBlock>
<h3>Working directory</h3>
<CodeBlock title="~/.config/ghostty/config" lang="ini">{`# Default directory for new terminals
working-directory = ~/Projects`}</CodeBlock>
<h2>App settings</h2>
<p>
In-app settings are available via <strong>cmux Settings</strong> (
<code>,</code>):
</p>
<h3>Theme mode</h3>
<ul>
<li>
<strong>System</strong> follow macOS appearance
</li>
<li>
<strong>Light</strong> always light mode
</li>
<li>
<strong>Dark</strong> always dark mode
</li>
</ul>
<h3>Automation mode</h3>
<p>Control socket access level:</p>
<ul>
<li>
<strong>Off</strong> no socket control (most secure)
</li>
<li>
<strong>cmux processes only</strong> only allow processes started
inside cmux terminals to connect
</li>
<li>
<strong>allowAll</strong> allow any local process to connect (
<code>CMUX_SOCKET_MODE=allowAll</code>, env override only)
</li>
</ul>
<Callout type="warn">
On shared machines, consider using &ldquo;Off&rdquo; or
&ldquo;cmux processes only&rdquo; mode.
</Callout>
<h3>Browser link behavior</h3>
<p>
In <strong>Settings Browser</strong>, cmux exposes two host lists with
different purposes:
</p>
<ul>
<li>
<strong>Hosts to Open in Embedded Browser</strong> applies to links
clicked from terminal output. Hosts in this list open in cmux; other
hosts open in your default browser. Supports one host or wildcard per
line (for example: <code>example.com</code>,{" "}
<code>*.internal.example</code>).
</li>
<li>
<strong>HTTP Hosts Allowed in Embedded Browser</strong> applies only
to HTTP (non-HTTPS) URLs. Hosts in this list can open in cmux without
a warning prompt. Defaults include <code>localhost</code>,{" "}
<code>127.0.0.1</code>, <code>::1</code>, <code>0.0.0.0</code>, and{" "}
<code>*.localtest.me</code>.
</li>
</ul>
<h2>Example config</h2>
<CodeBlock title="~/.config/ghostty/config" lang="ini">{`# Font
font-family = SF Mono
font-size = 13
# Colors
theme = One Dark
# Scrollback
scrollback-limit = 50000
# Splits
unfocused-split-opacity = 0.85
split-divider-color = #3e4451
# Working directory
working-directory = ~/code`}</CodeBlock>
</>
);
}

View file

@ -1,92 +0,0 @@
import type { Metadata } from "next";
import { CodeBlock } from "../../components/code-block";
import { Callout } from "../../components/callout";
import { DownloadButton } from "../../components/download-button";
export const metadata: Metadata = {
title: "Getting Started",
description:
"Install cmux, the native macOS terminal for AI coding agents. Homebrew, DMG download, CLI setup, and auto-updates via Sparkle.",
};
export default function GettingStartedPage() {
return (
<>
<h1>Getting Started</h1>
<p>
cmux is a lightweight, native macOS terminal built on Ghostty for
managing multiple AI coding agents. It features vertical tabs, a
notification panel, and a socket-based control API.
</p>
<h2>Install</h2>
<h3>DMG (recommended)</h3>
<div className="my-4">
<DownloadButton />
</div>
<p>
Open the <code>.dmg</code> and drag cmux to your Applications folder.
cmux auto-updates via Sparkle, so you only need to download once.
</p>
<h3>Homebrew</h3>
<CodeBlock lang="bash">{`brew tap manaflow-ai/cmux
brew install --cask cmux`}</CodeBlock>
<p>To update later:</p>
<CodeBlock lang="bash">{`brew upgrade --cask cmux`}</CodeBlock>
<Callout>
On first launch, macOS may ask you to confirm opening an app from an
identified developer. Click <strong>Open</strong> to proceed.
</Callout>
<h2>Verify installation</h2>
<p>Open cmux and you should see:</p>
<ul>
<li>A terminal window with a vertical tab sidebar on the left</li>
<li>One initial workspace already open</li>
<li>The Ghostty-powered terminal ready for input</li>
</ul>
<h2>CLI setup</h2>
<p>
cmux includes a command-line tool for automation. Inside cmux terminals
it works automatically. To use the CLI from outside cmux, create a
symlink:
</p>
<CodeBlock lang="bash">{`sudo ln -sf "/Applications/cmux.app/Contents/Resources/bin/cmux" /usr/local/bin/cmux`}</CodeBlock>
<p>Then you can run commands like:</p>
<CodeBlock lang="bash">{`cmux list-workspaces
cmux notify --title "Build Complete" --body "Your build finished"`}</CodeBlock>
<h2>Auto-updates</h2>
<p>
cmux checks for updates automatically via Sparkle. When an update is
available you&apos;ll see an update pill in the titlebar. You can also
check manually via <strong>cmux Check for Updates</strong> in the menu
bar.
</p>
<h2>Session restore (current behavior)</h2>
<p>After relaunch, cmux restores layout and metadata only:</p>
<ul>
<li>Window, workspace, and pane layout</li>
<li>Working directories</li>
<li>Terminal scrollback (best effort)</li>
<li>Browser URL and navigation history</li>
</ul>
<Callout>
cmux does not restore live process state yet. Active terminal app
sessions such as Claude Code, tmux, and vim are not resumed after app
restart.
</Callout>
<h2>Requirements</h2>
<ul>
<li>macOS 14.0 or later</li>
<li>Apple Silicon or Intel Mac</li>
</ul>
</>
);
}

View file

@ -1,20 +0,0 @@
import type { Metadata } from "next";
import { KeyboardShortcuts } from "../../keyboard-shortcuts";
export const metadata: Metadata = {
title: "Keyboard Shortcuts",
description:
"All cmux keyboard shortcuts for workspaces, surfaces, split panes, browser, notifications, find, and window management on macOS.",
};
export default function KeyboardShortcutsPage() {
return (
<>
<h1>Keyboard Shortcuts</h1>
<p>
All keyboard shortcuts available in cmux, grouped by category.
</p>
<KeyboardShortcuts />
</>
);
}

View file

@ -1,30 +0,0 @@
import type { Metadata } from "next";
import { DocsNav } from "./docs-nav";
import { SiteHeader } from "../components/site-header";
export const metadata: Metadata = {
title: {
template: "%s — cmux docs",
default: "cmux docs",
},
openGraph: {
siteName: "cmux",
type: "article",
},
alternates: {
canonical: "./",
},
};
export default function DocsLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<div className="min-h-screen">
<SiteHeader section="docs" />
<DocsNav>{children}</DocsNav>
</div>
);
}

View file

@ -1,5 +0,0 @@
import { redirect } from "next/navigation";
export default function DocsPage() {
redirect("/docs/getting-started");
}

View file

@ -1,365 +0,0 @@
"use client";
import { useMemo, useState } from "react";
type Shortcut = {
id: string;
combos: string[][];
description: string;
note?: string;
};
type ShortcutCategory = {
id: string;
title: string;
blurb?: string;
shortcuts: Shortcut[];
};
const CATEGORIES: ShortcutCategory[] = [
{
id: "workspaces",
title: "Workspaces",
blurb: "Workspaces live in the sidebar. Each workspace has its own set of panes and surfaces.",
shortcuts: [
{ id: "ws-new", combos: [["⌘", "N"]], description: "New workspace" },
{
id: "ws-jump-1-8",
combos: [["⌘", "18"]],
description: "Jump to workspace 18",
},
{
id: "ws-jump-last",
combos: [["⌘", "9"]],
description: "Jump to last workspace",
},
{
id: "ws-close",
combos: [["⌘", "⇧", "W"]],
description: "Close workspace",
},
{
id: "ws-rename",
combos: [["⌘", "⇧", "R"]],
description: "Rename workspace",
},
],
},
{
id: "surfaces",
title: "Surfaces",
blurb: "Surfaces are tabs inside a pane.",
shortcuts: [
{ id: "sf-new", combos: [["⌘", "T"]], description: "New surface" },
{
id: "sf-prev-1",
combos: [["⌘", "⇧", "["]],
description: "Previous surface",
},
{
id: "sf-prev-2",
combos: [["⌃", "⇧", "Tab"]],
description: "Previous surface",
},
{
id: "sf-jump-1-8",
combos: [["⌃", "18"]],
description: "Jump to surface 18",
},
{
id: "sf-jump-last",
combos: [["⌃", "9"]],
description: "Jump to last surface",
},
{ id: "sf-close", combos: [["⌘", "W"]], description: "Close surface" },
],
},
{
id: "split-panes",
title: "Split Panes",
shortcuts: [
{ id: "sp-right", combos: [["⌘", "D"]], description: "Split right" },
{ id: "sp-down", combos: [["⌘", "⇧", "D"]], description: "Split down" },
{
id: "sp-focus",
combos: [["⌥", "⌘", "←/→/↑/↓"]],
description: "Focus pane directionally",
},
{
id: "sp-browser-right",
combos: [["⌥", "⌘", "D"]],
description: "Split browser right",
},
{
id: "sp-browser-down",
combos: [["⌥", "⌘", "⇧", "D"]],
description: "Split browser down",
},
],
},
{
id: "browser",
title: "Browser",
shortcuts: [
{
id: "br-open",
combos: [["⌘", "⇧", "L"]],
description: "Open browser surface",
},
{ id: "br-addr", combos: [["⌘", "L"]], description: "Focus address bar" },
{ id: "br-forward", combos: [["⌘", "]"]], description: "Forward" },
{ id: "br-reload", combos: [["⌘", "R"]], description: "Reload page" },
{
id: "br-devtools",
combos: [["⌥", "⌘", "I"]],
description: "Open Developer Tools",
},
],
},
{
id: "notifications",
title: "Notifications",
shortcuts: [
{
id: "nt-panel",
combos: [["⌘", "⇧", "I"]],
description: "Show notifications panel",
},
{
id: "nt-latest",
combos: [["⌘", "⇧", "U"]],
description: "Jump to latest unread",
},
{
id: "nt-flash",
combos: [["⌘", "⇧", "L"]],
description: "Trigger flash",
},
],
},
{
id: "find",
title: "Find",
shortcuts: [
{ id: "fd-find", combos: [["⌘", "F"]], description: "Find" },
{
id: "fd-next-prev",
combos: [
["⌘", "G"],
["⌘", "⇧", "G"],
],
description: "Find next / previous",
},
{
id: "fd-hide",
combos: [["⌘", "⇧", "F"]],
description: "Hide find bar",
},
{
id: "fd-selection",
combos: [["⌘", "E"]],
description: "Use selection for find",
},
],
},
{
id: "terminal",
title: "Terminal",
shortcuts: [
{
id: "tm-clear",
combos: [["⌘", "K"]],
description: "Clear scrollback",
},
{
id: "tm-copy",
combos: [["⌘", "C"]],
description: "Copy (with selection)",
},
{ id: "tm-paste", combos: [["⌘", "V"]], description: "Paste" },
{
id: "tm-font",
combos: [
["⌘", "+"],
["⌘", "-"],
],
description: "Increase / decrease font size",
},
{ id: "tm-reset", combos: [["⌘", "0"]], description: "Reset font size" },
],
},
{
id: "window",
title: "Window",
shortcuts: [
{ id: "wn-new", combos: [["⌘", "⇧", "N"]], description: "New window" },
{ id: "wn-settings", combos: [["⌘", ","]], description: "Settings" },
{
id: "wn-reload",
combos: [["⌘", "⇧", "R"]],
description: "Reload configuration",
},
{ id: "wn-quit", combos: [["⌘", "Q"]], description: "Quit" },
],
},
];
function normalize(s: string) {
return s.toLowerCase().replace(/\s+/g, " ").trim();
}
function comboToText(combo: string[]) {
return combo.join(" ");
}
function shortcutSearchText(category: ShortcutCategory, s: Shortcut) {
const combos = s.combos.map(comboToText).join(" ");
return normalize(`${category.title} ${combos} ${s.description} ${s.note ?? ""}`);
}
function KeyCombo({ combo }: { combo: string[] }) {
return (
<span className="inline-flex items-center">
{combo.map((k, idx) => (
<span key={`${k}-${idx}`} className="inline-flex items-center">
<kbd>{k}</kbd>
{idx < combo.length - 1 && (
<span className="text-muted/30 text-[10px] mx-[3px] select-none font-mono">
+
</span>
)}
</span>
))}
</span>
);
}
function ShortcutRow({ shortcut }: { shortcut: Shortcut }) {
return (
<div className="flex items-center justify-between gap-4 py-[11px] px-4 hover:bg-foreground/[0.025] transition-colors">
<div className="min-w-0">
<span className="text-[14px] text-foreground/90">
{shortcut.description}
</span>
{shortcut.note && (
<span className="text-[12px] text-muted/50 ml-2">
{shortcut.note}
</span>
)}
</div>
<div className="flex items-center gap-3 shrink-0">
{shortcut.combos.map((combo, idx) => (
<span
key={`${shortcut.id}-combo-${idx}`}
className="inline-flex items-center"
>
{idx > 0 && (
<span className="text-muted/30 text-[11px] select-none mr-3 font-mono">
/
</span>
)}
<KeyCombo combo={combo} />
</span>
))}
</div>
</div>
);
}
export function KeyboardShortcuts() {
const [query, setQuery] = useState("");
const filtered = useMemo(() => {
const q = normalize(query);
if (!q) return CATEGORIES;
return CATEGORIES.map((cat) => ({
...cat,
shortcuts: cat.shortcuts.filter((s) =>
shortcutSearchText(cat, s).includes(q),
),
})).filter((cat) => cat.shortcuts.length > 0);
}, [query]);
return (
<div className="mt-2 mb-12">
{/* Search */}
<div className="relative mb-8">
<div className="pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-muted/40">
<svg
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
>
<circle cx="11" cy="11" r="8" />
<path d="M21 21l-4.3-4.3" />
</svg>
</div>
<input
value={query}
onChange={(e) => setQuery(e.target.value)}
placeholder="Search shortcuts..."
className="w-full pl-9 pr-3 py-1.5 rounded-lg border border-border bg-transparent text-[13px] placeholder:text-muted/40 focus:outline-none focus:border-foreground/20 transition-colors"
aria-label="Search keyboard shortcuts"
/>
</div>
{/* Category jump links */}
{!query && (
<nav className="flex flex-wrap items-center gap-y-2 mb-10">
{CATEGORIES.map((cat, idx) => (
<span key={cat.id} className="inline-flex items-center">
<a
href={`#${cat.id}`}
className="text-[13px] text-muted hover:text-foreground transition-colors"
>
{cat.title}
</a>
{idx < CATEGORIES.length - 1 && (
<span className="text-border mx-2.5 text-[10px] select-none">
·
</span>
)}
</span>
))}
</nav>
)}
{/* Content */}
{filtered.length === 0 ? (
<div className="py-16 text-center">
<p className="text-[14px] text-muted/70">No shortcuts found</p>
<p className="text-[13px] text-muted/40 mt-1.5">
Try a different search term
</p>
</div>
) : (
<div className="space-y-10">
{filtered.map((cat) => (
<section key={cat.id} id={cat.id} className="scroll-mt-20">
<div className="mb-3">
<div className="text-[13px] font-medium text-muted/60">
{cat.title}
</div>
{cat.blurb && (
<p className="text-[13px] text-muted/50 mt-1">{cat.blurb}</p>
)}
</div>
<div className="rounded-xl border border-border overflow-hidden">
<div className="divide-y divide-border/60">
{cat.shortcuts.map((s) => (
<ShortcutRow key={s.id} shortcut={s} />
))}
</div>
</div>
</section>
))}
</div>
)}
</div>
);
}

View file

@ -1,100 +1,10 @@
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import { Providers } from "./providers";
import { DevPanel } from "./components/spacing-control";
import { SiteFooter } from "./components/site-footer";
import "./globals.css";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "cmux — The terminal built for multitasking",
description:
"Native macOS terminal built on Ghostty. Works with Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, and any CLI tool. Vertical tabs, notification rings, split panes, and a socket API.",
keywords: [
"terminal",
"macOS",
"coding agents",
"Claude Code",
"Codex",
"OpenCode",
"Gemini CLI",
"Kiro",
"Aider",
"Ghostty",
"AI",
"terminal for AI agents",
],
openGraph: {
title: "cmux — The terminal built for multitasking",
description:
"Native macOS terminal for AI coding agents. Works with Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, and any CLI tool.",
url: "https://cmux.dev",
siteName: "cmux",
type: "website",
},
twitter: {
card: "summary",
title: "cmux — The terminal built for multitasking",
description:
"Native macOS terminal for AI coding agents. Works with Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, and any CLI tool.",
},
metadataBase: new URL("https://cmux.dev"),
};
// Root layout: minimal pass-through. The actual layout with <html>/<body> is
// in app/[locale]/layout.tsx, which sets lang, dir, and wraps with i18n provider.
export default function RootLayout({
children,
}: Readonly<{
}: {
children: React.ReactNode;
}>) {
const jsonLd = {
"@context": "https://schema.org",
"@type": "SoftwareApplication",
name: "cmux",
operatingSystem: "macOS",
applicationCategory: "DeveloperApplication",
url: "https://cmux.dev",
downloadUrl:
"https://github.com/manaflow-ai/cmux/releases/latest/download/cmux-macos.dmg",
description:
"Native macOS terminal built on Ghostty. Works with Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, and any CLI tool. Vertical tabs, notification rings, split panes, and a socket API.",
keywords:
"terminal, macOS, Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, AI coding agents, Ghostty",
offers: { "@type": "Offer", price: "0", priceCurrency: "USD" },
};
return (
<html lang="en" suppressHydrationWarning>
<head>
<meta name="theme-color" content="#0a0a0a" />
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
<script
dangerouslySetInnerHTML={{
__html: `(function(){try{var t=localStorage.getItem("theme");var light=t==="light"||(t==="system"&&window.matchMedia("(prefers-color-scheme:light)").matches);if(!light)document.documentElement.classList.add("dark");var m=document.querySelector('meta[name="theme-color"]');if(m)m.content=light?"#fafafa":"#0a0a0a"}catch(e){}})()`,
}}
/>
</head>
<body
className={`${geistSans.variable} ${geistMono.variable} font-sans antialiased`}
>
<Providers>
{children}
<SiteFooter />
<DevPanel />
</Providers>
</body>
</html>
);
}) {
return children;
}

View file

@ -1,281 +0,0 @@
import { FadeImage } from "./components/fade-image";
import Balancer from "react-wrap-balancer";
import landingImage from "./assets/landing-image.png";
import { TypingTagline } from "./typing";
import { DownloadButton } from "./components/download-button";
import { GitHubButton } from "./components/github-button";
import { SiteHeader } from "./components/site-header";
import { testimonials } from "./testimonials";
export default function Home() {
return (
<div className="min-h-screen">
<SiteHeader hideLogo />
<main className="w-full max-w-2xl mx-auto px-6 py-16 sm:py-24">
{/* Header */}
<div className="flex items-center gap-4 mb-10" data-dev="header">
<img
src="/logo.png"
alt="cmux icon"
width={48}
height={48}
className="rounded-xl"
/>
<h1 className="text-2xl font-semibold tracking-tight">cmux</h1>
</div>
{/* Tagline */}
<p className="text-lg leading-relaxed mb-3 text-foreground">
The terminal built for <TypingTagline />
</p>
<p className="text-base text-muted" data-dev="subtitle" style={{ lineHeight: 1.5 }}>
<Balancer>
Native macOS app built on Ghostty. Vertical tabs, notification rings
when agents need attention, split panes, and a socket API for
automation.
</Balancer>
</p>
{/* Download */}
<div className="flex flex-wrap items-center gap-3" data-dev="download" style={{ marginTop: 21, marginBottom: 16 }}>
<DownloadButton location="hero" />
<GitHubButton />
</div>
{/* Features */}
<section data-dev="features" style={{ paddingTop: 12, paddingBottom: 15 }}>
<h2 className="text-xs font-medium text-muted tracking-tight mb-3">
Features
</h2>
<ul className="space-y-3 text-[15px]" data-dev="features-ul" style={{ lineHeight: 1.275 }}>
<li className="flex gap-3">
<span className="text-muted shrink-0">-</span>
<span>
<strong className="font-medium">Vertical tabs</strong>
<span className="text-muted">
: sidebar shows git branch, working directory, ports, and notification text
</span>
</span>
</li>
<li className="flex gap-3">
<span className="text-muted shrink-0">-</span>
<span>
<strong className="font-medium">Notification rings</strong>
<span className="text-muted">
: panes light up when agents need attention
</span>
</span>
</li>
<li className="flex gap-3">
<span className="text-muted shrink-0">-</span>
<span>
<strong className="font-medium">In-app browser</strong>
<span className="text-muted">
: split a browser alongside your terminal with a scriptable API
</span>
</span>
</li>
<li className="flex gap-3">
<span className="text-muted shrink-0">-</span>
<span>
<strong className="font-medium">Split panes</strong>
<span className="text-muted">
: horizontal and vertical splits within each tab
</span>
</span>
</li>
<li className="flex gap-3">
<span className="text-muted shrink-0">-</span>
<span>
<strong className="font-medium">Scriptable</strong>
<span className="text-muted">
: CLI and socket API for automation and scripting
</span>
</span>
</li>
<li className="flex gap-3">
<span className="text-muted shrink-0">-</span>
<span>
<strong className="font-medium">GPU-accelerated</strong>
<span className="text-muted">
: powered by libghostty for smooth rendering
</span>
</span>
</li>
<li className="flex gap-3">
<span className="text-muted shrink-0">-</span>
<span>
<strong className="font-medium">Lightweight</strong>
<span className="text-muted">
: native Swift + AppKit, no Electron
</span>
</span>
</li>
<li className="flex gap-3">
<span className="text-muted shrink-0">-</span>
<span>
<strong className="font-medium">Keyboard shortcuts</strong>
<span className="text-muted">
: <a href="/docs/keyboard-shortcuts" className="underline underline-offset-2 decoration-border hover:decoration-foreground transition-colors">extensive shortcuts</a> for workspaces, splits, browser, and more
</span>
</span>
</li>
</ul>
</section>
{/* Screenshot - break out of max-w-2xl to be wider */}
<div data-dev="screenshot" className="mb-12 -mx-6 sm:-mx-24 md:-mx-40 lg:-mx-72 xl:-mx-96">
<FadeImage
src={landingImage}
alt="cmux terminal app screenshot"
priority
className="w-full rounded-xl"
/>
</div>
{/* FAQ */}
<div data-dev="faq-top-spacer" style={{ height: 0 }} />
<section data-dev="faq" className="mb-10">
<h2 className="text-xs font-medium text-muted tracking-tight mb-3">
FAQ
</h2>
<div className="space-y-5 text-[15px]" style={{ lineHeight: 1.5 }}>
<div>
<p className="font-medium mb-1">How does cmux relate to Ghostty?</p>
<p className="text-muted">
cmux is not a fork of Ghostty. It uses{" "}
<a href="https://github.com/ghostty-org/ghostty" className="underline underline-offset-2 decoration-border hover:decoration-foreground transition-colors">libghostty</a>{" "}
as a library for terminal rendering, the same way apps use WebKit for web views.
Ghostty is a standalone terminal; cmux is a different app built on top of its rendering engine.
</p>
</div>
<div>
<p className="font-medium mb-1">What platforms does it support?</p>
<p className="text-muted">
macOS only, for now. cmux is a native Swift + AppKit app.
</p>
</div>
<div>
<p className="font-medium mb-1">What coding agents does cmux work with?</p>
<p className="text-muted">
All of them. cmux is a terminal, so any agent that runs in a terminal works out of the
box: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline,
Cursor Agent, and anything else you can launch from the command line.
</p>
</div>
<div>
<p className="font-medium mb-1">How do notifications work?</p>
<p className="text-muted">
When a process needs attention, cmux shows notification rings around panes,
unread badges in the sidebar, a notification popover, and a macOS desktop
notification. These fire automatically via standard terminal escape sequences
(OSC 9/99/777), or you can trigger them with the{" "}
<a href="/docs/notifications" className="underline underline-offset-2 decoration-border hover:decoration-foreground transition-colors">cmux CLI</a>{" "}
and{" "}
<a href="/docs/notifications" className="underline underline-offset-2 decoration-border hover:decoration-foreground transition-colors">Claude Code hooks</a>.
</p>
</div>
<div>
<p className="font-medium mb-1">Can I customize keyboard shortcuts?</p>
<p className="text-muted">
Terminal keybindings are read from your Ghostty config
file (<code className="text-xs bg-code-bg px-1.5 py-0.5 rounded">~/.config/ghostty/config</code>).
cmux-specific shortcuts (workspaces, splits, browser, notifications) can be
customized in Settings. See the{" "}
<a href="/docs/keyboard-shortcuts" className="underline underline-offset-2 decoration-border hover:decoration-foreground transition-colors">default shortcuts</a>{" "}
for a full list.
</p>
</div>
<div>
<p className="font-medium mb-1">How does it compare to tmux?</p>
<p className="text-muted">
tmux is a terminal multiplexer that runs inside any terminal. cmux is a native macOS app
with a GUI: vertical tabs, split panes, an embedded browser, and a socket API are all
built in. No config files or prefix keys needed.
</p>
</div>
<div>
<p className="font-medium mb-1">Is cmux free?</p>
<p className="text-muted">
Yes, cmux is free to use. The source code is available on{" "}
<a href="https://github.com/manaflow-ai/cmux" className="underline underline-offset-2 decoration-border hover:decoration-foreground transition-colors">GitHub</a>.
</p>
</div>
</div>
</section>
{/* Community */}
<section data-dev="community" className="mb-10">
<h2 className="text-xs font-medium text-muted tracking-tight mb-3">
Community
</h2>
<ul data-dev="community-ul" className="text-[15px]" style={{ lineHeight: 1.5, display: "flex", flexDirection: "column", gap: 16 }}>
{testimonials.map((t) => (
<li key={t.url}>
<span>
<a
href={t.url}
target="_blank"
rel="noopener noreferrer"
className="group"
>
<span className="text-muted group-hover:text-foreground transition-colors">
&quot;{t.text}&quot;
</span>
{"translation" in t && t.translation && (
<span className="text-muted/60 text-xs italic"> {t.translation}</span>
)}
</a>
{" "}
<a
href={t.url}
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-1 text-muted hover:text-foreground transition-colors"
>
{t.avatar && (
<img
src={t.avatar}
alt={t.name}
width={16}
height={16}
className="rounded-full inline-block"
/>
)}
{t.name}{"subtitle" in t && t.subtitle ? `, ${t.subtitle}` : ""}
</a>
</span>
</li>
))}
</ul>
</section>
{/* Bottom CTA */}
<div className="flex flex-wrap items-center justify-center gap-3 mt-12">
<DownloadButton location="bottom" />
<GitHubButton />
</div>
<div className="flex justify-center gap-4 mt-6">
<a
href="/docs"
className="text-sm text-muted hover:text-foreground transition-colors underline underline-offset-2 decoration-border hover:decoration-foreground"
>
Read the Docs
</a>
<a
href="/docs/changelog"
className="text-sm text-muted hover:text-foreground transition-colors underline underline-offset-2 decoration-border hover:decoration-foreground"
>
View Changelog
</a>
</div>
</main>
</div>
);
}

View file

@ -1,20 +1,45 @@
import type { MetadataRoute } from "next";
import { locales } from "../i18n/routing";
export default function sitemap(): MetadataRoute.Sitemap {
const base = "https://cmux.dev";
return [
{ url: base, lastModified: new Date(), changeFrequency: "weekly", priority: 1 },
{ url: `${base}/blog`, lastModified: new Date(), changeFrequency: "weekly", priority: 0.8 },
{ url: `${base}/blog/show-hn-launch`, lastModified: "2026-02-21", changeFrequency: "monthly", priority: 0.7 },
{ url: `${base}/blog/introducing-cmux`, lastModified: "2026-02-12", changeFrequency: "monthly", priority: 0.7 },
{ url: `${base}/docs/getting-started`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.9 },
{ url: `${base}/docs/concepts`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 },
{ url: `${base}/docs/configuration`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 },
{ url: `${base}/docs/keyboard-shortcuts`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.7 },
{ url: `${base}/docs/api`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 },
{ url: `${base}/docs/notifications`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 },
{ url: `${base}/docs/changelog`, lastModified: new Date(), changeFrequency: "weekly", priority: 0.5 },
{ url: `${base}/community`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.5 },
const paths = [
{ path: "", lastModified: new Date(), changeFrequency: "weekly" as const, priority: 1 },
{ path: "/blog", lastModified: new Date(), changeFrequency: "weekly" as const, priority: 0.8 },
{ path: "/blog/show-hn-launch", lastModified: "2026-02-21", changeFrequency: "monthly" as const, priority: 0.7 },
{ path: "/blog/introducing-cmux", lastModified: "2026-02-12", changeFrequency: "monthly" as const, priority: 0.7 },
{ path: "/blog/zen-of-cmux", lastModified: "2026-02-27", changeFrequency: "monthly" as const, priority: 0.7 },
{ path: "/blog/cmd-shift-u", lastModified: "2026-03-04", changeFrequency: "monthly" as const, priority: 0.7 },
{ path: "/docs/getting-started", lastModified: new Date(), changeFrequency: "monthly" as const, priority: 0.9 },
{ path: "/docs/concepts", lastModified: new Date(), changeFrequency: "monthly" as const, priority: 0.8 },
{ path: "/docs/configuration", lastModified: new Date(), changeFrequency: "monthly" as const, priority: 0.8 },
{ path: "/docs/keyboard-shortcuts", lastModified: new Date(), changeFrequency: "monthly" as const, priority: 0.7 },
{ path: "/docs/api", lastModified: new Date(), changeFrequency: "monthly" as const, priority: 0.8 },
{ path: "/docs/notifications", lastModified: new Date(), changeFrequency: "monthly" as const, priority: 0.8 },
{ path: "/docs/changelog", lastModified: new Date(), changeFrequency: "weekly" as const, priority: 0.5 },
{ path: "/docs/browser-automation", lastModified: new Date(), changeFrequency: "monthly" as const, priority: 0.8 },
{ path: "/community", lastModified: new Date(), changeFrequency: "monthly" as const, priority: 0.5 },
{ path: "/wall-of-love", lastModified: new Date(), changeFrequency: "monthly" as const, priority: 0.5 },
];
const entries: MetadataRoute.Sitemap = [];
for (const { path, lastModified, changeFrequency, priority } of paths) {
const alternates: Record<string, string> = {};
for (const locale of locales) {
alternates[locale] =
locale === "en" ? `${base}${path}` : `${base}/${locale}${path}`;
}
entries.push({
url: `${base}${path}`,
lastModified,
changeFrequency,
priority,
alternates: { languages: alternates },
});
}
return entries;
}

View file

@ -1,31 +0,0 @@
import type { Metadata } from "next";
import { SiteHeader } from "../components/site-header";
import { testimonials, TestimonialCard } from "../testimonials";
export const metadata: Metadata = {
title: "Wall of Love — cmux",
description:
"What people are saying about cmux, the terminal built for multitasking.",
};
export default function WallOfLovePage() {
return (
<div className="min-h-screen">
<SiteHeader section="wall of love" />
<main className="w-full max-w-6xl mx-auto px-6 py-10">
<h1 className="text-2xl font-semibold tracking-tight mb-2">
Wall of Love
</h1>
<p className="text-muted text-[15px] mb-8">
What people are saying about cmux.
</p>
<div className="columns-1 sm:columns-2 lg:columns-3 gap-4">
{testimonials.map((t) => (
<TestimonialCard key={t.url} testimonial={t} />
))}
</div>
</main>
</div>
);
}

View file

@ -8,6 +8,7 @@
"@t3-oss/env-nextjs": "^0.13.10",
"@vercel/firewall": "^1.1.2",
"next": "16.1.6",
"next-intl": "^4.8.3",
"next-themes": "^0.4.6",
"posthog-js": "^1.350.0",
"react": "19.2.3",
@ -93,6 +94,16 @@
"@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="],
"@formatjs/ecma402-abstract": ["@formatjs/ecma402-abstract@3.1.1", "", { "dependencies": { "@formatjs/fast-memoize": "3.1.0", "@formatjs/intl-localematcher": "0.8.1", "decimal.js": "^10.6.0", "tslib": "^2.8.1" } }, "sha512-jhZbTwda+2tcNrs4kKvxrPLPjx8QsBCLCUgrrJ/S+G9YrGHWLhAyFMMBHJBnBoOwuLHd7L14FgYudviKaxkO2Q=="],
"@formatjs/fast-memoize": ["@formatjs/fast-memoize@3.1.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg=="],
"@formatjs/icu-messageformat-parser": ["@formatjs/icu-messageformat-parser@3.5.1", "", { "dependencies": { "@formatjs/ecma402-abstract": "3.1.1", "@formatjs/icu-skeleton-parser": "2.1.1", "tslib": "^2.8.1" } }, "sha512-sSDmSvmmoVQ92XqWb499KrIhv/vLisJU8ITFrx7T7NZHUmMY7EL9xgRowAosaljhqnj/5iufG24QrdzB6X3ItA=="],
"@formatjs/icu-skeleton-parser": ["@formatjs/icu-skeleton-parser@2.1.1", "", { "dependencies": { "@formatjs/ecma402-abstract": "3.1.1", "tslib": "^2.8.1" } }, "sha512-PSFABlcNefjI6yyk8f7nyX1DC7NHmq6WaCHZLySEXBrXuLOB2f935YsnzuPjlz+ibhb9yWTdPeVX1OVcj24w2Q=="],
"@formatjs/intl-localematcher": ["@formatjs/intl-localematcher@0.8.1", "", { "dependencies": { "@formatjs/fast-memoize": "3.1.0", "tslib": "^2.8.1" } }, "sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA=="],
"@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="],
"@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="],
@ -213,6 +224,34 @@
"@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.39.0", "", {}, "sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg=="],
"@parcel/watcher": ["@parcel/watcher@2.5.6", "", { "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", "picomatch": "^4.0.3" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.6", "@parcel/watcher-darwin-arm64": "2.5.6", "@parcel/watcher-darwin-x64": "2.5.6", "@parcel/watcher-freebsd-x64": "2.5.6", "@parcel/watcher-linux-arm-glibc": "2.5.6", "@parcel/watcher-linux-arm-musl": "2.5.6", "@parcel/watcher-linux-arm64-glibc": "2.5.6", "@parcel/watcher-linux-arm64-musl": "2.5.6", "@parcel/watcher-linux-x64-glibc": "2.5.6", "@parcel/watcher-linux-x64-musl": "2.5.6", "@parcel/watcher-win32-arm64": "2.5.6", "@parcel/watcher-win32-ia32": "2.5.6", "@parcel/watcher-win32-x64": "2.5.6" } }, "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ=="],
"@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.6", "", { "os": "android", "cpu": "arm64" }, "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A=="],
"@parcel/watcher-darwin-arm64": ["@parcel/watcher-darwin-arm64@2.5.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA=="],
"@parcel/watcher-darwin-x64": ["@parcel/watcher-darwin-x64@2.5.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg=="],
"@parcel/watcher-freebsd-x64": ["@parcel/watcher-freebsd-x64@2.5.6", "", { "os": "freebsd", "cpu": "x64" }, "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng=="],
"@parcel/watcher-linux-arm-glibc": ["@parcel/watcher-linux-arm-glibc@2.5.6", "", { "os": "linux", "cpu": "arm" }, "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ=="],
"@parcel/watcher-linux-arm-musl": ["@parcel/watcher-linux-arm-musl@2.5.6", "", { "os": "linux", "cpu": "arm" }, "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg=="],
"@parcel/watcher-linux-arm64-glibc": ["@parcel/watcher-linux-arm64-glibc@2.5.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA=="],
"@parcel/watcher-linux-arm64-musl": ["@parcel/watcher-linux-arm64-musl@2.5.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA=="],
"@parcel/watcher-linux-x64-glibc": ["@parcel/watcher-linux-x64-glibc@2.5.6", "", { "os": "linux", "cpu": "x64" }, "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ=="],
"@parcel/watcher-linux-x64-musl": ["@parcel/watcher-linux-x64-musl@2.5.6", "", { "os": "linux", "cpu": "x64" }, "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg=="],
"@parcel/watcher-win32-arm64": ["@parcel/watcher-win32-arm64@2.5.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q=="],
"@parcel/watcher-win32-ia32": ["@parcel/watcher-win32-ia32@2.5.6", "", { "os": "win32", "cpu": "ia32" }, "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g=="],
"@parcel/watcher-win32-x64": ["@parcel/watcher-win32-x64@2.5.6", "", { "os": "win32", "cpu": "x64" }, "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw=="],
"@posthog/core": ["@posthog/core@1.23.0", "", { "dependencies": { "cross-spawn": "^7.0.6" } }, "sha512-WXYL4+trl27iV8/Y+ESADOYDB7jBhbEj6q3AEQdn+9ygYG06Q3rZSdWk4ZVn8FdrD3mlq8fEqkUgRCekzp2W4g=="],
"@posthog/types": ["@posthog/types@1.350.0", "", {}, "sha512-Z8s3xc70RByHDT9u/xB1lLYHFNmEgY7nveqY8hXRPK39+vKrhosrQQOjnURLKAdyi9fRgoLc0D2yL/qRBKTxvQ=="],
@ -239,6 +278,8 @@
"@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="],
"@schummar/icu-type-parser": ["@schummar/icu-type-parser@1.21.5", "", {}, "sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw=="],
"@shikijs/core": ["@shikijs/core@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA=="],
"@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw=="],
@ -255,8 +296,34 @@
"@stablelib/base64": ["@stablelib/base64@1.0.1", "", {}, "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ=="],
"@swc/core": ["@swc/core@1.15.18", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.25" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.15.18", "@swc/core-darwin-x64": "1.15.18", "@swc/core-linux-arm-gnueabihf": "1.15.18", "@swc/core-linux-arm64-gnu": "1.15.18", "@swc/core-linux-arm64-musl": "1.15.18", "@swc/core-linux-x64-gnu": "1.15.18", "@swc/core-linux-x64-musl": "1.15.18", "@swc/core-win32-arm64-msvc": "1.15.18", "@swc/core-win32-ia32-msvc": "1.15.18", "@swc/core-win32-x64-msvc": "1.15.18" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"] }, "sha512-z87aF9GphWp//fnkRsqvtY+inMVPgYW3zSlXH1kJFvRT5H/wiAn+G32qW5l3oEk63KSF1x3Ov0BfHCObAmT8RA=="],
"@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.15.18", "", { "os": "darwin", "cpu": "arm64" }, "sha512-+mIv7uBuSaywN3C9LNuWaX1jJJ3SKfiJuE6Lr3bd+/1Iv8oMU7oLBjYMluX1UrEPzwN2qCdY6Io0yVicABoCwQ=="],
"@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.15.18", "", { "os": "darwin", "cpu": "x64" }, "sha512-wZle0eaQhnzxWX5V/2kEOI6Z9vl/lTFEC6V4EWcn+5pDjhemCpQv9e/TDJ0GIoiClX8EDWRvuZwh+Z3dhL1NAg=="],
"@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.15.18", "", { "os": "linux", "cpu": "arm" }, "sha512-ao61HGXVqrJFHAcPtF4/DegmwEkVCo4HApnotLU8ognfmU8x589z7+tcf3hU+qBiU1WOXV5fQX6W9Nzs6hjxDw=="],
"@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.15.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-3xnctOBLIq3kj8PxOCgPrGjBLP/kNOddr6f5gukYt/1IZxsITQaU9TDyjeX6jG+FiCIHjCuWuffsyQDL5Ew1bg=="],
"@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.15.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-0a+Lix+FSSHBSBOA0XznCcHo5/1nA6oLLjcnocvzXeqtdjnPb+SvchItHI+lfeiuj1sClYPDvPMLSLyXFaiIKw=="],
"@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.15.18", "", { "os": "linux", "cpu": "x64" }, "sha512-wG9J8vReUlpaHz4KOD/5UE1AUgirimU4UFT9oZmupUDEofxJKYb1mTA/DrMj0s78bkBiNI+7Fo2EgPuvOJfuAA=="],
"@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.15.18", "", { "os": "linux", "cpu": "x64" }, "sha512-4nwbVvCphKzicwNWRmvD5iBaZj8JYsRGa4xOxJmOyHlMDpsvvJ2OR2cODlvWyGFH6BYL1MfIAK3qph3hp0Az6g=="],
"@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.15.18", "", { "os": "win32", "cpu": "arm64" }, "sha512-zk0RYO+LjiBCat2RTMHzAWaMky0cra9loH4oRrLKLLNuL+jarxKLFDA8xTZWEkCPLjUTwlRN7d28eDLLMgtUcQ=="],
"@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.15.18", "", { "os": "win32", "cpu": "ia32" }, "sha512-yVuTrZ0RccD5+PEkpcLOBAuPbYBXS6rslENvIXfvJGXSdX5QGi1ehC4BjAMl5FkKLiam4kJECUI0l7Hq7T1vwg=="],
"@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.15.18", "", { "os": "win32", "cpu": "x64" }, "sha512-7NRmE4hmUQNCbYU3Hn9Tz57mK9Qq4c97ZS+YlamlK6qG9Fb5g/BB3gPDe0iLlJkns/sYv2VWSkm8c3NmbEGjbg=="],
"@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="],
"@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="],
"@swc/types": ["@swc/types@0.1.25", "", { "dependencies": { "@swc/counter": "^0.1.3" } }, "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g=="],
"@t3-oss/env-core": ["@t3-oss/env-core@0.13.10", "", { "peerDependencies": { "arktype": "^2.1.0", "typescript": ">=5.0.0", "valibot": "^1.0.0-beta.7 || ^1.0.0", "zod": "^3.24.0 || ^4.0.0" }, "optionalPeers": ["arktype", "typescript", "valibot", "zod"] }, "sha512-NNFfdlJ+HmPHkLi2HKy7nwuat9SIYOxei9K10lO2YlcSObDILY7mHZNSHsieIM3A0/5OOzw/P/b+yLvPdaG52g=="],
"@t3-oss/env-nextjs": ["@t3-oss/env-nextjs@0.13.10", "", { "dependencies": { "@t3-oss/env-core": "0.13.10" }, "peerDependencies": { "arktype": "^2.1.0", "typescript": ">=5.0.0", "valibot": "^1.0.0-beta.7 || ^1.0.0", "zod": "^3.24.0 || ^4.0.0" }, "optionalPeers": ["arktype", "typescript", "valibot", "zod"] }, "sha512-JfSA2WXOnvcc/uMdp31paMsfbYhhdvLLRxlwvrnlPE9bwM/n0Z+Qb9xRv48nPpvfMhOrkrTYw1I5Yc06WIKBJQ=="],
@ -471,6 +538,8 @@
"debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
"decimal.js": ["decimal.js@10.6.0", "", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="],
"deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="],
"define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="],
@ -627,6 +696,8 @@
"html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="],
"icu-minify": ["icu-minify@4.8.3", "", { "dependencies": { "@formatjs/icu-messageformat-parser": "^3.4.0" } }, "sha512-65Av7FLosNk7bPbmQx5z5XG2Y3T2GFppcjiXh4z1idHeVgQxlDpAmkGoYI0eFzAvrOnjpWTL5FmPDhsdfRMPEA=="],
"ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="],
"import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="],
@ -635,6 +706,8 @@
"internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="],
"intl-messageformat": ["intl-messageformat@11.1.2", "", { "dependencies": { "@formatjs/ecma402-abstract": "3.1.1", "@formatjs/fast-memoize": "3.1.0", "@formatjs/icu-messageformat-parser": "3.5.1", "tslib": "^2.8.1" } }, "sha512-ucSrQmZGAxfiBHfBRXW/k7UC8MaGFlEj4Ry1tKiDcmgwQm1y3EDl40u+4VNHYomxJQMJi9NEI3riDRlth96jKg=="],
"is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="],
"is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="],
@ -785,10 +858,18 @@
"natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="],
"negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="],
"next": ["next@16.1.6", "", { "dependencies": { "@next/env": "16.1.6", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.1.6", "@next/swc-darwin-x64": "16.1.6", "@next/swc-linux-arm64-gnu": "16.1.6", "@next/swc-linux-arm64-musl": "16.1.6", "@next/swc-linux-x64-gnu": "16.1.6", "@next/swc-linux-x64-musl": "16.1.6", "@next/swc-win32-arm64-msvc": "16.1.6", "@next/swc-win32-x64-msvc": "16.1.6", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw=="],
"next-intl": ["next-intl@4.8.3", "", { "dependencies": { "@formatjs/intl-localematcher": "^0.8.1", "@parcel/watcher": "^2.4.1", "@swc/core": "^1.15.2", "icu-minify": "^4.8.3", "negotiator": "^1.0.0", "next-intl-swc-plugin-extractor": "^4.8.3", "po-parser": "^2.1.1", "use-intl": "^4.8.3" }, "peerDependencies": { "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0", "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-PvdBDWg+Leh7BR7GJUQbCDVVaBRn37GwDBWc9sv0rVQOJDQ5JU1rVzx9EEGuOGYo0DHAl70++9LQ7HxTawdL7w=="],
"next-intl-swc-plugin-extractor": ["next-intl-swc-plugin-extractor@4.8.3", "", {}, "sha512-YcaT+R9z69XkGhpDarVFWUprrCMbxgIQYPUaXoE6LGVnLjGdo8hu3gL6bramDVjNKViYY8a/pXPy7Bna0mXORg=="],
"next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="],
"node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="],
"node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="],
"object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
@ -831,6 +912,8 @@
"picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="],
"po-parser": ["po-parser@2.1.1", "", {}, "sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ=="],
"possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="],
"postal-mime": ["postal-mime@2.7.3", "", {}, "sha512-MjhXadAJaWgYzevi46+3kLak8y6gbg0ku14O1gO/LNOuay8dO+1PtcSGvAdgDR0DoIsSaiIA8y/Ddw6MnrO0Tw=="],
@ -1007,6 +1090,8 @@
"uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="],
"use-intl": ["use-intl@4.8.3", "", { "dependencies": { "@formatjs/fast-memoize": "^3.1.0", "@schummar/icu-type-parser": "1.21.5", "icu-minify": "^4.8.3", "intl-messageformat": "^11.1.0" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" } }, "sha512-nLxlC/RH+le6g3amA508Itnn/00mE+J22ui21QhOWo5V9hCEC43+WtnRAITbJW0ztVZphev5X9gvOf2/Dk9PLA=="],
"use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="],
"uuid": ["uuid@10.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="],

5
web/i18n/navigation.ts Normal file
View file

@ -0,0 +1,5 @@
import { createNavigation } from "next-intl/navigation";
import { routing } from "./routing";
export const { Link, redirect, usePathname, useRouter, getPathname } =
createNavigation(routing);

15
web/i18n/request.ts Normal file
View file

@ -0,0 +1,15 @@
import { getRequestConfig } from "next-intl/server";
import { routing } from "./routing";
export default getRequestConfig(async ({ requestLocale }) => {
let locale = await requestLocale;
if (!locale || !routing.locales.includes(locale as typeof routing.locales[number])) {
locale = routing.defaultLocale;
}
return {
locale,
messages: (await import(`../messages/${locale}.json`)).default,
};
});

53
web/i18n/routing.ts Normal file
View file

@ -0,0 +1,53 @@
import { defineRouting } from "next-intl/routing";
export const locales = [
"en",
"ja",
"zh-CN",
"zh-TW",
"ko",
"de",
"es",
"fr",
"it",
"da",
"pl",
"ru",
"bs",
"ar",
"no",
"pt-BR",
"th",
"tr",
"km",
] as const;
export type Locale = (typeof locales)[number];
export const localeNames: Record<Locale, string> = {
en: "English",
ja: "日本語",
"zh-CN": "简体中文",
"zh-TW": "繁體中文",
ko: "한국어",
de: "Deutsch",
es: "Español",
fr: "Français",
it: "Italiano",
da: "Dansk",
pl: "Polski",
ru: "Русский",
bs: "Bosanski",
ar: "العربية",
no: "Norsk",
"pt-BR": "Português (Brasil)",
th: "ไทย",
tr: "Türkçe",
km: "ភាសាខ្មែរ",
};
export const routing = defineRouting({
locales,
defaultLocale: "en",
localePrefix: "as-needed",
});

587
web/messages/ar.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — المحطة الطرفية المصممة لتعدد المهام",
"description": "محطة طرفية أصلية لنظام macOS مبنية على Ghostty. تعمل مع Claude Code وCodex وOpenCode وGemini CLI وKiro وAider وأي أداة CLI. علامات تبويب عمودية، حلقات إشعارات، أجزاء مقسمة، وواجهة برمجة مقابس.",
"ogDescription": "محطة طرفية أصلية لنظام macOS لوكلاء البرمجة بالذكاء الاصطناعي. تعمل مع Claude Code وCodex وOpenCode وGemini CLI وKiro وAider وأي أداة CLI."
},
"common": {
"downloadForMac": "تحميل لنظام Mac",
"viewOnGitHub": "عرض على GitHub",
"closeMenu": "إغلاق القائمة",
"openMenu": "فتح القائمة",
"toggleTheme": "تبديل المظهر",
"backToBlog": "العودة إلى المدونة",
"readTheDocs": "اقرأ الوثائق",
"viewChangelog": "عرض سجل التغييرات"
},
"nav": {
"docs": "الوثائق",
"blog": "المدونة",
"changelog": "سجل التغييرات",
"community": "المجتمع",
"github": "GitHub"
},
"footer": {
"product": "المنتج",
"resources": "الموارد",
"legal": "قانوني",
"social": "التواصل الاجتماعي",
"blog": "المدونة",
"community": "المجتمع",
"docs": "الوثائق",
"changelog": "سجل التغييرات",
"privacy": "الخصوصية",
"terms": "الشروط",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "تواصل معنا",
"copyright": "© {year} Manaflow",
"language": "اللغة"
},
"home": {
"taglinePrefix": "الطرفية المصممة لـ",
"typingCodingAgents": "وكلاء البرمجة",
"typingMultitasking": "تعدد المهام",
"subtitle": "تطبيق macOS أصلي مبني على Ghostty. علامات تبويب عمودية، حلقات إشعار عندما يحتاج الوكلاء انتباهك، ألواح مقسمة، وواجهة برمجة عبر المقابس للأتمتة.",
"features": "الميزات",
"faq": "الأسئلة الشائعة",
"communitySection": "المجتمع",
"feature": {
"verticalTabs": "علامات تبويب عمودية",
"verticalTabsDesc": ": يعرض الشريط الجانبي فرع git ومجلد العمل والمنافذ ونص الإشعارات",
"notificationRings": "حلقات الإشعارات",
"notificationRingsDesc": ": تضيء الألواح عندما يحتاج الوكلاء انتباهك",
"inAppBrowser": "متصفح مدمج",
"inAppBrowserDesc": ": قسّم متصفحاً بجانب طرفيتك مع واجهة برمجة قابلة للبرمجة",
"splitPanes": "ألواح مقسمة",
"splitPanesDesc": ": تقسيمات أفقية وعمودية داخل كل علامة تبويب",
"scriptable": "قابل للبرمجة",
"scriptableDesc": ": واجهة سطر الأوامر وواجهة المقابس للأتمتة والبرمجة",
"gpuAccelerated": "مُسرّع بالـ GPU",
"gpuAcceleratedDesc": ": مدعوم بـ libghostty لعرض سلس",
"lightweight": "خفيف الوزن",
"lightweightDesc": ": Swift + AppKit أصلي، بدون Electron",
"keyboardShortcuts": "اختصارات لوحة المفاتيح",
"keyboardShortcutsDesc": ": <link>اختصارات شاملة</link> لمساحات العمل والتقسيمات والمتصفح والمزيد"
},
"faqGhosttyQ": "ما علاقة cmux بـ Ghostty؟",
"faqGhosttyA": "cmux ليس نسخة معدلة من Ghostty. يستخدم <link>libghostty</link> كمكتبة لعرض الطرفية، بنفس الطريقة التي تستخدم بها التطبيقات WebKit لعرض الويب. Ghostty طرفية مستقلة؛ cmux تطبيق مختلف مبني فوق محرك العرض الخاص بها.",
"faqPlatformQ": "ما هي المنصات المدعومة؟",
"faqPlatformA": "macOS فقط حالياً. cmux تطبيق أصلي بـ Swift + AppKit.",
"faqAgentsQ": "ما هي وكلاء البرمجة التي يعمل معها cmux؟",
"faqAgentsA": "جميعها. cmux طرفية، لذا أي وكيل يعمل في الطرفية يعمل مباشرة: Claude Code وCodex وOpenCode وGemini CLI وKiro وAider وGoose وAmp وCline وCursor Agent وأي شيء آخر يمكنك تشغيله من سطر الأوامر.",
"faqNotificationsQ": "كيف تعمل الإشعارات؟",
"faqNotificationsA": "عندما تحتاج عملية ما إلى انتباهك، يعرض cmux حلقات إشعار حول الألواح، وشارات غير مقروءة في الشريط الجانبي، ونافذة إشعارات منبثقة، وإشعار سطح مكتب macOS. تعمل تلقائياً عبر تسلسلات الطرفية القياسية (OSC 9/99/777)، أو يمكنك تشغيلها باستخدام <cliLink>واجهة أوامر cmux</cliLink> و<hooksLink>خطافات Claude Code</hooksLink>.",
"faqShortcutsQ": "هل يمكنني تخصيص اختصارات لوحة المفاتيح؟",
"faqShortcutsA": "تُقرأ اختصارات الطرفية من ملف إعدادات Ghostty الخاص بك (<configPath>~/.config/ghostty/config</configPath>). يمكن تخصيص اختصارات cmux الخاصة (مساحات العمل، التقسيمات، المتصفح، الإشعارات) في الإعدادات. راجع <link>الاختصارات الافتراضية</link> للقائمة الكاملة.",
"faqTmuxQ": "كيف يقارن مع tmux؟",
"faqTmuxA": "tmux هو مُضاعف طرفيات يعمل داخل أي طرفية. cmux تطبيق macOS أصلي بواجهة رسومية: علامات تبويب عمودية، ألواح مقسمة، متصفح مدمج، وواجهة مقابس مدمجة. لا حاجة لملفات إعداد أو مفاتيح بادئة.",
"faqFreeQ": "هل cmux مجاني؟",
"faqFreeA": "نعم، cmux مجاني الاستخدام. الكود المصدري متاح على <link>GitHub</link>."
},
"community": {
"title": "المجتمع",
"description": "تواصل مع مستخدمي cmux الآخرين والفريق الذي يقف وراءه.",
"discord": "Discord",
"discordAction": "انضم إلى Discord",
"discordDesc": "تحدث مع المجتمع، احصل على المساعدة، وشارك ملاحظاتك",
"githubAction": "عرض على GitHub",
"githubDesc": "أضف نجمة للمستودع، أبلغ عن مشاكل، وساهم",
"twitter": "Twitter",
"twitterAction": "تابعنا على X",
"twitterDesc": "تحديثات وإعلانات ونصائح",
"youtube": "YouTube",
"youtubeAction": "اشترك",
"youtubeDesc": "عروض توضيحية ودروس وشروحات",
"linkedin": "LinkedIn",
"linkedinAction": "تابعنا",
"linkedinDesc": "أخبار الشركة وتحديثات هندسية",
"metaTitle": "المجتمع — cmux",
"metaDescription": "انضم إلى مجتمع cmux على Discord وTwitter وGitHub والمزيد"
},
"blog": {
"title": "المدونة",
"layoutTitle": "cmux blog",
"metaTitle": "المدونة",
"metaDescription": "أخبار وتحديثات من فريق cmux",
"description": "أخبار وتحديثات من فريق cmux",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "كيف ينتقل Cmd+Shift+U بين الوكلاء المنتهين عبر مساحات العمل في cmux.",
"date": "4 مارس 2026",
"p1": "ميزتي المفضلة في cmux هي Cmd+Shift+U. لدي 17 مساحة عمل مفتوحة الآن، كل منها يشغل وكيلاً. كنت أنقر بين علامات التبويب ولوحة الإشعارات لمعرفة ما اكتمل. الكتابة أسرع.",
"p2": "Cmd+Shift+U ينتقل إلى أحدث <link>إشعار</link> غير مقروء. عملياً يعني ذلك آخر وكيل انتهى. ينتقل إلى مساحة العمل الصحيحة، يركز على اللوح المحدد، يومضه حتى ترى أين تنظر، ويضعه كمقروء. إذا جاء الإشعار من نافذة أخرى، تظهر تلك النافذة في المقدمة."
},
"zenOfCmux": {
"title": "فلسفة cmux",
"summary": "cmux عنصر أساسي وليس حلاً متكاملاً. يمنحك قطعاً قابلة للتركيب وطريقة عملك متروكة لك.",
"date": "27 فبراير 2026",
"p1": "cmux لا يفرض على المطورين طريقة معينة لاستخدام أدواتهم. إنه طرفية ومتصفح مع واجهة سطر أوامر، والباقي متروك لك.",
"p2": "cmux عنصر أساسي وليس حلاً متكاملاً. يمنحك طرفية ومتصفحاً وإشعارات ومساحات عمل وتقسيمات وعلامات تبويب وواجهة سطر أوامر للتحكم بكل ذلك. cmux لا يجبرك على طريقة محددة لاستخدام وكلاء البرمجة. ما تبنيه بهذه العناصر الأساسية هو ملكك.",
"p3": "أفضل المطورين بنوا دائماً أدواتهم الخاصة. لم يكتشف أحد بعد أفضل طريقة للعمل مع الوكلاء، والفرق التي تبني منتجات مغلقة بالتأكيد لم تكتشفها أيضاً. المطورون الأقرب إلى قواعد الكود الخاصة بهم سيكتشفونها أولاً.",
"p4": "أعط مليون مطور عناصر أساسية قابلة للتركيب وسيجدون مجتمعين أكثر سير العمل كفاءة أسرع مما يمكن لأي فريق منتج تصميمه من أعلى لأسفل."
},
"showHnLaunch": {
"title": "إطلاق cmux على Show HN",
"summary": "وصل cmux إلى المرتبة الثانية على Hacker News، شاركه Mitchell Hashimoto، وانتشر بشكل واسع في اليابان.",
"date": "21 فبراير 2026",
"intro": "نشرنا cmux على <link>Show HN</link> في 19 فبراير:",
"blockquote1": "أشغل الكثير من جلسات Claude Code وCodex بالتوازي. كنت أستخدم Ghostty مع مجموعة من الألواح المقسمة، وأعتمد على إشعارات macOS الأصلية لمعرفة متى يحتاجني وكيل. لكن محتوى إشعار Claude Code دائماً \"Claude is waiting for your input\" بدون سياق، ومع فتح علامات تبويب كافية، لم أعد أستطيع حتى قراءة العناوين.",
"blockquote2": "جربت بعض منسقي البرمجة لكن معظمهم كانت تطبيقات Electron/Tauri والأداء أزعجني. كما أفضل الطرفية لأن منسقي الواجهات الرسومية يقيدونك بسير عملهم. لذا بنيت cmux كتطبيق macOS أصلي بـ Swift/AppKit. يستخدم libghostty لعرض الطرفية ويقرأ إعدادات Ghostty الحالية للمظاهر والخطوط والألوان والمزيد.",
"blockquote3": "الإضافات الرئيسية هي الشريط الجانبي ونظام الإشعارات. الشريط الجانبي يحتوي على علامات تبويب عمودية تعرض فرع git ومجلد العمل والمنافذ المستمعة وأحدث نص إشعار لكل مساحة عمل. نظام الإشعارات يلتقط تسلسلات الطرفية (OSC 9/99/777) ولديه واجهة أوامر (cmux notify) يمكنك ربطها بخطافات الوكلاء لـ Claude Code وOpenCode وغيرها. عندما ينتظر وكيل، يحصل لوحه على حلقة زرقاء وتضيء علامة التبويب في الشريط الجانبي، حتى أعرف أيها يحتاجني عبر التقسيمات وعلامات التبويب. Cmd+Shift+U ينتقل إلى أحدث غير مقروء.",
"blockquote4": "المتصفح المدمج لديه واجهة برمجة قابلة للبرمجة. يمكن للوكلاء التقاط شجرة إمكانية الوصول، والحصول على مراجع العناصر، والنقر، وملء النماذج، وتنفيذ JavaScript، وقراءة سجلات وحدة التحكم. يمكنك تقسيم لوح متصفح بجانب طرفيتك وجعل Claude Code يتفاعل مع خادم التطوير مباشرة.",
"blockquote5": "كل شيء قابل للبرمجة عبر واجهة سطر الأوامر وواجهة المقابس: إنشاء مساحات عمل/علامات تبويب، تقسيم الألواح، إرسال ضغطات المفاتيح، فتح الروابط في المتصفح.",
"hitNumber2": "في ذروته وصل إلى المرتبة الثانية على Hacker News. شاركه Mitchell Hashimoto:",
"favoriteComment": "تعليقي المفضل من <link>نقاش HN</link>:",
"viralJapan": "بشكل مفاجئ، انتشر cmux بشكل واسع في اليابان:",
"translation": "الترجمة: \"هذا يبدو جيداً. تطبيق طرفية مبني على Ghostty مصمم حتى لا تضيع عند تشغيل عدة واجهات أوامر مثل Claude Code بالتوازي. اللوح المنتظر للإدخال يحصل على إطار أزرق، ولديه نظام إشعارات خاص.\"",
"viralChina": "وانتشر بشكل جزئي في الصين:",
"extensions": "شيء آخر مثير كان رؤية الناس يبنون فوق واجهة أوامر cmux. بنى sasha إضافة pi-cmux التي تعرض معلومات النموذج واستخدام التوكنات وحالة الوكيل في الشريط الجانبي:",
"scriptable": "كل شيء في cmux قابل للبرمجة عبر واجهة سطر الأوامر: إنشاء مساحات العمل، إرسال ضغطات المفاتيح، التحكم بالمتصفح، قراءة الإشعارات. جزء من فلسفة cmux هو أن يكون قابلاً للبرمجة والتركيب، حتى يتمكن الناس من تخصيص طريقة عملهم مع وكلاء البرمجة. أحدث ما وصلت إليه وكلاء البرمجة يتغير بسرعة، ولا تريد أن تكون مقيداً بمنسق واجهة رسومية غير مرن لا يستطيع المواكبة.",
"cta": "إذا كنت تشغل عدة وكلاء برمجة، <link>جرب cmux</link>."
},
"introducingCmux": {
"title": "تقديم cmux",
"summary": "طرفية macOS أصلية مبنية على Ghostty، مصممة لتشغيل عدة وكلاء برمجة بالذكاء الاصطناعي جنباً إلى جنب.",
"date": "12 فبراير 2026",
"p1": "cmux تطبيق طرفية macOS أصلي مبني فوق Ghostty، مصمم من الأساس للمطورين الذين يشغلون عدة وكلاء برمجة بالذكاء الاصطناعي في وقت واحد.",
"whyTitle": "لماذا cmux؟",
"whyP": "سير العمل الحديث في التطوير غالباً يتضمن تشغيل عدة وكلاء في وقت واحد. Claude Code وCodex وأدوات أخرى كل منها في طرفيته الخاصة. تتبع أيها يحتاج انتباهك والتبديل بينها بسرعة هي المشكلة التي يحلها cmux.",
"featuresTitle": "الميزات الرئيسية",
"getStartedTitle": "ابدأ الآن",
"getStartedP": "ثبت cmux عبر Homebrew أو حمّل ملف DMG من <link>دليل البدء</link>.",
"featureVerticalTabsLabel": "علامات تبويب عمودية",
"featureVerticalTabsDesc": "شاهد جميع طرفياتك بنظرة واحدة في الشريط الجانبي",
"featureNotificationsLabel": "حلقات الإشعارات",
"featureNotificationsDesc": "تومض علامات التبويب عندما يحتاج وكيل إدخالك",
"featureSplitPanesLabel": "ألواح مقسمة",
"featureSplitPanesDesc": "تقسيمات أفقية وعمودية داخل كل مساحة عمل",
"featureSocketApiLabel": "واجهة المقابس",
"featureSocketApiDesc": "تحكم برمجي لإنشاء علامات التبويب وإرسال المدخلات",
"featureGpuLabel": "مُسرّع بالـ GPU",
"featureGpuDesc": "مدعوم بـ libghostty لعرض سلس"
}
},
"zenOfCmux": {
"metaTitle": "فلسفة cmux",
"metaDescription": "cmux أداة أساسية وليست حلاً. تمنحك قطعاً قابلة للتركيب وسير العمل متروك لك."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "اختصار لوحة المفاتيح الجديد الذي يغير طريقة تفاعلك مع cmux."
},
"showHnLaunch": {
"metaTitle": "إطلاق cmux على Show HN",
"metaDescription": "قصة إطلاق cmux على Hacker News."
},
"introducingCmux": {
"metaTitle": "تقديم cmux",
"metaDescription": "لماذا بنينا cmux، محطة طرفية جديدة لنظام macOS."
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "البدء",
"metaDescription": "ثبت cmux، طرفية macOS الأصلية لوكلاء البرمجة بالذكاء الاصطناعي. Homebrew، تحميل DMG، إعداد واجهة الأوامر، والتحديثات التلقائية عبر Sparkle.",
"intro": "cmux طرفية macOS أصلية خفيفة الوزن مبنية على Ghostty لإدارة عدة وكلاء برمجة بالذكاء الاصطناعي. تتميز بعلامات تبويب عمودية ولوحة إشعارات وواجهة تحكم عبر المقابس.",
"install": "التثبيت",
"dmgRecommended": "DMG (موصى به)",
"dmgDesc": "افتح ملف .dmg واسحب cmux إلى مجلد التطبيقات. يتحدث cmux تلقائياً عبر Sparkle، لذا تحتاج التحميل مرة واحدة فقط.",
"homebrew": "Homebrew",
"updateLater": "للتحديث لاحقاً:",
"firstLaunchCallout": "عند التشغيل الأول، قد يطلب macOS تأكيد فتح تطبيق من مطور معروف. انقر <strong>فتح</strong> للمتابعة.",
"verifyTitle": "التحقق من التثبيت",
"verifyDesc": "افتح cmux ويجب أن ترى:",
"verifyItem1": "نافذة طرفية مع شريط تبويب عمودي على اليسار",
"verifyItem2": "مساحة عمل أولية مفتوحة بالفعل",
"verifyItem3": "طرفية Ghostty جاهزة للإدخال",
"cliSetup": "إعداد واجهة الأوامر",
"cliDesc": "يتضمن cmux أداة سطر أوامر للأتمتة. داخل طرفيات cmux تعمل تلقائياً. لاستخدام واجهة الأوامر من خارج cmux، أنشئ رابطاً رمزياً:",
"cliThen": "ثم يمكنك تشغيل أوامر مثل:",
"autoUpdates": "التحديثات التلقائية",
"autoUpdatesDesc": "يتحقق cmux من التحديثات تلقائياً عبر Sparkle. عندما يتوفر تحديث سترى مؤشر تحديث في شريط العنوان. يمكنك أيضاً التحقق يدوياً عبر cmux > التحقق من التحديثات في شريط القوائم.",
"sessionRestore": "استعادة الجلسة (السلوك الحالي)",
"sessionRestoreDesc": "بعد إعادة التشغيل، يستعيد cmux التخطيط والبيانات الوصفية فقط:",
"sessionItem1": "تخطيط النوافذ ومساحات العمل والألواح",
"sessionItem2": "مجلدات العمل",
"sessionItem3": "سجل التمرير في الطرفية (بأفضل جهد)",
"sessionItem4": "رابط المتصفح وسجل التصفح",
"sessionCallout": "cmux لا يستعيد حالة العمليات الحية بعد. جلسات تطبيقات الطرفية النشطة مثل Claude Code وtmux وvim لا تُستأنف بعد إعادة تشغيل التطبيق.",
"requirements": "المتطلبات",
"reqItem1": "macOS 14.0 أو أحدث",
"reqItem2": "Mac بمعالج Apple Silicon أو Intel",
"metaTitle": "البدء"
},
"concepts": {
"title": "المفاهيم",
"metaDescription": "كيف ينظم cmux الطرفيات: النوافذ ومساحات العمل والألواح والأسطح. التسلسل الهرمي وراء الشريط الجانبي والتقسيمات وواجهة المقابس.",
"intro": "ينظم cmux طرفياتك في تسلسل هرمي من أربعة مستويات. فهم هذه المستويات يساعد عند استخدام واجهة المقابس وواجهة الأوامر واختصارات لوحة المفاتيح.",
"hierarchy": "التسلسل الهرمي",
"windowTitle": "النافذة",
"windowDesc": "نافذة macOS. افتح نوافذ متعددة باستخدام {shortcut}. كل نافذة لها شريطها الجانبي الخاص بمساحات عمل مستقلة.",
"workspaceTitle": "مساحة العمل",
"workspaceDesc": "عنصر في الشريط الجانبي. كل مساحة عمل تحتوي على لوح واحد أو أكثر من الألواح المقسمة. مساحات العمل هي ما تراه مدرجاً في الشريط الجانبي الأيسر.",
"workspaceNote": "في واجهة المستخدم واختصارات لوحة المفاتيح، غالباً ما تُسمى مساحات العمل \"علامات تبويب\" لأنها تتصرف كعلامات تبويب في الشريط الجانبي. تستخدم واجهة المقابس ومتغيرات البيئة مصطلح \"مساحة العمل\".",
"contextHeader": "السياق",
"termUsedHeader": "المصطلح المستخدم",
"sidebarUI": "واجهة الشريط الجانبي",
"tab": "علامة تبويب",
"keyboardShortcuts": "اختصارات لوحة المفاتيح",
"workspaceOrTab": "مساحة عمل أو علامة تبويب",
"socketAPI": "واجهة المقابس",
"environmentVariable": "متغير البيئة",
"workspaceShortcuts": "الاختصارات: {new} (جديد)، {jump} (انتقال)، {close} (إغلاق)، {prevNext} (السابق/التالي)",
"paneTitle": "اللوح",
"paneDesc": "منطقة مقسمة داخل مساحة العمل. يُنشأ بالتقسيم باستخدام {right} (يمين) أو {down} (أسفل). تنقل بين الألواح بـ {nav} + مفاتيح الأسهم.",
"paneNote": "كل لوح يمكنه احتواء عدة أسطح (علامات تبويب داخل اللوح).",
"surfaceTitle": "السطح",
"surfaceDesc": "علامة تبويب داخل لوح. كل لوح له شريط علامات تبويب خاص ويمكنه احتواء عدة أسطح. يُنشأ بـ {new}، يُتنقل بـ {prev} / {next} أو {jump}.",
"surfaceNote": "الأسطح هي جلسات الطرفية أو المتصفح الفردية التي تتفاعل معها. كل سطح له متغير بيئة CMUX_SURFACE_ID خاص.",
"panelTitle": "اللوحة",
"panelDesc": "المحتوى داخل السطح. حالياً نوعان:",
"panelTerminal": "طرفية: جلسة طرفية Ghostty",
"panelBrowser": "متصفح: عرض ويب مدمج",
"panelNote": "اللوحة هي مفهوم داخلي في الغالب. في واجهة المقابس وواجهة الأوامر، تتفاعل مع الأسطح وليس مع اللوحات مباشرة.",
"visualExample": "مثال بصري",
"visualExampleDesc": "في هذا المثال:",
"visualItem1": "تحتوي النافذة على شريط جانبي بثلاث مساحات عمل (dev, server, logs)",
"visualItem2": "مساحة العمل \"dev\" محددة، تعرض لوحين جنباً إلى جنب",
"visualItem3": "اللوح 1 له سطحان ([S1] و[S2] في شريط علامات التبويب)، مع S1 نشط",
"visualItem4": "اللوح 2 له سطح واحد",
"visualItem5": "كل سطح يحتوي على لوحة (طرفية في هذه الحالة)",
"summary": "ملخص",
"levelHeader": "المستوى",
"whatItIsHeader": "ما هو",
"createdByHeader": "يُنشأ بواسطة",
"identifiedByHeader": "يُعرف بواسطة",
"macosWindow": "نافذة macOS",
"sidebarEntry": "عنصر شريط جانبي",
"splitRegion": "منطقة مقسمة",
"tabWithinPane": "علامة تبويب داخل لوح",
"terminalOrBrowser": "طرفية أو متصفح",
"automatic": "تلقائي",
"paneIdSocket": "معرف اللوح (واجهة المقابس)",
"panelIdInternal": "معرف اللوحة (داخلي)",
"metaTitle": "المفاهيم"
},
"configuration": {
"title": "الإعدادات",
"metaDescription": "إعداد cmux عبر ملفات إعدادات Ghostty. الخط، المظهر، الألوان، تنسيق الألواح المقسمة، سجل التمرير، وإعدادات التطبيق لوضع الأتمتة.",
"intro": "يقرأ cmux الإعدادات من ملفات إعدادات Ghostty، مما يمنحك خيارات مألوفة إذا كنت قادماً من Ghostty.",
"configLocations": "مواقع ملف الإعدادات",
"configLocationsDesc": "يبحث cmux عن الإعدادات في هذه المواقع (بالترتيب):",
"createConfig": "أنشئ ملف الإعدادات إذا لم يكن موجوداً:",
"appearance": "المظهر",
"font": "الخط",
"colors": "الألوان",
"splitPanes": "الألواح المقسمة",
"behavior": "السلوك",
"scrollback": "سجل التمرير",
"workingDirectory": "مجلد العمل",
"appSettings": "إعدادات التطبيق",
"appSettingsDesc": "الإعدادات داخل التطبيق متاحة عبر cmux > الإعدادات ({shortcut}):",
"themeMode": "وضع المظهر",
"themeSystem": "النظام: اتبع مظهر macOS",
"themeLight": "فاتح: الوضع الفاتح دائماً",
"themeDark": "داكن: الوضع الداكن دائماً",
"automationMode": "وضع الأتمتة",
"automationModeDesc": "مستوى الوصول إلى المقبس:",
"automationOff": "معطل: بدون تحكم عبر المقبس (الأكثر أماناً)",
"automationCmux": "عمليات cmux فقط: السماح فقط للعمليات التي بدأت داخل طرفيات cmux بالاتصال",
"automationAll": "allowAll: السماح لأي عملية محلية بالاتصال (CMUX_SOCKET_MODE=allowAll، تجاوز عبر متغير البيئة فقط)",
"automationCallout": "على الأجهزة المشتركة، فكر في استخدام وضع \"معطل\" أو \"عمليات cmux فقط\".",
"browserLinkBehavior": "سلوك روابط المتصفح",
"browserLinkDesc": "في الإعدادات > المتصفح، يوفر cmux قائمتين من المضيفين بأغراض مختلفة:",
"browserHostsEmbed": "المضيفون لفتحهم في المتصفح المدمج: ينطبق على الروابط المنقورة من مخرجات الطرفية. المضيفون في هذه القائمة يُفتحون في cmux؛ المضيفون الآخرون يُفتحون في متصفحك الافتراضي. يدعم مضيفاً واحداً أو حرف بدل لكل سطر (مثال: example.com، *.internal.example).",
"browserHostsHttp": "مضيفو HTTP المسموح بهم في المتصفح المدمج: ينطبق فقط على روابط HTTP (غير HTTPS). المضيفون في هذه القائمة يمكنهم الفتح في cmux بدون تحذير. الافتراضيات تشمل localhost و127.0.0.1 و::1 و0.0.0.0 و*.localtest.me.",
"exampleConfig": "مثال على الإعدادات",
"metaTitle": "الإعدادات"
},
"keyboardShortcuts": {
"title": "اختصارات لوحة المفاتيح",
"description": "جميع اختصارات لوحة المفاتيح المتاحة في cmux، مجمعة حسب الفئة.",
"metaDescription": "جميع اختصارات لوحة مفاتيح cmux لمساحات العمل والأسطح والألواح المقسمة والمتصفح والإشعارات والبحث وإدارة النوافذ على macOS.",
"searchPlaceholder": "بحث في الاختصارات...",
"searchLabel": "بحث اختصارات لوحة المفاتيح",
"noResults": "لم يتم العثور على اختصارات",
"noResultsHint": "جرب مصطلح بحث مختلف",
"cat": {
"workspaces": "مساحات العمل",
"workspacesBlurb": "مساحات العمل موجودة في الشريط الجانبي. كل مساحة عمل لها مجموعتها الخاصة من الألواح والأسطح.",
"surfaces": "الأسطح",
"surfacesBlurb": "الأسطح هي علامات تبويب داخل اللوح.",
"splitPanes": "الألواح المقسمة",
"browser": "المتصفح",
"notifications": "الإشعارات",
"find": "البحث",
"terminal": "الطرفية",
"window": "النافذة"
},
"sc": {
"ws-new": "مساحة عمل جديدة",
"ws-jump-1-8": "الانتقال إلى مساحة العمل 18",
"ws-jump-last": "الانتقال إلى آخر مساحة عمل",
"ws-close": "إغلاق مساحة العمل",
"ws-rename": "إعادة تسمية مساحة العمل",
"sf-new": "سطح جديد",
"sf-prev-1": "السطح السابق",
"sf-prev-2": "السطح السابق",
"sf-jump-1-8": "الانتقال إلى السطح 18",
"sf-jump-last": "الانتقال إلى آخر سطح",
"sf-close": "إغلاق السطح",
"sp-right": "تقسيم لليمين",
"sp-down": "تقسيم للأسفل",
"sp-focus": "تركيز اللوح باتجاه",
"sp-browser-right": "تقسيم المتصفح لليمين",
"sp-browser-down": "تقسيم المتصفح للأسفل",
"br-open": "فتح سطح المتصفح",
"br-addr": "التركيز على شريط العنوان",
"br-forward": "للأمام",
"br-reload": "إعادة تحميل الصفحة",
"br-devtools": "فتح أدوات المطور",
"nt-panel": "عرض لوحة الإشعارات",
"nt-latest": "الانتقال إلى أحدث غير مقروء",
"nt-flash": "تشغيل الوميض",
"fd-find": "بحث",
"fd-next-prev": "بحث التالي / السابق",
"fd-hide": "إخفاء شريط البحث",
"fd-selection": "استخدام التحديد للبحث",
"tm-clear": "مسح سجل التمرير",
"tm-copy": "نسخ (مع التحديد)",
"tm-paste": "لصق",
"tm-font": "تكبير / تصغير الخط",
"tm-reset": "إعادة تعيين حجم الخط",
"wn-new": "نافذة جديدة",
"wn-settings": "الإعدادات",
"wn-reload": "إعادة تحميل الإعدادات",
"wn-quit": "إنهاء"
},
"metaTitle": "اختصارات لوحة المفاتيح"
},
"api": {
"title": "مرجع الواجهة البرمجية",
"metaDescription": "مرجع واجهة أوامر cmux وواجهة مقابس Unix. إدارة مساحات العمل، الألواح المقسمة، التحكم بالإدخال، الإشعارات، بيانات الشريط الجانبي الوصفية، متغيرات البيئة، وطرق الكشف.",
"intro": "يوفر cmux أداة سطر أوامر ومقبس Unix للتحكم البرمجي. كل أمر متاح عبر كلتا الواجهتين.",
"socket": "المقبس",
"buildHeader": "البناء",
"pathHeader": "المسار",
"release": "الإصدار",
"debug": "التصحيح",
"taggedDebug": "بناء تصحيح موسوم",
"socketOverride": "تجاوز بمتغير البيئة CMUX_SOCKET_PATH. أرسل طلب JSON واحد منتهي بسطر جديد لكل استدعاء:",
"socketCallout": "طلبات مقبس JSON يجب أن تستخدم method وparams. حمولات JSON القديمة بنسخة v1 مثل <legacy>'{'\"command\":\"...\"'}'</legacy> غير مدعومة.",
"accessModes": "أوضاع الوصول",
"modeHeader": "الوضع",
"descriptionHeader": "الوصف",
"howToEnableHeader": "كيفية التفعيل",
"offMode": "المقبس معطل",
"offEnable": "واجهة الإعدادات أو CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "فقط العمليات التي بدأت داخل طرفيات cmux يمكنها الاتصال.",
"cmuxOnlyEnable": "الوضع الافتراضي في واجهة الإعدادات",
"allowAllMode": "السماح لأي عملية محلية بالاتصال (بدون فحص السلالة).",
"allowAllEnable": "تجاوز عبر متغير البيئة فقط: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "على الأجهزة المشتركة، استخدم وضع معطل أو عمليات cmux فقط.",
"cliOptions": "خيارات واجهة الأوامر",
"flagHeader": "العلم",
"customSocketPath": "مسار مقبس مخصص",
"outputJson": "الإخراج بتنسيق JSON",
"targetWindow": "استهداف نافذة محددة",
"targetWorkspace": "استهداف مساحة عمل محددة",
"targetSurface": "استهداف سطح محدد",
"idFormat": "التحكم بتنسيق المعرف في إخراج JSON",
"workspaceCommands": "أوامر مساحة العمل",
"listWorkspacesDesc": "عرض جميع مساحات العمل المفتوحة.",
"newWorkspaceDesc": "إنشاء مساحة عمل جديدة.",
"selectWorkspaceDesc": "التبديل إلى مساحة عمل محددة.",
"currentWorkspaceDesc": "الحصول على مساحة العمل النشطة حالياً.",
"closeWorkspaceDesc": "إغلاق مساحة عمل.",
"splitCommands": "أوامر التقسيم",
"newSplitDesc": "إنشاء لوح مقسم جديد. الاتجاهات: يسار، يمين، أعلى، أسفل.",
"listSurfacesDesc": "عرض جميع الأسطح في مساحة العمل الحالية.",
"focusSurfaceDesc": "التركيز على سطح محدد.",
"inputCommands": "أوامر الإدخال",
"sendDesc": "إرسال نص إلى الطرفية المركزة.",
"sendKeyDesc": "إرسال ضغطة مفتاح. المفاتيح: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "إرسال نص إلى سطح محدد.",
"sendKeySurfaceDesc": "إرسال ضغطة مفتاح إلى سطح محدد.",
"notificationCommands": "أوامر الإشعارات",
"notifyDesc": "إرسال إشعار.",
"listNotificationsDesc": "عرض جميع الإشعارات.",
"clearNotificationsDesc": "مسح جميع الإشعارات.",
"sidebarMetadata": "أوامر بيانات الشريط الجانبي الوصفية",
"sidebarMetadataDesc": "تعيين مؤشرات الحالة وأشرطة التقدم وإدخالات السجل في الشريط الجانبي لأي مساحة عمل. مفيد لنصوص البناء وتكاملات CI ووكلاء البرمجة بالذكاء الاصطناعي التي تريد إظهار الحالة بنظرة سريعة.",
"setStatusDesc": "تعيين مؤشر حالة في الشريط الجانبي. استخدم مفتاحاً فريداً حتى تتمكن الأدوات المختلفة من إدارة إدخالاتها الخاصة.",
"clearStatusDesc": "إزالة إدخال حالة من الشريط الجانبي بالمفتاح.",
"listStatusDesc": "عرض جميع إدخالات حالة الشريط الجانبي لمساحة عمل.",
"setProgressDesc": "تعيين شريط تقدم في الشريط الجانبي (0.0 إلى 1.0).",
"clearProgressDesc": "مسح شريط تقدم الشريط الجانبي.",
"logDesc": "إضافة إدخال سجل إلى الشريط الجانبي. المستويات: info, progress, success, warning, error.",
"clearLogDesc": "مسح جميع إدخالات سجل الشريط الجانبي.",
"listLogDesc": "عرض إدخالات سجل الشريط الجانبي.",
"sidebarStateDesc": "تفريغ جميع بيانات الشريط الجانبي الوصفية (cwd، فرع git، المنافذ، الحالة، التقدم، السجلات).",
"utilityCommands": "أوامر الأدوات المساعدة",
"pingDesc": "التحقق مما إذا كان cmux يعمل ويستجيب.",
"capabilitiesDesc": "عرض طرق المقبس المتاحة ووضع الوصول الحالي.",
"identifyDesc": "عرض سياق النافذة/مساحة العمل/اللوح/السطح المركز.",
"envVariables": "متغيرات البيئة",
"variableHeader": "المتغير",
"socketPathDesc": "تجاوز مسار المقبس المستخدم بواسطة واجهة الأوامر والتكاملات",
"socketEnableDesc": "تفعيل/تعطيل المقبس قسرياً (1/0, true/false, on/off)",
"socketModeDesc": "تجاوز وضع الوصول (cmuxOnly, allowAll, off). يقبل أيضاً cmux-only/cmux_only وallow-all/allow_all",
"workspaceIdDesc": "يُعين تلقائياً: معرف مساحة العمل الحالية",
"surfaceIdDesc": "يُعين تلقائياً: معرف السطح الحالي",
"termProgramDesc": "مُعين إلى ghostty",
"termDesc": "مُعين إلى xterm-ghostty",
"envCallout": "قيم CMUX_SOCKET_MODE القديمة full وnotifications لا تزال مقبولة للتوافق.",
"detectingCmux": "كشف cmux",
"examples": "أمثلة",
"pythonClient": "عميل Python",
"shellScript": "نص Shell",
"buildScriptNotification": "نص بناء مع إشعار",
"metaTitle": "مرجع API"
},
"notifications": {
"title": "الإشعارات",
"metaDescription": "إرسال إشعارات سطح المكتب من وكلاء الذكاء الاصطناعي والنصوص في cmux. واجهة الأوامر، تسلسلات OSC 99/777، وتكامل خطافات Claude Code.",
"intro": "يدعم cmux إشعارات سطح المكتب، مما يسمح لوكلاء الذكاء الاصطناعي والنصوص بتنبيهك عندما يحتاجون انتباهك.",
"lifecycle": "دورة الحياة",
"received": "مُستلم: يظهر الإشعار في اللوحة، يُطلق تنبيه سطح المكتب (إذا لم يكن مكتوماً)",
"unread": "غير مقروء: تظهر شارة على علامة تبويب مساحة العمل",
"read": "مقروء: يُمسح عند عرض مساحة العمل تلك",
"cleared": "مُمسوح: يُزال من اللوحة",
"suppression": "الكتم",
"suppressionDesc": "تُكتم تنبيهات سطح المكتب عندما:",
"suppressItem1": "نافذة cmux مركزة",
"suppressItem2": "مساحة العمل المحددة التي ترسل الإشعار نشطة",
"suppressItem3": "لوحة الإشعارات مفتوحة",
"notificationPanel": "لوحة الإشعارات",
"notificationPanelDesc": "اضغط <openShortcut>⌘⇧I</openShortcut> لفتح لوحة الإشعارات. انقر على إشعار للانتقال إلى مساحة العمل تلك. اضغط <jumpShortcut>⌘⇧U</jumpShortcut> للانتقال مباشرة إلى مساحة العمل التي تحتوي على أحدث إشعار غير مقروء.",
"customCommand": "أمر مخصص",
"customCommandDesc": "تشغيل أمر shell في كل مرة يُجدول فيها إشعار. عيّنه في الإعدادات > التطبيق > أمر الإشعار. يُشغل الأمر عبر /bin/sh -c مع متغيرات البيئة هذه:",
"customCommandNote": "يعمل الأمر بشكل مستقل عن منتقي صوت النظام. عيّن المنتقي إلى \"لا شيء\" لاستخدام الأمر المخصص فقط، أو احتفظ بكليهما لصوت نظام مع إجراء مخصص.",
"sending": "إرسال الإشعارات",
"cli": "CLI",
"osc777Title": "OSC 777 (بسيط)",
"osc777Desc": "يستخدم بروتوكول RXVT تنسيقاً ثابتاً مع عنوان ومحتوى:",
"osc99Title": "OSC 99 (غني)",
"osc99Desc": "يدعم بروتوكول Kitty عناوين فرعية ومعرفات إشعارات:",
"variableHeader": "المتغير",
"descriptionHeader": "الوصف",
"envTitle": "عنوان الإشعار (اسم مساحة العمل أو التطبيق)",
"envSubtitle": "العنوان الفرعي للإشعار",
"envBody": "نص محتوى الإشعار",
"cmpTitleBody": "العنوان + المحتوى",
"cmpSubtitle": "العنوان الفرعي",
"cmpNotificationId": "معرّف الإشعار",
"cmpComplexity": "التعقيد",
"cmpYes": "نعم",
"cmpNo": "لا",
"cmpHigher": "أعلى",
"cmpLower": "أقل",
"featureHeader": "الميزة",
"comparisonCallout": "استخدم OSC 777 للإشعارات البسيطة. استخدم OSC 99 عندما تحتاج عناوين فرعية أو معرفات إشعارات. استخدم واجهة الأوامر (cmux notify) لأسهل تكامل.",
"claudeCodeHooks": "خطافات Claude Code",
"claudeCodeHooksDesc": "يتكامل cmux مع <link>Claude Code</link> عبر الخطافات لإعلامك عند اكتمال المهام.",
"createHookScript": "1. إنشاء نص الخطاف",
"configureClaude": "2. إعداد Claude Code",
"restartNote": "أعد تشغيل Claude Code لتطبيق الخطافات.",
"integrationExamples": "أمثلة التكامل",
"notifyAfterLong": "إشعار بعد أمر طويل",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "تمرير tmux",
"tmuxDesc": "إذا كنت تستخدم tmux داخل cmux، فعّل التمرير:",
"metaTitle": "الإشعارات"
},
"browserAutomation": {
"title": "أتمتة المتصفح",
"metaDescription": "مرجع أوامر متصفح cmux للتنقل، التفاعل مع DOM، الانتظار، الفحص، تنفيذ JavaScript، علامات التبويب، مربعات الحوار، الإطارات، التنزيلات، وحالة المتصفح.",
"intro": "توفر مجموعة أوامر متصفح cmux أتمتة المتصفح ضد أسطح متصفح cmux. استخدمها للتنقل، التفاعل مع عناصر DOM، فحص حالة الصفحة، تنفيذ JavaScript، وإدارة بيانات جلسة المتصفح.",
"commandIndex": "فهرس الأوامر",
"categoryHeader": "الفئة",
"subcommandsHeader": "الأوامر الفرعية",
"navAndTargeting": "التنقل والاستهداف",
"waiting": "الانتظار",
"domInteraction": "التفاعل مع DOM",
"inspection": "الفحص",
"jsAndInjection": "JavaScript والحقن",
"framesDialogsDownloads": "الإطارات ومربعات الحوار والتنزيلات",
"stateAndSession": "الحالة وبيانات الجلسة",
"tabsAndLogs": "علامات التبويب والسجلات",
"targetingSurface": "استهداف سطح متصفح",
"targetingDesc": "معظم الأوامر الفرعية تتطلب سطحاً مستهدفاً. يمكنك تمريره موضعياً أو بـ --surface.",
"navigation": "التنقل",
"waitingSection": "الانتظار",
"waitingDesc": "استخدم wait للانتظار حتى تتحقق محددات أو نص أو أجزاء URL أو حالة التحميل أو شرط JavaScript.",
"domSection": "التفاعل مع DOM",
"domDesc": "الإجراءات المعدلة تدعم --snapshot-after للتحقق السريع في النصوص.",
"inspectionSection": "الفحص",
"inspectionDesc": "استخدم المحصلات المهيكلة للنصوص واللقطات/لقطات الشاشة للمراجعة البشرية.",
"jsSection": "تنفيذ وحقن JavaScript",
"stateSection": "الحالة",
"stateDesc": "أوامر بيانات الجلسة تغطي الكوكيز والتخزين المحلي/تخزين الجلسة ولقطات حالة المتصفح الكاملة.",
"tabsSection": "علامات التبويب",
"tabsDesc": "عمليات علامات تبويب المتصفح تتطابق مع أسطح المتصفح في مجموعة علامات تبويب المتصفح النشطة.",
"consoleSection": "وحدة التحكم والأخطاء",
"dialogsSection": "مربعات الحوار",
"framesSection": "الإطارات",
"downloadsSection": "التنزيلات",
"commonPatterns": "الأنماط الشائعة",
"patternNavigate": "تنقل وانتظر وافحص",
"patternForm": "ملء نموذج والتحقق من نص النجاح",
"patternDebug": "التقاط مواد التصحيح عند الفشل",
"patternSession": "حفظ واستعادة جلسة المتصفح",
"metaTitle": "أتمتة المتصفح"
},
"changelog": {
"title": "سجل التغييرات",
"metaDescription": "ملاحظات إصدار cmux وسجل الإصدارات. الميزات الجديدة وإصلاحات الأخطاء والتغييرات لطرفية macOS الأصلية.",
"metaTitle": "سجل التغييرات"
},
"navItems": {
"gettingStarted": "البدء",
"concepts": "المفاهيم",
"configuration": "الإعدادات",
"keyboardShortcuts": "اختصارات لوحة المفاتيح",
"apiReference": "مرجع الواجهة البرمجية",
"browserAutomation": "أتمتة المتصفح",
"notifications": "الإشعارات",
"changelog": "سجل التغييرات"
}
},
"legal": {
"privacyPolicy": "سياسة الخصوصية",
"termsOfService": "شروط الخدمة",
"eula": "EULA"
},
"wallOfLove": {
"title": "جدار الحب",
"description": "ماذا يقول الناس عن cmux."
},
"testimonials": {
"mitchellh": "يوم آخر ومشروع آخر مبني على libghostty، هذه المرة طرفية macOS مع علامات تبويب عمودية، تنظيم/إشعارات أفضل، متصفح مدمج/قابل للبرمجة موجه خصيصاً للأشخاص الذين يستخدمون الكثير من سير العمل الوكيلية في الطرفية.",
"schrockn": "هذا بالضبط المنتج الذي كنت أبحث عنه. بعد ساعتين هذا الصباح أصبحت مغرماً به.",
"egrefen": "استخدمته طوال عطلة نهاية الأسبوع وهو مذهل.",
"max4c": "كانت هذه أداتي المفضلة خلال الأسبوعين الماضيين",
"asaza": "cmux يبدو جميلاً لدرجة أنه ربما حان الوقت أخيراً لتوديع VSCode",
"johnthedebs": "مرحباً، هذا يبدو رائعاً بجدية. أحب الأفكار هنا، تحديداً: القابلية للبرمجة، الواجهة متعددة الطبقات، المتصفح مع API. أتطلع لتجربته. وأريد أيضاً أن أضيف أنني أقدر حقاً Mitchell Hashimoto لإنشائه libghostty؛ يبدو وقتاً مثيراً لتكون مستخدم طرفية.",
"joeriddles": "علامات تبويب عمودية في طرفيتي! لم أفكر في ذلك من قبل. أستخدم وأحب علامات التبويب العمودية في Firefox.",
"dchu17": "جربته وكان بديهياً جداً. عمل جيد!",
"afruth": "أعجبني، استخدمته في اليوم الماضي على ثلاثة مشاريع متوازية كل منها بعدة worktrees. استخدامه مع lazygit وyazi / nvim جعلني أكثر إنتاجية قليلاً من المعتاد دون الحاجة لملاحقة عدة نسخ من ghostty / iTerm. كما يبدو أكثر طبيعية من tmux.",
"northprint": "جربت cmux لأنه بدا جيداً، وهو جيد فعلاً",
"indykish": "cmux جيد جداً.",
"kataring": "انتقلت إلى cmux.dev",
"scottw": "كان هذا اكتشافاً مفيداً جداً. لا أستطيع التوصية به بما فيه الكفاية.",
"johnblythe": "حصلت عليه في عطلة نهاية الأسبوع وأحببته. كنت أنتظر شيئاً كهذا.",
"bchris91": "هذا بالضبط ما أردته. عمل مذهل، شكراً لكم!",
"connorelsea": "أستخدمه منذ أسبوع وهو رائع. علامة تبويب عمودية لكل مهمة قيد التنفيذ. بالداخل، Claude على جانب والمتصفح مع PR والموارد على الجانب الآخر، أتنقل بين المهام وأبقى منظماً. امزج ذلك مع المهارات لجعل Claude يراقب CI بشكل متكرر وما إلى ذلك. أشعر بالتنوير بصراحة",
"tonkotsuboy": "انتقلت من Warp إلى Ghostty في بداية السنة، لكن الآن انتقلت إلى cmux. علامات التبويب العمودية مريحة، وأقدر الإشعارات عندما تنتهي مهام Claude Code. هو مبني على Ghostty لذا الأداء السريع ينتقل معه. عرض الفرع والإكمالات التي أعددتها في Ghostty لا تزال تعمل أيضاً."
},
"languageSwitcher": {
"label": "اللغة"
}
}

587
web/messages/bs.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — Terminal napravljen za multitasking",
"description": "Nativni macOS terminal izgrađen na Ghostty. Radi s Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider i bilo kojim CLI alatom. Vertikalni tabovi, notifikacijski prstenovi, podijeljeni paneli i socket API.",
"ogDescription": "Nativni macOS terminal za AI agente za kodiranje. Radi s Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider i bilo kojim CLI alatom."
},
"common": {
"downloadForMac": "Preuzmi za Mac",
"viewOnGitHub": "Pogledaj na GitHub-u",
"closeMenu": "Zatvori meni",
"openMenu": "Otvori meni",
"toggleTheme": "Promijeni temu",
"backToBlog": "Nazad na blog",
"readTheDocs": "Pročitaj dokumentaciju",
"viewChangelog": "Pogledaj zapisnik promjena"
},
"nav": {
"docs": "Dokumentacija",
"blog": "Blog",
"changelog": "Zapisnik promjena",
"community": "Zajednica",
"github": "GitHub"
},
"footer": {
"product": "Proizvod",
"resources": "Resursi",
"legal": "Pravno",
"social": "Društvene mreže",
"blog": "Blog",
"community": "Zajednica",
"docs": "Dokumentacija",
"changelog": "Zapisnik promjena",
"privacy": "Privatnost",
"terms": "Uslovi korištenja",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "Kontakt",
"copyright": "© {year} Manaflow",
"language": "Jezik"
},
"home": {
"taglinePrefix": "Terminal napravljen za ",
"typingCodingAgents": "agente za kodiranje",
"typingMultitasking": "multitasking",
"subtitle": "Nativna macOS aplikacija izgrađena na Ghostty-ju. Vertikalni tabovi, notifikacijski prstenovi kada agenti trebaju pažnju, podijeljeni paneli i socket API za automatizaciju.",
"features": "Funkcionalnosti",
"faq": "Česta pitanja",
"communitySection": "Zajednica",
"feature": {
"verticalTabs": "Vertikalni tabovi",
"verticalTabsDesc": ": bočna traka prikazuje git granu, radni direktorij, portove i tekst notifikacija",
"notificationRings": "Notifikacijski prstenovi",
"notificationRingsDesc": ": paneli se osvijetle kada agenti trebaju pažnju",
"inAppBrowser": "Ugrađeni preglednik",
"inAppBrowserDesc": ": podijelite preglednik pored terminala sa skriptabilnim API-jem",
"splitPanes": "Podijeljeni paneli",
"splitPanesDesc": ": horizontalni i vertikalni razdjelnici unutar svakog taba",
"scriptable": "Skriptabilan",
"scriptableDesc": ": CLI i socket API za automatizaciju i skriptovanje",
"gpuAccelerated": "GPU-ubrzano",
"gpuAcceleratedDesc": ": pokreće libghostty za glatko renderiranje",
"lightweight": "Lagano",
"lightweightDesc": ": nativni Swift + AppKit, bez Electron-a",
"keyboardShortcuts": "Prečice na tastaturi",
"keyboardShortcutsDesc": ": <link>opsežne prečice</link> za radne prostore, razdjelnice, preglednik i više"
},
"faqGhosttyQ": "Kakav je odnos cmux-a i Ghostty-ja?",
"faqGhosttyA": "cmux nije fork Ghostty-ja. Koristi <link>libghostty</link> kao biblioteku za renderiranje terminala, na isti način kao što aplikacije koriste WebKit za web prikaze. Ghostty je samostalni terminal; cmux je drugačija aplikacija izgrađena na njegovom rendering engine-u.",
"faqPlatformQ": "Koje platforme podržava?",
"faqPlatformA": "Samo macOS, za sada. cmux je nativna Swift + AppKit aplikacija.",
"faqAgentsQ": "Sa kojim coding agentima cmux radi?",
"faqAgentsA": "Sa svima. cmux je terminal, tako da svaki agent koji radi u terminalu funkcioniše odmah: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent i sve ostalo što možete pokrenuti iz komandne linije.",
"faqNotificationsQ": "Kako funkcionišu notifikacije?",
"faqNotificationsA": "Kada proces treba pažnju, cmux prikazuje notifikacijske prstenove oko panela, bedževe nepročitanih u bočnoj traci, notifikacijski popover i macOS desktop notifikaciju. Ovi se aktiviraju automatski putem standardnih terminalskih escape sekvenci (OSC 9/99/777), ili ih možete pokrenuti pomoću <cliLink>cmux CLI</cliLink> i <hooksLink>Claude Code hooks</hooksLink>.",
"faqShortcutsQ": "Mogu li prilagoditi prečice na tastaturi?",
"faqShortcutsA": "Terminalne prečice se čitaju iz vaše Ghostty konfiguracijske datoteke (<configPath>~/.config/ghostty/config</configPath>). cmux-specifične prečice (radni prostori, razdjelnice, preglednik, notifikacije) se mogu prilagoditi u Postavkama. Pogledajte <link>podrazumijevane prečice</link> za kompletnu listu.",
"faqTmuxQ": "Kako se poredi sa tmux-om?",
"faqTmuxA": "tmux je multiplekser terminala koji radi unutar bilo kojeg terminala. cmux je nativna macOS aplikacija sa GUI-jem: vertikalni tabovi, podijeljeni paneli, ugrađeni preglednik i socket API su svi ugrađeni. Nisu potrebne konfiguracijske datoteke niti prefix tasteri.",
"faqFreeQ": "Da li je cmux besplatan?",
"faqFreeA": "Da, cmux je besplatan za korištenje. Izvorni kod je dostupan na <link>GitHub-u</link>."
},
"community": {
"title": "Zajednica",
"description": "Povežite se sa drugim cmux korisnicima i timom iza njega.",
"discord": "Discord",
"discordAction": "Pridružite se našem Discord-u",
"discordDesc": "Razgovarajte sa zajednicom, dobijte pomoć i podijelite povratne informacije",
"githubAction": "Pogledaj na GitHub-u",
"githubDesc": "Označite repo zvjezdicom, prijavite probleme i doprinesite",
"twitter": "Twitter",
"twitterAction": "Pratite na X-u",
"twitterDesc": "Ažuriranja, objave i savjeti",
"youtube": "YouTube",
"youtubeAction": "Pretplatite se",
"youtubeDesc": "Demonstracije, tutorijali i vodiči",
"linkedin": "LinkedIn",
"linkedinAction": "Pratite nas",
"linkedinDesc": "Vijesti o kompaniji i inženjerska ažuriranja",
"metaTitle": "Zajednica — cmux",
"metaDescription": "Pridružite se cmux zajednici na Discordu, Twitteru, GitHubu i više"
},
"blog": {
"title": "Blog",
"layoutTitle": "cmux blog",
"metaTitle": "Blog",
"metaDescription": "Vijesti i ažuriranja od tima cmux",
"description": "Vijesti i ažuriranja od cmux tima",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Kako Cmd+Shift+U navigira između završenih agenata kroz radne prostore u cmux-u.",
"date": "4. mart 2026.",
"p1": "Moja omiljena cmux funkcionalnost je Cmd+Shift+U. Trenutno imam 17 otvorenih radnih prostora, svaki pokreće agenta. Nekada sam klikao kroz tabove i panel notifikacija da saznam šta je završeno. Kucanje je brže.",
"p2": "Cmd+Shift+U skače na najnoviju nepročitanu <link>notifikaciju</link>. U praksi to znači posljednjeg agenta koji je završio. Prebacuje na pravi radni prostor, fokusira tačan panel, bljeska ga da vidite gdje gledati i označava kao pročitano. Ako je notifikacija došla iz drugog prozora, taj prozor dolazi u prvi plan."
},
"zenOfCmux": {
"title": "Zen cmux-a",
"summary": "cmux je primitiv, ne rješenje. Daje vam sastavive dijelove, a vaš tok rada je na vama.",
"date": "27. februar 2026.",
"p1": "cmux ne propisuje kako programeri koriste svoje alate. To je terminal i preglednik sa CLI-jem, a ostatak je na vama.",
"p2": "cmux je primitiv, ne rješenje. Daje vam terminal, preglednik, notifikacije, radne prostore, razdjelnice, tabove i CLI za kontrolu svega toga. cmux vas ne prisiljava na jedan određen način korištenja coding agenata. Ono što izgradite od primitiva je vaše.",
"p3": "Najbolji programeri su oduvijek pravili vlastite alate. Niko još nije otkrio najbolji način rada sa agentima, a timovi koji grade zatvorene proizvode to definitivno nisu. Programeri koji su najbliži svojim bazama koda će to prvi otkriti.",
"p4": "Dajte milionu programera sastavive primitive i oni će kolektivno pronaći najefikasnije tokove rada brže nego što bi bilo koji produktni tim mogao osmisliti odozgo prema dolje."
},
"showHnLaunch": {
"title": "Lansiranje cmux-a na Show HN",
"summary": "cmux je dostigao #2 na Hacker News-u, podijelio ga Mitchell Hashimoto, i postao viralan u Japanu.",
"date": "21. februar 2026.",
"intro": "Objavili smo cmux na <link>Show HN</link> 19. februara:",
"blockquote1": "Pokrećem mnogo Claude Code i Codex sesija paralelno. Koristio sam Ghostty sa gomilom podijeljenih panela i oslanjao se na nativne macOS notifikacije da saznam kada mi agent treba. Ali tijelo notifikacije Claude Code-a je uvijek samo \"Claude is waiting for your input\" bez konteksta, i sa dovoljno otvorenih tabova, nisam više mogao ni pročitati naslove.",
"blockquote2": "Probao sam nekoliko coding orkestratora, ali većina su bile Electron/Tauri aplikacije i performanse su me smetale. Takođe jednostavno preferiram terminal jer GUI orkestratori vas zaključavaju u svoj tok rada. Zato sam napravio cmux kao nativnu macOS aplikaciju u Swift/AppKit-u. Koristi libghostty za renderiranje terminala i čita vašu postojeću Ghostty konfiguraciju za teme, fontove, boje i više.",
"blockquote3": "Glavna proširenja su bočna traka i sistem notifikacija. Bočna traka ima vertikalne tabove koji prikazuju git granu, radni direktorij, aktivne portove i najnoviji tekst notifikacije za svaki radni prostor. Sistem notifikacija prepoznaje terminalne sekvence (OSC 9/99/777) i ima CLI (cmux notify) koji možete povezati sa agent hookovima za Claude Code, OpenCode, itd. Kada agent čeka, njegov panel dobija plavi prsten i tab se osvijetli u bočnoj traci, tako da mogu vidjeti koji mi treba kroz razdjelnice i tabove. Cmd+Shift+U skače na najnoviji nepročitani.",
"blockquote4": "Ugrađeni preglednik ima skriptabilan API. Agenti mogu napraviti snapshot stabla pristupačnosti, dobiti reference elemenata, kliknuti, popuniti forme, izvršiti JS i čitati logove konzole. Možete podijeliti panel preglednika pored terminala i imati Claude Code koji direktno interaguje sa vašim dev serverom.",
"blockquote5": "Sve je skriptabilno kroz CLI i socket API: kreiranje radnih prostora/tabova, dijeljenje panela, slanje pritisaka tipki, otvaranje URL-ova u pregledniku.",
"hitNumber2": "Na vrhuncu je dostigao #2 na Hacker News-u. Mitchell Hashimoto ga je podijelio:",
"favoriteComment": "Moj omiljeni komentar iz <link>HN teme</link>:",
"viralJapan": "Iznenađujuće, cmux je postao viralan u Japanu:",
"translation": "Prijevod: \"Ovo izgleda dobro. Terminalna aplikacija bazirana na Ghostty-ju dizajnirana da se ne izgubite pokretajući više CLI-jeva poput Claude Code-a paralelno. Panel koji čeka unos dobija plavi okvir i ima vlastiti sistem notifikacija.\"",
"viralChina": "I polu-viralan u Kini:",
"extensions": "Još jedna uzbudljiva stvar je bila vidjeti ljude kako grade na cmux CLI-ju. sasha je napravio pi-cmux proširenje koje prikazuje informacije o modelu, korištenje tokena i stanje agenta u bočnoj traci:",
"scriptable": "Sve u cmux-u je skriptabilno kroz CLI: kreiranje radnih prostora, slanje pritisaka tipki, kontrola preglednika, čitanje notifikacija. Dio cmux filozofije je biti programabilan i sastaviv, tako da ljudi mogu prilagoditi način na koji rade sa coding agentima. Stanje tehnike za coding agente se brzo mijenja, i ne želite biti zaključani u nefleksibilni GUI orkestrator koji ne može pratiti.",
"cta": "Ako pokrećete više coding agenata, <link>probajte cmux</link>."
},
"introducingCmux": {
"title": "Predstavljamo cmux",
"summary": "Nativni macOS terminal izgrađen na Ghostty-ju, dizajniran za pokretanje više AI coding agenata jedan pored drugog.",
"date": "12. februar 2026.",
"p1": "cmux je nativna macOS terminalna aplikacija izgrađena na Ghostty-ju, dizajnirana od temelja za programere koji pokreću više AI coding agenata istovremeno.",
"whyTitle": "Zašto cmux?",
"whyP": "Moderni razvojni tokovi rada često uključuju pokretanje nekoliko agenata odjednom. Claude Code, Codex i drugi alati, svaki u svom terminalu. Praćenje koji trebaju pažnju i brzo prebacivanje između njih je problem koji cmux rješava.",
"featuresTitle": "Ključne funkcionalnosti",
"getStartedTitle": "Počnite",
"getStartedP": "Instalirajte cmux putem Homebrew-a ili preuzmite DMG iz <link>vodiča za početak</link>.",
"featureVerticalTabsLabel": "Vertikalni tabovi",
"featureVerticalTabsDesc": "pogledajte sve terminale na prvi pogled u bočnoj traci",
"featureNotificationsLabel": "Notifikacijski prstenovi",
"featureNotificationsDesc": "tabovi bljeskaju kada agent treba vaš unos",
"featureSplitPanesLabel": "Podijeljeni paneli",
"featureSplitPanesDesc": "horizontalni i vertikalni razdjelnici unutar svakog radnog prostora",
"featureSocketApiLabel": "Socket API",
"featureSocketApiDesc": "programska kontrola za kreiranje tabova i slanje unosa",
"featureGpuLabel": "GPU-ubrzano",
"featureGpuDesc": "pokreće libghostty za glatko renderiranje"
}
},
"zenOfCmux": {
"metaTitle": "Zen cmux-a",
"metaDescription": "cmux je primitiv, ne rješenje. Daje vam komposabilne dijelove i vaš radni tok je na vama."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "Nova prečica na tastaturi koja mijenja način interakcije s cmux-om."
},
"showHnLaunch": {
"metaTitle": "Lansiranje cmux-a na Show HN",
"metaDescription": "Priča o lansiranju cmux-a na Hacker News."
},
"introducingCmux": {
"metaTitle": "Predstavljamo cmux",
"metaDescription": "Zašto smo napravili cmux, novi terminal za macOS."
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "Početak rada",
"metaDescription": "Instalirajte cmux, nativni macOS terminal za AI coding agente. Homebrew, DMG preuzimanje, CLI podešavanje i automatska ažuriranja putem Sparkle-a.",
"intro": "cmux je lagani, nativni macOS terminal izgrađen na Ghostty-ju za upravljanje više AI coding agenata. Sadrži vertikalne tabove, panel notifikacija i socket-bazirani kontrolni API.",
"install": "Instalacija",
"dmgRecommended": "DMG (preporučeno)",
"dmgDesc": "Otvorite .dmg i prevucite cmux u folder Aplikacije. cmux se automatski ažurira putem Sparkle-a, tako da trebate preuzeti samo jednom.",
"homebrew": "Homebrew",
"updateLater": "Za kasnije ažuriranje:",
"firstLaunchCallout": "Prilikom prvog pokretanja, macOS može zatražiti potvrdu za otvaranje aplikacije od identificiranog developera. Kliknite <strong>Otvori</strong> za nastavak.",
"verifyTitle": "Provjera instalacije",
"verifyDesc": "Otvorite cmux i trebali biste vidjeti:",
"verifyItem1": "Prozor terminala sa vertikalnom bočnom trakom tabova na lijevoj strani",
"verifyItem2": "Jedan inicijalni radni prostor već otvoren",
"verifyItem3": "Ghostty-pokretan terminal spreman za unos",
"cliSetup": "Podešavanje CLI-ja",
"cliDesc": "cmux uključuje alat komandne linije za automatizaciju. Unutar cmux terminala radi automatski. Za korištenje CLI-ja izvan cmux-a, kreirajte simboličku vezu:",
"cliThen": "Zatim možete pokretati komande poput:",
"autoUpdates": "Automatska ažuriranja",
"autoUpdatesDesc": "cmux automatski provjerava ažuriranja putem Sparkle-a. Kada je ažuriranje dostupno, vidjet ćete oznaku ažuriranja u naslovnoj traci. Možete takođe ručno provjeriti putem cmux > Check for Updates u traci menija.",
"sessionRestore": "Obnova sesije (trenutno ponašanje)",
"sessionRestoreDesc": "Nakon ponovnog pokretanja, cmux obnavlja samo raspored i metapodatke:",
"sessionItem1": "Raspored prozora, radnih prostora i panela",
"sessionItem2": "Radne direktorije",
"sessionItem3": "Terminal scrollback (po principu najboljeg napora)",
"sessionItem4": "URL preglednika i historija navigacije",
"sessionCallout": "cmux još ne obnavlja stanje živih procesa. Aktivne sesije terminalnih aplikacija kao što su Claude Code, tmux i vim se ne nastavljaju nakon ponovnog pokretanja aplikacije.",
"requirements": "Zahtjevi",
"reqItem1": "macOS 14.0 ili noviji",
"reqItem2": "Apple Silicon ili Intel Mac",
"metaTitle": "Početak"
},
"concepts": {
"title": "Koncepti",
"metaDescription": "Kako cmux organizuje terminale: prozori, radni prostori, paneli i površine. Hijerarhija iza bočne trake, razdjelnica i socket API-ja.",
"intro": "cmux organizuje vaše terminale u hijerarhiju od četiri nivoa. Razumijevanje ovih nivoa pomaže pri korištenju socket API-ja, CLI-ja i prečica na tastaturi.",
"hierarchy": "Hijerarhija",
"windowTitle": "Prozor",
"windowDesc": "macOS prozor. Otvorite više prozora sa {shortcut}. Svaki prozor ima svoju bočnu traku sa nezavisnim radnim prostorima.",
"workspaceTitle": "Radni prostor",
"workspaceDesc": "Stavka u bočnoj traci. Svaki radni prostor sadrži jedan ili više podijeljenih panela. Radni prostori su ono što vidite u lijevoj bočnoj traci.",
"workspaceNote": "U korisničkom interfejsu i prečicama na tastaturi, radni prostori se često nazivaju \"tabovi\" jer se ponašaju kao tabovi u bočnoj traci. Socket API i varijable okruženja koriste termin \"workspace\".",
"contextHeader": "Kontekst",
"termUsedHeader": "Korišteni termin",
"sidebarUI": "Korisnički interfejs bočne trake",
"tab": "Tab",
"keyboardShortcuts": "Prečice na tastaturi",
"workspaceOrTab": "Radni prostor ili tab",
"socketAPI": "Socket API",
"environmentVariable": "Varijabla okruženja",
"workspaceShortcuts": "Prečice: {new} (novi), {jump} (skok), {close} (zatvori), {prevNext} (prethodni/sljedeći)",
"paneTitle": "Panel",
"paneDesc": "Podijeljena regija unutar radnog prostora. Kreira se dijeljenjem sa {right} (desno) ili {down} (dolje). Navigirajte između panela sa {nav} + strelice.",
"paneNote": "Svaki panel može sadržavati više površina (tabova unutar panela).",
"surfaceTitle": "Površina",
"surfaceDesc": "Tab unutar panela. Svaki panel ima svoju traku tabova i može sadržavati više površina. Kreira se sa {new}, navigira sa {prev} / {next} ili {jump}.",
"surfaceNote": "Površine su individualne terminalne ili pregledničke sesije sa kojima interagujete. Svaka površina ima svoju CMUX_SURFACE_ID varijablu okruženja.",
"panelTitle": "Panel",
"panelDesc": "Sadržaj unutar površine. Trenutno dva tipa:",
"panelTerminal": "Terminal: Ghostty terminalna sesija",
"panelBrowser": "Preglednik: ugrađeni web prikaz",
"panelNote": "Panel je uglavnom interni koncept. U socket API-ju i CLI-ju, interagujete sa površinama, a ne direktno sa panelima.",
"visualExample": "Vizualni primjer",
"visualExampleDesc": "U ovom primjeru:",
"visualItem1": "Prozor sadrži bočnu traku sa tri radna prostora (dev, server, logs)",
"visualItem2": "Radni prostor \"dev\" je odabran, prikazuje dva panela jedan pored drugog",
"visualItem3": "Panel 1 ima dvije površine ([S1] i [S2] u traci tabova), sa aktivnom S1",
"visualItem4": "Panel 2 ima jednu površinu",
"visualItem5": "Svaka površina sadrži panel (terminal u ovom slučaju)",
"summary": "Sažetak",
"levelHeader": "Nivo",
"whatItIsHeader": "Šta je",
"createdByHeader": "Kreiran sa",
"identifiedByHeader": "Identifikovan sa",
"macosWindow": "macOS prozor",
"sidebarEntry": "Stavka u bočnoj traci",
"splitRegion": "Podijeljena regija",
"tabWithinPane": "Tab unutar panela",
"terminalOrBrowser": "Terminal ili preglednik",
"automatic": "Automatski",
"paneIdSocket": "ID panela (socket API)",
"panelIdInternal": "ID panela (interno)",
"metaTitle": "Koncepti"
},
"configuration": {
"title": "Konfiguracija",
"metaDescription": "Konfigurirajte cmux putem Ghostty konfiguracijskih datoteka. Font, tema, boje, stil podijeljenih panela, scrollback i postavke aplikacije za način automatizacije.",
"intro": "cmux čita konfiguraciju iz Ghostty konfiguracijskih datoteka, pružajući vam poznate opcije ako dolazite iz Ghostty-ja.",
"configLocations": "Lokacije konfiguracijskih datoteka",
"configLocationsDesc": "cmux traži konfiguraciju na ovim lokacijama (redom):",
"createConfig": "Kreirajte konfiguracijsku datoteku ako ne postoji:",
"appearance": "Izgled",
"font": "Font",
"colors": "Boje",
"splitPanes": "Podijeljeni paneli",
"behavior": "Ponašanje",
"scrollback": "Scrollback",
"workingDirectory": "Radni direktorij",
"appSettings": "Postavke aplikacije",
"appSettingsDesc": "Postavke unutar aplikacije su dostupne putem cmux > Settings ({shortcut}):",
"themeMode": "Način teme",
"themeSystem": "Sistem: prati macOS izgled",
"themeLight": "Svijetla: uvijek svijetli način",
"themeDark": "Tamna: uvijek tamni način",
"automationMode": "Način automatizacije",
"automationModeDesc": "Nivo pristupa kontrolnom socketu:",
"automationOff": "Isključeno: bez socket kontrole (najsigurnije)",
"automationCmux": "Samo cmux procesi: samo procesi pokrenuti unutar cmux terminala se mogu povezati",
"automationAll": "allowAll: dozvoli bilo kojem lokalnom procesu da se poveže (CMUX_SOCKET_MODE=allowAll, samo putem varijable okruženja)",
"automationCallout": "Na dijeljenim mašinama, razmislite o korištenju načina \"Isključeno\" ili \"Samo cmux procesi\".",
"browserLinkBehavior": "Ponašanje linkova preglednika",
"browserLinkDesc": "U Postavke > Preglednik, cmux izlaže dvije liste hostova sa različitim namjenama:",
"browserHostsEmbed": "Hostovi za otvaranje u ugrađenom pregledniku: primjenjuje se na linkove kliknute iz terminalskog izlaza. Hostovi na ovoj listi se otvaraju u cmux-u; ostali hostovi se otvaraju u vašem podrazumijevanom pregledniku. Podržava jedan host ili wildcard po liniji (na primjer: example.com, *.internal.example).",
"browserHostsHttp": "HTTP hostovi dozvoljeni u ugrađenom pregledniku: primjenjuje se samo na HTTP (ne-HTTPS) URL-ove. Hostovi na ovoj listi se mogu otvoriti u cmux-u bez upozorenja. Podrazumijevane vrijednosti uključuju localhost, 127.0.0.1, ::1, 0.0.0.0 i *.localtest.me.",
"exampleConfig": "Primjer konfiguracije",
"metaTitle": "Konfiguracija"
},
"keyboardShortcuts": {
"title": "Prečice na tastaturi",
"description": "Sve prečice na tastaturi dostupne u cmux-u, grupirane po kategorijama.",
"metaDescription": "Sve cmux prečice na tastaturi za radne prostore, površine, podijeljene panele, preglednik, notifikacije, pretragu i upravljanje prozorima na macOS-u.",
"searchPlaceholder": "Pretraži prečice...",
"searchLabel": "Pretraži prečice na tastaturi",
"noResults": "Prečice nisu pronađene",
"noResultsHint": "Pokušajte sa drugim pojmom za pretragu",
"cat": {
"workspaces": "Radni prostori",
"workspacesBlurb": "Radni prostori se nalaze u bočnoj traci. Svaki radni prostor ima vlastiti set panela i površina.",
"surfaces": "Površine",
"surfacesBlurb": "Površine su tabovi unutar panela.",
"splitPanes": "Podijeljeni paneli",
"browser": "Preglednik",
"notifications": "Notifikacije",
"find": "Pretraga",
"terminal": "Terminal",
"window": "Prozor"
},
"sc": {
"ws-new": "Novi radni prostor",
"ws-jump-1-8": "Skok na radni prostor 18",
"ws-jump-last": "Skok na posljednji radni prostor",
"ws-close": "Zatvori radni prostor",
"ws-rename": "Preimenuj radni prostor",
"sf-new": "Nova površina",
"sf-prev-1": "Prethodna površina",
"sf-prev-2": "Prethodna površina",
"sf-jump-1-8": "Skok na površinu 18",
"sf-jump-last": "Skok na posljednju površinu",
"sf-close": "Zatvori površinu",
"sp-right": "Podijeli desno",
"sp-down": "Podijeli dolje",
"sp-focus": "Fokusiraj panel po smjeru",
"sp-browser-right": "Podijeli preglednik desno",
"sp-browser-down": "Podijeli preglednik dolje",
"br-open": "Otvori površinu preglednika",
"br-addr": "Fokusiraj adresnu traku",
"br-forward": "Naprijed",
"br-reload": "Ponovo učitaj stranicu",
"br-devtools": "Otvori Developer Tools",
"nt-panel": "Prikaži panel notifikacija",
"nt-latest": "Skok na najnoviju nepročitanu",
"nt-flash": "Pokreni bljesak",
"fd-find": "Pronađi",
"fd-next-prev": "Pronađi sljedeću / prethodnu",
"fd-hide": "Sakrij traku pretrage",
"fd-selection": "Koristi selekciju za pretragu",
"tm-clear": "Obriši scrollback",
"tm-copy": "Kopiraj (sa selekcijom)",
"tm-paste": "Zalijepi",
"tm-font": "Povećaj / smanji font",
"tm-reset": "Resetuj veličinu fonta",
"wn-new": "Novi prozor",
"wn-settings": "Postavke",
"wn-reload": "Ponovo učitaj konfiguraciju",
"wn-quit": "Izađi"
},
"metaTitle": "Prečice na tastaturi"
},
"api": {
"title": "API Referenca",
"metaDescription": "cmux CLI i Unix socket API referenca. Upravljanje radnim prostorima, podijeljeni paneli, kontrola unosa, notifikacije, metapodaci bočne trake, varijable okruženja i metode detekcije.",
"intro": "cmux pruža i CLI alat i Unix socket za programsku kontrolu. Svaka komanda je dostupna kroz oba interfejsa.",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "Putanja",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Tagirani debug build",
"socketOverride": "Zaobiđite sa CMUX_SOCKET_PATH varijablom okruženja. Pošaljite jedan JSON zahtjev terminiran novim redom po pozivu:",
"socketCallout": "JSON socket zahtjevi moraju koristiti method i params. Stari v1 JSON formati poput <legacy>'{'\"command\":\"...\"'}'</legacy> nisu podržani.",
"accessModes": "Načini pristupa",
"modeHeader": "Način",
"descriptionHeader": "Opis",
"howToEnableHeader": "Kako omogućiti",
"offMode": "Socket onemogućen",
"offEnable": "UI postavki ili CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "Samo procesi pokrenuti unutar cmux terminala se mogu povezati.",
"cmuxOnlyEnable": "Podrazumijevani način u UI-ju postavki",
"allowAllMode": "Dozvoli bilo kojem lokalnom procesu da se poveže (bez provjere porijekla).",
"allowAllEnable": "Samo putem varijable okruženja: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "Na dijeljenim mašinama, koristite Isključeno ili Samo cmux procesi.",
"cliOptions": "CLI opcije",
"flagHeader": "Zastavica",
"customSocketPath": "Prilagođena putanja socketa",
"outputJson": "Izlaz u JSON formatu",
"targetWindow": "Ciljaj specifični prozor",
"targetWorkspace": "Ciljaj specifični radni prostor",
"targetSurface": "Ciljaj specifičnu površinu",
"idFormat": "Kontrola formata identifikatora u JSON izlazu",
"workspaceCommands": "Komande radnih prostora",
"listWorkspacesDesc": "Izlistaj sve otvorene radne prostore.",
"newWorkspaceDesc": "Kreiraj novi radni prostor.",
"selectWorkspaceDesc": "Prebaci se na specifični radni prostor.",
"currentWorkspaceDesc": "Dobij trenutno aktivni radni prostor.",
"closeWorkspaceDesc": "Zatvori radni prostor.",
"splitCommands": "Komande razdjelnica",
"newSplitDesc": "Kreiraj novi podijeljeni panel. Smjerovi: left, right, up, down.",
"listSurfacesDesc": "Izlistaj sve površine u trenutnom radnom prostoru.",
"focusSurfaceDesc": "Fokusiraj specifičnu površinu.",
"inputCommands": "Komande unosa",
"sendDesc": "Pošalji tekstualni unos u fokusirani terminal.",
"sendKeyDesc": "Pošalji pritisak tipke. Tipke: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "Pošalji tekst na specifičnu površinu.",
"sendKeySurfaceDesc": "Pošalji pritisak tipke na specifičnu površinu.",
"notificationCommands": "Komande notifikacija",
"notifyDesc": "Pošalji notifikaciju.",
"listNotificationsDesc": "Izlistaj sve notifikacije.",
"clearNotificationsDesc": "Obriši sve notifikacije.",
"sidebarMetadata": "Komande metapodataka bočne trake",
"sidebarMetadataDesc": "Postavite statusne oznake, trake napretka i zapise u bočnoj traci za bilo koji radni prostor. Korisno za build skripte, CI integracije i AI coding agente koji žele prikazati stanje na prvi pogled.",
"setStatusDesc": "Postavite statusnu oznaku u bočnoj traci. Koristite jedinstveni ključ tako da različiti alati mogu upravljati svojim unosima.",
"clearStatusDesc": "Uklonite unos statusa bočne trake po ključu.",
"listStatusDesc": "Izlistajte sve unose statusa bočne trake za radni prostor.",
"setProgressDesc": "Postavite traku napretka u bočnoj traci (0.0 do 1.0).",
"clearProgressDesc": "Obrišite traku napretka bočne trake.",
"logDesc": "Dodajte zapis u dnevnik bočne trake. Nivoi: info, progress, success, warning, error.",
"clearLogDesc": "Obrišite sve zapise dnevnika bočne trake.",
"listLogDesc": "Izlistajte zapise dnevnika bočne trake.",
"sidebarStateDesc": "Ispišite sve metapodatke bočne trake (cwd, git grana, portovi, status, napredak, dnevnici).",
"utilityCommands": "Pomoćne komande",
"pingDesc": "Provjerite da li cmux radi i odgovara.",
"capabilitiesDesc": "Izlistajte dostupne socket metode i trenutni način pristupa.",
"identifyDesc": "Prikažite fokusirani kontekst prozora/radnog prostora/panela/površine.",
"envVariables": "Varijable okruženja",
"variableHeader": "Varijabla",
"socketPathDesc": "Zaobiđite putanju socketa koju koriste CLI i integracije",
"socketEnableDesc": "Prisilno omogućite/onemogućite socket (1/0, true/false, on/off)",
"socketModeDesc": "Zaobiđite način pristupa (cmuxOnly, allowAll, off). Takođe prihvata cmux-only/cmux_only i allow-all/allow_all",
"workspaceIdDesc": "Automatski postavljeno: ID trenutnog radnog prostora",
"surfaceIdDesc": "Automatski postavljeno: ID trenutne površine",
"termProgramDesc": "Postavljeno na ghostty",
"termDesc": "Postavljeno na xterm-ghostty",
"envCallout": "Starije CMUX_SOCKET_MODE vrijednosti full i notifications se još prihvataju radi kompatibilnosti.",
"detectingCmux": "Detekcija cmux-a",
"examples": "Primjeri",
"pythonClient": "Python klijent",
"shellScript": "Shell skripta",
"buildScriptNotification": "Build skripta sa notifikacijom",
"metaTitle": "API referenca"
},
"notifications": {
"title": "Notifikacije",
"metaDescription": "Šaljite desktop notifikacije iz AI agenata i skripti u cmux-u. CLI, OSC 99/777 escape sekvence i integracija Claude Code hooks.",
"intro": "cmux podržava desktop notifikacije, omogućavajući AI agentima i skriptama da vas obavijeste kada trebaju pažnju.",
"lifecycle": "Životni ciklus",
"received": "Primljeno: notifikacija se pojavljuje u panelu, desktop obavještenje se pokreće (ako nije potisnuto)",
"unread": "Nepročitano: bedž prikazan na tabu radnog prostora",
"read": "Pročitano: obrisano kada pogledate taj radni prostor",
"cleared": "Obrisano: uklonjeno iz panela",
"suppression": "Potiskivanje",
"suppressionDesc": "Desktop obavještenja se potiskuju kada:",
"suppressItem1": "cmux prozor je fokusiran",
"suppressItem2": "Specifični radni prostor koji šalje notifikaciju je aktivan",
"suppressItem3": "Panel notifikacija je otvoren",
"notificationPanel": "Panel notifikacija",
"notificationPanelDesc": "Pritisnite <openShortcut>⌘⇧I</openShortcut> za otvaranje panela notifikacija. Kliknite na notifikaciju za skok na taj radni prostor. Pritisnite <jumpShortcut>⌘⇧U</jumpShortcut> za direktan skok na radni prostor sa najnovijom nepročitanom notifikacijom.",
"customCommand": "Prilagođena komanda",
"customCommandDesc": "Pokrenite shell komandu svaki put kada je notifikacija zakazana. Postavite je u Postavke > Aplikacija > Komanda notifikacije. Komanda se pokreće putem /bin/sh -c sa ovim varijablama okruženja:",
"customCommandNote": "Komanda se pokreće nezavisno od sistemskog birača zvukova. Postavite birač na \"Ništa\" za korištenje samo prilagođene komande, ili zadržite oboje za sistemski zvuk plus prilagođenu akciju.",
"sending": "Slanje notifikacija",
"cli": "CLI",
"osc777Title": "OSC 777 (jednostavno)",
"osc777Desc": "RXVT protokol koristi fiksni format sa naslovom i tijelom:",
"osc99Title": "OSC 99 (bogato)",
"osc99Desc": "Kitty protokol podržava podnaslove i ID-eve notifikacija:",
"variableHeader": "Varijabla",
"descriptionHeader": "Opis",
"envTitle": "Naslov notifikacije (ime radnog prostora ili aplikacije)",
"envSubtitle": "Podnaslov notifikacije",
"envBody": "Tekst tijela notifikacije",
"cmpTitleBody": "Naslov + tijelo",
"cmpSubtitle": "Podnaslov",
"cmpNotificationId": "ID notifikacije",
"cmpComplexity": "Složenost",
"cmpYes": "Da",
"cmpNo": "Ne",
"cmpHigher": "Viša",
"cmpLower": "Niža",
"featureHeader": "Funkcionalnost",
"comparisonCallout": "Koristite OSC 777 za jednostavne notifikacije. Koristite OSC 99 kada trebate podnaslove ili ID-eve notifikacija. Koristite CLI (cmux notify) za najlakšu integraciju.",
"claudeCodeHooks": "Claude Code hooks",
"claudeCodeHooksDesc": "cmux se integriše sa <link>Claude Code</link> putem hookova da vas obavijesti kada su zadaci završeni.",
"createHookScript": "1. Kreirajte hook skriptu",
"configureClaude": "2. Konfigurirajte Claude Code",
"restartNote": "Ponovo pokrenite Claude Code da primijenite hookove.",
"integrationExamples": "Primjeri integracije",
"notifyAfterLong": "Notifikacija nakon duge komande",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux passthrough",
"tmuxDesc": "Ako koristite tmux unutar cmux-a, omogućite passthrough:",
"metaTitle": "Notifikacije"
},
"browserAutomation": {
"title": "Automatizacija preglednika",
"metaDescription": "Referenca cmux browser komandi za navigaciju, DOM interakciju, čekanje, inspekciju, JavaScript evaluaciju, tabove, dijaloge, okvire, preuzimanja i stanje preglednika.",
"intro": "Grupa cmux browser komandi pruža automatizaciju preglednika nad cmux browser površinama. Koristite je za navigaciju, interakciju sa DOM elementima, inspekciju stanja stranice, evaluaciju JavaScript-a i upravljanje podacima sesije preglednika.",
"commandIndex": "Indeks komandi",
"categoryHeader": "Kategorija",
"subcommandsHeader": "Podkomande",
"navAndTargeting": "Navigacija i ciljanje",
"waiting": "Čekanje",
"domInteraction": "DOM interakcija",
"inspection": "Inspekcija",
"jsAndInjection": "JavaScript i injekcija",
"framesDialogsDownloads": "Okviri, dijalozi, preuzimanja",
"stateAndSession": "Stanje i podaci sesije",
"tabsAndLogs": "Tabovi i dnevnici",
"targetingSurface": "Ciljanje browser površine",
"targetingDesc": "Većina podkomandi zahtijeva ciljnu površinu. Možete je proslijediti poziciono ili sa --surface.",
"navigation": "Navigacija",
"waitingSection": "Čekanje",
"waitingDesc": "Koristite wait za blokiranje dok selektori, tekst, fragmenti URL-a, stanje učitavanja ili JavaScript uslov ne budu zadovoljeni.",
"domSection": "DOM interakcija",
"domDesc": "Mutirajuće akcije podržavaju --snapshot-after za brzu verifikaciju u skriptama.",
"inspectionSection": "Inspekcija",
"inspectionDesc": "Koristite strukturirane gettere za skripte i snapshotove/screenshotove za ljudski pregled.",
"jsSection": "JavaScript evaluacija i injekcija",
"stateSection": "Stanje",
"stateDesc": "Komande podataka sesije pokrivaju kolačiće, lokalno/sesijsko skladište i potpune snapshotove stanja preglednika.",
"tabsSection": "Tabovi",
"tabsDesc": "Operacije sa browser tabovima se mapiraju na browser površine u aktivnoj grupi browser tabova.",
"consoleSection": "Konzola i greške",
"dialogsSection": "Dijalozi",
"framesSection": "Okviri",
"downloadsSection": "Preuzimanja",
"commonPatterns": "Uobičajeni obrasci",
"patternNavigate": "Navigiraj, čekaj, pregledaj",
"patternForm": "Popuni formu i provjeri tekst uspjeha",
"patternDebug": "Uhvati debug artefakte pri neuspjehu",
"patternSession": "Sačuvaj i obnovi sesiju preglednika",
"metaTitle": "Automatizacija preglednika"
},
"changelog": {
"title": "Zapisnik promjena",
"metaDescription": "cmux bilješke o izdanjima i historija verzija. Nove funkcionalnosti, ispravke grešaka i promjene za nativni macOS terminal.",
"metaTitle": "Dnevnik promjena"
},
"navItems": {
"gettingStarted": "Početak rada",
"concepts": "Koncepti",
"configuration": "Konfiguracija",
"keyboardShortcuts": "Prečice na tastaturi",
"apiReference": "API Referenca",
"browserAutomation": "Automatizacija preglednika",
"notifications": "Notifikacije",
"changelog": "Zapisnik promjena"
}
},
"legal": {
"privacyPolicy": "Politika privatnosti",
"termsOfService": "Uslovi korištenja",
"eula": "EULA"
},
"wallOfLove": {
"title": "Zid ljubavi",
"description": "Šta ljudi kažu o cmux-u."
},
"testimonials": {
"mitchellh": "Još jedan dan, još jedan projekat baziran na libghostty-ju, ovaj put macOS terminal sa vertikalnim tabovima, boljom organizacijom/notifikacijama, ugrađenim/skriptabilnim preglednikom specifično usmjeren na ljude koji koriste mnogo terminalskih agentskih tokova rada.",
"schrockn": "Ovo je tačno proizvod koji sam tražio. Nakon dva sata jutros sam zaljubljen.",
"egrefen": "Koristio sam ovo cijeli vikend i nevjerovatno je.",
"max4c": "ovo je bio moj omiljeni alat posljednje dvije sedmice",
"asaza": "cmux izgleda toliko dobro da je možda konačno vrijeme da se oprostim od VSCode-a",
"johnthedebs": "Hej, ovo izgleda ozbiljno odlično. Volim ideje ovdje, specifično: programabilnost, slojeviti UI, preglednik sa API-jem. Radujem se da ovo probam. Takođe želim dodati da stvarno cijenim Mitchell Hashimoto-a što je kreirao libghostty; osjeća se kao uzbudljivo vrijeme za korisnike terminala.",
"joeriddles": "Vertikalni tabovi u mom terminalu! Nikada nisam na to pomislio. Koristim i volim Firefox vertikalne tabove.",
"dchu17": "Dao sam ovome priliku i bilo je prilično intuitivno. Dobar posao!",
"afruth": "Sviđa mi se, koristio sam ga proteklog dana na tri paralelna projekta, svaki sa nekoliko worktree-ova. Imati ovo u paru sa lazygit-om i yazi / nvim-om učinilo me malo produktivnijim nego obično bez jurnjave za više ghostty / iTerm instanci. Takođe se osjeća prirodnije od tmux-a.",
"northprint": "Probao sam cmux jer je izgledao dobro — dobar je",
"indykish": "cmux je prilično dobar.",
"kataring": "Prešao sam na cmux.dev",
"scottw": "Ovo je bio tako koristan nalaz. Ne mogu ga dovoljno preporučiti.",
"johnblythe": "uzeo ovo tokom vikenda i volio sam ga. čekao sam nešto ovako.",
"bchris91": "Ovo je tačno ono što sam htio. Nevjerovatan posao, hvala!",
"connorelsea": "Koristim ovo sedmicu i fantastično je. Vertikalni tab za svaki zadatak u toku. Unutra, Claude na jednoj strani a preglednik sa PR-ovima i resursima na drugoj, prebacujem se između zadataka i ostajam organizovan. Pomiješajte to sa skillovima da Claude prati CI rekurzivno itd. osjećam se prosvijećenim iskreno",
"tonkotsuboy": "Prešao sam sa Warpa na Ghostty početkom godine, ali sad sam prešao na cmux. Vertikalni tabovi su praktični, i cijenim što dobijem notifikaciju kada Claude Code zadaci završe. Baziran je na Ghostty-ju tako da munjevite performanse ostaju. Prikaz grane i completioni koje sam podesio u Ghostty-ju i dalje rade."
},
"languageSwitcher": {
"label": "Jezik"
}
}

587
web/messages/da.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — Terminalen bygget til multitasking",
"description": "Nativ macOS-terminal bygget på Ghostty. Fungerer med Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider og ethvert CLI-værktøj. Lodrette faner, notifikationsringe, delte paneler og en socket-API.",
"ogDescription": "Nativ macOS-terminal til AI-kodningsagenter. Fungerer med Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider og ethvert CLI-værktøj."
},
"common": {
"downloadForMac": "Download til Mac",
"viewOnGitHub": "Se på GitHub",
"closeMenu": "Luk menu",
"openMenu": "Åbn menu",
"toggleTheme": "Skift tema",
"backToBlog": "Tilbage til blog",
"readTheDocs": "Læs dokumentationen",
"viewChangelog": "Se ændringslog"
},
"nav": {
"docs": "Dokumentation",
"blog": "Blog",
"changelog": "Ændringslog",
"community": "Fællesskab",
"github": "GitHub"
},
"footer": {
"product": "Produkt",
"resources": "Ressourcer",
"legal": "Juridisk",
"social": "Sociale medier",
"blog": "Blog",
"community": "Fællesskab",
"docs": "Dokumentation",
"changelog": "Ændringslog",
"privacy": "Privatliv",
"terms": "Vilkår",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "Kontakt",
"copyright": "© {year} Manaflow",
"language": "Sprog"
},
"home": {
"taglinePrefix": "Terminalen bygget til ",
"typingCodingAgents": "kodningsagenter",
"typingMultitasking": "multitasking",
"subtitle": "Native macOS-app bygget på Ghostty. Vertikale faner, notifikationsringe når agenter har brug for opmærksomhed, opdelte paneler og en socket API til automatisering.",
"features": "Funktioner",
"faq": "FAQ",
"communitySection": "Fællesskab",
"feature": {
"verticalTabs": "Vertikale faner",
"verticalTabsDesc": ": sidebar viser git branch, arbejdsmappe, porte og notifikationstekst",
"notificationRings": "Notifikationsringe",
"notificationRingsDesc": ": paneler lyser op når agenter har brug for opmærksomhed",
"inAppBrowser": "Indbygget browser",
"inAppBrowserDesc": ": opdel en browser ved siden af din terminal med en scriptbar API",
"splitPanes": "Opdelte paneler",
"splitPanesDesc": ": horisontale og vertikale opdelinger inden for hver fane",
"scriptable": "Scriptbar",
"scriptableDesc": ": CLI og socket API til automatisering og scripting",
"gpuAccelerated": "GPU-accelereret",
"gpuAcceleratedDesc": ": drevet af libghostty for jævn rendering",
"lightweight": "Letvægt",
"lightweightDesc": ": native Swift + AppKit, ingen Electron",
"keyboardShortcuts": "Tastaturgenveje",
"keyboardShortcutsDesc": ": <link>omfattende genveje</link> til workspaces, opdelinger, browser og mere"
},
"faqGhosttyQ": "Hvordan relaterer cmux sig til Ghostty?",
"faqGhosttyA": "cmux er ikke en fork af Ghostty. Den bruger <link>libghostty</link> som bibliotek til terminal-rendering, på samme måde som apps bruger WebKit til webvisninger. Ghostty er en selvstændig terminal; cmux er en anden app bygget oven på dens renderingsmotor.",
"faqPlatformQ": "Hvilke platforme understøttes?",
"faqPlatformA": "Kun macOS, indtil videre. cmux er en native Swift + AppKit-app.",
"faqAgentsQ": "Hvilke kodningsagenter fungerer cmux med?",
"faqAgentsA": "Alle sammen. cmux er en terminal, så enhver agent der kører i en terminal fungerer direkte: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent og alt andet du kan starte fra kommandolinjen.",
"faqNotificationsQ": "Hvordan fungerer notifikationer?",
"faqNotificationsA": "Når en proces har brug for opmærksomhed, viser cmux notifikationsringe omkring paneler, ulæste badges i sidebaren, en notifikations-popover og en macOS-desktopnotifikation. Disse udløses automatisk via standard terminal escape-sekvenser (OSC 9/99/777), eller du kan udløse dem med <cliLink>cmux CLI</cliLink> og <hooksLink>Claude Code hooks</hooksLink>.",
"faqShortcutsQ": "Kan jeg tilpasse tastaturgenveje?",
"faqShortcutsA": "Terminal-tastebindinger læses fra din Ghostty-konfigurationsfil (<configPath>~/.config/ghostty/config</configPath>). cmux-specifikke genveje (workspaces, opdelinger, browser, notifikationer) kan tilpasses i Indstillinger. Se <link>standardgenvejene</link> for en komplet liste.",
"faqTmuxQ": "Hvordan sammenligner det sig med tmux?",
"faqTmuxA": "tmux er en terminal multiplexer der kører inde i enhver terminal. cmux er en native macOS-app med en GUI: vertikale faner, opdelte paneler, en indbygget browser og en socket API er alle indbygget. Ingen konfigurationsfiler eller præfikstaster nødvendige.",
"faqFreeQ": "Er cmux gratis?",
"faqFreeA": "Ja, cmux er gratis at bruge. Kildekoden er tilgængelig på <link>GitHub</link>."
},
"community": {
"title": "Fællesskab",
"description": "Forbind med andre cmux-brugere og teamet bag det.",
"discord": "Discord",
"discordAction": "Deltag i vores Discord",
"discordDesc": "Chat med fællesskabet, få hjælp og del feedback",
"githubAction": "Se på GitHub",
"githubDesc": "Giv en stjerne, rapportér problemer og bidrag",
"twitter": "Twitter",
"twitterAction": "Følg på X",
"twitterDesc": "Opdateringer, meddelelser og tips",
"youtube": "YouTube",
"youtubeAction": "Abonnér",
"youtubeDesc": "Demoer, vejledninger og gennemgange",
"linkedin": "LinkedIn",
"linkedinAction": "Følg os",
"linkedinDesc": "Virksomhedsnyheder og tekniske opdateringer",
"metaTitle": "Fællesskab — cmux",
"metaDescription": "Bliv en del af cmux-fællesskabet på Discord, Twitter, GitHub og mere"
},
"blog": {
"title": "Blog",
"layoutTitle": "cmux blog",
"metaTitle": "Blog",
"metaDescription": "Nyheder og opdateringer fra cmux-teamet",
"description": "Nyheder og opdateringer fra cmux-teamet",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Hvordan Cmd+Shift+U navigerer mellem færdige agenter på tværs af workspaces i cmux.",
"date": "4. marts 2026",
"p1": "Min yndlingsfunktion i cmux er Cmd+Shift+U. Jeg har 17 workspaces åbne lige nu, hver med en kørende agent. Jeg plejede at klikke gennem faner og notifikationspanelet for at finde ud af hvad der var færdigt. Tastaturet er hurtigere.",
"p2": "Cmd+Shift+U springer til den nyeste ulæste <link>notifikation</link>. I praksis betyder det den sidste agent der blev færdig. Den skifter til det rigtige workspace, fokuserer det præcise panel, flasher det så du kan se hvor du skal kigge, og markerer det som læst. Hvis notifikationen kom fra et andet vindue, kommer det vindue forrest."
},
"zenOfCmux": {
"title": "The Zen of cmux",
"summary": "cmux er en byggesten, ikke en løsning. Den giver dig komponerbare dele, og din arbejdsgang er op til dig.",
"date": "27. februar 2026",
"p1": "cmux er ikke foreskrivende om hvordan udviklere bruger deres værktøjer. Det er en terminal og browser med en CLI, og resten er op til dig.",
"p2": "cmux er en byggesten, ikke en løsning. Den giver dig en terminal, en browser, notifikationer, workspaces, opdelinger, faner og en CLI til at styre det hele. cmux tvinger dig ikke ind i en forudbestemt måde at bruge kodningsagenter på. Hvad du bygger med byggestenene er dit.",
"p3": "De bedste udviklere har altid bygget deres egne værktøjer. Ingen har fundet den bedste måde at arbejde med agenter på endnu, og holdene bag lukkede produkter har bestemt heller ikke. Udviklerne tættest på deres egne kodebaser vil finde ud af det først.",
"p4": "Giv en million udviklere komponerbare byggesten, og de vil kollektivt finde de mest effektive arbejdsgange hurtigere end noget produktteam kunne designe oppefra."
},
"showHnLaunch": {
"title": "Lancering af cmux på Show HN",
"summary": "cmux nåede #2 på Hacker News, blev delt af Mitchell Hashimoto og gik viralt i Japan.",
"date": "21. februar 2026",
"intro": "Vi postede cmux på <link>Show HN</link> den 19. feb:",
"blockquote1": "Jeg kører mange Claude Code- og Codex-sessioner parallelt. Jeg brugte Ghostty med en masse opdelte paneler og stolede på native macOS-notifikationer til at vide hvornår en agent havde brug for mig. Men Claude Codes notifikationstekst er altid bare \"Claude is waiting for your input\" uden kontekst, og med nok faner åbne kunne jeg ikke engang læse titlerne længere.",
"blockquote2": "Jeg prøvede nogle kodningsorkestratorer, men de fleste var Electron/Tauri-apps og ydeevnen irriterede mig. Jeg foretrækker også bare terminalen, da GUI-orkestratorer låser dig ind i deres arbejdsgang. Så jeg byggede cmux som en native macOS-app i Swift/AppKit. Den bruger libghostty til terminal-rendering og læser din eksisterende Ghostty-konfiguration for temaer, skrifttyper, farver og mere.",
"blockquote3": "De vigtigste tilføjelser er sidebaren og notifikationssystemet. Sidebaren har vertikale faner der viser git branch, arbejdsmappe, lyttende porte og den seneste notifikationstekst for hvert workspace. Notifikationssystemet opfanger terminal-sekvenser (OSC 9/99/777) og har en CLI (cmux notify) du kan koble til agenthooks for Claude Code, OpenCode osv. Når en agent venter, får dens panel en blå ring og fanen lyser op i sidebaren, så jeg kan se hvilken der har brug for mig på tværs af opdelinger og faner. Cmd+Shift+U springer til den seneste ulæste.",
"blockquote4": "Den indbyggede browser har en scriptbar API. Agenter kan tage snapshot af tilgængelighedstræet, få element-refs, klikke, udfylde formularer, evaluere JS og læse konsollogfiler. Du kan opdele et browserpanel ved siden af din terminal og lade Claude Code interagere med din dev-server direkte.",
"blockquote5": "Alt er scriptbart gennem CLI og socket API: opret workspaces/faner, opdel paneler, send tastetryk, åbn URL'er i browseren.",
"hitNumber2": "På sit højeste nåede det #2 på Hacker News. Mitchell Hashimoto delte det:",
"favoriteComment": "Min yndlingskommentar fra <link>HN-tråden</link>:",
"viralJapan": "Overraskende gik cmux viralt i Japan:",
"translation": "Oversættelse: \"Det ser godt ud. En Ghostty-baseret terminalapp designet så du ikke farer vild når du kører flere CLI'er som Claude Code parallelt. Panelet der venter på input får en blå ramme, og den har sit eget notifikationssystem.\"",
"viralChina": "Og semi-viralt i Kina:",
"extensions": "En anden spændende ting var at se folk bygge oven på cmux CLI. sasha byggede en pi-cmux-udvidelse der viser modelinfo, tokenforbrug og agentstatus i sidebaren:",
"scriptable": "Alt i cmux er scriptbart gennem CLI: oprettelse af workspaces, afsendelse af tastetryk, styring af browseren, læsning af notifikationer. En del af cmux-filosofien er at være programmerbar og komponerbar, så folk kan tilpasse måden de arbejder med kodningsagenter på. State of the art for kodningsagenter ændrer sig hurtigt, og du vil ikke være låst ind i en ufleksibel GUI-orkestrator der ikke kan følge med.",
"cta": "Hvis du kører flere kodningsagenter, <link>så prøv cmux</link>."
},
"introducingCmux": {
"title": "Vi introducerer cmux",
"summary": "En native macOS-terminal bygget på Ghostty, designet til at køre flere AI-kodningsagenter side om side.",
"date": "12. februar 2026",
"p1": "cmux er en native macOS-terminalapplikation bygget oven på Ghostty, designet fra bunden til udviklere der kører flere AI-kodningsagenter samtidigt.",
"whyTitle": "Hvorfor cmux?",
"whyP": "Moderne udviklingsarbejdsgange involverer ofte at køre flere agenter på én gang. Claude Code, Codex og andre værktøjer, hver i deres egen terminal. At holde styr på hvilke der har brug for opmærksomhed og hurtigt skifte mellem dem er problemet cmux løser.",
"featuresTitle": "Nøglefunktioner",
"getStartedTitle": "Kom i gang",
"getStartedP": "Installér cmux via Homebrew eller download DMG'en fra <link>kom i gang-guiden</link>.",
"featureVerticalTabsLabel": "Vertikale faner",
"featureVerticalTabsDesc": "se alle dine terminaler med ét blik i en sidebar",
"featureNotificationsLabel": "Notifikationsringe",
"featureNotificationsDesc": "faner blinker når en agent har brug for dit input",
"featureSplitPanesLabel": "Opdelte paneler",
"featureSplitPanesDesc": "horisontale og vertikale opdelinger inden for hvert workspace",
"featureSocketApiLabel": "Socket API",
"featureSocketApiDesc": "programmatisk styring til oprettelse af faner og afsendelse af input",
"featureGpuLabel": "GPU-accelereret",
"featureGpuDesc": "drevet af libghostty for jævn rendering"
}
},
"zenOfCmux": {
"metaTitle": "Zen i cmux",
"metaDescription": "cmux er en primitiv, ikke en løsning. Det giver dig sammensættelige dele, og dit workflow er op til dig."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "Den nye tastaturgenvej, der ændrer din interaktion med cmux."
},
"showHnLaunch": {
"metaTitle": "Lancering af cmux på Show HN",
"metaDescription": "Historien om lanceringen af cmux på Hacker News."
},
"introducingCmux": {
"metaTitle": "Vi præsenterer cmux",
"metaDescription": "Hvorfor vi byggede cmux, en ny terminal til macOS."
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "Kom i gang",
"metaDescription": "Installér cmux, den native macOS-terminal til AI-kodningsagenter. Homebrew, DMG-download, CLI-opsætning og automatiske opdateringer via Sparkle.",
"intro": "cmux er en letvægts, native macOS-terminal bygget på Ghostty til håndtering af flere AI-kodningsagenter. Den har vertikale faner, et notifikationspanel og en socket-baseret kontrol-API.",
"install": "Installér",
"dmgRecommended": "DMG (anbefalet)",
"dmgDesc": "Åbn .dmg-filen og træk cmux til din Programmer-mappe. cmux opdaterer automatisk via Sparkle, så du kun behøver at downloade én gang.",
"homebrew": "Homebrew",
"updateLater": "For at opdatere senere:",
"firstLaunchCallout": "Ved første start kan macOS bede dig bekræfte åbning af en app fra en identificeret udvikler. Klik <strong>Åbn</strong> for at fortsætte.",
"verifyTitle": "Verificér installation",
"verifyDesc": "Åbn cmux, og du bør se:",
"verifyItem1": "Et terminalvindue med en vertikal fane-sidebar til venstre",
"verifyItem2": "Ét initialt workspace allerede åbent",
"verifyItem3": "Den Ghostty-drevne terminal klar til input",
"cliSetup": "CLI-opsætning",
"cliDesc": "cmux inkluderer et kommandolinjeværktøj til automatisering. Inde i cmux-terminaler fungerer det automatisk. For at bruge CLI udefra, opret et symlink:",
"cliThen": "Derefter kan du køre kommandoer som:",
"autoUpdates": "Automatiske opdateringer",
"autoUpdatesDesc": "cmux tjekker automatisk for opdateringer via Sparkle. Når en opdatering er tilgængelig, ser du en opdateringspille i titelbjælken. Du kan også tjekke manuelt via cmux > Søg efter opdateringer i menulinjen.",
"sessionRestore": "Sessionsgenoprettelse (nuværende adfærd)",
"sessionRestoreDesc": "Efter genstart genopretter cmux kun layout og metadata:",
"sessionItem1": "Vindue-, workspace- og panellayout",
"sessionItem2": "Arbejdsmapper",
"sessionItem3": "Terminal-scrollback (bedste indsats)",
"sessionItem4": "Browser-URL og navigationshistorik",
"sessionCallout": "cmux genopretter endnu ikke live procestilstand. Aktive terminalsessioner som Claude Code, tmux og vim genoptages ikke efter app-genstart.",
"requirements": "Krav",
"reqItem1": "macOS 14.0 eller nyere",
"reqItem2": "Apple Silicon eller Intel Mac",
"metaTitle": "Kom i gang"
},
"concepts": {
"title": "Koncepter",
"metaDescription": "Hvordan cmux organiserer terminaler: vinduer, workspaces, paneler og surfaces. Hierarkiet bag sidebaren, opdelinger og socket API.",
"intro": "cmux organiserer dine terminaler i et firedelt hierarki. Forståelse af disse niveauer hjælper når du bruger socket API, CLI og tastaturgenveje.",
"hierarchy": "Hierarki",
"windowTitle": "Vindue",
"windowDesc": "Et macOS-vindue. Åbn flere vinduer med {shortcut}. Hvert vindue har sin egen sidebar med uafhængige workspaces.",
"workspaceTitle": "Workspace",
"workspaceDesc": "En sidebarpost. Hvert workspace indeholder ét eller flere opdelte paneler. Workspaces er det du ser listet i venstre sidebar.",
"workspaceNote": "I brugerfladen og tastaturgenveje kaldes workspaces ofte \"faner\", da de opfører sig som faner i sidebaren. Socket API og miljøvariabler bruger termen \"workspace\".",
"contextHeader": "Kontekst",
"termUsedHeader": "Anvendt term",
"sidebarUI": "Sidebar-brugerflade",
"tab": "Fane",
"keyboardShortcuts": "Tastaturgenveje",
"workspaceOrTab": "Workspace eller fane",
"socketAPI": "Socket API",
"environmentVariable": "Miljøvariabel",
"workspaceShortcuts": "Genveje: {new} (ny), {jump} (spring til), {close} (luk), {prevNext} (forrige/næste)",
"paneTitle": "Panel",
"paneDesc": "Et opdelt område inden for et workspace. Oprettes ved at opdele med {right} (højre) eller {down} (ned). Navigér mellem paneler med {nav} + piletaster.",
"paneNote": "Hvert panel kan indeholde flere surfaces (faner inden for panelet).",
"surfaceTitle": "Surface",
"surfaceDesc": "En fane inden for et panel. Hvert panel har sin egen fanebjælke og kan indeholde flere surfaces. Oprettes med {new}, navigeres med {prev} / {next} eller {jump}.",
"surfaceNote": "Surfaces er de individuelle terminal- eller browsersessioner du interagerer med. Hver surface har sin egen CMUX_SURFACE_ID-miljøvariabel.",
"panelTitle": "Panel",
"panelDesc": "Indholdet inde i en surface. Aktuelt to typer:",
"panelTerminal": "Terminal: en Ghostty-terminalsession",
"panelBrowser": "Browser: en indlejret webvisning",
"panelNote": "Panel er primært et internt koncept. I socket API og CLI interagerer du med surfaces snarere end paneler direkte.",
"visualExample": "Visuelt eksempel",
"visualExampleDesc": "I dette eksempel:",
"visualItem1": "Vinduet indeholder en sidebar med tre workspaces (dev, server, logs)",
"visualItem2": "Workspace \"dev\" er valgt og viser to paneler side om side",
"visualItem3": "Panel 1 har to surfaces ([S1] og [S2] i fanebjælken), med S1 aktiv",
"visualItem4": "Panel 2 har én surface",
"visualItem5": "Hver surface indeholder et panel (en terminal i dette tilfælde)",
"summary": "Oversigt",
"levelHeader": "Niveau",
"whatItIsHeader": "Hvad det er",
"createdByHeader": "Oprettet af",
"identifiedByHeader": "Identificeret ved",
"macosWindow": "macOS-vindue",
"sidebarEntry": "Sidebarpost",
"splitRegion": "Opdelt område",
"tabWithinPane": "Fane inden for panel",
"terminalOrBrowser": "Terminal eller browser",
"automatic": "Automatisk",
"paneIdSocket": "Panel-ID (socket API)",
"panelIdInternal": "Panel-ID (internt)",
"metaTitle": "Koncepter"
},
"configuration": {
"title": "Konfiguration",
"metaDescription": "Konfigurér cmux via Ghostty-konfigurationsfiler. Skrifttype, tema, farver, opdelt panel-stil, scrollback og appindstillinger for automatiseringstilstand.",
"intro": "cmux læser konfiguration fra Ghostty-konfigurationsfiler, hvilket giver dig velkendte muligheder hvis du kommer fra Ghostty.",
"configLocations": "Konfigurationsfilplaceringer",
"configLocationsDesc": "cmux leder efter konfiguration på disse placeringer (i rækkefølge):",
"createConfig": "Opret konfigurationsfilen hvis den ikke findes:",
"appearance": "Udseende",
"font": "Skrifttype",
"colors": "Farver",
"splitPanes": "Opdelte paneler",
"behavior": "Adfærd",
"scrollback": "Scrollback",
"workingDirectory": "Arbejdsmappe",
"appSettings": "Appindstillinger",
"appSettingsDesc": "In-app-indstillinger er tilgængelige via cmux > Indstillinger ({shortcut}):",
"themeMode": "Tematilstand",
"themeSystem": "System: følg macOS-udseende",
"themeLight": "Lys: altid lys tilstand",
"themeDark": "Mørk: altid mørk tilstand",
"automationMode": "Automatiseringstilstand",
"automationModeDesc": "Adgangsniveau for kontrolsocket:",
"automationOff": "Fra: ingen socketkontrol (mest sikker)",
"automationCmux": "Kun cmux-processer: tillad kun processer startet inde i cmux-terminaler at forbinde",
"automationAll": "allowAll: tillad enhver lokal proces at forbinde (CMUX_SOCKET_MODE=allowAll, kun env-override)",
"automationCallout": "På delte maskiner bør du overveje at bruge \"Fra\" eller \"Kun cmux-processer\"-tilstand.",
"browserLinkBehavior": "Browser-linkadfærd",
"browserLinkDesc": "Under Indstillinger > Browser eksponerer cmux to værtslister med forskellige formål:",
"browserHostsEmbed": "Værter til åbning i indbygget browser: gælder for links klikket fra terminaloutput. Værter på denne liste åbnes i cmux; andre værter åbnes i din standardbrowser. Understøtter én vært eller wildcard per linje (for eksempel: example.com, *.internal.example).",
"browserHostsHttp": "HTTP-værter tilladt i indbygget browser: gælder kun for HTTP (ikke-HTTPS) URL'er. Værter på denne liste kan åbnes i cmux uden en advarsel. Standard inkluderer localhost, 127.0.0.1, ::1, 0.0.0.0 og *.localtest.me.",
"exampleConfig": "Eksempelkonfiguration",
"metaTitle": "Konfiguration"
},
"keyboardShortcuts": {
"title": "Tastaturgenveje",
"description": "Alle tastaturgenveje tilgængelige i cmux, grupperet efter kategori.",
"metaDescription": "Alle cmux-tastaturgenveje til workspaces, surfaces, opdelte paneler, browser, notifikationer, søgning og vindueshåndtering på macOS.",
"searchPlaceholder": "Søg efter genveje...",
"searchLabel": "Søg i tastaturgenveje",
"noResults": "Ingen genveje fundet",
"noResultsHint": "Prøv et andet søgeord",
"cat": {
"workspaces": "Workspaces",
"workspacesBlurb": "Workspaces bor i sidebaren. Hvert workspace har sit eget sæt af paneler og surfaces.",
"surfaces": "Surfaces",
"surfacesBlurb": "Surfaces er faner inde i et panel.",
"splitPanes": "Opdelte paneler",
"browser": "Browser",
"notifications": "Notifikationer",
"find": "Find",
"terminal": "Terminal",
"window": "Vindue"
},
"sc": {
"ws-new": "Nyt workspace",
"ws-jump-1-8": "Spring til workspace 18",
"ws-jump-last": "Spring til sidste workspace",
"ws-close": "Luk workspace",
"ws-rename": "Omdøb workspace",
"sf-new": "Ny surface",
"sf-prev-1": "Forrige surface",
"sf-prev-2": "Forrige surface",
"sf-jump-1-8": "Spring til surface 18",
"sf-jump-last": "Spring til sidste surface",
"sf-close": "Luk surface",
"sp-right": "Opdel til højre",
"sp-down": "Opdel nedad",
"sp-focus": "Fokusér panel retningsbestemt",
"sp-browser-right": "Opdel browser til højre",
"sp-browser-down": "Opdel browser nedad",
"br-open": "Åbn browser-surface",
"br-addr": "Fokusér adresselinjen",
"br-forward": "Frem",
"br-reload": "Genindlæs side",
"br-devtools": "Åbn udviklerværktøjer",
"nt-panel": "Vis notifikationspanel",
"nt-latest": "Spring til seneste ulæste",
"nt-flash": "Udløs flash",
"fd-find": "Find",
"fd-next-prev": "Find næste / forrige",
"fd-hide": "Skjul findbjælke",
"fd-selection": "Brug markering til find",
"tm-clear": "Ryd scrollback",
"tm-copy": "Kopiér (med markering)",
"tm-paste": "Indsæt",
"tm-font": "Forøg / formindsk skriftstørrelse",
"tm-reset": "Nulstil skriftstørrelse",
"wn-new": "Nyt vindue",
"wn-settings": "Indstillinger",
"wn-reload": "Genindlæs konfiguration",
"wn-quit": "Afslut"
},
"metaTitle": "Tastaturgenveje"
},
"api": {
"title": "API-reference",
"metaDescription": "cmux CLI og Unix socket API-reference. Workspace-håndtering, opdelte paneler, inputstyring, notifikationer, sidebar-metadata, miljøvariabler og detektionsmetoder.",
"intro": "cmux tilbyder både et CLI-værktøj og en Unix socket til programmatisk styring. Alle kommandoer er tilgængelige via begge grænseflader.",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "Sti",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Tagget debug build",
"socketOverride": "Overskriv med CMUX_SOCKET_PATH-miljøvariablen. Send én linjetermineret JSON-anmodning per kald:",
"socketCallout": "JSON socket-anmodninger skal bruge method og params. Legacy v1 JSON-payloads som <legacy>'{'\"command\":\"...\"'}'</legacy> understøttes ikke.",
"accessModes": "Adgangstilstande",
"modeHeader": "Tilstand",
"descriptionHeader": "Beskrivelse",
"howToEnableHeader": "Sådan aktiveres",
"offMode": "Socket deaktiveret",
"offEnable": "Indstillinger-UI eller CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "Kun processer startet inde i cmux-terminaler kan forbinde.",
"cmuxOnlyEnable": "Standardtilstand i Indstillinger-UI",
"allowAllMode": "Tillad enhver lokal proces at forbinde (ingen ancestry-kontrol).",
"allowAllEnable": "Kun miljøvariabel-override: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "På delte maskiner, brug Fra eller Kun cmux-processer.",
"cliOptions": "CLI-indstillinger",
"flagHeader": "Flag",
"customSocketPath": "Brugerdefineret socketsti",
"outputJson": "Output i JSON-format",
"targetWindow": "Målret et specifikt vindue",
"targetWorkspace": "Målret et specifikt workspace",
"targetSurface": "Målret en specifik surface",
"idFormat": "Styr ID-format i JSON-output",
"workspaceCommands": "Workspace-kommandoer",
"listWorkspacesDesc": "List alle åbne workspaces.",
"newWorkspaceDesc": "Opret et nyt workspace.",
"selectWorkspaceDesc": "Skift til et specifikt workspace.",
"currentWorkspaceDesc": "Hent det aktuelt aktive workspace.",
"closeWorkspaceDesc": "Luk et workspace.",
"splitCommands": "Opdelingskommandoer",
"newSplitDesc": "Opret et nyt opdelt panel. Retninger: left, right, up, down.",
"listSurfacesDesc": "List alle surfaces i det aktuelle workspace.",
"focusSurfaceDesc": "Fokusér en specifik surface.",
"inputCommands": "Inputkommandoer",
"sendDesc": "Send tekstinput til den fokuserede terminal.",
"sendKeyDesc": "Send et tastetryk. Taster: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "Send tekst til en specifik surface.",
"sendKeySurfaceDesc": "Send et tastetryk til en specifik surface.",
"notificationCommands": "Notifikationskommandoer",
"notifyDesc": "Send en notifikation.",
"listNotificationsDesc": "List alle notifikationer.",
"clearNotificationsDesc": "Ryd alle notifikationer.",
"sidebarMetadata": "Sidebar-metadatakommandoer",
"sidebarMetadataDesc": "Sæt statuspiller, fremskridtsbjælker og logposter i sidebaren for ethvert workspace. Nyttigt til build-scripts, CI-integrationer og AI-kodningsagenter der vil vise tilstand med et blik.",
"setStatusDesc": "Sæt en sidebar-statuspille. Brug en unik nøgle så forskellige værktøjer kan håndtere deres egne poster.",
"clearStatusDesc": "Fjern en sidebar-statuspost ved nøgle.",
"listStatusDesc": "List alle sidebar-statusposter for et workspace.",
"setProgressDesc": "Sæt en fremskridtsbjælke i sidebaren (0.0 til 1.0).",
"clearProgressDesc": "Ryd sidebar-fremskridtsbjælken.",
"logDesc": "Tilføj en logpost til sidebaren. Niveauer: info, progress, success, warning, error.",
"clearLogDesc": "Ryd alle sidebar-logposter.",
"listLogDesc": "List sidebar-logposter.",
"sidebarStateDesc": "Dump al sidebar-metadata (cwd, git branch, porte, status, fremskridt, logs).",
"utilityCommands": "Hjælpekommandoer",
"pingDesc": "Tjek om cmux kører og er responsiv.",
"capabilitiesDesc": "List tilgængelige socket-metoder og aktuel adgangstilstand.",
"identifyDesc": "Vis fokuseret vindue/workspace/panel/surface-kontekst.",
"envVariables": "Miljøvariabler",
"variableHeader": "Variabel",
"socketPathDesc": "Overskriv socketstien brugt af CLI og integrationer",
"socketEnableDesc": "Tving aktivering/deaktivering af socket (1/0, true/false, on/off)",
"socketModeDesc": "Overskriv adgangstilstand (cmuxOnly, allowAll, off). Accepterer også cmux-only/cmux_only og allow-all/allow_all",
"workspaceIdDesc": "Auto-sat: nuværende workspace-ID",
"surfaceIdDesc": "Auto-sat: nuværende surface-ID",
"termProgramDesc": "Sat til ghostty",
"termDesc": "Sat til xterm-ghostty",
"envCallout": "Legacy CMUX_SOCKET_MODE-værdier full og notifications accepteres stadig for kompatibilitet.",
"detectingCmux": "Detektering af cmux",
"examples": "Eksempler",
"pythonClient": "Python-klient",
"shellScript": "Shell-script",
"buildScriptNotification": "Build-script med notifikation",
"metaTitle": "API-reference"
},
"notifications": {
"title": "Notifikationer",
"metaDescription": "Send desktopnotifikationer fra AI-agenter og scripts i cmux. CLI, OSC 99/777 escape-sekvenser og Claude Code hooks-integration.",
"intro": "cmux understøtter desktopnotifikationer, der giver AI-agenter og scripts mulighed for at advare dig når de har brug for opmærksomhed.",
"lifecycle": "Livscyklus",
"received": "Modtaget: notifikation vises i panelet, desktopalert udløses (hvis ikke undertrykt)",
"unread": "Ulæst: badge vises på workspace-fanen",
"read": "Læst: ryddes når du ser det workspace",
"cleared": "Ryddet: fjernet fra panelet",
"suppression": "Undertrykkelse",
"suppressionDesc": "Desktopalarmer undertrykkes når:",
"suppressItem1": "cmux-vinduet er fokuseret",
"suppressItem2": "Det specifikke workspace der sender notifikationen er aktivt",
"suppressItem3": "Notifikationspanelet er åbent",
"notificationPanel": "Notifikationspanel",
"notificationPanelDesc": "Tryk <openShortcut>⌘⇧I</openShortcut> for at åbne notifikationspanelet. Klik på en notifikation for at springe til det workspace. Tryk <jumpShortcut>⌘⇧U</jumpShortcut> for at springe direkte til workspace med den seneste ulæste notifikation.",
"customCommand": "Brugerdefineret kommando",
"customCommandDesc": "Kør en shell-kommando hver gang en notifikation planlægges. Indstil det i Indstillinger > App > Notifikationskommando. Kommandoen kører via /bin/sh -c med disse miljøvariabler:",
"customCommandNote": "Kommandoen kører uafhængigt af systemlydvælgeren. Sæt vælgeren til \"Ingen\" for kun at bruge den brugerdefinerede kommando, eller behold begge for en systemlyd plus en brugerdefineret handling.",
"sending": "Afsendelse af notifikationer",
"cli": "CLI",
"osc777Title": "OSC 777 (simpel)",
"osc777Desc": "RXVT-protokollen bruger et fast format med titel og brødtekst:",
"osc99Title": "OSC 99 (avanceret)",
"osc99Desc": "Kitty-protokollen understøtter undertitler og notifikations-ID'er:",
"variableHeader": "Variabel",
"descriptionHeader": "Beskrivelse",
"envTitle": "Notifikationstitel (workspace-navn eller appnavn)",
"envSubtitle": "Notifikationsundertitel",
"envBody": "Notifikationstekst",
"cmpTitleBody": "Titel + tekst",
"cmpSubtitle": "Undertitel",
"cmpNotificationId": "Notifikations-ID",
"cmpComplexity": "Kompleksitet",
"cmpYes": "Ja",
"cmpNo": "Nej",
"cmpHigher": "Højere",
"cmpLower": "Lavere",
"featureHeader": "Funktion",
"comparisonCallout": "Brug OSC 777 til simple notifikationer. Brug OSC 99 når du har brug for undertitler eller notifikations-ID'er. Brug CLI (cmux notify) for den nemmeste integration.",
"claudeCodeHooks": "Claude Code hooks",
"claudeCodeHooksDesc": "cmux integrerer med <link>Claude Code</link> via hooks for at notificere dig når opgaver er fuldført.",
"createHookScript": "1. Opret hook-scriptet",
"configureClaude": "2. Konfigurér Claude Code",
"restartNote": "Genstart Claude Code for at anvende hooks.",
"integrationExamples": "Integrationseksempler",
"notifyAfterLong": "Notificér efter lang kommando",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux passthrough",
"tmuxDesc": "Hvis du bruger tmux inde i cmux, aktivér passthrough:",
"metaTitle": "Notifikationer"
},
"browserAutomation": {
"title": "Browserautomatisering",
"metaDescription": "cmux browser-kommandoreference til navigation, DOM-interaktion, ventetilstande, inspektion, JavaScript-evaluering, faner, dialoger, frames, downloads og browsertilstand.",
"intro": "cmux browser-kommandogruppen tilbyder browserautomatisering mod cmux browser-surfaces. Brug den til at navigere, interagere med DOM-elementer, inspicere sidetilstand, evaluere JavaScript og håndtere browsersessionsdata.",
"commandIndex": "Kommandoindeks",
"categoryHeader": "Kategori",
"subcommandsHeader": "Underkommandoer",
"navAndTargeting": "Navigation og målretning",
"waiting": "Ventetilstand",
"domInteraction": "DOM-interaktion",
"inspection": "Inspektion",
"jsAndInjection": "JavaScript og injektion",
"framesDialogsDownloads": "Frames, dialoger, downloads",
"stateAndSession": "Tilstand og sessionsdata",
"tabsAndLogs": "Faner og logfiler",
"targetingSurface": "Målretning af en browser-surface",
"targetingDesc": "De fleste underkommandoer kræver en mål-surface. Du kan sende den positionelt eller med --surface.",
"navigation": "Navigation",
"waitingSection": "Ventetilstand",
"waitingDesc": "Brug wait til at blokere indtil selektorer, tekst, URL-fragmenter, indlæsningstilstand eller en JavaScript-betingelse er opfyldt.",
"domSection": "DOM-interaktion",
"domDesc": "Muterende handlinger understøtter --snapshot-after til hurtig verifikation i scripts.",
"inspectionSection": "Inspektion",
"inspectionDesc": "Brug strukturerede getters til scripts og snapshots/screenshots til menneskelig gennemgang.",
"jsSection": "JavaScript-evaluering og -injektion",
"stateSection": "Tilstand",
"stateDesc": "Sessionsdatakommandoer dækker cookies, lokal/sessionslagring og fulde browsertilstands-snapshots.",
"tabsSection": "Faner",
"tabsDesc": "Browser-faneoperationer mapper til browser-surfaces i den aktive browser-fanegruppe.",
"consoleSection": "Konsol og fejl",
"dialogsSection": "Dialoger",
"framesSection": "Frames",
"downloadsSection": "Downloads",
"commonPatterns": "Almindelige mønstre",
"patternNavigate": "Navigér, vent, inspicér",
"patternForm": "Udfyld en formular og verificér succestekst",
"patternDebug": "Indfang debug-artefakter ved fejl",
"patternSession": "Gem og gendan browsersession",
"metaTitle": "Browserautomatisering"
},
"changelog": {
"title": "Ændringslog",
"metaDescription": "cmux udgivelsesnoter og versionshistorik. Nye funktioner, fejlrettelser og ændringer for den native macOS-terminal.",
"metaTitle": "Ændringslog"
},
"navItems": {
"gettingStarted": "Kom i gang",
"concepts": "Koncepter",
"configuration": "Konfiguration",
"keyboardShortcuts": "Tastaturgenveje",
"apiReference": "API-reference",
"browserAutomation": "Browserautomatisering",
"notifications": "Notifikationer",
"changelog": "Ændringslog"
}
},
"legal": {
"privacyPolicy": "Privatlivspolitik",
"termsOfService": "Servicevilkår",
"eula": "EULA"
},
"wallOfLove": {
"title": "Wall of Love",
"description": "Hvad folk siger om cmux."
},
"testimonials": {
"mitchellh": "Endnu en dag, endnu et libghostty-baseret projekt, denne gang en macOS-terminal med vertikale faner, bedre organisering/notifikationer, indlejret/scriptbar browser specifikt rettet mod folk der bruger en masse terminalbaserede agentiske workflows.",
"schrockn": "Det er præcis det produkt jeg har ledt efter. Efter to timer i morges er jeg forelsket.",
"egrefen": "Jeg har brugt det hele weekenden og det er fantastisk.",
"max4c": "dette har været mit yndlingsværktøj de sidste to uger",
"asaza": "cmux ser så godt ud at det måske endelig er tid til at sige farvel til VSCode",
"johnthedebs": "Hey, det ser virkelig fedt ud. Elsker ideerne her, specifikt: programmerbarheden, det lagdelte UI, browseren med API. Glæder mig til at prøve det. Vil også tilføje at jeg virkelig sætter pris på at Mitchell Hashimoto har skabt libghostty; det føles som en spændende tid at være terminalbruger.",
"joeriddles": "Vertikale faner i min terminal! Det havde jeg aldrig tænkt på før. Jeg bruger og elsker Firefox vertikale faner.",
"dchu17": "Gav det en prøve og det var ret intuitivt. Godt arbejde!",
"afruth": "Jeg kan lide det, kørte det den seneste dag på tre parallelle projekter hver med flere worktrees. At have det parret med lazygit og yazi / nvim gjorde mig lidt mere produktiv end normalt uden at skulle jage flere ghostty / iTerm-instanser. Føles også mere naturligt end tmux.",
"northprint": "Prøvede cmux da det så godt ud — det er godt",
"indykish": "cmux er ret godt.",
"kataring": "Skiftede til cmux.dev",
"scottw": "Det har været sådan et nyttigt fund. Jeg kan ikke anbefale det nok.",
"johnblythe": "hentede det i weekenden og elskede det. har ventet på noget som dette.",
"bchris91": "Det er præcis hvad jeg har ønsket mig. Fantastisk arbejde, tak!",
"connorelsea": "Har brugt det i en uge og det er fantastisk. Vertikal fane for hver igangværende opgave. Indeni, Claude på den ene side og browser med PR og ressourcer på den anden, skift mellem opgaver og hold orden. Bland det med skills så Claude kan overvåge CI rekursivt, osv. føler mig oplyst ærlig talt",
"tonkotsuboy": "Jeg skiftede fra Warp til Ghostty i starten af året, men nu er jeg skiftet til cmux. De vertikale faner er praktiske, og jeg sætter pris på at blive notificeret når Claude Code-opgaver er færdige. Det er Ghostty-baseret så den lynhurtige ydeevne følger med. Branch-visning og completions jeg satte op i Ghostty virker stadig."
},
"languageSwitcher": {
"label": "Sprog"
}
}

587
web/messages/de.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — Das Terminal für Multitasking",
"description": "Nativer macOS-Terminal auf Basis von Ghostty. Funktioniert mit Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider und jedem CLI-Tool. Vertikale Tabs, Benachrichtigungsringe, geteilte Fenster und eine Socket-API.",
"ogDescription": "Nativer macOS-Terminal für KI-Coding-Agenten. Funktioniert mit Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider und jedem CLI-Tool."
},
"common": {
"downloadForMac": "Für Mac herunterladen",
"viewOnGitHub": "Auf GitHub ansehen",
"closeMenu": "Menü schließen",
"openMenu": "Menü öffnen",
"toggleTheme": "Design wechseln",
"backToBlog": "Zurück zum Blog",
"readTheDocs": "Dokumentation lesen",
"viewChangelog": "Changelog ansehen"
},
"nav": {
"docs": "Dokumentation",
"blog": "Blog",
"changelog": "Changelog",
"community": "Community",
"github": "GitHub"
},
"footer": {
"product": "Produkt",
"resources": "Ressourcen",
"legal": "Rechtliches",
"social": "Soziale Medien",
"blog": "Blog",
"community": "Community",
"docs": "Dokumentation",
"changelog": "Changelog",
"privacy": "Datenschutz",
"terms": "Nutzungsbedingungen",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "Kontakt",
"copyright": "© {year} Manaflow",
"language": "Sprache"
},
"home": {
"taglinePrefix": "Das Terminal für ",
"typingCodingAgents": "Coding-Agenten",
"typingMultitasking": "Multitasking",
"subtitle": "Native macOS-App auf Basis von Ghostty. Vertikale Tabs, Benachrichtigungsringe wenn Agenten Aufmerksamkeit benötigen, geteilte Bereiche und eine Socket-API für Automatisierung.",
"features": "Funktionen",
"faq": "FAQ",
"communitySection": "Community",
"feature": {
"verticalTabs": "Vertikale Tabs",
"verticalTabsDesc": ": Die Seitenleiste zeigt Git-Branch, Arbeitsverzeichnis, Ports und Benachrichtigungstext",
"notificationRings": "Benachrichtigungsringe",
"notificationRingsDesc": ": Bereiche leuchten auf, wenn Agenten Aufmerksamkeit benötigen",
"inAppBrowser": "Integrierter Browser",
"inAppBrowserDesc": ": Teilen Sie einen Browser neben Ihrem Terminal mit einer skriptfähigen API",
"splitPanes": "Geteilte Bereiche",
"splitPanesDesc": ": Horizontale und vertikale Teilungen innerhalb jedes Tabs",
"scriptable": "Skriptfähig",
"scriptableDesc": ": CLI und Socket-API für Automatisierung und Scripting",
"gpuAccelerated": "GPU-beschleunigt",
"gpuAcceleratedDesc": ": Angetrieben von libghostty für flüssiges Rendering",
"lightweight": "Leichtgewichtig",
"lightweightDesc": ": Natives Swift + AppKit, kein Electron",
"keyboardShortcuts": "Tastaturkürzel",
"keyboardShortcutsDesc": ": <link>Umfangreiche Tastaturkürzel</link> für Workspaces, Splits, Browser und mehr"
},
"faqGhosttyQ": "Wie steht cmux in Beziehung zu Ghostty?",
"faqGhosttyA": "cmux ist kein Fork von Ghostty. Es verwendet <link>libghostty</link> als Bibliothek für Terminal-Rendering, ähnlich wie Apps WebKit für Webansichten verwenden. Ghostty ist ein eigenständiges Terminal; cmux ist eine andere App, die auf dessen Rendering-Engine aufbaut.",
"faqPlatformQ": "Welche Plattformen werden unterstützt?",
"faqPlatformA": "Derzeit nur macOS. cmux ist eine native Swift + AppKit App.",
"faqAgentsQ": "Mit welchen Coding-Agenten funktioniert cmux?",
"faqAgentsA": "Mit allen. cmux ist ein Terminal, daher funktioniert jeder Agent, der in einem Terminal läuft, sofort: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent und alles andere, was Sie über die Kommandozeile starten können.",
"faqNotificationsQ": "Wie funktionieren Benachrichtigungen?",
"faqNotificationsA": "Wenn ein Prozess Aufmerksamkeit benötigt, zeigt cmux Benachrichtigungsringe um Bereiche, Ungelesen-Badges in der Seitenleiste, ein Benachrichtigungs-Popover und eine macOS-Desktopbenachrichtigung. Diese werden automatisch über Standard-Terminal-Escape-Sequenzen (OSC 9/99/777) ausgelöst, oder Sie können sie mit der <cliLink>cmux CLI</cliLink> und <hooksLink>Claude Code Hooks</hooksLink> auslösen.",
"faqShortcutsQ": "Kann ich Tastaturkürzel anpassen?",
"faqShortcutsA": "Terminal-Tastenbelegungen werden aus Ihrer Ghostty-Konfigurationsdatei (<configPath>~/.config/ghostty/config</configPath>) gelesen. cmux-spezifische Kürzel (Workspaces, Splits, Browser, Benachrichtigungen) können in den Einstellungen angepasst werden. Siehe die <link>Standard-Tastaturkürzel</link> für eine vollständige Liste.",
"faqTmuxQ": "Wie vergleicht es sich mit tmux?",
"faqTmuxA": "tmux ist ein Terminal-Multiplexer, der in jedem Terminal läuft. cmux ist eine native macOS-App mit einer grafischen Oberfläche: Vertikale Tabs, geteilte Bereiche, ein eingebetteter Browser und eine Socket-API sind bereits integriert. Keine Konfigurationsdateien oder Präfix-Tasten nötig.",
"faqFreeQ": "Ist cmux kostenlos?",
"faqFreeA": "Ja, cmux ist kostenlos nutzbar. Der Quellcode ist auf <link>GitHub</link> verfügbar."
},
"community": {
"title": "Community",
"description": "Verbinden Sie sich mit anderen cmux-Nutzern und dem Team dahinter.",
"discord": "Discord",
"discordAction": "Unserem Discord beitreten",
"discordDesc": "Chatten Sie mit der Community, erhalten Sie Hilfe und teilen Sie Feedback",
"githubAction": "Auf GitHub ansehen",
"githubDesc": "Repo mit Stern markieren, Probleme melden und beitragen",
"twitter": "Twitter",
"twitterAction": "Auf X folgen",
"twitterDesc": "Updates, Ankündigungen und Tipps",
"youtube": "YouTube",
"youtubeAction": "Abonnieren",
"youtubeDesc": "Demos, Tutorials und Anleitungen",
"linkedin": "LinkedIn",
"linkedinAction": "Folgen Sie uns",
"linkedinDesc": "Unternehmensnachrichten und Engineering-Updates",
"metaTitle": "Community — cmux",
"metaDescription": "Werde Teil der cmux-Community auf Discord, Twitter, GitHub und mehr"
},
"blog": {
"title": "Blog",
"layoutTitle": "cmux blog",
"metaTitle": "Blog",
"metaDescription": "Neuigkeiten und Updates vom cmux-Team",
"description": "Neuigkeiten und Updates vom cmux-Team",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Wie Cmd+Shift+U zwischen fertigen Agenten über Workspaces hinweg in cmux navigiert.",
"date": "4. März 2026",
"p1": "Meine Lieblingsfunktion in cmux ist Cmd+Shift+U. Ich habe gerade 17 Workspaces offen, in denen jeweils ein Agent läuft. Früher habe ich mich durch Tabs und das Benachrichtigungspanel geklickt, um herauszufinden, was fertig ist. Tippen ist schneller.",
"p2": "Cmd+Shift+U springt zur neuesten ungelesenen <link>Benachrichtigung</link>. In der Praxis bedeutet das der letzte Agent, der fertig wurde. Es wechselt zum richtigen Workspace, fokussiert den genauen Bereich, lässt ihn aufblitzen, damit Sie sehen, wo Sie hinschauen müssen, und markiert ihn als gelesen. Wenn die Benachrichtigung aus einem anderen Fenster kam, kommt dieses Fenster nach vorne."
},
"zenOfCmux": {
"title": "The Zen of cmux",
"summary": "cmux ist ein Grundbaustein, keine Lösung. Es gibt Ihnen zusammensetzbare Teile, und Ihr Workflow liegt bei Ihnen.",
"date": "27. Februar 2026",
"p1": "cmux schreibt Entwicklern nicht vor, wie sie ihre Werkzeuge nutzen sollen. Es ist ein Terminal und Browser mit einer CLI, und der Rest liegt bei Ihnen.",
"p2": "cmux ist ein Grundbaustein, keine Lösung. Es bietet Ihnen ein Terminal, einen Browser, Benachrichtigungen, Workspaces, Splits, Tabs und eine CLI, um alles zu steuern. cmux zwingt Sie nicht in eine vorgegebene Art, Coding-Agenten zu nutzen. Was Sie mit den Grundbausteinen erstellen, ist Ihnen überlassen.",
"p3": "Die besten Entwickler haben schon immer ihre eigenen Werkzeuge gebaut. Niemand hat bisher den besten Weg gefunden, mit Agenten zu arbeiten, und die Teams hinter geschlossenen Produkten schon gar nicht. Die Entwickler, die ihren eigenen Codebasen am nächsten sind, werden es zuerst herausfinden.",
"p4": "Geben Sie einer Million Entwickler zusammensetzbare Grundbausteine, und sie werden gemeinsam die effizientesten Workflows schneller finden, als jedes Produktteam sie von oben herab entwerfen könnte."
},
"showHnLaunch": {
"title": "cmux-Launch auf Show HN",
"summary": "cmux erreichte Platz #2 auf Hacker News, wurde von Mitchell Hashimoto geteilt und ging in Japan viral.",
"date": "21. Februar 2026",
"intro": "Wir haben cmux am 19. Februar auf <link>Show HN</link> gepostet:",
"blockquote1": "Ich führe viele Claude Code und Codex Sessions parallel aus. Ich habe Ghostty mit einer Menge geteilter Bereiche verwendet und mich auf native macOS-Benachrichtigungen verlassen, um zu wissen, wann ein Agent mich braucht. Aber der Benachrichtigungstext von Claude Code lautet immer nur \"Claude is waiting for your input\" ohne Kontext, und bei genügend offenen Tabs konnte ich nicht einmal mehr die Titel lesen.",
"blockquote2": "Ich habe einige Coding-Orchestratoren ausprobiert, aber die meisten waren Electron/Tauri-Apps und die Performance hat mich gestört. Ich bevorzuge auch einfach das Terminal, da GUI-Orchestratoren einen in ihren Workflow einschließen. Also habe ich cmux als native macOS-App in Swift/AppKit gebaut. Es verwendet libghostty für Terminal-Rendering und liest Ihre bestehende Ghostty-Konfiguration für Themes, Schriftarten, Farben und mehr.",
"blockquote3": "Die wichtigsten Ergänzungen sind die Seitenleiste und das Benachrichtigungssystem. Die Seitenleiste hat vertikale Tabs, die Git-Branch, Arbeitsverzeichnis, lauschende Ports und den letzten Benachrichtigungstext für jeden Workspace anzeigen. Das Benachrichtigungssystem erfasst Terminal-Sequenzen (OSC 9/99/777) und hat eine CLI (cmux notify), die Sie in Agent-Hooks für Claude Code, OpenCode usw. einbinden können. Wenn ein Agent wartet, bekommt sein Bereich einen blauen Ring und der Tab leuchtet in der Seitenleiste auf, damit ich über Splits und Tabs hinweg sehen kann, welcher mich braucht. Cmd+Shift+U springt zum neuesten Ungelesenen.",
"blockquote4": "Der integrierte Browser hat eine skriptfähige API. Agenten können den Accessibility-Tree aufnehmen, Element-Referenzen erhalten, klicken, Formulare ausfüllen, JS ausführen und Konsolenprotokolle lesen. Sie können einen Browser-Bereich neben Ihrem Terminal aufteilen und Claude Code direkt mit Ihrem Dev-Server interagieren lassen.",
"blockquote5": "Alles ist skriptfähig über die CLI und Socket-API: Workspaces/Tabs erstellen, Bereiche teilen, Tastatureingaben senden, URLs im Browser öffnen.",
"hitNumber2": "In der Spitze erreichte es Platz #2 auf Hacker News. Mitchell Hashimoto hat es geteilt:",
"favoriteComment": "Mein Lieblingskommentar aus dem <link>HN-Thread</link>:",
"viralJapan": "Überraschenderweise ging cmux in Japan viral:",
"translation": "Übersetzung: \"Das sieht gut aus. Eine Ghostty-basierte Terminal-App, die dafür entwickelt wurde, dass man den Überblick nicht verliert, wenn man mehrere CLIs wie Claude Code parallel betreibt. Der Bereich, der auf Eingabe wartet, bekommt einen blauen Rahmen, und es hat sein eigenes Benachrichtigungssystem.\"",
"viralChina": "Und semi-viral in China:",
"extensions": "Eine weitere aufregende Sache war zu sehen, wie Leute auf der cmux CLI aufbauen. sasha hat eine pi-cmux-Erweiterung gebaut, die Modellinformationen, Token-Verbrauch und Agenten-Status in der Seitenleiste anzeigt:",
"scriptable": "Alles in cmux ist über die CLI skriptfähig: Workspaces erstellen, Tastatureingaben senden, den Browser steuern, Benachrichtigungen lesen. Ein Teil der cmux-Philosophie ist, programmierbar und zusammensetzbar zu sein, damit Menschen die Art anpassen können, wie sie mit Coding-Agenten arbeiten. Der Stand der Technik bei Coding-Agenten ändert sich schnell, und Sie möchten nicht in einem unflexiblen GUI-Orchestrator gefangen sein, der nicht mithalten kann.",
"cta": "Wenn Sie mehrere Coding-Agenten betreiben, <link>probieren Sie cmux aus</link>."
},
"introducingCmux": {
"title": "Einführung von cmux",
"summary": "Ein natives macOS-Terminal auf Basis von Ghostty, entwickelt für den gleichzeitigen Betrieb mehrerer KI-Coding-Agenten.",
"date": "12. Februar 2026",
"p1": "cmux ist eine native macOS-Terminalanwendung, die auf Ghostty aufbaut und von Grund auf für Entwickler konzipiert wurde, die mehrere KI-Coding-Agenten gleichzeitig betreiben.",
"whyTitle": "Warum cmux?",
"whyP": "Moderne Entwicklungsworkflows beinhalten oft das gleichzeitige Ausführen mehrerer Agenten. Claude Code, Codex und andere Werkzeuge, jeweils in ihrem eigenen Terminal. Den Überblick zu behalten, welche Aufmerksamkeit benötigen, und schnell zwischen ihnen zu wechseln, ist das Problem, das cmux löst.",
"featuresTitle": "Hauptfunktionen",
"getStartedTitle": "Erste Schritte",
"getStartedP": "Installieren Sie cmux über Homebrew oder laden Sie die DMG aus der <link>Erste-Schritte-Anleitung</link> herunter.",
"featureVerticalTabsLabel": "Vertikale Tabs",
"featureVerticalTabsDesc": "Sehen Sie alle Ihre Terminals auf einen Blick in einer Seitenleiste",
"featureNotificationsLabel": "Benachrichtigungsringe",
"featureNotificationsDesc": "Tabs blinken, wenn ein Agent Ihre Eingabe benötigt",
"featureSplitPanesLabel": "Geteilte Bereiche",
"featureSplitPanesDesc": "Horizontale und vertikale Teilungen innerhalb jedes Workspace",
"featureSocketApiLabel": "Socket-API",
"featureSocketApiDesc": "Programmatische Steuerung zum Erstellen von Tabs und Senden von Eingaben",
"featureGpuLabel": "GPU-beschleunigt",
"featureGpuDesc": "Angetrieben von libghostty für flüssiges Rendering"
}
},
"zenOfCmux": {
"metaTitle": "Das Zen von cmux",
"metaDescription": "cmux ist ein Baustein, keine Lösung. Es gibt dir zusammensetzbare Teile und dein Workflow liegt bei dir."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "Das neue Tastenkürzel, das deine Interaktion mit cmux verändert."
},
"showHnLaunch": {
"metaTitle": "cmux auf Show HN starten",
"metaDescription": "Die Geschichte hinter dem Launch von cmux auf Hacker News."
},
"introducingCmux": {
"metaTitle": "Wir stellen cmux vor",
"metaDescription": "Warum wir cmux gebaut haben, ein neues Terminal für macOS."
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "Erste Schritte",
"metaDescription": "Installieren Sie cmux, das native macOS-Terminal für KI-Coding-Agenten. Homebrew, DMG-Download, CLI-Einrichtung und automatische Updates über Sparkle.",
"intro": "cmux ist ein leichtgewichtiges, natives macOS-Terminal auf Basis von Ghostty zur Verwaltung mehrerer KI-Coding-Agenten. Es bietet vertikale Tabs, ein Benachrichtigungspanel und eine socket-basierte Steuerungs-API.",
"install": "Installation",
"dmgRecommended": "DMG (empfohlen)",
"dmgDesc": "Öffnen Sie die .dmg und ziehen Sie cmux in Ihren Programme-Ordner. cmux aktualisiert sich automatisch über Sparkle, Sie müssen es also nur einmal herunterladen.",
"homebrew": "Homebrew",
"updateLater": "Später aktualisieren:",
"firstLaunchCallout": "Beim ersten Start fragt macOS möglicherweise, ob Sie eine App eines identifizierten Entwicklers öffnen möchten. Klicken Sie auf <strong>Öffnen</strong>, um fortzufahren.",
"verifyTitle": "Installation überprüfen",
"verifyDesc": "Öffnen Sie cmux und Sie sollten Folgendes sehen:",
"verifyItem1": "Ein Terminalfenster mit einer vertikalen Tab-Seitenleiste auf der linken Seite",
"verifyItem2": "Einen bereits geöffneten ersten Workspace",
"verifyItem3": "Das Ghostty-basierte Terminal bereit für Eingaben",
"cliSetup": "CLI-Einrichtung",
"cliDesc": "cmux enthält ein Kommandozeilen-Werkzeug für Automatisierung. Innerhalb von cmux-Terminals funktioniert es automatisch. Um die CLI außerhalb von cmux zu verwenden, erstellen Sie einen Symlink:",
"cliThen": "Dann können Sie Befehle wie folgt ausführen:",
"autoUpdates": "Automatische Updates",
"autoUpdatesDesc": "cmux prüft automatisch über Sparkle auf Updates. Wenn ein Update verfügbar ist, sehen Sie eine Update-Anzeige in der Titelleiste. Sie können auch manuell über cmux > Nach Updates suchen in der Menüleiste prüfen.",
"sessionRestore": "Sitzungswiederherstellung (aktuelles Verhalten)",
"sessionRestoreDesc": "Nach dem Neustart stellt cmux nur Layout und Metadaten wieder her:",
"sessionItem1": "Fenster-, Workspace- und Bereichs-Layout",
"sessionItem2": "Arbeitsverzeichnisse",
"sessionItem3": "Terminal-Scrollback (bestmöglich)",
"sessionItem4": "Browser-URL und Navigationsverlauf",
"sessionCallout": "cmux stellt noch keine laufenden Prozesse wieder her. Aktive Terminal-App-Sitzungen wie Claude Code, tmux und vim werden nach einem App-Neustart nicht fortgesetzt.",
"requirements": "Voraussetzungen",
"reqItem1": "macOS 14.0 oder neuer",
"reqItem2": "Apple Silicon oder Intel Mac",
"metaTitle": "Erste Schritte"
},
"concepts": {
"title": "Konzepte",
"metaDescription": "Wie cmux Terminals organisiert: Fenster, Workspaces, Bereiche und Oberflächen. Die Hierarchie hinter Seitenleiste, Splits und Socket-API.",
"intro": "cmux organisiert Ihre Terminals in einer vierstufigen Hierarchie. Das Verständnis dieser Ebenen hilft bei der Verwendung der Socket-API, CLI und Tastaturkürzel.",
"hierarchy": "Hierarchie",
"windowTitle": "Fenster",
"windowDesc": "Ein macOS-Fenster. Öffnen Sie mehrere Fenster mit {shortcut}. Jedes Fenster hat seine eigene Seitenleiste mit unabhängigen Workspaces.",
"workspaceTitle": "Workspace",
"workspaceDesc": "Ein Eintrag in der Seitenleiste. Jeder Workspace enthält einen oder mehrere geteilte Bereiche. Workspaces sind das, was Sie in der linken Seitenleiste aufgelistet sehen.",
"workspaceNote": "In der Benutzeroberfläche und bei Tastaturkürzeln werden Workspaces oft als \"Tabs\" bezeichnet, da sie sich wie Tabs in der Seitenleiste verhalten. Die Socket-API und Umgebungsvariablen verwenden den Begriff \"Workspace\".",
"contextHeader": "Kontext",
"termUsedHeader": "Verwendeter Begriff",
"sidebarUI": "Seitenleisten-UI",
"tab": "Tab",
"keyboardShortcuts": "Tastaturkürzel",
"workspaceOrTab": "Workspace oder Tab",
"socketAPI": "Socket-API",
"environmentVariable": "Umgebungsvariable",
"workspaceShortcuts": "Kürzel: {new} (Neu), {jump} (Springen), {close} (Schließen), {prevNext} (Vor/Zurück)",
"paneTitle": "Bereich",
"paneDesc": "Ein geteilter Bereich innerhalb eines Workspace. Erstellt durch Teilen mit {right} (rechts) oder {down} (unten). Navigieren Sie zwischen Bereichen mit {nav} + Pfeiltasten.",
"paneNote": "Jeder Bereich kann mehrere Oberflächen (Tabs innerhalb des Bereichs) enthalten.",
"surfaceTitle": "Oberfläche",
"surfaceDesc": "Ein Tab innerhalb eines Bereichs. Jeder Bereich hat seine eigene Tab-Leiste und kann mehrere Oberflächen enthalten. Erstellt mit {new}, navigiert mit {prev} / {next} oder {jump}.",
"surfaceNote": "Oberflächen sind die einzelnen Terminal- oder Browser-Sitzungen, mit denen Sie interagieren. Jede Oberfläche hat ihre eigene CMUX_SURFACE_ID Umgebungsvariable.",
"panelTitle": "Panel",
"panelDesc": "Der Inhalt innerhalb einer Oberfläche. Derzeit zwei Typen:",
"panelTerminal": "Terminal: Eine Ghostty-Terminal-Sitzung",
"panelBrowser": "Browser: Eine eingebettete Webansicht",
"panelNote": "Panel ist hauptsächlich ein internes Konzept. In der Socket-API und CLI interagieren Sie mit Oberflächen statt direkt mit Panels.",
"visualExample": "Visuelles Beispiel",
"visualExampleDesc": "In diesem Beispiel:",
"visualItem1": "Das Fenster enthält eine Seitenleiste mit drei Workspaces (dev, server, logs)",
"visualItem2": "Workspace \"dev\" ist ausgewählt und zeigt zwei Bereiche nebeneinander",
"visualItem3": "Bereich 1 hat zwei Oberflächen ([S1] und [S2] in der Tab-Leiste), wobei S1 aktiv ist",
"visualItem4": "Bereich 2 hat eine Oberfläche",
"visualItem5": "Jede Oberfläche enthält ein Panel (in diesem Fall ein Terminal)",
"summary": "Zusammenfassung",
"levelHeader": "Ebene",
"whatItIsHeader": "Was es ist",
"createdByHeader": "Erstellt durch",
"identifiedByHeader": "Identifiziert durch",
"macosWindow": "macOS-Fenster",
"sidebarEntry": "Eintrag in der Seitenleiste",
"splitRegion": "Geteilter Bereich",
"tabWithinPane": "Tab innerhalb eines Bereichs",
"terminalOrBrowser": "Terminal oder Browser",
"automatic": "Automatisch",
"paneIdSocket": "Bereichs-ID (Socket-API)",
"panelIdInternal": "Panel-ID (intern)",
"metaTitle": "Konzepte"
},
"configuration": {
"title": "Konfiguration",
"metaDescription": "Konfigurieren Sie cmux über Ghostty-Konfigurationsdateien. Schriftart, Design, Farben, Split-Bereich-Styling, Scrollback und App-Einstellungen für den Automatisierungsmodus.",
"intro": "cmux liest die Konfiguration aus Ghostty-Konfigurationsdateien, was Ihnen vertraute Optionen bietet, wenn Sie von Ghostty kommen.",
"configLocations": "Speicherorte der Konfigurationsdatei",
"configLocationsDesc": "cmux sucht an diesen Speicherorten nach Konfiguration (in dieser Reihenfolge):",
"createConfig": "Erstellen Sie die Konfigurationsdatei, falls sie nicht existiert:",
"appearance": "Erscheinungsbild",
"font": "Schriftart",
"colors": "Farben",
"splitPanes": "Geteilte Bereiche",
"behavior": "Verhalten",
"scrollback": "Scrollback",
"workingDirectory": "Arbeitsverzeichnis",
"appSettings": "App-Einstellungen",
"appSettingsDesc": "In-App-Einstellungen sind über cmux > Einstellungen ({shortcut}) verfügbar:",
"themeMode": "Design-Modus",
"themeSystem": "System: macOS-Erscheinungsbild folgen",
"themeLight": "Hell: Immer heller Modus",
"themeDark": "Dunkel: Immer dunkler Modus",
"automationMode": "Automatisierungsmodus",
"automationModeDesc": "Zugriffsebene der Steuerungs-Socket:",
"automationOff": "Aus: Kein Socket-Zugriff (am sichersten)",
"automationCmux": "Nur cmux-Prozesse: Nur Prozesse, die in cmux-Terminals gestartet wurden, können sich verbinden",
"automationAll": "allowAll: Jeden lokalen Prozess verbinden lassen (CMUX_SOCKET_MODE=allowAll, nur per Umgebungsvariable)",
"automationCallout": "Auf gemeinsam genutzten Rechnern sollten Sie den Modus \"Aus\" oder \"Nur cmux-Prozesse\" verwenden.",
"browserLinkBehavior": "Browser-Link-Verhalten",
"browserLinkDesc": "Unter Einstellungen > Browser stellt cmux zwei Host-Listen mit unterschiedlichen Zwecken bereit:",
"browserHostsEmbed": "Hosts im eingebetteten Browser öffnen: Gilt für Links, die aus der Terminal-Ausgabe geklickt werden. Hosts in dieser Liste öffnen sich in cmux; andere Hosts öffnen sich in Ihrem Standardbrowser. Unterstützt einen Host oder Wildcard pro Zeile (zum Beispiel: example.com, *.internal.example).",
"browserHostsHttp": "Im eingebetteten Browser erlaubte HTTP-Hosts: Gilt nur für HTTP-URLs (nicht HTTPS). Hosts in dieser Liste können in cmux ohne Warnhinweis geöffnet werden. Standardmäßig enthalten sind localhost, 127.0.0.1, ::1, 0.0.0.0 und *.localtest.me.",
"exampleConfig": "Beispielkonfiguration",
"metaTitle": "Konfiguration"
},
"keyboardShortcuts": {
"title": "Tastaturkürzel",
"description": "Alle in cmux verfügbaren Tastaturkürzel, nach Kategorie gruppiert.",
"metaDescription": "Alle cmux-Tastaturkürzel für Workspaces, Oberflächen, geteilte Bereiche, Browser, Benachrichtigungen, Suche und Fensterverwaltung unter macOS.",
"searchPlaceholder": "Kürzel suchen...",
"searchLabel": "Tastaturkürzel durchsuchen",
"noResults": "Keine Kürzel gefunden",
"noResultsHint": "Versuchen Sie einen anderen Suchbegriff",
"cat": {
"workspaces": "Workspaces",
"workspacesBlurb": "Workspaces befinden sich in der Seitenleiste. Jeder Workspace hat seine eigenen Bereiche und Oberflächen.",
"surfaces": "Oberflächen",
"surfacesBlurb": "Oberflächen sind Tabs innerhalb eines Bereichs.",
"splitPanes": "Geteilte Bereiche",
"browser": "Browser",
"notifications": "Benachrichtigungen",
"find": "Suche",
"terminal": "Terminal",
"window": "Fenster"
},
"sc": {
"ws-new": "Neuer Workspace",
"ws-jump-1-8": "Zu Workspace 18 springen",
"ws-jump-last": "Zum letzten Workspace springen",
"ws-close": "Workspace schließen",
"ws-rename": "Workspace umbenennen",
"sf-new": "Neue Oberfläche",
"sf-prev-1": "Vorherige Oberfläche",
"sf-prev-2": "Vorherige Oberfläche",
"sf-jump-1-8": "Zu Oberfläche 18 springen",
"sf-jump-last": "Zur letzten Oberfläche springen",
"sf-close": "Oberfläche schließen",
"sp-right": "Rechts teilen",
"sp-down": "Unten teilen",
"sp-focus": "Bereich richtungsabhängig fokussieren",
"sp-browser-right": "Browser rechts teilen",
"sp-browser-down": "Browser unten teilen",
"br-open": "Browser-Oberfläche öffnen",
"br-addr": "Adressleiste fokussieren",
"br-forward": "Vorwärts",
"br-reload": "Seite neu laden",
"br-devtools": "Entwicklerwerkzeuge öffnen",
"nt-panel": "Benachrichtigungspanel anzeigen",
"nt-latest": "Zur neuesten ungelesenen springen",
"nt-flash": "Blitz auslösen",
"fd-find": "Suchen",
"fd-next-prev": "Nächstes / Vorheriges Ergebnis",
"fd-hide": "Suchleiste ausblenden",
"fd-selection": "Auswahl für Suche verwenden",
"tm-clear": "Scrollback löschen",
"tm-copy": "Kopieren (mit Auswahl)",
"tm-paste": "Einfügen",
"tm-font": "Schriftgröße vergrößern / verkleinern",
"tm-reset": "Schriftgröße zurücksetzen",
"wn-new": "Neues Fenster",
"wn-settings": "Einstellungen",
"wn-reload": "Konfiguration neu laden",
"wn-quit": "Beenden"
},
"metaTitle": "Tastenkürzel"
},
"api": {
"title": "API-Referenz",
"metaDescription": "cmux CLI und Unix-Socket-API-Referenz. Workspace-Verwaltung, geteilte Bereiche, Eingabesteuerung, Benachrichtigungen, Seitenleisten-Metadaten, Umgebungsvariablen und Erkennungsmethoden.",
"intro": "cmux bietet sowohl ein CLI-Werkzeug als auch einen Unix-Socket für programmatische Steuerung. Jeder Befehl ist über beide Schnittstellen verfügbar.",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "Pfad",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Getaggter Debug-Build",
"socketOverride": "Überschreiben mit der Umgebungsvariable CMUX_SOCKET_PATH. Senden Sie eine JSON-Anfrage pro Aufruf, mit Zeilenumbruch am Ende:",
"socketCallout": "JSON-Socket-Anfragen müssen method und params verwenden. Legacy-v1-JSON-Payloads wie <legacy>'{'\"command\":\"...\"'}'</legacy> werden nicht unterstützt.",
"accessModes": "Zugriffsmodi",
"modeHeader": "Modus",
"descriptionHeader": "Beschreibung",
"howToEnableHeader": "Aktivierung",
"offMode": "Socket deaktiviert",
"offEnable": "Einstellungs-UI oder CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "Nur Prozesse, die in cmux-Terminals gestartet wurden, können sich verbinden.",
"cmuxOnlyEnable": "Standardmodus in der Einstellungs-UI",
"allowAllMode": "Jeden lokalen Prozess verbinden lassen (keine Herkunftsprüfung).",
"allowAllEnable": "Nur per Umgebungsvariable: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "Auf gemeinsam genutzten Rechnern verwenden Sie Aus oder Nur cmux-Prozesse.",
"cliOptions": "CLI-Optionen",
"flagHeader": "Flag",
"customSocketPath": "Benutzerdefinierter Socket-Pfad",
"outputJson": "Ausgabe im JSON-Format",
"targetWindow": "Ein bestimmtes Fenster ansprechen",
"targetWorkspace": "Einen bestimmten Workspace ansprechen",
"targetSurface": "Eine bestimmte Oberfläche ansprechen",
"idFormat": "ID-Format in der JSON-Ausgabe steuern",
"workspaceCommands": "Workspace-Befehle",
"listWorkspacesDesc": "Alle geöffneten Workspaces auflisten.",
"newWorkspaceDesc": "Einen neuen Workspace erstellen.",
"selectWorkspaceDesc": "Zu einem bestimmten Workspace wechseln.",
"currentWorkspaceDesc": "Den aktuell aktiven Workspace abrufen.",
"closeWorkspaceDesc": "Einen Workspace schließen.",
"splitCommands": "Split-Befehle",
"newSplitDesc": "Einen neuen geteilten Bereich erstellen. Richtungen: left, right, up, down.",
"listSurfacesDesc": "Alle Oberflächen im aktuellen Workspace auflisten.",
"focusSurfaceDesc": "Eine bestimmte Oberfläche fokussieren.",
"inputCommands": "Eingabebefehle",
"sendDesc": "Texteingabe an das fokussierte Terminal senden.",
"sendKeyDesc": "Einen Tastendruck senden. Tasten: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "Text an eine bestimmte Oberfläche senden.",
"sendKeySurfaceDesc": "Einen Tastendruck an eine bestimmte Oberfläche senden.",
"notificationCommands": "Benachrichtigungsbefehle",
"notifyDesc": "Eine Benachrichtigung senden.",
"listNotificationsDesc": "Alle Benachrichtigungen auflisten.",
"clearNotificationsDesc": "Alle Benachrichtigungen löschen.",
"sidebarMetadata": "Seitenleisten-Metadaten-Befehle",
"sidebarMetadataDesc": "Setzen Sie Status-Pills, Fortschrittsbalken und Log-Einträge in der Seitenleiste für jeden Workspace. Nützlich für Build-Skripte, CI-Integrationen und KI-Coding-Agenten, die den Status auf einen Blick anzeigen möchten.",
"setStatusDesc": "Eine Seitenleisten-Status-Pill setzen. Verwenden Sie einen eindeutigen Schlüssel, damit verschiedene Werkzeuge ihre eigenen Einträge verwalten können.",
"clearStatusDesc": "Einen Seitenleisten-Status-Eintrag per Schlüssel entfernen.",
"listStatusDesc": "Alle Seitenleisten-Status-Einträge für einen Workspace auflisten.",
"setProgressDesc": "Einen Fortschrittsbalken in der Seitenleiste setzen (0.0 bis 1.0).",
"clearProgressDesc": "Den Seitenleisten-Fortschrittsbalken löschen.",
"logDesc": "Einen Log-Eintrag zur Seitenleiste hinzufügen. Stufen: info, progress, success, warning, error.",
"clearLogDesc": "Alle Seitenleisten-Log-Einträge löschen.",
"listLogDesc": "Seitenleisten-Log-Einträge auflisten.",
"sidebarStateDesc": "Alle Seitenleisten-Metadaten ausgeben (cwd, Git-Branch, Ports, Status, Fortschritt, Logs).",
"utilityCommands": "Hilfsbefehle",
"pingDesc": "Prüfen, ob cmux läuft und reagiert.",
"capabilitiesDesc": "Verfügbare Socket-Methoden und aktuellen Zugriffsmodus auflisten.",
"identifyDesc": "Fokussierten Fenster-/Workspace-/Bereichs-/Oberflächen-Kontext anzeigen.",
"envVariables": "Umgebungsvariablen",
"variableHeader": "Variable",
"socketPathDesc": "Den von CLI und Integrationen verwendeten Socket-Pfad überschreiben",
"socketEnableDesc": "Socket aktivieren/deaktivieren erzwingen (1/0, true/false, on/off)",
"socketModeDesc": "Zugriffsmodus überschreiben (cmuxOnly, allowAll, off). Akzeptiert auch cmux-only/cmux_only und allow-all/allow_all",
"workspaceIdDesc": "Automatisch gesetzt: Aktuelle Workspace-ID",
"surfaceIdDesc": "Automatisch gesetzt: Aktuelle Oberflächen-ID",
"termProgramDesc": "Gesetzt auf ghostty",
"termDesc": "Gesetzt auf xterm-ghostty",
"envCallout": "Legacy-Werte für CMUX_SOCKET_MODE full und notifications werden aus Kompatibilitätsgründen weiterhin akzeptiert.",
"detectingCmux": "cmux erkennen",
"examples": "Beispiele",
"pythonClient": "Python-Client",
"shellScript": "Shell-Skript",
"buildScriptNotification": "Build-Skript mit Benachrichtigung",
"metaTitle": "API-Referenz"
},
"notifications": {
"title": "Benachrichtigungen",
"metaDescription": "Senden Sie Desktop-Benachrichtigungen von KI-Agenten und Skripten in cmux. CLI, OSC 99/777 Escape-Sequenzen und Claude Code Hooks-Integration.",
"intro": "cmux unterstützt Desktop-Benachrichtigungen, mit denen KI-Agenten und Skripte Sie benachrichtigen können, wenn sie Aufmerksamkeit benötigen.",
"lifecycle": "Lebenszyklus",
"received": "Empfangen: Benachrichtigung erscheint im Panel, Desktop-Alarm wird ausgelöst (falls nicht unterdrückt)",
"unread": "Ungelesen: Badge wird auf dem Workspace-Tab angezeigt",
"read": "Gelesen: Wird gelöscht, wenn Sie den Workspace anzeigen",
"cleared": "Gelöscht: Aus dem Panel entfernt",
"suppression": "Unterdrückung",
"suppressionDesc": "Desktop-Alarme werden unterdrückt, wenn:",
"suppressItem1": "Das cmux-Fenster fokussiert ist",
"suppressItem2": "Der spezifische Workspace, der die Benachrichtigung sendet, aktiv ist",
"suppressItem3": "Das Benachrichtigungspanel geöffnet ist",
"notificationPanel": "Benachrichtigungspanel",
"notificationPanelDesc": "Drücken Sie <openShortcut>⌘⇧I</openShortcut>, um das Benachrichtigungspanel zu öffnen. Klicken Sie auf eine Benachrichtigung, um zu diesem Workspace zu springen. Drücken Sie <jumpShortcut>⌘⇧U</jumpShortcut>, um direkt zum Workspace mit der neuesten ungelesenen Benachrichtigung zu springen.",
"customCommand": "Benutzerdefinierter Befehl",
"customCommandDesc": "Führen Sie jedes Mal einen Shell-Befehl aus, wenn eine Benachrichtigung geplant wird. Setzen Sie ihn unter Einstellungen > App > Benachrichtigungsbefehl. Der Befehl wird über /bin/sh -c mit diesen Umgebungsvariablen ausgeführt:",
"customCommandNote": "Der Befehl läuft unabhängig von der System-Soundauswahl. Setzen Sie die Auswahl auf \"Ohne\", um nur den benutzerdefinierten Befehl zu verwenden, oder behalten Sie beides für einen Systemsound plus eine benutzerdefinierte Aktion bei.",
"sending": "Benachrichtigungen senden",
"cli": "CLI",
"osc777Title": "OSC 777 (einfach)",
"osc777Desc": "Das RXVT-Protokoll verwendet ein festes Format mit Titel und Inhalt:",
"osc99Title": "OSC 99 (erweitert)",
"osc99Desc": "Das Kitty-Protokoll unterstützt Untertitel und Benachrichtigungs-IDs:",
"variableHeader": "Variable",
"descriptionHeader": "Beschreibung",
"envTitle": "Benachrichtigungstitel (Workspace-Name oder App-Name)",
"envSubtitle": "Benachrichtigungs-Untertitel",
"envBody": "Benachrichtigungstext",
"cmpTitleBody": "Titel + Text",
"cmpSubtitle": "Untertitel",
"cmpNotificationId": "Benachrichtigungs-ID",
"cmpComplexity": "Komplexität",
"cmpYes": "Ja",
"cmpNo": "Nein",
"cmpHigher": "Höher",
"cmpLower": "Niedriger",
"featureHeader": "Funktion",
"comparisonCallout": "Verwenden Sie OSC 777 für einfache Benachrichtigungen. Verwenden Sie OSC 99, wenn Sie Untertitel oder Benachrichtigungs-IDs benötigen. Verwenden Sie die CLI (cmux notify) für die einfachste Integration.",
"claudeCodeHooks": "Claude Code Hooks",
"claudeCodeHooksDesc": "cmux integriert sich mit <link>Claude Code</link> über Hooks, um Sie zu benachrichtigen, wenn Aufgaben abgeschlossen sind.",
"createHookScript": "1. Hook-Skript erstellen",
"configureClaude": "2. Claude Code konfigurieren",
"restartNote": "Starten Sie Claude Code neu, um die Hooks zu aktivieren.",
"integrationExamples": "Integrationsbeispiele",
"notifyAfterLong": "Benachrichtigung nach langem Befehl",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux Passthrough",
"tmuxDesc": "Wenn Sie tmux innerhalb von cmux verwenden, aktivieren Sie Passthrough:",
"metaTitle": "Benachrichtigungen"
},
"browserAutomation": {
"title": "Browser-Automatisierung",
"metaDescription": "cmux Browser-Befehlsreferenz für Navigation, DOM-Interaktion, Warten, Inspektion, JavaScript-Ausführung, Tabs, Dialoge, Frames, Downloads und Browser-Zustand.",
"intro": "Die cmux browser-Befehlsgruppe bietet Browser-Automatisierung für cmux-Browser-Oberflächen. Verwenden Sie sie zum Navigieren, Interagieren mit DOM-Elementen, Inspizieren des Seitenzustands, Ausführen von JavaScript und Verwalten von Browser-Sitzungsdaten.",
"commandIndex": "Befehlsindex",
"categoryHeader": "Kategorie",
"subcommandsHeader": "Unterbefehle",
"navAndTargeting": "Navigation und Zielauswahl",
"waiting": "Warten",
"domInteraction": "DOM-Interaktion",
"inspection": "Inspektion",
"jsAndInjection": "JavaScript und Injection",
"framesDialogsDownloads": "Frames, Dialoge, Downloads",
"stateAndSession": "Zustand und Sitzungsdaten",
"tabsAndLogs": "Tabs und Logs",
"targetingSurface": "Eine Browser-Oberfläche ansprechen",
"targetingDesc": "Die meisten Unterbefehle erfordern eine Ziel-Oberfläche. Sie können sie positionell oder mit --surface übergeben.",
"navigation": "Navigation",
"waitingSection": "Warten",
"waitingDesc": "Verwenden Sie wait, um zu blockieren, bis Selektoren, Text, URL-Fragmente, Ladezustand oder eine JavaScript-Bedingung erfüllt ist.",
"domSection": "DOM-Interaktion",
"domDesc": "Mutierende Aktionen unterstützen --snapshot-after für schnelle Verifizierung in Skripten.",
"inspectionSection": "Inspektion",
"inspectionDesc": "Verwenden Sie strukturierte Getter für Skripte und Snapshots/Screenshots für menschliche Überprüfung.",
"jsSection": "JavaScript Eval und Injection",
"stateSection": "Zustand",
"stateDesc": "Sitzungsdaten-Befehle umfassen Cookies, Local/Session Storage und vollständige Browser-Zustandssnapshots.",
"tabsSection": "Tabs",
"tabsDesc": "Browser-Tab-Operationen werden auf Browser-Oberflächen in der aktiven Browser-Tab-Gruppe abgebildet.",
"consoleSection": "Konsole und Fehler",
"dialogsSection": "Dialoge",
"framesSection": "Frames",
"downloadsSection": "Downloads",
"commonPatterns": "Häufige Muster",
"patternNavigate": "Navigieren, warten, inspizieren",
"patternForm": "Formular ausfüllen und Erfolgstext überprüfen",
"patternDebug": "Debug-Artefakte bei Fehler erfassen",
"patternSession": "Browser-Sitzung speichern und wiederherstellen",
"metaTitle": "Browser-Automatisierung"
},
"changelog": {
"title": "Changelog",
"metaDescription": "cmux Release-Notes und Versionshistorie. Neue Funktionen, Fehlerbehebungen und Änderungen für das native macOS-Terminal.",
"metaTitle": "Änderungsprotokoll"
},
"navItems": {
"gettingStarted": "Erste Schritte",
"concepts": "Konzepte",
"configuration": "Konfiguration",
"keyboardShortcuts": "Tastaturkürzel",
"apiReference": "API-Referenz",
"browserAutomation": "Browser-Automatisierung",
"notifications": "Benachrichtigungen",
"changelog": "Changelog"
}
},
"legal": {
"privacyPolicy": "Datenschutzrichtlinie",
"termsOfService": "Nutzungsbedingungen",
"eula": "EULA"
},
"wallOfLove": {
"title": "Wall of Love",
"description": "Was andere über cmux sagen."
},
"testimonials": {
"mitchellh": "Und wieder ein libghostty-basiertes Projekt, diesmal ein macOS-Terminal mit vertikalen Tabs, besserer Organisation/Benachrichtigungen, eingebettetem/skriptfähigem Browser, speziell für Leute, die viele terminalbasierte Agenten-Workflows nutzen.",
"schrockn": "Genau das Produkt, nach dem ich gesucht habe. Nach zwei Stunden heute Morgen bin ich verliebt.",
"egrefen": "Ich habe das ganze Wochenende damit gearbeitet und es ist großartig.",
"max4c": "Das ist mein Lieblingstool der letzten zwei Wochen",
"asaza": "cmux sieht so gut aus, dass es vielleicht Zeit ist, sich von VSCode zu verabschieden",
"johnthedebs": "Hey, das sieht echt toll aus. Ich liebe die Ideen hier, insbesondere: die Programmierbarkeit, das geschichtete UI, der Browser mit API. Freue mich darauf, das auszuprobieren. Außerdem möchte ich sagen, dass ich es sehr schätze, dass Mitchell Hashimoto libghostty geschaffen hat; es fühlt sich wie eine aufregende Zeit an, Terminal-Nutzer zu sein.",
"joeriddles": "Vertikale Tabs in meinem Terminal! Daran habe ich vorher nie gedacht. Ich nutze und liebe Firefox-Vertical-Tabs.",
"dchu17": "Habe es ausprobiert und es war ziemlich intuitiv. Gute Arbeit!",
"afruth": "Gefällt mir. Habe es gestern mit drei parallelen Projekten laufen lassen, jedes mit mehreren Worktrees. In Kombination mit lazygit und yazi/nvim war ich etwas produktiver als sonst, ohne mehreren ghostty/iTerm-Instanzen hinterherjagen zu müssen. Fühlt sich auch natürlicher an als tmux.",
"northprint": "cmux ausprobiert, weil es gut aussah, und es ist gut",
"indykish": "cmux ist ziemlich gut.",
"kataring": "Zu cmux.dev gewechselt",
"scottw": "Das war so ein nützlicher Fund. Ich kann es nur weiterempfehlen.",
"johnblythe": "Am Wochenende installiert und sofort begeistert. Habe auf sowas gewartet.",
"bchris91": "Genau das, was ich wollte. Tolle Arbeit, danke!",
"connorelsea": "Nutze das seit einer Woche und es ist fantastisch. Ein vertikaler Tab pro WIP-Aufgabe. Darin Claude auf einer Seite und Browser mit PR und Ressourcen auf der anderen. Zwischen Aufgaben wechseln und organisiert bleiben. Dazu Skills, damit Claude CI rekursiv überwacht usw. Fühle mich ehrlich gesagt erleuchtet.",
"tonkotsuboy": "Anfang des Jahres bin ich von Warp zu Ghostty gewechselt, aber jetzt bin ich bei cmux. Die vertikalen Tabs sind praktisch, und ich schätze die Benachrichtigungen, wenn Claude-Code-Aufgaben fertig sind. Da es auf Ghostty basiert, bleibt die blitzschnelle Performance erhalten. Branch-Anzeige und Vervollständigungen, die ich in Ghostty eingerichtet hatte, funktionieren auch weiterhin."
},
"languageSwitcher": {
"label": "Sprache"
}
}

589
web/messages/en.json Normal file
View file

@ -0,0 +1,589 @@
{
"meta": {
"title": "cmux — The terminal built for multitasking",
"description": "Native macOS terminal built on Ghostty. Works with Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, and any CLI tool. Vertical tabs, notification rings, split panes, and a socket API.",
"ogDescription": "Native macOS terminal for AI coding agents. Works with Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, and any CLI tool."
},
"common": {
"downloadForMac": "Download for Mac",
"viewOnGitHub": "View on GitHub",
"closeMenu": "Close menu",
"openMenu": "Open menu",
"toggleTheme": "Toggle theme",
"backToBlog": "Back to blog",
"readTheDocs": "Read the Docs",
"viewChangelog": "View Changelog"
},
"nav": {
"docs": "Docs",
"blog": "Blog",
"changelog": "Changelog",
"community": "Community",
"github": "GitHub"
},
"footer": {
"product": "Product",
"resources": "Resources",
"legal": "Legal",
"social": "Social",
"blog": "Blog",
"community": "Community",
"docs": "Docs",
"changelog": "Changelog",
"privacy": "Privacy",
"terms": "Terms",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "Contact",
"copyright": "© {year} Manaflow",
"language": "Language"
},
"home": {
"taglinePrefix": "The terminal built for ",
"typingCodingAgents": "coding agents",
"typingMultitasking": "multitasking",
"subtitle": "Native macOS app built on Ghostty. Vertical tabs, notification rings when agents need attention, split panes, and a socket API for automation.",
"features": "Features",
"faq": "FAQ",
"communitySection": "Community",
"feature": {
"verticalTabs": "Vertical tabs",
"verticalTabsDesc": ": sidebar shows git branch, working directory, ports, and notification text",
"notificationRings": "Notification rings",
"notificationRingsDesc": ": panes light up when agents need attention",
"inAppBrowser": "In-app browser",
"inAppBrowserDesc": ": split a browser alongside your terminal with a scriptable API",
"splitPanes": "Split panes",
"splitPanesDesc": ": horizontal and vertical splits within each tab",
"scriptable": "Scriptable",
"scriptableDesc": ": CLI and socket API for automation and scripting",
"gpuAccelerated": "GPU-accelerated",
"gpuAcceleratedDesc": ": powered by libghostty for smooth rendering",
"lightweight": "Lightweight",
"lightweightDesc": ": native Swift + AppKit, no Electron",
"keyboardShortcuts": "Keyboard shortcuts",
"keyboardShortcutsDesc": ": <link>extensive shortcuts</link> for workspaces, splits, browser, and more"
},
"faqGhosttyQ": "How does cmux relate to Ghostty?",
"faqGhosttyA": "cmux is not a fork of Ghostty. It uses <link>libghostty</link> as a library for terminal rendering, the same way apps use WebKit for web views. Ghostty is a standalone terminal; cmux is a different app built on top of its rendering engine.",
"faqPlatformQ": "What platforms does it support?",
"faqPlatformA": "macOS only, for now. cmux is a native Swift + AppKit app.",
"faqAgentsQ": "What coding agents does cmux work with?",
"faqAgentsA": "All of them. cmux is a terminal, so any agent that runs in a terminal works out of the box: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent, and anything else you can launch from the command line.",
"faqNotificationsQ": "How do notifications work?",
"faqNotificationsA": "When a process needs attention, cmux shows notification rings around panes, unread badges in the sidebar, a notification popover, and a macOS desktop notification. These fire automatically via standard terminal escape sequences (OSC 9/99/777), or you can trigger them with the <cliLink>cmux CLI</cliLink> and <hooksLink>Claude Code hooks</hooksLink>.",
"faqShortcutsQ": "Can I customize keyboard shortcuts?",
"faqShortcutsA": "Terminal keybindings are read from your Ghostty config file (<configPath>~/.config/ghostty/config</configPath>). cmux-specific shortcuts (workspaces, splits, browser, notifications) can be customized in Settings. See the <link>default shortcuts</link> for a full list.",
"faqTmuxQ": "How does it compare to tmux?",
"faqTmuxA": "tmux is a terminal multiplexer that runs inside any terminal. cmux is a native macOS app with a GUI: vertical tabs, split panes, an embedded browser, and a socket API are all built in. No config files or prefix keys needed.",
"faqFreeQ": "Is cmux free?",
"faqFreeA": "Yes, cmux is free to use. The source code is available on <link>GitHub</link>."
},
"community": {
"title": "Community",
"description": "Connect with other cmux users and the team behind it.",
"metaTitle": "Community — cmux",
"metaDescription": "Join the cmux community on Discord, Twitter, GitHub, and more",
"discord": "Discord",
"discordAction": "Join our Discord",
"discordDesc": "Chat with the community, get help, and share feedback",
"githubAction": "View on GitHub",
"githubDesc": "Star the repo, report issues, and contribute",
"twitter": "Twitter",
"twitterAction": "Follow on X",
"twitterDesc": "Updates, announcements, and tips",
"youtube": "YouTube",
"youtubeAction": "Subscribe",
"youtubeDesc": "Demos, tutorials, and walkthroughs",
"linkedin": "LinkedIn",
"linkedinAction": "Follow us",
"linkedinDesc": "Company news and engineering updates"
},
"blog": {
"title": "Blog",
"layoutTitle": "cmux blog",
"metaTitle": "Blog",
"metaDescription": "News and updates from the cmux team",
"description": "News and updates from the cmux team",
"zenOfCmux": {
"metaTitle": "The Zen of cmux",
"metaDescription": "cmux is a primitive, not a solution. It gives you composable pieces and your workflow is up to you."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "How Cmd+Shift+U navigates between finished agents across workspaces in cmux."
},
"showHnLaunch": {
"metaTitle": "Launching cmux on Show HN",
"metaDescription": "cmux launched on Hacker News, hit #2, went viral in Japan, and people started building extensions on the CLI. Here's what happened."
},
"introducingCmux": {
"metaTitle": "Introducing cmux",
"metaDescription": "A native macOS terminal built on Ghostty, designed for running multiple AI coding agents side by side."
},
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "How Cmd+Shift+U navigates between finished agents across workspaces in cmux.",
"date": "March 4, 2026",
"p1": "My favorite cmux feature is Cmd+Shift+U. I have 17 workspaces open right now, each running an agent. I used to click through tabs and the notification panel to figure out what completed. Typing is faster.",
"p2": "Cmd+Shift+U jumps to the newest unread <link>notification</link>. In practice that means the last agent that finished. It switches to the right workspace, focuses the exact pane, flashes it so you see where to look, and marks it read. If the notification came from another window, that window comes forward."
},
"zenOfCmux": {
"title": "The Zen of cmux",
"summary": "cmux is a primitive, not a solution. It gives you composable pieces and your workflow is up to you.",
"date": "February 27, 2026",
"p1": "cmux is not prescriptive about how developers hold their tools. It's a terminal and browser with a CLI, and the rest is up to you.",
"p2": "cmux is a primitive, not a solution. It gives you a terminal, a browser, notifications, workspaces, splits, tabs, and a CLI to control all of it. cmux doesn't force you into an opinionated way to use coding agents. What you build with the primitives is yours.",
"p3": "The best developers have always built their own tools. Nobody has figured out the best way to work with agents yet, and the teams building closed products definitely haven't either. The developers closest to their own codebases will figure it out first.",
"p4": "Give a million developers composable primitives and they'll collectively find the most efficient workflows faster than any product team could design top-down."
},
"showHnLaunch": {
"title": "Launching cmux on Show HN",
"summary": "cmux hit #2 on Hacker News, got shared by Mitchell Hashimoto, and went viral in Japan.",
"date": "February 21, 2026",
"intro": "We posted cmux on <link>Show HN</link> on Feb 19:",
"blockquote1": "I run a lot of Claude Code and Codex sessions in parallel. I was using Ghostty with a bunch of split panes, and relying on native macOS notifications to know when an agent needed me. But Claude Code's notification body is always just \"Claude is waiting for your input\" with no context, and with enough tabs open, I couldn't even read the titles anymore.",
"blockquote2": "I tried a few coding orchestrators but most of them were Electron/Tauri apps and the performance bugged me. I also just prefer the terminal since GUI orchestrators lock you into their workflow. So I built cmux as a native macOS app in Swift/AppKit. It uses libghostty for terminal rendering and reads your existing Ghostty config for themes, fonts, colors, and more.",
"blockquote3": "The main additions are the sidebar and notification system. The sidebar has vertical tabs that show git branch, working directory, listening ports, and the latest notification text for each workspace. The notification system picks up terminal sequences (OSC 9/99/777) and has a CLI (cmux notify) you can wire into agent hooks for Claude Code, OpenCode, etc. When an agent is waiting, its pane gets a blue ring and the tab lights up in the sidebar, so I can tell which one needs me across splits and tabs. Cmd+Shift+U jumps to the most recent unread.",
"blockquote4": "The in-app browser has a scriptable API. Agents can snapshot the accessibility tree, get element refs, click, fill forms, evaluate JS, and read console logs. You can split a browser pane next to your terminal and have Claude Code interact with your dev server directly.",
"blockquote5": "Everything is scriptable through the CLI and socket API: create workspaces/tabs, split panes, send keystrokes, open URLs in the browser.",
"hitNumber2": "At peak it hit #2 on Hacker News. Mitchell Hashimoto shared it:",
"favoriteComment": "My favorite comment from the <link>HN thread</link>:",
"viralJapan": "Surprisingly, cmux went viral in Japan:",
"translation": "Translation: \"This looks good. A Ghostty-based terminal app designed so you don't get lost running multiple CLIs like Claude Code in parallel. The waiting-for-input panel gets a blue frame, and it has its own notification system.\"",
"viralChina": "And semi-viral in China:",
"extensions": "Another exciting thing was seeing people build on top of the cmux CLI. sasha built a pi-cmux extension that shows model info, token usage, and agent state in the sidebar:",
"scriptable": "Everything in cmux is scriptable through the CLI: creating workspaces, sending keystrokes, controlling the browser, reading notifications. Part of the cmux philosophy is being programmable and composable, so people can customize the way they work with coding agents. The state of the art for coding agents is changing fast, and you don't want to be locked into an inflexible GUI orchestrator that can't keep up.",
"cta": "If you're running multiple coding agents, <link>give cmux a try</link>."
},
"introducingCmux": {
"title": "Introducing cmux",
"summary": "A native macOS terminal built on Ghostty, designed for running multiple AI coding agents side by side.",
"date": "February 12, 2026",
"p1": "cmux is a native macOS terminal application built on top of Ghostty, designed from the ground up for developers who run multiple AI coding agents simultaneously.",
"whyTitle": "Why cmux?",
"whyP": "Modern development workflows often involve running several agents at once. Claude Code, Codex, and other tools each in their own terminal. Keeping track of which ones need attention and switching between them quickly is the problem cmux solves.",
"featuresTitle": "Key features",
"featureVerticalTabsLabel": "Vertical tabs",
"featureVerticalTabsDesc": "see all your terminals at a glance in a sidebar",
"featureNotificationsLabel": "Notification rings",
"featureNotificationsDesc": "tabs flash when an agent needs your input",
"featureSplitPanesLabel": "Split panes",
"featureSplitPanesDesc": "horizontal and vertical splits within each workspace",
"featureSocketApiLabel": "Socket API",
"featureSocketApiDesc": "programmatic control for creating tabs and sending input",
"featureGpuLabel": "GPU-accelerated",
"featureGpuDesc": "powered by libghostty for smooth rendering",
"getStartedTitle": "Get started",
"getStartedP": "Install cmux via Homebrew or download the DMG from the <link>getting started guide</link>."
}
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "Getting Started",
"metaTitle": "Getting Started",
"metaDescription": "Install cmux, the native macOS terminal for AI coding agents. Homebrew, DMG download, CLI setup, and auto-updates via Sparkle.",
"intro": "cmux is a lightweight, native macOS terminal built on Ghostty for managing multiple AI coding agents. It features vertical tabs, a notification panel, and a socket-based control API.",
"install": "Install",
"dmgRecommended": "DMG (recommended)",
"dmgDesc": "Open the .dmg and drag cmux to your Applications folder. cmux auto-updates via Sparkle, so you only need to download once.",
"homebrew": "Homebrew",
"updateLater": "To update later:",
"firstLaunchCallout": "On first launch, macOS may ask you to confirm opening an app from an identified developer. Click <strong>Open</strong> to proceed.",
"verifyTitle": "Verify installation",
"verifyDesc": "Open cmux and you should see:",
"verifyItem1": "A terminal window with a vertical tab sidebar on the left",
"verifyItem2": "One initial workspace already open",
"verifyItem3": "The Ghostty-powered terminal ready for input",
"cliSetup": "CLI setup",
"cliDesc": "cmux includes a command-line tool for automation. Inside cmux terminals it works automatically. To use the CLI from outside cmux, create a symlink:",
"cliThen": "Then you can run commands like:",
"autoUpdates": "Auto-updates",
"autoUpdatesDesc": "cmux checks for updates automatically via Sparkle. When an update is available you'll see an update pill in the titlebar. You can also check manually via cmux > Check for Updates in the menu bar.",
"sessionRestore": "Session restore (current behavior)",
"sessionRestoreDesc": "After relaunch, cmux restores layout and metadata only:",
"sessionItem1": "Window, workspace, and pane layout",
"sessionItem2": "Working directories",
"sessionItem3": "Terminal scrollback (best effort)",
"sessionItem4": "Browser URL and navigation history",
"sessionCallout": "cmux does not restore live process state yet. Active terminal app sessions such as Claude Code, tmux, and vim are not resumed after app restart.",
"requirements": "Requirements",
"reqItem1": "macOS 14.0 or later",
"reqItem2": "Apple Silicon or Intel Mac"
},
"concepts": {
"title": "Concepts",
"metaTitle": "Concepts",
"metaDescription": "How cmux organizes terminals: windows, workspaces, panes, and surfaces. The hierarchy behind the sidebar, splits, and socket API.",
"intro": "cmux organizes your terminals in a four-level hierarchy. Understanding these levels helps when using the socket API, CLI, and keyboard shortcuts.",
"hierarchy": "Hierarchy",
"windowTitle": "Window",
"windowDesc": "A macOS window. Open multiple windows with {shortcut}. Each window has its own sidebar with independent workspaces.",
"workspaceTitle": "Workspace",
"workspaceDesc": "A sidebar entry. Each workspace contains one or more split panes. Workspaces are what you see listed in the left sidebar.",
"workspaceNote": "In the UI and keyboard shortcuts, workspaces are often called \"tabs\" since they behave like tabs in the sidebar. The socket API and environment variables use the term \"workspace\".",
"contextHeader": "Context",
"termUsedHeader": "Term used",
"sidebarUI": "Sidebar UI",
"tab": "Tab",
"keyboardShortcuts": "Keyboard shortcuts",
"workspaceOrTab": "Workspace or tab",
"socketAPI": "Socket API",
"environmentVariable": "Environment variable",
"workspaceShortcuts": "Shortcuts: {new} (new), {jump} (jump), {close} (close), {prevNext} (prev/next)",
"paneTitle": "Pane",
"paneDesc": "A split region within a workspace. Created by splitting with {right} (right) or {down} (down). Navigate between panes with {nav} + arrow keys.",
"paneNote": "Each pane can hold multiple surfaces (tabs within the pane).",
"surfaceTitle": "Surface",
"surfaceDesc": "A tab within a pane. Each pane has its own tab bar and can hold multiple surfaces. Created with {new}, navigated with {prev} / {next} or {jump}.",
"surfaceNote": "Surfaces are the individual terminal or browser sessions you interact with. Each surface has its own CMUX_SURFACE_ID environment variable.",
"panelTitle": "Panel",
"panelDesc": "The content inside a surface. Currently two types:",
"panelTerminal": "Terminal: a Ghostty terminal session",
"panelBrowser": "Browser: an embedded web view",
"panelNote": "Panel is mostly an internal concept. In the socket API and CLI, you interact with surfaces rather than panels directly.",
"visualExample": "Visual example",
"visualExampleDesc": "In this example:",
"visualItem1": "The window contains a sidebar with three workspaces (dev, server, logs)",
"visualItem2": "Workspace \"dev\" is selected, showing two panes side by side",
"visualItem3": "Pane 1 has two surfaces ([S1] and [S2] in the tab bar), with S1 active",
"visualItem4": "Pane 2 has one surface",
"visualItem5": "Each surface contains a panel (a terminal in this case)",
"summary": "Summary",
"levelHeader": "Level",
"whatItIsHeader": "What it is",
"createdByHeader": "Created by",
"identifiedByHeader": "Identified by",
"macosWindow": "macOS window",
"sidebarEntry": "Sidebar entry",
"splitRegion": "Split region",
"tabWithinPane": "Tab within pane",
"terminalOrBrowser": "Terminal or browser",
"automatic": "Automatic",
"paneIdSocket": "Pane ID (socket API)",
"panelIdInternal": "Panel ID (internal)"
},
"configuration": {
"title": "Configuration",
"metaTitle": "Configuration",
"metaDescription": "Configure cmux via Ghostty config files. Font, theme, colors, split pane styling, scrollback, and app settings for automation mode.",
"intro": "cmux reads configuration from Ghostty config files, giving you familiar options if you're coming from Ghostty.",
"configLocations": "Config file locations",
"configLocationsDesc": "cmux looks for configuration in these locations (in order):",
"createConfig": "Create the config file if it doesn't exist:",
"appearance": "Appearance",
"font": "Font",
"colors": "Colors",
"splitPanes": "Split panes",
"behavior": "Behavior",
"scrollback": "Scrollback",
"workingDirectory": "Working directory",
"appSettings": "App settings",
"appSettingsDesc": "In-app settings are available via cmux > Settings ({shortcut}):",
"themeMode": "Theme mode",
"themeSystem": "System: follow macOS appearance",
"themeLight": "Light: always light mode",
"themeDark": "Dark: always dark mode",
"automationMode": "Automation mode",
"automationModeDesc": "Control socket access level:",
"automationOff": "Off: no socket control (most secure)",
"automationCmux": "cmux processes only: only allow processes started inside cmux terminals to connect",
"automationAll": "allowAll: allow any local process to connect (CMUX_SOCKET_MODE=allowAll, env override only)",
"automationCallout": "On shared machines, consider using \"Off\" or \"cmux processes only\" mode.",
"browserLinkBehavior": "Browser link behavior",
"browserLinkDesc": "In Settings > Browser, cmux exposes two host lists with different purposes:",
"browserHostsEmbed": "Hosts to Open in Embedded Browser: applies to links clicked from terminal output. Hosts in this list open in cmux; other hosts open in your default browser. Supports one host or wildcard per line (for example: example.com, *.internal.example).",
"browserHostsHttp": "HTTP Hosts Allowed in Embedded Browser: applies only to HTTP (non-HTTPS) URLs. Hosts in this list can open in cmux without a warning prompt. Defaults include localhost, 127.0.0.1, ::1, 0.0.0.0, and *.localtest.me.",
"exampleConfig": "Example config"
},
"keyboardShortcuts": {
"title": "Keyboard Shortcuts",
"description": "All keyboard shortcuts available in cmux, grouped by category.",
"metaTitle": "Keyboard Shortcuts",
"metaDescription": "All cmux keyboard shortcuts for workspaces, surfaces, split panes, browser, notifications, find, and window management on macOS.",
"searchPlaceholder": "Search shortcuts...",
"searchLabel": "Search keyboard shortcuts",
"noResults": "No shortcuts found",
"noResultsHint": "Try a different search term",
"cat": {
"workspaces": "Workspaces",
"workspacesBlurb": "Workspaces live in the sidebar. Each workspace has its own set of panes and surfaces.",
"surfaces": "Surfaces",
"surfacesBlurb": "Surfaces are tabs inside a pane.",
"splitPanes": "Split Panes",
"browser": "Browser",
"notifications": "Notifications",
"find": "Find",
"terminal": "Terminal",
"window": "Window"
},
"sc": {
"ws-new": "New workspace",
"ws-jump-1-8": "Jump to workspace 18",
"ws-jump-last": "Jump to last workspace",
"ws-close": "Close workspace",
"ws-rename": "Rename workspace",
"sf-new": "New surface",
"sf-prev-1": "Previous surface",
"sf-prev-2": "Previous surface",
"sf-jump-1-8": "Jump to surface 18",
"sf-jump-last": "Jump to last surface",
"sf-close": "Close surface",
"sp-right": "Split right",
"sp-down": "Split down",
"sp-focus": "Focus pane directionally",
"sp-browser-right": "Split browser right",
"sp-browser-down": "Split browser down",
"br-open": "Open browser surface",
"br-addr": "Focus address bar",
"br-forward": "Forward",
"br-reload": "Reload page",
"br-devtools": "Open Developer Tools",
"nt-panel": "Show notifications panel",
"nt-latest": "Jump to latest unread",
"nt-flash": "Trigger flash",
"fd-find": "Find",
"fd-next-prev": "Find next / previous",
"fd-hide": "Hide find bar",
"fd-selection": "Use selection for find",
"tm-clear": "Clear scrollback",
"tm-copy": "Copy (with selection)",
"tm-paste": "Paste",
"tm-font": "Increase / decrease font size",
"tm-reset": "Reset font size",
"wn-new": "New window",
"wn-settings": "Settings",
"wn-reload": "Reload configuration",
"wn-quit": "Quit"
}
},
"api": {
"title": "API Reference",
"metaTitle": "API Reference",
"metaDescription": "cmux CLI and Unix socket API reference. Workspace management, split panes, input control, notifications, sidebar metadata, environment variables, and detection methods.",
"intro": "cmux provides both a CLI tool and a Unix socket for programmatic control. Every command is available through both interfaces.",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "Path",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Tagged debug build",
"socketOverride": "Override with the CMUX_SOCKET_PATH environment variable. Send one newline-terminated JSON request per call:",
"socketCallout": "JSON socket requests must use method and params. Legacy v1 JSON payloads such as <legacy>'{'\"command\":\"...\"'}'</legacy> are not supported.",
"accessModes": "Access modes",
"modeHeader": "Mode",
"descriptionHeader": "Description",
"howToEnableHeader": "How to enable",
"offMode": "Socket disabled",
"offEnable": "Settings UI or CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "Only processes spawned inside cmux terminals can connect.",
"cmuxOnlyEnable": "Default mode in Settings UI",
"allowAllMode": "Allow any local process to connect (no ancestry check).",
"allowAllEnable": "Environment override only: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "On shared machines, use Off or cmux processes only.",
"cliOptions": "CLI options",
"flagHeader": "Flag",
"customSocketPath": "Custom socket path",
"outputJson": "Output in JSON format",
"targetWindow": "Target a specific window",
"targetWorkspace": "Target a specific workspace",
"targetSurface": "Target a specific surface",
"idFormat": "Control identifier format in JSON output",
"workspaceCommands": "Workspace commands",
"listWorkspacesDesc": "List all open workspaces.",
"newWorkspaceDesc": "Create a new workspace.",
"selectWorkspaceDesc": "Switch to a specific workspace.",
"currentWorkspaceDesc": "Get the currently active workspace.",
"closeWorkspaceDesc": "Close a workspace.",
"splitCommands": "Split commands",
"newSplitDesc": "Create a new split pane. Directions: left, right, up, down.",
"listSurfacesDesc": "List all surfaces in the current workspace.",
"focusSurfaceDesc": "Focus a specific surface.",
"inputCommands": "Input commands",
"sendDesc": "Send text input to the focused terminal.",
"sendKeyDesc": "Send a key press. Keys: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "Send text to a specific surface.",
"sendKeySurfaceDesc": "Send a key press to a specific surface.",
"notificationCommands": "Notification commands",
"notifyDesc": "Send a notification.",
"listNotificationsDesc": "List all notifications.",
"clearNotificationsDesc": "Clear all notifications.",
"sidebarMetadata": "Sidebar metadata commands",
"sidebarMetadataDesc": "Set status pills, progress bars, and log entries in the sidebar for any workspace. Useful for build scripts, CI integrations, and AI coding agents that want to surface state at a glance.",
"setStatusDesc": "Set a sidebar status pill. Use a unique key so different tools can manage their own entries.",
"clearStatusDesc": "Remove a sidebar status entry by key.",
"listStatusDesc": "List all sidebar status entries for a workspace.",
"setProgressDesc": "Set a progress bar in the sidebar (0.0 to 1.0).",
"clearProgressDesc": "Clear the sidebar progress bar.",
"logDesc": "Append a log entry to the sidebar. Levels: info, progress, success, warning, error.",
"clearLogDesc": "Clear all sidebar log entries.",
"listLogDesc": "List sidebar log entries.",
"sidebarStateDesc": "Dump all sidebar metadata (cwd, git branch, ports, status, progress, logs).",
"utilityCommands": "Utility commands",
"pingDesc": "Check if cmux is running and responsive.",
"capabilitiesDesc": "List available socket methods and current access mode.",
"identifyDesc": "Show focused window/workspace/pane/surface context.",
"envVariables": "Environment variables",
"variableHeader": "Variable",
"socketPathDesc": "Override the socket path used by CLI and integrations",
"socketEnableDesc": "Force-enable/disable socket (1/0, true/false, on/off)",
"socketModeDesc": "Override access mode (cmuxOnly, allowAll, off). Also accepts cmux-only/cmux_only and allow-all/allow_all",
"workspaceIdDesc": "Auto-set: current workspace ID",
"surfaceIdDesc": "Auto-set: current surface ID",
"termProgramDesc": "Set to ghostty",
"termDesc": "Set to xterm-ghostty",
"envCallout": "Legacy CMUX_SOCKET_MODE values full and notifications are still accepted for compatibility.",
"detectingCmux": "Detecting cmux",
"examples": "Examples",
"pythonClient": "Python client",
"shellScript": "Shell script",
"buildScriptNotification": "Build script with notification"
},
"notifications": {
"title": "Notifications",
"metaTitle": "Notifications",
"metaDescription": "Send desktop notifications from AI agents and scripts in cmux. CLI, OSC 99/777 escape sequences, and Claude Code hooks integration.",
"intro": "cmux supports desktop notifications, allowing AI agents and scripts to alert you when they need attention.",
"lifecycle": "Lifecycle",
"received": "Received: notification appears in panel, desktop alert fires (if not suppressed)",
"unread": "Unread: badge shown on workspace tab",
"read": "Read: cleared when you view that workspace",
"cleared": "Cleared: removed from panel",
"suppression": "Suppression",
"suppressionDesc": "Desktop alerts are suppressed when:",
"suppressItem1": "The cmux window is focused",
"suppressItem2": "The specific workspace sending the notification is active",
"suppressItem3": "The notification panel is open",
"notificationPanel": "Notification panel",
"notificationPanelDesc": "Press <openShortcut>⌘⇧I</openShortcut> to open the notification panel. Click a notification to jump to that workspace. Press <jumpShortcut>⌘⇧U</jumpShortcut> to jump directly to the workspace with the most recent unread notification.",
"customCommand": "Custom command",
"customCommandDesc": "Run a shell command every time a notification is scheduled. Set it in Settings > App > Notification Command. The command runs via /bin/sh -c with these environment variables:",
"customCommandNote": "The command runs independently of the system sound picker. Set the picker to \"None\" to use only the custom command, or keep both for a system sound plus a custom action.",
"sending": "Sending notifications",
"cli": "CLI",
"osc777Title": "OSC 777 (simple)",
"osc777Desc": "The RXVT protocol uses a fixed format with title and body:",
"osc99Title": "OSC 99 (rich)",
"osc99Desc": "The Kitty protocol supports subtitles and notification IDs:",
"variableHeader": "Variable",
"descriptionHeader": "Description",
"envTitle": "Notification title (workspace name or app name)",
"envSubtitle": "Notification subtitle",
"envBody": "Notification body text",
"featureHeader": "Feature",
"cmpTitleBody": "Title + body",
"cmpSubtitle": "Subtitle",
"cmpNotificationId": "Notification ID",
"cmpComplexity": "Complexity",
"cmpYes": "Yes",
"cmpNo": "No",
"cmpHigher": "Higher",
"cmpLower": "Lower",
"comparisonCallout": "Use OSC 777 for simple notifications. Use OSC 99 when you need subtitles or notification IDs. Use the CLI (cmux notify) for the easiest integration.",
"claudeCodeHooks": "Claude Code hooks",
"claudeCodeHooksDesc": "cmux integrates with <link>Claude Code</link> via hooks to notify you when tasks complete.",
"createHookScript": "1. Create the hook script",
"configureClaude": "2. Configure Claude Code",
"restartNote": "Restart Claude Code to apply the hooks.",
"integrationExamples": "Integration examples",
"notifyAfterLong": "Notify after long command",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux passthrough",
"tmuxDesc": "If using tmux inside cmux, enable passthrough:"
},
"browserAutomation": {
"title": "Browser Automation",
"metaTitle": "Browser Automation",
"metaDescription": "cmux browser command reference for navigation, DOM interaction, waiting, inspection, JavaScript evaluation, tabs, dialogs, frames, downloads, and browser state.",
"intro": "The cmux browser command group provides browser automation against cmux browser surfaces. Use it to navigate, interact with DOM elements, inspect page state, evaluate JavaScript, and manage browser session data.",
"commandIndex": "Command Index",
"categoryHeader": "Category",
"subcommandsHeader": "Subcommands",
"navAndTargeting": "Navigation and targeting",
"waiting": "Waiting",
"domInteraction": "DOM interaction",
"inspection": "Inspection",
"jsAndInjection": "JavaScript and injection",
"framesDialogsDownloads": "Frames, dialogs, downloads",
"stateAndSession": "State and session data",
"tabsAndLogs": "Tabs and logs",
"targetingSurface": "Targeting a browser surface",
"targetingDesc": "Most subcommands require a target surface. You can pass it positionally or with --surface.",
"navigation": "Navigation",
"waitingSection": "Waiting",
"waitingDesc": "Use wait to block until selectors, text, URL fragments, load state, or a JavaScript condition is satisfied.",
"domSection": "DOM Interaction",
"domDesc": "Mutating actions support --snapshot-after for fast verification in scripts.",
"inspectionSection": "Inspection",
"inspectionDesc": "Use structured getters for scripts and snapshots/screenshots for human review.",
"jsSection": "JavaScript Eval and Injection",
"stateSection": "State",
"stateDesc": "Session data commands cover cookies, local/session storage, and full browser state snapshots.",
"tabsSection": "Tabs",
"tabsDesc": "Browser tab operations map to browser surfaces in the active browser tab group.",
"consoleSection": "Console and Errors",
"dialogsSection": "Dialogs",
"framesSection": "Frames",
"downloadsSection": "Downloads",
"commonPatterns": "Common Patterns",
"patternNavigate": "Navigate, wait, inspect",
"patternForm": "Fill a form and verify success text",
"patternDebug": "Capture debug artifacts on failure",
"patternSession": "Persist and restore browser session"
},
"changelog": {
"title": "Changelog",
"metaTitle": "Changelog",
"metaDescription": "cmux release notes and version history. New features, bug fixes, and changes for the native macOS terminal."
},
"navItems": {
"gettingStarted": "Getting Started",
"concepts": "Concepts",
"configuration": "Configuration",
"keyboardShortcuts": "Keyboard Shortcuts",
"apiReference": "API Reference",
"browserAutomation": "Browser Automation",
"notifications": "Notifications",
"changelog": "Changelog"
}
},
"legal": {
"privacyPolicy": "Privacy Policy",
"termsOfService": "Terms of Service",
"eula": "EULA"
},
"wallOfLove": {
"title": "Wall of Love",
"description": "What people are saying about cmux.",
"metaTitle": "Wall of Love — cmux",
"metaDescription": "What people are saying about cmux, the terminal built for multitasking."
},
"testimonials": {
"mitchellh": "Another day another libghostty-based project, this time a macOS terminal with vertical tabs, better organization/notifications, embedded/scriptable browser specifically targeted towards people who use a ton of terminal-based agentic workflows.",
"schrockn": "This is exactly the product I've been looking for. After two hours this am I've in love.",
"egrefen": "I've been using this all weekend and it's amazing.",
"max4c": "this has been my favorite tool for past two weeks",
"asaza": "cmux looks so good it might finally be time to say goodbye to VSCode",
"johnthedebs": "Hey, this looks seriously awesome. Love the ideas here, specifically: the programmability, layered UI, browser w/ api. Looking forward to giving this a spin. Also want to add that I really appreciate Mitchell Hashimoto creating libghostty; it feels like an exciting time to be a terminal user.",
"joeriddles": "Vertical tabs in my terminal! I never thought of that before. I use and love Firefox vertical tabs.",
"dchu17": "Gave this a run and it was pretty intuitive. Good work!",
"afruth": "I like it, ran it in the past day on three parallel projects each with several worktrees. Having this paired with lazygit and yazi / nvim made me a bit more productive than usual without having to chase multiple ghostty / iTerm instances. Also feels more natural than tmux.",
"northprint": "Tried cmux since it looked good — it's good",
"indykish": "cmux is pretty good.",
"kataring": "Switched to cmux.dev",
"scottw": "This has been such a useful find. I can't recommend it enough.",
"johnblythe": "grabbed this over the weekend and loved it. been waiting for something like this.",
"bchris91": "This is exactly what I've wanted. Amazing job thank you!",
"connorelsea": "Been using this for a week and it's fantastic. Vert tab for each WIP task. Inside, claudes on one side and browser with PR and resources on the other, switch between tasks and stay organized. Mix that with skills to have Claude watch CI recursively, etc. feeling enlightened tbh",
"tonkotsuboy": "I switched from Warp to Ghostty at the start of the year, but now I've switched to cmux. The vertical tabs are convenient, and I appreciate getting notified when Claude Code tasks finish. It's Ghostty-based so the blazing fast performance carries over. Branch display and completions I set up in Ghostty still work too."
},
"languageSwitcher": {
"label": "Language"
}
}

587
web/messages/es.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — La terminal diseñada para multitarea",
"description": "Terminal nativa de macOS basada en Ghostty. Funciona con Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider y cualquier herramienta CLI. Pestañas verticales, anillos de notificación, paneles divididos y una API de socket.",
"ogDescription": "Terminal nativa de macOS para agentes de código IA. Funciona con Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider y cualquier herramienta CLI."
},
"common": {
"downloadForMac": "Descargar para Mac",
"viewOnGitHub": "Ver en GitHub",
"closeMenu": "Cerrar menú",
"openMenu": "Abrir menú",
"toggleTheme": "Cambiar tema",
"backToBlog": "Volver al blog",
"readTheDocs": "Leer la documentación",
"viewChangelog": "Ver Changelog"
},
"nav": {
"docs": "Documentación",
"blog": "Blog",
"changelog": "Changelog",
"community": "Comunidad",
"github": "GitHub"
},
"footer": {
"product": "Producto",
"resources": "Recursos",
"legal": "Legal",
"social": "Redes sociales",
"blog": "Blog",
"community": "Comunidad",
"docs": "Documentación",
"changelog": "Changelog",
"privacy": "Privacidad",
"terms": "Términos",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "Contacto",
"copyright": "© {year} Manaflow",
"language": "Idioma"
},
"home": {
"taglinePrefix": "La terminal diseñada para ",
"typingCodingAgents": "agentes de código",
"typingMultitasking": "multitarea",
"subtitle": "App nativa de macOS basada en Ghostty. Pestañas verticales, anillos de notificación cuando los agentes necesitan atención, paneles divididos y una API de socket para automatización.",
"features": "Características",
"faq": "FAQ",
"communitySection": "Comunidad",
"feature": {
"verticalTabs": "Pestañas verticales",
"verticalTabsDesc": ": la barra lateral muestra la rama de git, el directorio de trabajo, los puertos y el texto de notificación",
"notificationRings": "Anillos de notificación",
"notificationRingsDesc": ": los paneles se iluminan cuando los agentes necesitan atención",
"inAppBrowser": "Navegador integrado",
"inAppBrowserDesc": ": divida un navegador junto a su terminal con una API programable",
"splitPanes": "Paneles divididos",
"splitPanesDesc": ": divisiones horizontales y verticales dentro de cada pestaña",
"scriptable": "Programable",
"scriptableDesc": ": CLI y API de socket para automatización y scripting",
"gpuAccelerated": "Aceleración por GPU",
"gpuAcceleratedDesc": ": impulsado por libghostty para un renderizado fluido",
"lightweight": "Ligero",
"lightweightDesc": ": Swift nativo + AppKit, sin Electron",
"keyboardShortcuts": "Atajos de teclado",
"keyboardShortcutsDesc": ": <link>amplios atajos</link> para workspaces, divisiones, navegador y más"
},
"faqGhosttyQ": "¿Cuál es la relación entre cmux y Ghostty?",
"faqGhosttyA": "cmux no es un fork de Ghostty. Utiliza <link>libghostty</link> como biblioteca para el renderizado de terminal, de la misma forma que las apps usan WebKit para vistas web. Ghostty es una terminal independiente; cmux es una app diferente construida sobre su motor de renderizado.",
"faqPlatformQ": "¿Qué plataformas soporta?",
"faqPlatformA": "Solo macOS, por ahora. cmux es una app nativa de Swift + AppKit.",
"faqAgentsQ": "¿Con qué agentes de programación funciona cmux?",
"faqAgentsA": "Con todos. cmux es una terminal, por lo que cualquier agente que funcione en una terminal funciona de inmediato: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent, y cualquier otra cosa que pueda ejecutar desde la línea de comandos.",
"faqNotificationsQ": "¿Cómo funcionan las notificaciones?",
"faqNotificationsA": "Cuando un proceso necesita atención, cmux muestra anillos de notificación alrededor de los paneles, insignias de no leído en la barra lateral, un popover de notificaciones y una notificación de escritorio de macOS. Estas se activan automáticamente mediante secuencias de escape estándar de terminal (OSC 9/99/777), o puede activarlas con la <cliLink>CLI de cmux</cliLink> y los <hooksLink>hooks de Claude Code</hooksLink>.",
"faqShortcutsQ": "¿Puedo personalizar los atajos de teclado?",
"faqShortcutsA": "Las combinaciones de teclas del terminal se leen de su archivo de configuración de Ghostty (<configPath>~/.config/ghostty/config</configPath>). Los atajos específicos de cmux (workspaces, divisiones, navegador, notificaciones) se pueden personalizar en Configuración. Consulte los <link>atajos predeterminados</link> para una lista completa.",
"faqTmuxQ": "¿Cómo se compara con tmux?",
"faqTmuxA": "tmux es un multiplexor de terminal que se ejecuta dentro de cualquier terminal. cmux es una app nativa de macOS con interfaz gráfica: pestañas verticales, paneles divididos, un navegador integrado y una API de socket están todos incorporados. No se necesitan archivos de configuración ni teclas de prefijo.",
"faqFreeQ": "¿Es cmux gratuito?",
"faqFreeA": "Sí, cmux es gratuito. El código fuente está disponible en <link>GitHub</link>."
},
"community": {
"title": "Comunidad",
"description": "Conéctese con otros usuarios de cmux y el equipo detrás del proyecto.",
"discord": "Discord",
"discordAction": "Únase a nuestro Discord",
"discordDesc": "Converse con la comunidad, obtenga ayuda y comparta comentarios",
"githubAction": "Ver en GitHub",
"githubDesc": "Marque el repositorio con estrella, reporte problemas y contribuya",
"twitter": "Twitter",
"twitterAction": "Seguir en X",
"twitterDesc": "Actualizaciones, anuncios y consejos",
"youtube": "YouTube",
"youtubeAction": "Suscribirse",
"youtubeDesc": "Demos, tutoriales y guías paso a paso",
"linkedin": "LinkedIn",
"linkedinAction": "Síganos",
"linkedinDesc": "Noticias de la empresa y actualizaciones de ingeniería",
"metaTitle": "Comunidad — cmux",
"metaDescription": "Únete a la comunidad de cmux en Discord, Twitter, GitHub y más"
},
"blog": {
"title": "Blog",
"layoutTitle": "cmux blog",
"metaTitle": "Blog",
"metaDescription": "Noticias y novedades del equipo de cmux",
"description": "Noticias y actualizaciones del equipo de cmux",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Cómo Cmd+Shift+U navega entre agentes finalizados a través de workspaces en cmux.",
"date": "4 de marzo de 2026",
"p1": "Mi función favorita de cmux es Cmd+Shift+U. Tengo 17 workspaces abiertos ahora mismo, cada uno ejecutando un agente. Antes hacía clic por las pestañas y el panel de notificaciones para descubrir qué había terminado. Escribir es más rápido.",
"p2": "Cmd+Shift+U salta a la <link>notificación</link> no leída más reciente. En la práctica, eso significa el último agente que terminó. Cambia al workspace correcto, enfoca el panel exacto, lo hace parpadear para que vea dónde mirar y lo marca como leído. Si la notificación vino de otra ventana, esa ventana pasa al frente."
},
"zenOfCmux": {
"title": "The Zen of cmux",
"summary": "cmux es una primitiva, no una solución. Le da piezas componibles y su flujo de trabajo depende de usted.",
"date": "27 de febrero de 2026",
"p1": "cmux no prescribe cómo los desarrolladores deben usar sus herramientas. Es una terminal y un navegador con una CLI, y el resto depende de usted.",
"p2": "cmux es una primitiva, no una solución. Le ofrece una terminal, un navegador, notificaciones, workspaces, divisiones, pestañas y una CLI para controlarlo todo. cmux no lo obliga a usar agentes de programación de una manera específica. Lo que construya con las primitivas es suyo.",
"p3": "Los mejores desarrolladores siempre han construido sus propias herramientas. Nadie ha descubierto la mejor forma de trabajar con agentes todavía, y los equipos que construyen productos cerrados definitivamente tampoco. Los desarrolladores más cercanos a sus propios repositorios lo descubrirán primero.",
"p4": "Dele a un millón de desarrolladores primitivas componibles y colectivamente encontrarán los flujos de trabajo más eficientes más rápido de lo que cualquier equipo de producto podría diseñar desde arriba."
},
"showHnLaunch": {
"title": "Lanzamiento de cmux en Show HN",
"summary": "cmux alcanzó el puesto #2 en Hacker News, fue compartido por Mitchell Hashimoto y se hizo viral en Japón.",
"date": "21 de febrero de 2026",
"intro": "Publicamos cmux en <link>Show HN</link> el 19 de febrero:",
"blockquote1": "Ejecuto muchas sesiones de Claude Code y Codex en paralelo. Estaba usando Ghostty con un montón de paneles divididos y dependía de las notificaciones nativas de macOS para saber cuándo un agente me necesitaba. Pero el cuerpo de la notificación de Claude Code siempre es solo \"Claude is waiting for your input\" sin contexto, y con suficientes pestañas abiertas, ya ni podía leer los títulos.",
"blockquote2": "Probé algunos orquestadores de programación, pero la mayoría eran apps de Electron/Tauri y el rendimiento me molestaba. También simplemente prefiero la terminal, ya que los orquestadores con interfaz gráfica lo encierran en su flujo de trabajo. Así que construí cmux como una app nativa de macOS en Swift/AppKit. Usa libghostty para el renderizado de terminal y lee su configuración existente de Ghostty para temas, fuentes, colores y más.",
"blockquote3": "Las principales adiciones son la barra lateral y el sistema de notificaciones. La barra lateral tiene pestañas verticales que muestran la rama de git, el directorio de trabajo, los puertos en escucha y el texto de la última notificación para cada workspace. El sistema de notificaciones captura secuencias de terminal (OSC 9/99/777) y tiene una CLI (cmux notify) que puede conectar a hooks de agentes para Claude Code, OpenCode, etc. Cuando un agente está esperando, su panel obtiene un anillo azul y la pestaña se ilumina en la barra lateral, para que pueda ver cuál me necesita a través de divisiones y pestañas. Cmd+Shift+U salta al más reciente no leído.",
"blockquote4": "El navegador integrado tiene una API programable. Los agentes pueden capturar el árbol de accesibilidad, obtener referencias de elementos, hacer clic, llenar formularios, ejecutar JS y leer logs de consola. Puede dividir un panel de navegador junto a su terminal y hacer que Claude Code interactúe directamente con su servidor de desarrollo.",
"blockquote5": "Todo es programable a través de la CLI y la API de socket: crear workspaces/pestañas, dividir paneles, enviar pulsaciones de teclas, abrir URLs en el navegador.",
"hitNumber2": "En su punto máximo alcanzó el puesto #2 en Hacker News. Mitchell Hashimoto lo compartió:",
"favoriteComment": "Mi comentario favorito del <link>hilo de HN</link>:",
"viralJapan": "Sorprendentemente, cmux se hizo viral en Japón:",
"translation": "Traducción: \"Esto se ve bien. Una app de terminal basada en Ghostty diseñada para que no te pierdas cuando ejecutas múltiples CLIs como Claude Code en paralelo. El panel que espera entrada recibe un marco azul, y tiene su propio sistema de notificaciones.\"",
"viralChina": "Y semi-viral en China:",
"extensions": "Otra cosa emocionante fue ver a personas construir sobre la CLI de cmux. sasha construyó una extensión pi-cmux que muestra información del modelo, uso de tokens y estado del agente en la barra lateral:",
"scriptable": "Todo en cmux es programable a través de la CLI: crear workspaces, enviar pulsaciones de teclas, controlar el navegador, leer notificaciones. Parte de la filosofía de cmux es ser programable y componible, para que las personas puedan personalizar la forma en que trabajan con agentes de programación. El estado del arte de los agentes de programación cambia rápido, y no querrá estar encerrado en un orquestador GUI inflexible que no puede seguir el ritmo.",
"cta": "Si está ejecutando múltiples agentes de programación, <link>pruebe cmux</link>."
},
"introducingCmux": {
"title": "Presentamos cmux",
"summary": "Una terminal nativa de macOS basada en Ghostty, diseñada para ejecutar múltiples agentes de programación con IA en paralelo.",
"date": "12 de febrero de 2026",
"p1": "cmux es una aplicación de terminal nativa de macOS construida sobre Ghostty, diseñada desde cero para desarrolladores que ejecutan múltiples agentes de programación con IA simultáneamente.",
"whyTitle": "¿Por qué cmux?",
"whyP": "Los flujos de trabajo de desarrollo modernos a menudo implican ejecutar varios agentes a la vez. Claude Code, Codex y otras herramientas, cada una en su propia terminal. Llevar un seguimiento de cuáles necesitan atención y cambiar entre ellos rápidamente es el problema que cmux resuelve.",
"featuresTitle": "Características principales",
"getStartedTitle": "Comenzar",
"getStartedP": "Instale cmux mediante Homebrew o descargue el DMG desde la <link>guía de inicio</link>.",
"featureVerticalTabsLabel": "Pestañas verticales",
"featureVerticalTabsDesc": "vea todas sus terminales de un vistazo en una barra lateral",
"featureNotificationsLabel": "Anillos de notificación",
"featureNotificationsDesc": "las pestañas parpadean cuando un agente necesita su entrada",
"featureSplitPanesLabel": "Paneles divididos",
"featureSplitPanesDesc": "divisiones horizontales y verticales dentro de cada workspace",
"featureSocketApiLabel": "API de socket",
"featureSocketApiDesc": "control programático para crear pestañas y enviar entrada",
"featureGpuLabel": "Aceleración por GPU",
"featureGpuDesc": "impulsado por libghostty para un renderizado fluido"
}
},
"zenOfCmux": {
"metaTitle": "El Zen de cmux",
"metaDescription": "cmux es una primitiva, no una solución. Te da piezas componibles y tu flujo de trabajo depende de ti."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "El nuevo atajo de teclado que cambia cómo interactúas con cmux."
},
"showHnLaunch": {
"metaTitle": "Lanzamiento de cmux en Show HN",
"metaDescription": "La historia del lanzamiento de cmux en Hacker News."
},
"introducingCmux": {
"metaTitle": "Presentamos cmux",
"metaDescription": "Por qué construimos cmux, una nueva terminal para macOS."
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "Primeros pasos",
"metaDescription": "Instale cmux, la terminal nativa de macOS para agentes de programación con IA. Homebrew, descarga DMG, configuración de CLI y actualizaciones automáticas vía Sparkle.",
"intro": "cmux es una terminal nativa y ligera de macOS basada en Ghostty para gestionar múltiples agentes de programación con IA. Cuenta con pestañas verticales, un panel de notificaciones y una API de control basada en socket.",
"install": "Instalación",
"dmgRecommended": "DMG (recomendado)",
"dmgDesc": "Abra el .dmg y arrastre cmux a su carpeta de Aplicaciones. cmux se actualiza automáticamente vía Sparkle, por lo que solo necesita descargarlo una vez.",
"homebrew": "Homebrew",
"updateLater": "Para actualizar después:",
"firstLaunchCallout": "En el primer inicio, macOS puede pedirle que confirme la apertura de una app de un desarrollador identificado. Haga clic en <strong>Abrir</strong> para continuar.",
"verifyTitle": "Verificar la instalación",
"verifyDesc": "Abra cmux y debería ver:",
"verifyItem1": "Una ventana de terminal con una barra lateral de pestañas verticales a la izquierda",
"verifyItem2": "Un workspace inicial ya abierto",
"verifyItem3": "La terminal con Ghostty lista para recibir entrada",
"cliSetup": "Configuración de CLI",
"cliDesc": "cmux incluye una herramienta de línea de comandos para automatización. Dentro de las terminales de cmux funciona automáticamente. Para usar la CLI fuera de cmux, cree un enlace simbólico:",
"cliThen": "Luego puede ejecutar comandos como:",
"autoUpdates": "Actualizaciones automáticas",
"autoUpdatesDesc": "cmux busca actualizaciones automáticamente vía Sparkle. Cuando hay una actualización disponible, verá una indicación de actualización en la barra de título. También puede verificar manualmente a través de cmux > Buscar actualizaciones en la barra de menú.",
"sessionRestore": "Restauración de sesión (comportamiento actual)",
"sessionRestoreDesc": "Después de reiniciar, cmux restaura solo el diseño y los metadatos:",
"sessionItem1": "Diseño de ventanas, workspaces y paneles",
"sessionItem2": "Directorios de trabajo",
"sessionItem3": "Scrollback de terminal (mejor esfuerzo)",
"sessionItem4": "URL del navegador e historial de navegación",
"sessionCallout": "cmux aún no restaura el estado de procesos en ejecución. Las sesiones activas de aplicaciones de terminal como Claude Code, tmux y vim no se reanudan después del reinicio de la app.",
"requirements": "Requisitos",
"reqItem1": "macOS 14.0 o posterior",
"reqItem2": "Apple Silicon o Intel Mac",
"metaTitle": "Primeros pasos"
},
"concepts": {
"title": "Conceptos",
"metaDescription": "Cómo cmux organiza las terminales: ventanas, workspaces, paneles y superficies. La jerarquía detrás de la barra lateral, las divisiones y la API de socket.",
"intro": "cmux organiza sus terminales en una jerarquía de cuatro niveles. Comprender estos niveles ayuda al usar la API de socket, la CLI y los atajos de teclado.",
"hierarchy": "Jerarquía",
"windowTitle": "Ventana",
"windowDesc": "Una ventana de macOS. Abra múltiples ventanas con {shortcut}. Cada ventana tiene su propia barra lateral con workspaces independientes.",
"workspaceTitle": "Workspace",
"workspaceDesc": "Una entrada en la barra lateral. Cada workspace contiene uno o más paneles divididos. Los workspaces son lo que ve listado en la barra lateral izquierda.",
"workspaceNote": "En la interfaz y los atajos de teclado, los workspaces a menudo se llaman \"pestañas\" ya que se comportan como pestañas en la barra lateral. La API de socket y las variables de entorno usan el término \"workspace\".",
"contextHeader": "Contexto",
"termUsedHeader": "Término utilizado",
"sidebarUI": "UI de barra lateral",
"tab": "Pestaña",
"keyboardShortcuts": "Atajos de teclado",
"workspaceOrTab": "Workspace o pestaña",
"socketAPI": "API de socket",
"environmentVariable": "Variable de entorno",
"workspaceShortcuts": "Atajos: {new} (nuevo), {jump} (saltar), {close} (cerrar), {prevNext} (anterior/siguiente)",
"paneTitle": "Panel",
"paneDesc": "Una región dividida dentro de un workspace. Se crea dividiendo con {right} (derecha) o {down} (abajo). Navegue entre paneles con {nav} + teclas de flecha.",
"paneNote": "Cada panel puede contener múltiples superficies (pestañas dentro del panel).",
"surfaceTitle": "Superficie",
"surfaceDesc": "Una pestaña dentro de un panel. Cada panel tiene su propia barra de pestañas y puede contener múltiples superficies. Se crea con {new}, se navega con {prev} / {next} o {jump}.",
"surfaceNote": "Las superficies son las sesiones individuales de terminal o navegador con las que interactúa. Cada superficie tiene su propia variable de entorno CMUX_SURFACE_ID.",
"panelTitle": "Panel",
"panelDesc": "El contenido dentro de una superficie. Actualmente dos tipos:",
"panelTerminal": "Terminal: una sesión de terminal Ghostty",
"panelBrowser": "Navegador: una vista web integrada",
"panelNote": "Panel es principalmente un concepto interno. En la API de socket y la CLI, interactúa con superficies en lugar de directamente con paneles.",
"visualExample": "Ejemplo visual",
"visualExampleDesc": "En este ejemplo:",
"visualItem1": "La ventana contiene una barra lateral con tres workspaces (dev, server, logs)",
"visualItem2": "El workspace \"dev\" está seleccionado, mostrando dos paneles lado a lado",
"visualItem3": "El panel 1 tiene dos superficies ([S1] y [S2] en la barra de pestañas), con S1 activa",
"visualItem4": "El panel 2 tiene una superficie",
"visualItem5": "Cada superficie contiene un panel (una terminal en este caso)",
"summary": "Resumen",
"levelHeader": "Nivel",
"whatItIsHeader": "Qué es",
"createdByHeader": "Creado por",
"identifiedByHeader": "Identificado por",
"macosWindow": "Ventana de macOS",
"sidebarEntry": "Entrada en la barra lateral",
"splitRegion": "Región dividida",
"tabWithinPane": "Pestaña dentro del panel",
"terminalOrBrowser": "Terminal o navegador",
"automatic": "Automático",
"paneIdSocket": "ID de panel (API de socket)",
"panelIdInternal": "ID de panel (interno)",
"metaTitle": "Conceptos"
},
"configuration": {
"title": "Configuración",
"metaDescription": "Configure cmux a través de archivos de configuración de Ghostty. Fuente, tema, colores, estilo de paneles divididos, scrollback y configuración de la app para modo de automatización.",
"intro": "cmux lee la configuración de archivos de configuración de Ghostty, ofreciéndole opciones familiares si viene de Ghostty.",
"configLocations": "Ubicaciones del archivo de configuración",
"configLocationsDesc": "cmux busca configuración en estas ubicaciones (en orden):",
"createConfig": "Cree el archivo de configuración si no existe:",
"appearance": "Apariencia",
"font": "Fuente",
"colors": "Colores",
"splitPanes": "Paneles divididos",
"behavior": "Comportamiento",
"scrollback": "Scrollback",
"workingDirectory": "Directorio de trabajo",
"appSettings": "Configuración de la app",
"appSettingsDesc": "La configuración de la app está disponible a través de cmux > Configuración ({shortcut}):",
"themeMode": "Modo de tema",
"themeSystem": "Sistema: seguir la apariencia de macOS",
"themeLight": "Claro: siempre modo claro",
"themeDark": "Oscuro: siempre modo oscuro",
"automationMode": "Modo de automatización",
"automationModeDesc": "Nivel de acceso del socket de control:",
"automationOff": "Desactivado: sin acceso al socket (más seguro)",
"automationCmux": "Solo procesos de cmux: solo los procesos iniciados dentro de terminales de cmux pueden conectarse",
"automationAll": "allowAll: permitir que cualquier proceso local se conecte (CMUX_SOCKET_MODE=allowAll, solo por variable de entorno)",
"automationCallout": "En máquinas compartidas, considere usar el modo \"Desactivado\" o \"Solo procesos de cmux\".",
"browserLinkBehavior": "Comportamiento de enlaces del navegador",
"browserLinkDesc": "En Configuración > Navegador, cmux expone dos listas de hosts con diferentes propósitos:",
"browserHostsEmbed": "Hosts para abrir en el navegador integrado: se aplica a enlaces clicados desde la salida del terminal. Los hosts en esta lista se abren en cmux; otros hosts se abren en su navegador predeterminado. Soporta un host o comodín por línea (por ejemplo: example.com, *.internal.example).",
"browserHostsHttp": "Hosts HTTP permitidos en el navegador integrado: se aplica solo a URLs HTTP (no HTTPS). Los hosts en esta lista pueden abrirse en cmux sin un aviso de advertencia. Los valores predeterminados incluyen localhost, 127.0.0.1, ::1, 0.0.0.0 y *.localtest.me.",
"exampleConfig": "Configuración de ejemplo",
"metaTitle": "Configuración"
},
"keyboardShortcuts": {
"title": "Atajos de teclado",
"description": "Todos los atajos de teclado disponibles en cmux, agrupados por categoría.",
"metaDescription": "Todos los atajos de teclado de cmux para workspaces, superficies, paneles divididos, navegador, notificaciones, búsqueda y gestión de ventanas en macOS.",
"searchPlaceholder": "Buscar atajos...",
"searchLabel": "Buscar atajos de teclado",
"noResults": "No se encontraron atajos",
"noResultsHint": "Pruebe con un término de búsqueda diferente",
"cat": {
"workspaces": "Workspaces",
"workspacesBlurb": "Los workspaces se encuentran en la barra lateral. Cada workspace tiene sus propios paneles y superficies.",
"surfaces": "Superficies",
"surfacesBlurb": "Las superficies son pestañas dentro de un panel.",
"splitPanes": "Paneles divididos",
"browser": "Navegador",
"notifications": "Notificaciones",
"find": "Búsqueda",
"terminal": "Terminal",
"window": "Ventana"
},
"sc": {
"ws-new": "Nuevo workspace",
"ws-jump-1-8": "Ir al workspace 18",
"ws-jump-last": "Ir al último workspace",
"ws-close": "Cerrar workspace",
"ws-rename": "Renombrar workspace",
"sf-new": "Nueva superficie",
"sf-prev-1": "Superficie anterior",
"sf-prev-2": "Superficie anterior",
"sf-jump-1-8": "Ir a la superficie 18",
"sf-jump-last": "Ir a la última superficie",
"sf-close": "Cerrar superficie",
"sp-right": "Dividir a la derecha",
"sp-down": "Dividir hacia abajo",
"sp-focus": "Enfocar panel por dirección",
"sp-browser-right": "Dividir navegador a la derecha",
"sp-browser-down": "Dividir navegador hacia abajo",
"br-open": "Abrir superficie de navegador",
"br-addr": "Enfocar barra de direcciones",
"br-forward": "Adelante",
"br-reload": "Recargar página",
"br-devtools": "Abrir herramientas de desarrollo",
"nt-panel": "Mostrar panel de notificaciones",
"nt-latest": "Ir a la más reciente no leída",
"nt-flash": "Activar flash",
"fd-find": "Buscar",
"fd-next-prev": "Resultado siguiente / anterior",
"fd-hide": "Ocultar barra de búsqueda",
"fd-selection": "Usar selección para buscar",
"tm-clear": "Borrar scrollback",
"tm-copy": "Copiar (con selección)",
"tm-paste": "Pegar",
"tm-font": "Aumentar / disminuir tamaño de fuente",
"tm-reset": "Restablecer tamaño de fuente",
"wn-new": "Nueva ventana",
"wn-settings": "Configuración",
"wn-reload": "Recargar configuración",
"wn-quit": "Salir"
},
"metaTitle": "Atajos de teclado"
},
"api": {
"title": "Referencia de API",
"metaDescription": "Referencia de la CLI y API de socket Unix de cmux. Gestión de workspaces, paneles divididos, control de entrada, notificaciones, metadatos de barra lateral, variables de entorno y métodos de detección.",
"intro": "cmux proporciona tanto una herramienta CLI como un socket Unix para control programático. Cada comando está disponible a través de ambas interfaces.",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "Ruta",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Build de debug etiquetado",
"socketOverride": "Sobrescriba con la variable de entorno CMUX_SOCKET_PATH. Envíe una solicitud JSON terminada en salto de línea por llamada:",
"socketCallout": "Las solicitudes JSON del socket deben usar method y params. Los payloads JSON legacy v1 como <legacy>'{'\"command\":\"...\"'}'</legacy> no son compatibles.",
"accessModes": "Modos de acceso",
"modeHeader": "Modo",
"descriptionHeader": "Descripción",
"howToEnableHeader": "Cómo habilitar",
"offMode": "Socket desactivado",
"offEnable": "UI de configuración o CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "Solo los procesos iniciados dentro de terminales de cmux pueden conectarse.",
"cmuxOnlyEnable": "Modo predeterminado en la UI de configuración",
"allowAllMode": "Permitir que cualquier proceso local se conecte (sin verificación de origen).",
"allowAllEnable": "Solo por variable de entorno: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "En máquinas compartidas, use Desactivado o Solo procesos de cmux.",
"cliOptions": "Opciones de CLI",
"flagHeader": "Flag",
"customSocketPath": "Ruta de socket personalizada",
"outputJson": "Salida en formato JSON",
"targetWindow": "Dirigirse a una ventana específica",
"targetWorkspace": "Dirigirse a un workspace específico",
"targetSurface": "Dirigirse a una superficie específica",
"idFormat": "Controlar el formato de identificador en la salida JSON",
"workspaceCommands": "Comandos de workspace",
"listWorkspacesDesc": "Listar todos los workspaces abiertos.",
"newWorkspaceDesc": "Crear un nuevo workspace.",
"selectWorkspaceDesc": "Cambiar a un workspace específico.",
"currentWorkspaceDesc": "Obtener el workspace actualmente activo.",
"closeWorkspaceDesc": "Cerrar un workspace.",
"splitCommands": "Comandos de división",
"newSplitDesc": "Crear un nuevo panel dividido. Direcciones: left, right, up, down.",
"listSurfacesDesc": "Listar todas las superficies en el workspace actual.",
"focusSurfaceDesc": "Enfocar una superficie específica.",
"inputCommands": "Comandos de entrada",
"sendDesc": "Enviar texto al terminal enfocado.",
"sendKeyDesc": "Enviar una pulsación de tecla. Teclas: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "Enviar texto a una superficie específica.",
"sendKeySurfaceDesc": "Enviar una pulsación de tecla a una superficie específica.",
"notificationCommands": "Comandos de notificación",
"notifyDesc": "Enviar una notificación.",
"listNotificationsDesc": "Listar todas las notificaciones.",
"clearNotificationsDesc": "Borrar todas las notificaciones.",
"sidebarMetadata": "Comandos de metadatos de la barra lateral",
"sidebarMetadataDesc": "Establezca indicadores de estado, barras de progreso y entradas de registro en la barra lateral para cualquier workspace. Útil para scripts de compilación, integraciones de CI y agentes de programación con IA que quieran mostrar el estado de un vistazo.",
"setStatusDesc": "Establecer un indicador de estado en la barra lateral. Use una clave única para que diferentes herramientas puedan gestionar sus propias entradas.",
"clearStatusDesc": "Eliminar una entrada de estado de la barra lateral por clave.",
"listStatusDesc": "Listar todas las entradas de estado de la barra lateral para un workspace.",
"setProgressDesc": "Establecer una barra de progreso en la barra lateral (0.0 a 1.0).",
"clearProgressDesc": "Borrar la barra de progreso de la barra lateral.",
"logDesc": "Añadir una entrada de registro a la barra lateral. Niveles: info, progress, success, warning, error.",
"clearLogDesc": "Borrar todas las entradas de registro de la barra lateral.",
"listLogDesc": "Listar las entradas de registro de la barra lateral.",
"sidebarStateDesc": "Volcar todos los metadatos de la barra lateral (cwd, rama de git, puertos, estado, progreso, registros).",
"utilityCommands": "Comandos de utilidad",
"pingDesc": "Verificar si cmux está ejecutándose y responde.",
"capabilitiesDesc": "Listar los métodos de socket disponibles y el modo de acceso actual.",
"identifyDesc": "Mostrar el contexto de ventana/workspace/panel/superficie enfocados.",
"envVariables": "Variables de entorno",
"variableHeader": "Variable",
"socketPathDesc": "Sobrescribir la ruta del socket utilizada por la CLI e integraciones",
"socketEnableDesc": "Forzar la activación/desactivación del socket (1/0, true/false, on/off)",
"socketModeDesc": "Sobrescribir el modo de acceso (cmuxOnly, allowAll, off). También acepta cmux-only/cmux_only y allow-all/allow_all",
"workspaceIdDesc": "Establecido automáticamente: ID del workspace actual",
"surfaceIdDesc": "Establecido automáticamente: ID de la superficie actual",
"termProgramDesc": "Establecido en ghostty",
"termDesc": "Establecido en xterm-ghostty",
"envCallout": "Los valores legacy de CMUX_SOCKET_MODE full y notifications siguen siendo aceptados por compatibilidad.",
"detectingCmux": "Detectar cmux",
"examples": "Ejemplos",
"pythonClient": "Cliente Python",
"shellScript": "Script de shell",
"buildScriptNotification": "Script de compilación con notificación",
"metaTitle": "Referencia API"
},
"notifications": {
"title": "Notificaciones",
"metaDescription": "Envíe notificaciones de escritorio desde agentes de IA y scripts en cmux. CLI, secuencias de escape OSC 99/777 e integración con hooks de Claude Code.",
"intro": "cmux soporta notificaciones de escritorio, permitiendo que agentes de IA y scripts le alerten cuando necesitan atención.",
"lifecycle": "Ciclo de vida",
"received": "Recibida: la notificación aparece en el panel, se dispara la alerta de escritorio (si no está suprimida)",
"unread": "No leída: se muestra una insignia en la pestaña del workspace",
"read": "Leída: se borra cuando visualiza ese workspace",
"cleared": "Borrada: eliminada del panel",
"suppression": "Supresión",
"suppressionDesc": "Las alertas de escritorio se suprimen cuando:",
"suppressItem1": "La ventana de cmux está enfocada",
"suppressItem2": "El workspace específico que envía la notificación está activo",
"suppressItem3": "El panel de notificaciones está abierto",
"notificationPanel": "Panel de notificaciones",
"notificationPanelDesc": "Presione <openShortcut>⌘⇧I</openShortcut> para abrir el panel de notificaciones. Haga clic en una notificación para saltar a ese workspace. Presione <jumpShortcut>⌘⇧U</jumpShortcut> para saltar directamente al workspace con la notificación no leída más reciente.",
"customCommand": "Comando personalizado",
"customCommandDesc": "Ejecute un comando de shell cada vez que se programe una notificación. Configúrelo en Configuración > App > Comando de notificación. El comando se ejecuta vía /bin/sh -c con estas variables de entorno:",
"customCommandNote": "El comando se ejecuta independientemente del selector de sonido del sistema. Configure el selector en \"Ninguno\" para usar solo el comando personalizado, o mantenga ambos para un sonido del sistema más una acción personalizada.",
"sending": "Enviar notificaciones",
"cli": "CLI",
"osc777Title": "OSC 777 (simple)",
"osc777Desc": "El protocolo RXVT usa un formato fijo con título y cuerpo:",
"osc99Title": "OSC 99 (avanzado)",
"osc99Desc": "El protocolo Kitty soporta subtítulos e IDs de notificación:",
"variableHeader": "Variable",
"descriptionHeader": "Descripción",
"envTitle": "Título de notificación (nombre del workspace o nombre de la app)",
"envSubtitle": "Subtítulo de notificación",
"envBody": "Texto del cuerpo de la notificación",
"cmpTitleBody": "Título + cuerpo",
"cmpSubtitle": "Subtítulo",
"cmpNotificationId": "ID de notificación",
"cmpComplexity": "Complejidad",
"cmpYes": "Sí",
"cmpNo": "No",
"cmpHigher": "Mayor",
"cmpLower": "Menor",
"featureHeader": "Característica",
"comparisonCallout": "Use OSC 777 para notificaciones simples. Use OSC 99 cuando necesite subtítulos o IDs de notificación. Use la CLI (cmux notify) para la integración más sencilla.",
"claudeCodeHooks": "Hooks de Claude Code",
"claudeCodeHooksDesc": "cmux se integra con <link>Claude Code</link> mediante hooks para notificarle cuando las tareas se completan.",
"createHookScript": "1. Crear el script de hook",
"configureClaude": "2. Configurar Claude Code",
"restartNote": "Reinicie Claude Code para aplicar los hooks.",
"integrationExamples": "Ejemplos de integración",
"notifyAfterLong": "Notificar después de un comando largo",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "Passthrough de tmux",
"tmuxDesc": "Si usa tmux dentro de cmux, habilite passthrough:",
"metaTitle": "Notificaciones"
},
"browserAutomation": {
"title": "Automatización del navegador",
"metaDescription": "Referencia de comandos del navegador de cmux para navegación, interacción con DOM, espera, inspección, evaluación de JavaScript, pestañas, diálogos, frames, descargas y estado del navegador.",
"intro": "El grupo de comandos cmux browser proporciona automatización del navegador contra superficies de navegador de cmux. Úselo para navegar, interactuar con elementos DOM, inspeccionar el estado de la página, ejecutar JavaScript y gestionar datos de sesión del navegador.",
"commandIndex": "Índice de comandos",
"categoryHeader": "Categoría",
"subcommandsHeader": "Subcomandos",
"navAndTargeting": "Navegación y selección de objetivo",
"waiting": "Espera",
"domInteraction": "Interacción con DOM",
"inspection": "Inspección",
"jsAndInjection": "JavaScript e inyección",
"framesDialogsDownloads": "Frames, diálogos, descargas",
"stateAndSession": "Estado y datos de sesión",
"tabsAndLogs": "Pestañas y registros",
"targetingSurface": "Seleccionar una superficie de navegador",
"targetingDesc": "La mayoría de los subcomandos requieren una superficie objetivo. Puede pasarla posicionalmente o con --surface.",
"navigation": "Navegación",
"waitingSection": "Espera",
"waitingDesc": "Use wait para bloquear hasta que se satisfagan selectores, texto, fragmentos de URL, estado de carga o una condición JavaScript.",
"domSection": "Interacción con DOM",
"domDesc": "Las acciones mutativas soportan --snapshot-after para verificación rápida en scripts.",
"inspectionSection": "Inspección",
"inspectionDesc": "Use getters estructurados para scripts y snapshots/capturas de pantalla para revisión humana.",
"jsSection": "Evaluación e inyección de JavaScript",
"stateSection": "Estado",
"stateDesc": "Los comandos de datos de sesión cubren cookies, almacenamiento local/de sesión y snapshots completos del estado del navegador.",
"tabsSection": "Pestañas",
"tabsDesc": "Las operaciones de pestañas del navegador se mapean a superficies de navegador en el grupo de pestañas activo del navegador.",
"consoleSection": "Consola y errores",
"dialogsSection": "Diálogos",
"framesSection": "Frames",
"downloadsSection": "Descargas",
"commonPatterns": "Patrones comunes",
"patternNavigate": "Navegar, esperar, inspeccionar",
"patternForm": "Llenar un formulario y verificar el texto de éxito",
"patternDebug": "Capturar artefactos de depuración en caso de error",
"patternSession": "Persistir y restaurar sesión del navegador",
"metaTitle": "Automatización del navegador"
},
"changelog": {
"title": "Changelog",
"metaDescription": "Notas de versión e historial de versiones de cmux. Nuevas funciones, correcciones de errores y cambios para la terminal nativa de macOS.",
"metaTitle": "Registro de cambios"
},
"navItems": {
"gettingStarted": "Primeros pasos",
"concepts": "Conceptos",
"configuration": "Configuración",
"keyboardShortcuts": "Atajos de teclado",
"apiReference": "Referencia de API",
"browserAutomation": "Automatización del navegador",
"notifications": "Notificaciones",
"changelog": "Changelog"
}
},
"legal": {
"privacyPolicy": "Política de privacidad",
"termsOfService": "Términos de servicio",
"eula": "EULA"
},
"wallOfLove": {
"title": "Wall of Love",
"description": "Lo que la gente dice sobre cmux."
},
"testimonials": {
"mitchellh": "Otro proyecto basado en libghostty, esta vez un terminal macOS con pestanas verticales, mejor organizacion/notificaciones, navegador integrado/scriptable, dirigido especificamente a personas que usan muchos flujos de trabajo de agentes basados en terminal.",
"schrockn": "Es exactamente el producto que estaba buscando. Despues de dos horas esta manana ya estoy enamorado.",
"egrefen": "Lo he estado usando todo el fin de semana y es increible.",
"max4c": "ha sido mi herramienta favorita las ultimas dos semanas",
"asaza": "cmux se ve tan bien que tal vez sea hora de decirle adios a VSCode",
"johnthedebs": "Oye, esto se ve genial de verdad. Me encantan las ideas, especificamente: la programabilidad, la UI por capas, el navegador con API. Tengo ganas de probarlo. Tambien quiero decir que aprecio mucho que Mitchell Hashimoto haya creado libghostty; se siente como un momento emocionante para ser usuario de terminal.",
"joeriddles": "Pestanas verticales en mi terminal! Nunca habia pensado en eso. Uso y adoro las pestanas verticales de Firefox.",
"dchu17": "Lo probe y fue bastante intuitivo. Buen trabajo!",
"afruth": "Me gusta. Ayer lo use con tres proyectos en paralelo, cada uno con varios worktrees. Combinado con lazygit y yazi/nvim me hizo un poco mas productivo de lo habitual sin tener que perseguir multiples instancias de ghostty/iTerm. Tambien se siente mas natural que tmux.",
"northprint": "Probe cmux porque se veia bien, y es bueno",
"indykish": "cmux esta bastante bien.",
"kataring": "Me cambie a cmux.dev",
"scottw": "Ha sido un hallazgo muy útil. No puedo recomendarlo suficiente.",
"johnblythe": "Lo instalé el fin de semana y me encantó. Estuve esperando algo así.",
"bchris91": "Es exactamente lo que quería. ¡Increíble trabajo, gracias!",
"connorelsea": "Lo llevo usando una semana y es fantástico. Una pestaña vertical por cada tarea WIP. Dentro, Claude a un lado y navegador con PR y recursos al otro. Cambiar entre tareas y mantener todo organizado. Combinado con skills para que Claude vigile CI recursivamente, etc. Sinceramente me siento iluminado.",
"tonkotsuboy": "A principios de año cambié de Warp a Ghostty, pero ahora me cambié a cmux. Las pestañas verticales son cómodas y agradezco las notificaciones cuando terminan las tareas de Claude Code. Al estar basado en Ghostty, el rendimiento ultrarrápido se mantiene. La visualización de ramas y las completaciones que configuré en Ghostty siguen funcionando."
},
"languageSwitcher": {
"label": "Idioma"
}
}

587
web/messages/fr.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — Le terminal conçu pour le multitâche",
"description": "Terminal macOS natif basé sur Ghostty. Fonctionne avec Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider et tout outil CLI. Onglets verticaux, anneaux de notification, panneaux divisés et une API socket.",
"ogDescription": "Terminal macOS natif pour les agents de code IA. Fonctionne avec Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider et tout outil CLI."
},
"common": {
"downloadForMac": "Télécharger pour Mac",
"viewOnGitHub": "Voir sur GitHub",
"closeMenu": "Fermer le menu",
"openMenu": "Ouvrir le menu",
"toggleTheme": "Changer de thème",
"backToBlog": "Retour au blog",
"readTheDocs": "Lire la documentation",
"viewChangelog": "Voir le changelog"
},
"nav": {
"docs": "Docs",
"blog": "Blog",
"changelog": "Changelog",
"community": "Communauté",
"github": "GitHub"
},
"footer": {
"product": "Produit",
"resources": "Ressources",
"legal": "Mentions légales",
"social": "Réseaux sociaux",
"blog": "Blog",
"community": "Communauté",
"docs": "Docs",
"changelog": "Changelog",
"privacy": "Confidentialité",
"terms": "Conditions",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "Contact",
"copyright": "© {year} Manaflow",
"language": "Langue"
},
"home": {
"taglinePrefix": "Le terminal conçu pour ",
"typingCodingAgents": "agents de code",
"typingMultitasking": "multitâche",
"subtitle": "Application macOS native basée sur Ghostty. Onglets verticaux, notifications quand les agents ont besoin d'attention, panneaux divisés et une API socket pour l'automatisation.",
"features": "Fonctionnalités",
"faq": "FAQ",
"communitySection": "Communauté",
"feature": {
"verticalTabs": "Onglets verticaux",
"verticalTabsDesc": " : la barre latérale affiche la branche git, le répertoire de travail, les ports et le texte de notification",
"notificationRings": "Anneaux de notification",
"notificationRingsDesc": " : les panneaux s'illuminent quand les agents ont besoin d'attention",
"inAppBrowser": "Navigateur intégré",
"inAppBrowserDesc": " : ouvrez un navigateur à côté de votre terminal avec une API scriptable",
"splitPanes": "Panneaux divisés",
"splitPanesDesc": " : divisions horizontales et verticales dans chaque onglet",
"scriptable": "Scriptable",
"scriptableDesc": " : CLI et API socket pour l'automatisation et le scripting",
"gpuAccelerated": "Accélération GPU",
"gpuAcceleratedDesc": " : propulsé par libghostty pour un rendu fluide",
"lightweight": "Léger",
"lightweightDesc": " : Swift + AppKit natif, sans Electron",
"keyboardShortcuts": "Raccourcis clavier",
"keyboardShortcutsDesc": " : <link>raccourcis complets</link> pour les espaces de travail, les divisions, le navigateur et plus"
},
"faqGhosttyQ": "Quel est le lien entre cmux et Ghostty ?",
"faqGhosttyA": "cmux n'est pas un fork de Ghostty. Il utilise <link>libghostty</link> comme bibliothèque pour le rendu du terminal, de la même manière que les applications utilisent WebKit pour les vues web. Ghostty est un terminal autonome ; cmux est une application différente construite sur son moteur de rendu.",
"faqPlatformQ": "Quelles plateformes sont supportées ?",
"faqPlatformA": "macOS uniquement, pour le moment. cmux est une application native Swift + AppKit.",
"faqAgentsQ": "Avec quels agents de code cmux fonctionne-t-il ?",
"faqAgentsA": "Tous. cmux est un terminal, donc tout agent qui fonctionne dans un terminal marche directement : Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent, et tout ce que vous pouvez lancer depuis la ligne de commande.",
"faqNotificationsQ": "Comment fonctionnent les notifications ?",
"faqNotificationsA": "Quand un processus a besoin d'attention, cmux affiche des anneaux de notification autour des panneaux, des badges non lus dans la barre latérale, un popover de notification et une notification bureau macOS. Ceux-ci se déclenchent automatiquement via les séquences d'échappement standard du terminal (OSC 9/99/777), ou vous pouvez les déclencher avec le <cliLink>CLI cmux</cliLink> et les <hooksLink>hooks Claude Code</hooksLink>.",
"faqShortcutsQ": "Puis-je personnaliser les raccourcis clavier ?",
"faqShortcutsA": "Les raccourcis du terminal sont lus depuis votre fichier de configuration Ghostty (<configPath>~/.config/ghostty/config</configPath>). Les raccourcis spécifiques à cmux (espaces de travail, divisions, navigateur, notifications) peuvent être personnalisés dans les Réglages. Voir les <link>raccourcis par défaut</link> pour la liste complète.",
"faqTmuxQ": "Comment se compare-t-il à tmux ?",
"faqTmuxA": "tmux est un multiplexeur de terminaux qui fonctionne dans n'importe quel terminal. cmux est une application macOS native avec une interface graphique : onglets verticaux, panneaux divisés, navigateur intégré et API socket sont tous intégrés. Pas besoin de fichiers de configuration ou de touches préfixes.",
"faqFreeQ": "cmux est-il gratuit ?",
"faqFreeA": "Oui, cmux est gratuit. Le code source est disponible sur <link>GitHub</link>."
},
"community": {
"title": "Communauté",
"description": "Échangez avec d'autres utilisateurs de cmux et l'équipe derrière le projet.",
"discord": "Discord",
"discordAction": "Rejoindre notre Discord",
"discordDesc": "Discutez avec la communauté, obtenez de l'aide et partagez vos retours",
"githubAction": "Voir sur GitHub",
"githubDesc": "Mettez une étoile, signalez des problèmes et contribuez",
"twitter": "Twitter",
"twitterAction": "Suivre sur X",
"twitterDesc": "Mises à jour, annonces et astuces",
"youtube": "YouTube",
"youtubeAction": "S'abonner",
"youtubeDesc": "Démos, tutoriels et présentations",
"linkedin": "LinkedIn",
"linkedinAction": "Nous suivre",
"linkedinDesc": "Actualités de l'entreprise et mises à jour techniques",
"metaTitle": "Communauté — cmux",
"metaDescription": "Rejoignez la communauté cmux sur Discord, Twitter, GitHub et plus"
},
"blog": {
"title": "Blog",
"layoutTitle": "cmux blog",
"metaTitle": "Blog",
"metaDescription": "Actualités et mises à jour de l'équipe cmux",
"description": "Actualités et mises à jour de l'équipe cmux",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Comment Cmd+Shift+U permet de naviguer entre les agents terminés dans les différents espaces de travail de cmux.",
"date": "4 mars 2026",
"p1": "Ma fonctionnalité cmux préférée est Cmd+Shift+U. J'ai 17 espaces de travail ouverts en ce moment, chacun exécutant un agent. Avant, je cliquais à travers les onglets et le panneau de notifications pour savoir ce qui était terminé. Taper est plus rapide.",
"p2": "Cmd+Shift+U saute à la <link>notification</link> non lue la plus récente. En pratique, cela signifie le dernier agent qui a terminé. Il bascule vers le bon espace de travail, met le focus sur le panneau exact, le fait clignoter pour que vous voyiez où regarder, et le marque comme lu. Si la notification vient d'une autre fenêtre, cette fenêtre passe au premier plan."
},
"zenOfCmux": {
"title": "La philosophie de cmux",
"summary": "cmux est une brique de base, pas une solution. Il vous donne des éléments composables et votre workflow vous appartient.",
"date": "27 février 2026",
"p1": "cmux n'impose pas aux développeurs comment utiliser leurs outils. C'est un terminal et un navigateur avec un CLI, le reste dépend de vous.",
"p2": "cmux est une brique de base, pas une solution. Il vous donne un terminal, un navigateur, des notifications, des espaces de travail, des divisions, des onglets et un CLI pour tout contrôler. cmux ne vous impose pas une manière rigide d'utiliser les agents de code. Ce que vous construisez avec ces briques vous appartient.",
"p3": "Les meilleurs développeurs ont toujours construit leurs propres outils. Personne n'a encore trouvé la meilleure façon de travailler avec les agents, et les équipes qui construisent des produits fermés ne l'ont certainement pas trouvée non plus. Les développeurs les plus proches de leurs propres codebases la trouveront en premier.",
"p4": "Donnez à un million de développeurs des briques composables et ils trouveront collectivement les workflows les plus efficaces plus vite que n'importe quelle équipe produit ne pourrait les concevoir."
},
"showHnLaunch": {
"title": "Lancement de cmux sur Show HN",
"summary": "cmux a atteint la 2e place sur Hacker News, a été partagé par Mitchell Hashimoto et est devenu viral au Japon.",
"date": "21 février 2026",
"intro": "Nous avons publié cmux sur <link>Show HN</link> le 19 février :",
"blockquote1": "Je lance beaucoup de sessions Claude Code et Codex en parallèle. J'utilisais Ghostty avec plusieurs panneaux divisés, et je comptais sur les notifications macOS natives pour savoir quand un agent avait besoin de moi. Mais le corps de la notification de Claude Code dit toujours juste « Claude is waiting for your input » sans contexte, et avec assez d'onglets ouverts, je ne pouvais même plus lire les titres.",
"blockquote2": "J'ai essayé quelques orchestrateurs de code mais la plupart étaient des apps Electron/Tauri et les performances me gênaient. Je préfère aussi simplement le terminal puisque les orchestrateurs GUI vous enferment dans leur workflow. J'ai donc construit cmux comme une application macOS native en Swift/AppKit. Il utilise libghostty pour le rendu du terminal et lit votre configuration Ghostty existante pour les thèmes, polices, couleurs et plus.",
"blockquote3": "Les principaux ajouts sont la barre latérale et le système de notifications. La barre latérale a des onglets verticaux qui affichent la branche git, le répertoire de travail, les ports en écoute et le dernier texte de notification pour chaque espace de travail. Le système de notifications capte les séquences du terminal (OSC 9/99/777) et dispose d'un CLI (cmux notify) que vous pouvez connecter aux hooks d'agents pour Claude Code, OpenCode, etc. Quand un agent attend, son panneau reçoit un anneau bleu et l'onglet s'allume dans la barre latérale, pour que je puisse voir lequel a besoin de moi parmi les divisions et les onglets. Cmd+Shift+U saute au plus récent non lu.",
"blockquote4": "Le navigateur intégré a une API scriptable. Les agents peuvent capturer l'arbre d'accessibilité, obtenir des références d'éléments, cliquer, remplir des formulaires, exécuter du JS et lire les logs de la console. Vous pouvez diviser un panneau navigateur à côté de votre terminal et faire interagir Claude Code directement avec votre serveur de développement.",
"blockquote5": "Tout est scriptable via le CLI et l'API socket : créer des espaces de travail/onglets, diviser des panneaux, envoyer des frappes, ouvrir des URLs dans le navigateur.",
"hitNumber2": "Au pic, il a atteint la 2e place sur Hacker News. Mitchell Hashimoto l'a partagé :",
"favoriteComment": "Mon commentaire préféré du <link>fil HN</link> :",
"viralJapan": "Étonnamment, cmux est devenu viral au Japon :",
"translation": "Traduction : « Ça a l'air bien. Une application terminal basée sur Ghostty conçue pour ne pas se perdre quand on exécute plusieurs CLI comme Claude Code en parallèle. Le panneau en attente d'input reçoit un cadre bleu, et il a son propre système de notifications. »",
"viralChina": "Et semi-viral en Chine :",
"extensions": "Une autre chose enthousiasmante a été de voir des gens construire par-dessus le CLI cmux. sasha a créé une extension pi-cmux qui affiche les infos du modèle, l'utilisation des tokens et l'état de l'agent dans la barre latérale :",
"scriptable": "Tout dans cmux est scriptable via le CLI : créer des espaces de travail, envoyer des frappes, contrôler le navigateur, lire les notifications. La philosophie de cmux est d'être programmable et composable, pour que les gens puissent personnaliser leur façon de travailler avec les agents de code. L'état de l'art des agents de code évolue rapidement, et vous ne voulez pas être enfermé dans un orchestrateur GUI rigide qui ne peut pas suivre.",
"cta": "Si vous exécutez plusieurs agents de code, <link>essayez cmux</link>."
},
"introducingCmux": {
"title": "Présentation de cmux",
"summary": "Un terminal macOS natif basé sur Ghostty, conçu pour exécuter plusieurs agents de code IA côte à côte.",
"date": "12 février 2026",
"p1": "cmux est une application terminal macOS native construite sur Ghostty, conçue dès le départ pour les développeurs qui exécutent plusieurs agents de code IA simultanément.",
"whyTitle": "Pourquoi cmux ?",
"whyP": "Les workflows de développement modernes impliquent souvent l'exécution de plusieurs agents à la fois. Claude Code, Codex et d'autres outils, chacun dans leur propre terminal. Suivre lesquels ont besoin d'attention et basculer rapidement entre eux est le problème que cmux résout.",
"featuresTitle": "Fonctionnalités clés",
"getStartedTitle": "Commencer",
"getStartedP": "Installez cmux via Homebrew ou téléchargez le DMG depuis le <link>guide de démarrage</link>.",
"featureVerticalTabsLabel": "Onglets verticaux",
"featureVerticalTabsDesc": "voir tous vos terminaux d'un coup d'œil dans une barre latérale",
"featureNotificationsLabel": "Anneaux de notification",
"featureNotificationsDesc": "les onglets clignotent quand un agent a besoin de votre attention",
"featureSplitPanesLabel": "Panneaux divisés",
"featureSplitPanesDesc": "divisions horizontales et verticales dans chaque espace de travail",
"featureSocketApiLabel": "API socket",
"featureSocketApiDesc": "contrôle programmatique pour créer des onglets et envoyer des entrées",
"featureGpuLabel": "Accélération GPU",
"featureGpuDesc": "propulsé par libghostty pour un rendu fluide"
}
},
"zenOfCmux": {
"metaTitle": "Le Zen de cmux",
"metaDescription": "cmux est une primitive, pas une solution. Il vous donne des pièces composables et votre workflow est entre vos mains."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "Le nouveau raccourci clavier qui change votre interaction avec cmux."
},
"showHnLaunch": {
"metaTitle": "Lancement de cmux sur Show HN",
"metaDescription": "L histoire du lancement de cmux sur Hacker News."
},
"introducingCmux": {
"metaTitle": "Présentation de cmux",
"metaDescription": "Pourquoi nous avons créé cmux, un nouveau terminal pour macOS."
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "Premiers pas",
"metaDescription": "Installez cmux, le terminal macOS natif pour les agents de code IA. Homebrew, téléchargement DMG, configuration du CLI et mises à jour automatiques via Sparkle.",
"intro": "cmux est un terminal macOS natif et léger basé sur Ghostty pour gérer plusieurs agents de code IA. Il propose des onglets verticaux, un panneau de notifications et une API de contrôle par socket.",
"install": "Installation",
"dmgRecommended": "DMG (recommandé)",
"dmgDesc": "Ouvrez le .dmg et faites glisser cmux dans votre dossier Applications. cmux se met à jour automatiquement via Sparkle, vous n'avez besoin de télécharger qu'une seule fois.",
"homebrew": "Homebrew",
"updateLater": "Pour mettre à jour plus tard :",
"firstLaunchCallout": "Au premier lancement, macOS peut vous demander de confirmer l'ouverture d'une application d'un développeur identifié. Cliquez sur <strong>Ouvrir</strong> pour continuer.",
"verifyTitle": "Vérifier l'installation",
"verifyDesc": "Ouvrez cmux et vous devriez voir :",
"verifyItem1": "Une fenêtre terminal avec une barre latérale d'onglets verticaux à gauche",
"verifyItem2": "Un espace de travail initial déjà ouvert",
"verifyItem3": "Le terminal Ghostty prêt pour la saisie",
"cliSetup": "Configuration du CLI",
"cliDesc": "cmux inclut un outil en ligne de commande pour l'automatisation. Dans les terminaux cmux, il fonctionne automatiquement. Pour utiliser le CLI en dehors de cmux, créez un lien symbolique :",
"cliThen": "Ensuite vous pouvez exécuter des commandes comme :",
"autoUpdates": "Mises à jour automatiques",
"autoUpdatesDesc": "cmux vérifie les mises à jour automatiquement via Sparkle. Quand une mise à jour est disponible, vous verrez une pastille de mise à jour dans la barre de titre. Vous pouvez aussi vérifier manuellement via cmux > Rechercher des mises à jour dans la barre de menus.",
"sessionRestore": "Restauration de session (comportement actuel)",
"sessionRestoreDesc": "Après un redémarrage, cmux restaure uniquement la disposition et les métadonnées :",
"sessionItem1": "Disposition des fenêtres, espaces de travail et panneaux",
"sessionItem2": "Répertoires de travail",
"sessionItem3": "Historique du terminal (au mieux)",
"sessionItem4": "URL du navigateur et historique de navigation",
"sessionCallout": "cmux ne restaure pas encore l'état des processus en cours. Les sessions d'applications terminales actives comme Claude Code, tmux et vim ne sont pas reprises après un redémarrage de l'application.",
"requirements": "Configuration requise",
"reqItem1": "macOS 14.0 ou ultérieur",
"reqItem2": "Mac Apple Silicon ou Intel",
"metaTitle": "Démarrage"
},
"concepts": {
"title": "Concepts",
"metaDescription": "Comment cmux organise les terminaux : fenêtres, espaces de travail, panneaux et surfaces. La hiérarchie derrière la barre latérale, les divisions et l'API socket.",
"intro": "cmux organise vos terminaux selon une hiérarchie à quatre niveaux. Comprendre ces niveaux aide lors de l'utilisation de l'API socket, du CLI et des raccourcis clavier.",
"hierarchy": "Hiérarchie",
"windowTitle": "Fenêtre",
"windowDesc": "Une fenêtre macOS. Ouvrez plusieurs fenêtres avec {shortcut}. Chaque fenêtre a sa propre barre latérale avec des espaces de travail indépendants.",
"workspaceTitle": "Espace de travail",
"workspaceDesc": "Une entrée dans la barre latérale. Chaque espace de travail contient un ou plusieurs panneaux divisés. Les espaces de travail sont ce que vous voyez listé dans la barre latérale gauche.",
"workspaceNote": "Dans l'interface et les raccourcis clavier, les espaces de travail sont souvent appelés « onglets » car ils se comportent comme des onglets dans la barre latérale. L'API socket et les variables d'environnement utilisent le terme « workspace ».",
"contextHeader": "Contexte",
"termUsedHeader": "Terme utilisé",
"sidebarUI": "Interface de la barre latérale",
"tab": "Onglet",
"keyboardShortcuts": "Raccourcis clavier",
"workspaceOrTab": "Workspace ou onglet",
"socketAPI": "API socket",
"environmentVariable": "Variable d'environnement",
"workspaceShortcuts": "Raccourcis : {new} (nouveau), {jump} (aller à), {close} (fermer), {prevNext} (précédent/suivant)",
"paneTitle": "Panneau",
"paneDesc": "Une région divisée dans un espace de travail. Créée en divisant avec {right} (droite) ou {down} (bas). Naviguez entre les panneaux avec {nav} + touches fléchées.",
"paneNote": "Chaque panneau peut contenir plusieurs surfaces (onglets dans le panneau).",
"surfaceTitle": "Surface",
"surfaceDesc": "Un onglet dans un panneau. Chaque panneau a sa propre barre d'onglets et peut contenir plusieurs surfaces. Créée avec {new}, navigation avec {prev} / {next} ou {jump}.",
"surfaceNote": "Les surfaces sont les sessions individuelles de terminal ou de navigateur avec lesquelles vous interagissez. Chaque surface a sa propre variable d'environnement CMUX_SURFACE_ID.",
"panelTitle": "Panel",
"panelDesc": "Le contenu à l'intérieur d'une surface. Actuellement deux types :",
"panelTerminal": "Terminal : une session terminal Ghostty",
"panelBrowser": "Navigateur : une vue web intégrée",
"panelNote": "Panel est principalement un concept interne. Dans l'API socket et le CLI, vous interagissez avec les surfaces plutôt qu'avec les panels directement.",
"visualExample": "Exemple visuel",
"visualExampleDesc": "Dans cet exemple :",
"visualItem1": "La fenêtre contient une barre latérale avec trois espaces de travail (dev, server, logs)",
"visualItem2": "L'espace de travail « dev » est sélectionné, montrant deux panneaux côte à côte",
"visualItem3": "Le panneau 1 a deux surfaces ([S1] et [S2] dans la barre d'onglets), S1 étant actif",
"visualItem4": "Le panneau 2 a une surface",
"visualItem5": "Chaque surface contient un panel (un terminal dans ce cas)",
"summary": "Résumé",
"levelHeader": "Niveau",
"whatItIsHeader": "Description",
"createdByHeader": "Créé par",
"identifiedByHeader": "Identifié par",
"macosWindow": "Fenêtre macOS",
"sidebarEntry": "Entrée de la barre latérale",
"splitRegion": "Région divisée",
"tabWithinPane": "Onglet dans un panneau",
"terminalOrBrowser": "Terminal ou navigateur",
"automatic": "Automatique",
"paneIdSocket": "ID du panneau (API socket)",
"panelIdInternal": "ID du panel (interne)",
"metaTitle": "Concepts"
},
"configuration": {
"title": "Configuration",
"metaDescription": "Configurez cmux via les fichiers de configuration Ghostty. Police, thème, couleurs, style des panneaux divisés, historique et paramètres de l'application pour le mode automatisation.",
"intro": "cmux lit la configuration depuis les fichiers de configuration Ghostty, vous offrant des options familières si vous venez de Ghostty.",
"configLocations": "Emplacements des fichiers de configuration",
"configLocationsDesc": "cmux cherche la configuration dans ces emplacements (dans l'ordre) :",
"createConfig": "Créez le fichier de configuration s'il n'existe pas :",
"appearance": "Apparence",
"font": "Police",
"colors": "Couleurs",
"splitPanes": "Panneaux divisés",
"behavior": "Comportement",
"scrollback": "Historique",
"workingDirectory": "Répertoire de travail",
"appSettings": "Paramètres de l'application",
"appSettingsDesc": "Les paramètres de l'application sont accessibles via cmux > Réglages ({shortcut}) :",
"themeMode": "Mode de thème",
"themeSystem": "Système : suivre l'apparence macOS",
"themeLight": "Clair : toujours en mode clair",
"themeDark": "Sombre : toujours en mode sombre",
"automationMode": "Mode automatisation",
"automationModeDesc": "Niveau d'accès au socket de contrôle :",
"automationOff": "Désactivé : pas d'accès au socket (le plus sécurisé)",
"automationCmux": "Processus cmux uniquement : seuls les processus démarrés dans les terminaux cmux peuvent se connecter",
"automationAll": "allowAll : autoriser tout processus local à se connecter (CMUX_SOCKET_MODE=allowAll, remplacement par variable d'environnement uniquement)",
"automationCallout": "Sur les machines partagées, envisagez d'utiliser le mode « Désactivé » ou « Processus cmux uniquement ».",
"browserLinkBehavior": "Comportement des liens du navigateur",
"browserLinkDesc": "Dans Réglages > Navigateur, cmux expose deux listes d'hôtes avec des objectifs différents :",
"browserHostsEmbed": "Hôtes à ouvrir dans le navigateur intégré : s'applique aux liens cliqués depuis la sortie du terminal. Les hôtes de cette liste s'ouvrent dans cmux ; les autres hôtes s'ouvrent dans votre navigateur par défaut. Supporte un hôte ou un joker par ligne (par exemple : example.com, *.internal.example).",
"browserHostsHttp": "Hôtes HTTP autorisés dans le navigateur intégré : s'applique uniquement aux URLs HTTP (non-HTTPS). Les hôtes de cette liste peuvent s'ouvrir dans cmux sans avertissement. Les valeurs par défaut incluent localhost, 127.0.0.1, ::1, 0.0.0.0 et *.localtest.me.",
"exampleConfig": "Exemple de configuration",
"metaTitle": "Configuration"
},
"keyboardShortcuts": {
"title": "Raccourcis clavier",
"description": "Tous les raccourcis clavier disponibles dans cmux, classés par catégorie.",
"metaDescription": "Tous les raccourcis clavier cmux pour les espaces de travail, surfaces, panneaux divisés, navigateur, notifications, recherche et gestion des fenêtres sur macOS.",
"searchPlaceholder": "Rechercher des raccourcis...",
"searchLabel": "Rechercher les raccourcis clavier",
"noResults": "Aucun raccourci trouvé",
"noResultsHint": "Essayez un autre terme de recherche",
"cat": {
"workspaces": "Espaces de travail",
"workspacesBlurb": "Les espaces de travail se trouvent dans la barre latérale. Chaque espace de travail a ses propres panneaux et surfaces.",
"surfaces": "Surfaces",
"surfacesBlurb": "Les surfaces sont des onglets à l'intérieur d'un panneau.",
"splitPanes": "Panneaux divisés",
"browser": "Navigateur",
"notifications": "Notifications",
"find": "Recherche",
"terminal": "Terminal",
"window": "Fenêtre"
},
"sc": {
"ws-new": "Nouvel espace de travail",
"ws-jump-1-8": "Aller à l'espace de travail 18",
"ws-jump-last": "Aller au dernier espace de travail",
"ws-close": "Fermer l'espace de travail",
"ws-rename": "Renommer l'espace de travail",
"sf-new": "Nouvelle surface",
"sf-prev-1": "Surface précédente",
"sf-prev-2": "Surface précédente",
"sf-jump-1-8": "Aller à la surface 18",
"sf-jump-last": "Aller à la dernière surface",
"sf-close": "Fermer la surface",
"sp-right": "Diviser à droite",
"sp-down": "Diviser en bas",
"sp-focus": "Cibler le panneau par direction",
"sp-browser-right": "Diviser le navigateur à droite",
"sp-browser-down": "Diviser le navigateur en bas",
"br-open": "Ouvrir une surface navigateur",
"br-addr": "Cibler la barre d'adresse",
"br-forward": "Avancer",
"br-reload": "Recharger la page",
"br-devtools": "Ouvrir les outils de développement",
"nt-panel": "Afficher le panneau de notifications",
"nt-latest": "Aller à la plus récente non lue",
"nt-flash": "Déclencher le flash",
"fd-find": "Rechercher",
"fd-next-prev": "Résultat suivant / précédent",
"fd-hide": "Masquer la barre de recherche",
"fd-selection": "Utiliser la sélection pour la recherche",
"tm-clear": "Effacer l'historique",
"tm-copy": "Copier (avec sélection)",
"tm-paste": "Coller",
"tm-font": "Augmenter / diminuer la taille de police",
"tm-reset": "Réinitialiser la taille de police",
"wn-new": "Nouvelle fenêtre",
"wn-settings": "Réglages",
"wn-reload": "Recharger la configuration",
"wn-quit": "Quitter"
},
"metaTitle": "Raccourcis clavier"
},
"api": {
"title": "Référence API",
"metaDescription": "Référence de l'API CLI et socket Unix de cmux. Gestion des espaces de travail, panneaux divisés, contrôle des entrées, notifications, métadonnées de la barre latérale, variables d'environnement et méthodes de détection.",
"intro": "cmux fournit à la fois un outil CLI et un socket Unix pour le contrôle programmatique. Chaque commande est disponible via les deux interfaces.",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "Chemin",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Build debug tagué",
"socketOverride": "Remplacez avec la variable d'environnement CMUX_SOCKET_PATH. Envoyez une requête JSON terminée par un retour à la ligne par appel :",
"socketCallout": "Les requêtes JSON du socket doivent utiliser method et params. Les anciens payloads JSON v1 comme <legacy>'{'\"command\":\"...\"'}'</legacy> ne sont pas supportés.",
"accessModes": "Modes d'accès",
"modeHeader": "Mode",
"descriptionHeader": "Description",
"howToEnableHeader": "Comment activer",
"offMode": "Socket désactivé",
"offEnable": "Interface Réglages ou CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "Seuls les processus démarrés dans les terminaux cmux peuvent se connecter.",
"cmuxOnlyEnable": "Mode par défaut dans l'interface Réglages",
"allowAllMode": "Autoriser tout processus local à se connecter (pas de vérification d'ascendance).",
"allowAllEnable": "Remplacement par variable d'environnement uniquement : CMUX_SOCKET_MODE=allowAll",
"accessCallout": "Sur les machines partagées, utilisez Désactivé ou Processus cmux uniquement.",
"cliOptions": "Options du CLI",
"flagHeader": "Option",
"customSocketPath": "Chemin de socket personnalisé",
"outputJson": "Sortie au format JSON",
"targetWindow": "Cibler une fenêtre spécifique",
"targetWorkspace": "Cibler un espace de travail spécifique",
"targetSurface": "Cibler une surface spécifique",
"idFormat": "Format d'identifiant de contrôle dans la sortie JSON",
"workspaceCommands": "Commandes d'espace de travail",
"listWorkspacesDesc": "Lister tous les espaces de travail ouverts.",
"newWorkspaceDesc": "Créer un nouvel espace de travail.",
"selectWorkspaceDesc": "Basculer vers un espace de travail spécifique.",
"currentWorkspaceDesc": "Obtenir l'espace de travail actuellement actif.",
"closeWorkspaceDesc": "Fermer un espace de travail.",
"splitCommands": "Commandes de division",
"newSplitDesc": "Créer un nouveau panneau divisé. Directions : left, right, up, down.",
"listSurfacesDesc": "Lister toutes les surfaces dans l'espace de travail actuel.",
"focusSurfaceDesc": "Mettre le focus sur une surface spécifique.",
"inputCommands": "Commandes de saisie",
"sendDesc": "Envoyer du texte au terminal actif.",
"sendKeyDesc": "Envoyer une touche. Touches : enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "Envoyer du texte à une surface spécifique.",
"sendKeySurfaceDesc": "Envoyer une touche à une surface spécifique.",
"notificationCommands": "Commandes de notification",
"notifyDesc": "Envoyer une notification.",
"listNotificationsDesc": "Lister toutes les notifications.",
"clearNotificationsDesc": "Effacer toutes les notifications.",
"sidebarMetadata": "Commandes de métadonnées de la barre latérale",
"sidebarMetadataDesc": "Définir des pastilles de statut, barres de progression et entrées de journal dans la barre latérale pour n'importe quel espace de travail. Utile pour les scripts de build, intégrations CI et agents de code IA qui souhaitent afficher l'état en un coup d'œil.",
"setStatusDesc": "Définir une pastille de statut dans la barre latérale. Utilisez une clé unique pour que différents outils puissent gérer leurs propres entrées.",
"clearStatusDesc": "Supprimer une entrée de statut de la barre latérale par clé.",
"listStatusDesc": "Lister toutes les entrées de statut de la barre latérale pour un espace de travail.",
"setProgressDesc": "Définir une barre de progression dans la barre latérale (0.0 à 1.0).",
"clearProgressDesc": "Effacer la barre de progression de la barre latérale.",
"logDesc": "Ajouter une entrée de journal à la barre latérale. Niveaux : info, progress, success, warning, error.",
"clearLogDesc": "Effacer toutes les entrées de journal de la barre latérale.",
"listLogDesc": "Lister les entrées de journal de la barre latérale.",
"sidebarStateDesc": "Afficher toutes les métadonnées de la barre latérale (cwd, branche git, ports, statut, progression, journaux).",
"utilityCommands": "Commandes utilitaires",
"pingDesc": "Vérifier si cmux fonctionne et répond.",
"capabilitiesDesc": "Lister les méthodes socket disponibles et le mode d'accès actuel.",
"identifyDesc": "Afficher le contexte fenêtre/espace de travail/panneau/surface actif.",
"envVariables": "Variables d'environnement",
"variableHeader": "Variable",
"socketPathDesc": "Remplacer le chemin du socket utilisé par le CLI et les intégrations",
"socketEnableDesc": "Forcer l'activation/désactivation du socket (1/0, true/false, on/off)",
"socketModeDesc": "Remplacer le mode d'accès (cmuxOnly, allowAll, off). Accepte aussi cmux-only/cmux_only et allow-all/allow_all",
"workspaceIdDesc": "Auto-défini : ID de l'espace de travail actuel",
"surfaceIdDesc": "Auto-défini : ID de la surface actuelle",
"termProgramDesc": "Défini à ghostty",
"termDesc": "Défini à xterm-ghostty",
"envCallout": "Les anciennes valeurs CMUX_SOCKET_MODE full et notifications sont toujours acceptées pour compatibilité.",
"detectingCmux": "Détecter cmux",
"examples": "Exemples",
"pythonClient": "Client Python",
"shellScript": "Script shell",
"buildScriptNotification": "Script de build avec notification",
"metaTitle": "Référence API"
},
"notifications": {
"title": "Notifications",
"metaDescription": "Envoyez des notifications bureau depuis les agents IA et scripts dans cmux. CLI, séquences d'échappement OSC 99/777 et intégration des hooks Claude Code.",
"intro": "cmux supporte les notifications bureau, permettant aux agents IA et aux scripts de vous alerter quand ils ont besoin d'attention.",
"lifecycle": "Cycle de vie",
"received": "Reçue : la notification apparaît dans le panneau, l'alerte bureau se déclenche (si non supprimée)",
"unread": "Non lue : badge affiché sur l'onglet de l'espace de travail",
"read": "Lue : effacée quand vous consultez cet espace de travail",
"cleared": "Effacée : supprimée du panneau",
"suppression": "Suppression",
"suppressionDesc": "Les alertes bureau sont supprimées quand :",
"suppressItem1": "La fenêtre cmux est active",
"suppressItem2": "L'espace de travail spécifique qui envoie la notification est actif",
"suppressItem3": "Le panneau de notifications est ouvert",
"notificationPanel": "Panneau de notifications",
"notificationPanelDesc": "Appuyez sur <openShortcut>⌘⇧I</openShortcut> pour ouvrir le panneau de notifications. Cliquez sur une notification pour aller à cet espace de travail. Appuyez sur <jumpShortcut>⌘⇧U</jumpShortcut> pour aller directement à l'espace de travail avec la notification non lue la plus récente.",
"customCommand": "Commande personnalisée",
"customCommandDesc": "Exécutez une commande shell à chaque fois qu'une notification est planifiée. Définissez-la dans Réglages > App > Commande de notification. La commande s'exécute via /bin/sh -c avec ces variables d'environnement :",
"customCommandNote": "La commande s'exécute indépendamment du sélecteur de son système. Définissez le sélecteur sur « Aucun » pour utiliser uniquement la commande personnalisée, ou gardez les deux pour un son système plus une action personnalisée.",
"sending": "Envoyer des notifications",
"cli": "CLI",
"osc777Title": "OSC 777 (simple)",
"osc777Desc": "Le protocole RXVT utilise un format fixe avec titre et corps :",
"osc99Title": "OSC 99 (riche)",
"osc99Desc": "Le protocole Kitty supporte les sous-titres et les IDs de notification :",
"variableHeader": "Variable",
"descriptionHeader": "Description",
"envTitle": "Titre de la notification (nom de l'espace de travail ou nom de l'app)",
"envSubtitle": "Sous-titre de la notification",
"envBody": "Texte du corps de la notification",
"cmpTitleBody": "Titre + corps",
"cmpSubtitle": "Sous-titre",
"cmpNotificationId": "ID de notification",
"cmpComplexity": "Complexité",
"cmpYes": "Oui",
"cmpNo": "Non",
"cmpHigher": "Plus élevée",
"cmpLower": "Plus basse",
"featureHeader": "Fonctionnalité",
"comparisonCallout": "Utilisez OSC 777 pour les notifications simples. Utilisez OSC 99 quand vous avez besoin de sous-titres ou d'IDs de notification. Utilisez le CLI (cmux notify) pour l'intégration la plus simple.",
"claudeCodeHooks": "Hooks Claude Code",
"claudeCodeHooksDesc": "cmux s'intègre avec <link>Claude Code</link> via des hooks pour vous notifier quand les tâches sont terminées.",
"createHookScript": "1. Créer le script de hook",
"configureClaude": "2. Configurer Claude Code",
"restartNote": "Redémarrez Claude Code pour appliquer les hooks.",
"integrationExamples": "Exemples d'intégration",
"notifyAfterLong": "Notifier après une longue commande",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "Passthrough tmux",
"tmuxDesc": "Si vous utilisez tmux dans cmux, activez le passthrough :",
"metaTitle": "Notifications"
},
"browserAutomation": {
"title": "Automatisation du navigateur",
"metaDescription": "Référence des commandes du navigateur cmux pour la navigation, l'interaction DOM, l'attente, l'inspection, l'évaluation JavaScript, les onglets, les dialogues, les frames, les téléchargements et l'état du navigateur.",
"intro": "Le groupe de commandes cmux browser fournit l'automatisation du navigateur pour les surfaces navigateur de cmux. Utilisez-le pour naviguer, interagir avec les éléments DOM, inspecter l'état de la page, évaluer du JavaScript et gérer les données de session du navigateur.",
"commandIndex": "Index des commandes",
"categoryHeader": "Catégorie",
"subcommandsHeader": "Sous-commandes",
"navAndTargeting": "Navigation et ciblage",
"waiting": "Attente",
"domInteraction": "Interaction DOM",
"inspection": "Inspection",
"jsAndInjection": "JavaScript et injection",
"framesDialogsDownloads": "Frames, dialogues, téléchargements",
"stateAndSession": "État et données de session",
"tabsAndLogs": "Onglets et journaux",
"targetingSurface": "Cibler une surface navigateur",
"targetingDesc": "La plupart des sous-commandes nécessitent une surface cible. Vous pouvez la passer en position ou avec --surface.",
"navigation": "Navigation",
"waitingSection": "Attente",
"waitingDesc": "Utilisez wait pour bloquer jusqu'à ce que des sélecteurs, du texte, des fragments d'URL, l'état de chargement ou une condition JavaScript soient satisfaits.",
"domSection": "Interaction DOM",
"domDesc": "Les actions de mutation supportent --snapshot-after pour une vérification rapide dans les scripts.",
"inspectionSection": "Inspection",
"inspectionDesc": "Utilisez les getters structurés pour les scripts et les snapshots/captures d'écran pour la revue humaine.",
"jsSection": "Évaluation et injection JavaScript",
"stateSection": "État",
"stateDesc": "Les commandes de données de session couvrent les cookies, le stockage local/session et les snapshots complets de l'état du navigateur.",
"tabsSection": "Onglets",
"tabsDesc": "Les opérations sur les onglets du navigateur correspondent aux surfaces navigateur dans le groupe d'onglets navigateur actif.",
"consoleSection": "Console et erreurs",
"dialogsSection": "Dialogues",
"framesSection": "Frames",
"downloadsSection": "Téléchargements",
"commonPatterns": "Patterns courants",
"patternNavigate": "Naviguer, attendre, inspecter",
"patternForm": "Remplir un formulaire et vérifier le texte de succès",
"patternDebug": "Capturer les artefacts de debug en cas d'échec",
"patternSession": "Persister et restaurer la session du navigateur",
"metaTitle": "Automatisation du navigateur"
},
"changelog": {
"title": "Changelog",
"metaDescription": "Notes de version et historique des versions de cmux. Nouvelles fonctionnalités, corrections de bugs et changements pour le terminal macOS natif.",
"metaTitle": "Journal des modifications"
},
"navItems": {
"gettingStarted": "Premiers pas",
"concepts": "Concepts",
"configuration": "Configuration",
"keyboardShortcuts": "Raccourcis clavier",
"apiReference": "Référence API",
"browserAutomation": "Automatisation du navigateur",
"notifications": "Notifications",
"changelog": "Changelog"
}
},
"legal": {
"privacyPolicy": "Politique de confidentialité",
"termsOfService": "Conditions d'utilisation",
"eula": "EULA"
},
"wallOfLove": {
"title": "Wall of Love",
"description": "Ce que les gens disent de cmux."
},
"testimonials": {
"mitchellh": "Encore un projet base sur libghostty, cette fois un terminal macOS avec des onglets verticaux, une meilleure organisation/notifications, un navigateur integre/scriptable, specifiquement destine aux gens qui utilisent beaucoup de workflows d'agents en terminal.",
"schrockn": "C'est exactement le produit que je cherchais. Apres deux heures ce matin, je suis conquis.",
"egrefen": "Je l'utilise depuis tout le week-end et c'est genial.",
"max4c": "c'est mon outil prefere depuis deux semaines",
"asaza": "cmux a l'air tellement bien que c'est peut-etre le moment de dire adieu a VSCode",
"johnthedebs": "Hey, ca a l'air vraiment genial. J'adore les idees, en particulier : la programmabilite, l'UI en couches, le navigateur avec API. J'ai hate d'essayer. Je tiens aussi a remercier Mitchell Hashimoto pour avoir cree libghostty ; c'est une periode passionnante pour etre utilisateur de terminal.",
"joeriddles": "Des onglets verticaux dans mon terminal ! Je n'y avais jamais pense. J'utilise et j'adore les onglets verticaux de Firefox.",
"dchu17": "Je l'ai essaye et c'etait assez intuitif. Beau travail !",
"afruth": "J'aime bien. Je l'ai utilise hier sur trois projets en parallele, chacun avec plusieurs worktrees. En combinaison avec lazygit et yazi/nvim, j'etais un peu plus productif que d'habitude sans avoir a jongler entre plusieurs instances ghostty/iTerm. Ca semble aussi plus naturel que tmux.",
"northprint": "J'ai essaye cmux parce que ca avait l'air bien, et c'est bien",
"indykish": "cmux est plutot bon.",
"kataring": "Je suis passe a cmux.dev",
"scottw": "C'est une decouverte tellement utile. Je ne peux que le recommander.",
"johnblythe": "Installe ce week-end et j'adore. J'attendais quelque chose comme ca.",
"bchris91": "C'est exactement ce que je voulais. Travail incroyable, merci !",
"connorelsea": "Je l'utilise depuis une semaine et c'est fantastique. Un onglet vertical par tache en cours. A l'interieur, Claude d'un cote et le navigateur avec la PR et les ressources de l'autre. Basculer entre les taches en restant organise. En combinant avec les skills pour que Claude surveille le CI recursivement, etc. Franchement, je me sens eclaire.",
"tonkotsuboy": "J'etais passe de Warp a Ghostty en debut d'annee, mais maintenant je suis passe a cmux. Les onglets verticaux sont pratiques, et j'apprecie les notifications quand les taches Claude Code sont terminees. Comme c'est base sur Ghostty, les performances ultra-rapides sont conservees. L'affichage des branches et les completions que j'avais configures dans Ghostty fonctionnent toujours."
},
"languageSwitcher": {
"label": "Langue"
}
}

587
web/messages/it.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — Il terminale progettato per il multitasking",
"description": "Terminale macOS nativo basato su Ghostty. Funziona con Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider e qualsiasi strumento CLI. Tab verticali, anelli di notifica, pannelli divisi e un API socket.",
"ogDescription": "Terminale macOS nativo per agenti di codice IA. Funziona con Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider e qualsiasi strumento CLI."
},
"common": {
"downloadForMac": "Scarica per Mac",
"viewOnGitHub": "Vedi su GitHub",
"closeMenu": "Chiudi menu",
"openMenu": "Apri menu",
"toggleTheme": "Cambia tema",
"backToBlog": "Torna al blog",
"readTheDocs": "Leggi la documentazione",
"viewChangelog": "Vedi il changelog"
},
"nav": {
"docs": "Docs",
"blog": "Blog",
"changelog": "Changelog",
"community": "Community",
"github": "GitHub"
},
"footer": {
"product": "Prodotto",
"resources": "Risorse",
"legal": "Note legali",
"social": "Social",
"blog": "Blog",
"community": "Community",
"docs": "Docs",
"changelog": "Changelog",
"privacy": "Privacy",
"terms": "Termini",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "Contatti",
"copyright": "© {year} Manaflow",
"language": "Lingua"
},
"home": {
"taglinePrefix": "Il terminale progettato per ",
"typingCodingAgents": "agenti di codice",
"typingMultitasking": "multitasking",
"subtitle": "App macOS nativa basata su Ghostty. Tab verticali, notifiche quando gli agenti hanno bisogno di attenzione, pannelli divisi e un'API socket per l'automazione.",
"features": "Funzionalità",
"faq": "FAQ",
"communitySection": "Community",
"feature": {
"verticalTabs": "Tab verticali",
"verticalTabsDesc": ": la barra laterale mostra il branch git, la directory di lavoro, le porte e il testo delle notifiche",
"notificationRings": "Anelli di notifica",
"notificationRingsDesc": ": i pannelli si illuminano quando gli agenti hanno bisogno di attenzione",
"inAppBrowser": "Browser integrato",
"inAppBrowserDesc": ": apri un browser accanto al terminale con un'API scriptable",
"splitPanes": "Pannelli divisi",
"splitPanesDesc": ": divisioni orizzontali e verticali all'interno di ogni tab",
"scriptable": "Scriptable",
"scriptableDesc": ": CLI e API socket per automazione e scripting",
"gpuAccelerated": "Accelerazione GPU",
"gpuAcceleratedDesc": ": alimentato da libghostty per un rendering fluido",
"lightweight": "Leggero",
"lightweightDesc": ": Swift + AppKit nativo, senza Electron",
"keyboardShortcuts": "Scorciatoie da tastiera",
"keyboardShortcutsDesc": ": <link>scorciatoie complete</link> per workspace, divisioni, browser e altro"
},
"faqGhosttyQ": "Qual è il rapporto tra cmux e Ghostty?",
"faqGhosttyA": "cmux non è un fork di Ghostty. Utilizza <link>libghostty</link> come libreria per il rendering del terminale, allo stesso modo in cui le app usano WebKit per le viste web. Ghostty è un terminale autonomo; cmux è un'app diversa costruita sul suo motore di rendering.",
"faqPlatformQ": "Quali piattaforme supporta?",
"faqPlatformA": "Solo macOS, per ora. cmux è un'app nativa Swift + AppKit.",
"faqAgentsQ": "Con quali agenti di codice funziona cmux?",
"faqAgentsA": "Tutti. cmux è un terminale, quindi qualsiasi agente che funziona in un terminale funziona immediatamente: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent, e qualsiasi altro strumento lanciabile dalla riga di comando.",
"faqNotificationsQ": "Come funzionano le notifiche?",
"faqNotificationsA": "Quando un processo ha bisogno di attenzione, cmux mostra anelli di notifica attorno ai pannelli, badge non letti nella barra laterale, un popover di notifica e una notifica desktop macOS. Si attivano automaticamente tramite le sequenze di escape standard del terminale (OSC 9/99/777), oppure puoi attivarle con il <cliLink>CLI cmux</cliLink> e gli <hooksLink>hook di Claude Code</hooksLink>.",
"faqShortcutsQ": "Posso personalizzare le scorciatoie da tastiera?",
"faqShortcutsA": "Le combinazioni di tasti del terminale sono lette dal file di configurazione Ghostty (<configPath>~/.config/ghostty/config</configPath>). Le scorciatoie specifiche di cmux (workspace, divisioni, browser, notifiche) possono essere personalizzate nelle Impostazioni. Vedi le <link>scorciatoie predefinite</link> per l'elenco completo.",
"faqTmuxQ": "Come si confronta con tmux?",
"faqTmuxA": "tmux è un multiplexer di terminali che funziona all'interno di qualsiasi terminale. cmux è un'app macOS nativa con interfaccia grafica: tab verticali, pannelli divisi, browser integrato e API socket sono tutti integrati. Nessun file di configurazione o tasti prefisso necessari.",
"faqFreeQ": "cmux è gratuito?",
"faqFreeA": "Sì, cmux è gratuito. Il codice sorgente è disponibile su <link>GitHub</link>."
},
"community": {
"title": "Community",
"description": "Connettiti con altri utenti cmux e il team che lo sviluppa.",
"discord": "Discord",
"discordAction": "Unisciti al nostro Discord",
"discordDesc": "Chatta con la community, ottieni aiuto e condividi feedback",
"githubAction": "Vedi su GitHub",
"githubDesc": "Metti una stella, segnala problemi e contribuisci",
"twitter": "Twitter",
"twitterAction": "Segui su X",
"twitterDesc": "Aggiornamenti, annunci e suggerimenti",
"youtube": "YouTube",
"youtubeAction": "Iscriviti",
"youtubeDesc": "Demo, tutorial e guide",
"linkedin": "LinkedIn",
"linkedinAction": "Seguici",
"linkedinDesc": "Notizie aziendali e aggiornamenti tecnici",
"metaTitle": "Community — cmux",
"metaDescription": "Unisciti alla community cmux su Discord, Twitter, GitHub e altro"
},
"blog": {
"title": "Blog",
"layoutTitle": "cmux blog",
"metaTitle": "Blog",
"metaDescription": "Notizie e aggiornamenti dal team cmux",
"description": "Notizie e aggiornamenti dal team cmux",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Come Cmd+Shift+U permette di navigare tra gli agenti completati nei diversi workspace di cmux.",
"date": "4 marzo 2026",
"p1": "La mia funzionalità preferita di cmux è Cmd+Shift+U. Ho 17 workspace aperti in questo momento, ognuno con un agente in esecuzione. Prima cliccavo tra i tab e il pannello notifiche per capire cosa fosse completato. Digitare è più veloce.",
"p2": "Cmd+Shift+U salta alla <link>notifica</link> non letta più recente. In pratica significa l'ultimo agente che ha terminato. Passa al workspace giusto, mette a fuoco il pannello esatto, lo fa lampeggiare per mostrarti dove guardare e lo segna come letto. Se la notifica proviene da un'altra finestra, quella finestra viene portata in primo piano."
},
"zenOfCmux": {
"title": "La filosofia di cmux",
"summary": "cmux è un elemento base, non una soluzione. Ti dà pezzi componibili e il tuo workflow è una tua scelta.",
"date": "27 febbraio 2026",
"p1": "cmux non prescrive ai developer come usare i propri strumenti. È un terminale e un browser con un CLI, il resto dipende da te.",
"p2": "cmux è un elemento base, non una soluzione. Ti dà un terminale, un browser, notifiche, workspace, divisioni, tab e un CLI per controllare tutto. cmux non ti obbliga a usare gli agenti di codice in un modo specifico. Quello che costruisci con questi elementi è tuo.",
"p3": "I migliori developer hanno sempre costruito i propri strumenti. Nessuno ha ancora trovato il modo migliore per lavorare con gli agenti, e i team che costruiscono prodotti chiusi sicuramente nemmeno. I developer più vicini alle proprie codebase lo troveranno per primi.",
"p4": "Dai a un milione di developer elementi componibili e troveranno collettivamente i workflow più efficienti più velocemente di qualsiasi team di prodotto potrebbe progettare dall'alto."
},
"showHnLaunch": {
"title": "Lancio di cmux su Show HN",
"summary": "cmux ha raggiunto il 2° posto su Hacker News, è stato condiviso da Mitchell Hashimoto ed è diventato virale in Giappone.",
"date": "21 febbraio 2026",
"intro": "Abbiamo pubblicato cmux su <link>Show HN</link> il 19 febbraio:",
"blockquote1": "Eseguo molte sessioni Claude Code e Codex in parallelo. Usavo Ghostty con diversi pannelli divisi, affidandomi alle notifiche native di macOS per sapere quando un agente aveva bisogno di me. Ma il corpo della notifica di Claude Code dice sempre solo \"Claude is waiting for your input\" senza contesto, e con abbastanza tab aperti, non riuscivo nemmeno più a leggere i titoli.",
"blockquote2": "Ho provato alcuni orchestratori di codice ma la maggior parte erano app Electron/Tauri e le prestazioni mi infastidivano. Preferisco anche semplicemente il terminale, dato che gli orchestratori GUI ti vincolano al loro workflow. Quindi ho costruito cmux come app macOS nativa in Swift/AppKit. Usa libghostty per il rendering del terminale e legge la tua configurazione Ghostty esistente per temi, font, colori e altro.",
"blockquote3": "Le principali aggiunte sono la barra laterale e il sistema di notifiche. La barra laterale ha tab verticali che mostrano il branch git, la directory di lavoro, le porte in ascolto e l'ultimo testo di notifica per ogni workspace. Il sistema di notifiche cattura le sequenze del terminale (OSC 9/99/777) e ha un CLI (cmux notify) che puoi collegare agli hook degli agenti per Claude Code, OpenCode, ecc. Quando un agente è in attesa, il suo pannello riceve un anello blu e il tab si illumina nella barra laterale, così posso vedere quale ha bisogno di me tra divisioni e tab. Cmd+Shift+U salta al più recente non letto.",
"blockquote4": "Il browser integrato ha un'API scriptable. Gli agenti possono catturare l'albero di accessibilità, ottenere riferimenti agli elementi, cliccare, compilare form, eseguire JS e leggere i log della console. Puoi dividere un pannello browser accanto al terminale e far interagire Claude Code direttamente con il tuo server di sviluppo.",
"blockquote5": "Tutto è scriptable tramite il CLI e l'API socket: creare workspace/tab, dividere pannelli, inviare sequenze di tasti, aprire URL nel browser.",
"hitNumber2": "Al picco ha raggiunto il 2° posto su Hacker News. Mitchell Hashimoto lo ha condiviso:",
"favoriteComment": "Il mio commento preferito dal <link>thread HN</link>:",
"viralJapan": "Sorprendentemente, cmux è diventato virale in Giappone:",
"translation": "Traduzione: \"Sembra buono. Un'app terminale basata su Ghostty progettata per non perdersi quando si eseguono più CLI come Claude Code in parallelo. Il pannello in attesa di input riceve una cornice blu, e ha il proprio sistema di notifiche.\"",
"viralChina": "E semi-virale in Cina:",
"extensions": "Un'altra cosa entusiasmante è stata vedere persone costruire sopra il CLI cmux. sasha ha creato un'estensione pi-cmux che mostra info sul modello, utilizzo dei token e stato dell'agente nella barra laterale:",
"scriptable": "Tutto in cmux è scriptable tramite il CLI: creare workspace, inviare sequenze di tasti, controllare il browser, leggere le notifiche. Parte della filosofia di cmux è essere programmabile e componibile, così le persone possono personalizzare il modo in cui lavorano con gli agenti di codice. Lo stato dell'arte degli agenti di codice sta cambiando rapidamente, e non vuoi essere vincolato a un orchestratore GUI rigido che non riesce a stare al passo.",
"cta": "Se stai eseguendo più agenti di codice, <link>prova cmux</link>."
},
"introducingCmux": {
"title": "Presentazione di cmux",
"summary": "Un terminale macOS nativo basato su Ghostty, progettato per eseguire più agenti di codice IA fianco a fianco.",
"date": "12 febbraio 2026",
"p1": "cmux è un'applicazione terminale macOS nativa costruita su Ghostty, progettata fin dall'inizio per i developer che eseguono più agenti di codice IA simultaneamente.",
"whyTitle": "Perché cmux?",
"whyP": "I workflow di sviluppo moderni spesso richiedono l'esecuzione di più agenti contemporaneamente. Claude Code, Codex e altri strumenti, ognuno nel proprio terminale. Tenere traccia di quali hanno bisogno di attenzione e passare rapidamente dall'uno all'altro è il problema che cmux risolve.",
"featuresTitle": "Funzionalità principali",
"getStartedTitle": "Per iniziare",
"getStartedP": "Installa cmux tramite Homebrew o scarica il DMG dalla <link>guida introduttiva</link>.",
"featureVerticalTabsLabel": "Tab verticali",
"featureVerticalTabsDesc": "vedi tutti i tuoi terminali a colpo d'occhio in una barra laterale",
"featureNotificationsLabel": "Anelli di notifica",
"featureNotificationsDesc": "i tab lampeggiano quando un agente ha bisogno del tuo input",
"featureSplitPanesLabel": "Pannelli divisi",
"featureSplitPanesDesc": "divisioni orizzontali e verticali all'interno di ogni workspace",
"featureSocketApiLabel": "API socket",
"featureSocketApiDesc": "controllo programmatico per creare tab e inviare input",
"featureGpuLabel": "Accelerazione GPU",
"featureGpuDesc": "alimentato da libghostty per un rendering fluido"
}
},
"zenOfCmux": {
"metaTitle": "Lo Zen di cmux",
"metaDescription": "cmux è una primitiva, non una soluzione. Ti dà pezzi componibili e il tuo workflow dipende da te."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "La nuova scorciatoia da tastiera che cambia il modo di interagire con cmux."
},
"showHnLaunch": {
"metaTitle": "Lancio di cmux su Show HN",
"metaDescription": "La storia del lancio di cmux su Hacker News."
},
"introducingCmux": {
"metaTitle": "Presentiamo cmux",
"metaDescription": "Perché abbiamo costruito cmux, un nuovo terminale per macOS."
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "Per iniziare",
"metaDescription": "Installa cmux, il terminale macOS nativo per agenti di codice IA. Homebrew, download DMG, configurazione CLI e aggiornamenti automatici tramite Sparkle.",
"intro": "cmux è un terminale macOS nativo e leggero basato su Ghostty per gestire più agenti di codice IA. Dispone di tab verticali, un pannello notifiche e un'API di controllo basata su socket.",
"install": "Installazione",
"dmgRecommended": "DMG (consigliato)",
"dmgDesc": "Apri il .dmg e trascina cmux nella cartella Applicazioni. cmux si aggiorna automaticamente tramite Sparkle, quindi devi scaricare solo una volta.",
"homebrew": "Homebrew",
"updateLater": "Per aggiornare in seguito:",
"firstLaunchCallout": "Al primo avvio, macOS potrebbe chiederti di confermare l'apertura di un'app da uno sviluppatore identificato. Clicca su <strong>Apri</strong> per procedere.",
"verifyTitle": "Verifica dell'installazione",
"verifyDesc": "Apri cmux e dovresti vedere:",
"verifyItem1": "Una finestra terminale con una barra laterale di tab verticali a sinistra",
"verifyItem2": "Un workspace iniziale già aperto",
"verifyItem3": "Il terminale Ghostty pronto per l'input",
"cliSetup": "Configurazione del CLI",
"cliDesc": "cmux include uno strumento a riga di comando per l'automazione. Nei terminali cmux funziona automaticamente. Per usare il CLI al di fuori di cmux, crea un link simbolico:",
"cliThen": "Poi puoi eseguire comandi come:",
"autoUpdates": "Aggiornamenti automatici",
"autoUpdatesDesc": "cmux verifica automaticamente gli aggiornamenti tramite Sparkle. Quando un aggiornamento è disponibile, vedrai una pillola di aggiornamento nella barra del titolo. Puoi anche controllare manualmente tramite cmux > Controlla aggiornamenti nella barra dei menu.",
"sessionRestore": "Ripristino sessione (comportamento attuale)",
"sessionRestoreDesc": "Dopo il riavvio, cmux ripristina solo il layout e i metadati:",
"sessionItem1": "Layout di finestre, workspace e pannelli",
"sessionItem2": "Directory di lavoro",
"sessionItem3": "Cronologia del terminale (best effort)",
"sessionItem4": "URL del browser e cronologia di navigazione",
"sessionCallout": "cmux non ripristina ancora lo stato dei processi attivi. Le sessioni di applicazioni terminale attive come Claude Code, tmux e vim non vengono riprese dopo il riavvio dell'app.",
"requirements": "Requisiti",
"reqItem1": "macOS 14.0 o successivo",
"reqItem2": "Mac Apple Silicon o Intel",
"metaTitle": "Per iniziare"
},
"concepts": {
"title": "Concetti",
"metaDescription": "Come cmux organizza i terminali: finestre, workspace, pannelli e superfici. La gerarchia dietro la barra laterale, le divisioni e l'API socket.",
"intro": "cmux organizza i tuoi terminali in una gerarchia a quattro livelli. Comprendere questi livelli aiuta nell'uso dell'API socket, del CLI e delle scorciatoie da tastiera.",
"hierarchy": "Gerarchia",
"windowTitle": "Finestra",
"windowDesc": "Una finestra macOS. Apri più finestre con {shortcut}. Ogni finestra ha la propria barra laterale con workspace indipendenti.",
"workspaceTitle": "Workspace",
"workspaceDesc": "Una voce nella barra laterale. Ogni workspace contiene uno o più pannelli divisi. I workspace sono ciò che vedi elencato nella barra laterale sinistra.",
"workspaceNote": "Nell'interfaccia e nelle scorciatoie da tastiera, i workspace sono spesso chiamati \"tab\" poiché si comportano come tab nella barra laterale. L'API socket e le variabili d'ambiente usano il termine \"workspace\".",
"contextHeader": "Contesto",
"termUsedHeader": "Termine usato",
"sidebarUI": "Interfaccia barra laterale",
"tab": "Tab",
"keyboardShortcuts": "Scorciatoie da tastiera",
"workspaceOrTab": "Workspace o tab",
"socketAPI": "API socket",
"environmentVariable": "Variabile d'ambiente",
"workspaceShortcuts": "Scorciatoie: {new} (nuovo), {jump} (vai a), {close} (chiudi), {prevNext} (precedente/successivo)",
"paneTitle": "Pannello",
"paneDesc": "Una regione divisa all'interno di un workspace. Creata dividendo con {right} (destra) o {down} (basso). Naviga tra i pannelli con {nav} + tasti freccia.",
"paneNote": "Ogni pannello può contenere più superfici (tab all'interno del pannello).",
"surfaceTitle": "Superficie",
"surfaceDesc": "Un tab all'interno di un pannello. Ogni pannello ha la propria barra dei tab e può contenere più superfici. Creata con {new}, navigazione con {prev} / {next} o {jump}.",
"surfaceNote": "Le superfici sono le singole sessioni di terminale o browser con cui interagisci. Ogni superficie ha la propria variabile d'ambiente CMUX_SURFACE_ID.",
"panelTitle": "Panel",
"panelDesc": "Il contenuto all'interno di una superficie. Attualmente due tipi:",
"panelTerminal": "Terminal: una sessione terminale Ghostty",
"panelBrowser": "Browser: una vista web integrata",
"panelNote": "Panel è principalmente un concetto interno. Nell'API socket e nel CLI, interagisci con le superfici piuttosto che con i panel direttamente.",
"visualExample": "Esempio visivo",
"visualExampleDesc": "In questo esempio:",
"visualItem1": "La finestra contiene una barra laterale con tre workspace (dev, server, logs)",
"visualItem2": "Il workspace \"dev\" è selezionato, mostrando due pannelli affiancati",
"visualItem3": "Il pannello 1 ha due superfici ([S1] e [S2] nella barra dei tab), con S1 attivo",
"visualItem4": "Il pannello 2 ha una superficie",
"visualItem5": "Ogni superficie contiene un panel (un terminale in questo caso)",
"summary": "Riepilogo",
"levelHeader": "Livello",
"whatItIsHeader": "Descrizione",
"createdByHeader": "Creato da",
"identifiedByHeader": "Identificato da",
"macosWindow": "Finestra macOS",
"sidebarEntry": "Voce della barra laterale",
"splitRegion": "Regione divisa",
"tabWithinPane": "Tab all'interno di un pannello",
"terminalOrBrowser": "Terminale o browser",
"automatic": "Automatico",
"paneIdSocket": "ID pannello (API socket)",
"panelIdInternal": "ID panel (interno)",
"metaTitle": "Concetti"
},
"configuration": {
"title": "Configurazione",
"metaDescription": "Configura cmux tramite i file di configurazione Ghostty. Font, tema, colori, stile dei pannelli divisi, cronologia e impostazioni dell'app per la modalità automazione.",
"intro": "cmux legge la configurazione dai file di configurazione Ghostty, offrendoti opzioni familiari se provieni da Ghostty.",
"configLocations": "Posizione dei file di configurazione",
"configLocationsDesc": "cmux cerca la configurazione in queste posizioni (in ordine):",
"createConfig": "Crea il file di configurazione se non esiste:",
"appearance": "Aspetto",
"font": "Font",
"colors": "Colori",
"splitPanes": "Pannelli divisi",
"behavior": "Comportamento",
"scrollback": "Cronologia",
"workingDirectory": "Directory di lavoro",
"appSettings": "Impostazioni dell'app",
"appSettingsDesc": "Le impostazioni dell'app sono accessibili tramite cmux > Impostazioni ({shortcut}):",
"themeMode": "Modalità tema",
"themeSystem": "Sistema: segui l'aspetto macOS",
"themeLight": "Chiaro: sempre in modalità chiara",
"themeDark": "Scuro: sempre in modalità scura",
"automationMode": "Modalità automazione",
"automationModeDesc": "Livello di accesso al socket di controllo:",
"automationOff": "Disattivato: nessun accesso al socket (più sicuro)",
"automationCmux": "Solo processi cmux: solo i processi avviati nei terminali cmux possono connettersi",
"automationAll": "allowAll: consenti a qualsiasi processo locale di connettersi (CMUX_SOCKET_MODE=allowAll, solo override tramite variabile d'ambiente)",
"automationCallout": "Su macchine condivise, considera l'uso della modalità \"Disattivato\" o \"Solo processi cmux\".",
"browserLinkBehavior": "Comportamento dei link del browser",
"browserLinkDesc": "In Impostazioni > Browser, cmux espone due liste di host con scopi diversi:",
"browserHostsEmbed": "Host da aprire nel browser integrato: si applica ai link cliccati dall'output del terminale. Gli host in questa lista si aprono in cmux; gli altri host si aprono nel browser predefinito. Supporta un host o wildcard per riga (ad esempio: example.com, *.internal.example).",
"browserHostsHttp": "Host HTTP consentiti nel browser integrato: si applica solo agli URL HTTP (non-HTTPS). Gli host in questa lista possono aprirsi in cmux senza avviso. I valori predefiniti includono localhost, 127.0.0.1, ::1, 0.0.0.0 e *.localtest.me.",
"exampleConfig": "Esempio di configurazione",
"metaTitle": "Configurazione"
},
"keyboardShortcuts": {
"title": "Scorciatoie da tastiera",
"description": "Tutte le scorciatoie da tastiera disponibili in cmux, raggruppate per categoria.",
"metaDescription": "Tutte le scorciatoie da tastiera cmux per workspace, superfici, pannelli divisi, browser, notifiche, ricerca e gestione delle finestre su macOS.",
"searchPlaceholder": "Cerca scorciatoie...",
"searchLabel": "Cerca scorciatoie da tastiera",
"noResults": "Nessuna scorciatoia trovata",
"noResultsHint": "Prova un termine di ricerca diverso",
"cat": {
"workspaces": "Workspace",
"workspacesBlurb": "I workspace si trovano nella barra laterale. Ogni workspace ha i propri pannelli e superfici.",
"surfaces": "Superfici",
"surfacesBlurb": "Le superfici sono tab all'interno di un pannello.",
"splitPanes": "Pannelli divisi",
"browser": "Browser",
"notifications": "Notifiche",
"find": "Ricerca",
"terminal": "Terminale",
"window": "Finestra"
},
"sc": {
"ws-new": "Nuovo workspace",
"ws-jump-1-8": "Vai al workspace 18",
"ws-jump-last": "Vai all'ultimo workspace",
"ws-close": "Chiudi workspace",
"ws-rename": "Rinomina workspace",
"sf-new": "Nuova superficie",
"sf-prev-1": "Superficie precedente",
"sf-prev-2": "Superficie precedente",
"sf-jump-1-8": "Vai alla superficie 18",
"sf-jump-last": "Vai all'ultima superficie",
"sf-close": "Chiudi superficie",
"sp-right": "Dividi a destra",
"sp-down": "Dividi in basso",
"sp-focus": "Focalizza pannello per direzione",
"sp-browser-right": "Dividi browser a destra",
"sp-browser-down": "Dividi browser in basso",
"br-open": "Apri superficie browser",
"br-addr": "Focalizza barra degli indirizzi",
"br-forward": "Avanti",
"br-reload": "Ricarica pagina",
"br-devtools": "Apri strumenti di sviluppo",
"nt-panel": "Mostra pannello notifiche",
"nt-latest": "Vai alla più recente non letta",
"nt-flash": "Attiva flash",
"fd-find": "Trova",
"fd-next-prev": "Risultato successivo / precedente",
"fd-hide": "Nascondi barra di ricerca",
"fd-selection": "Usa selezione per la ricerca",
"tm-clear": "Cancella cronologia",
"tm-copy": "Copia (con selezione)",
"tm-paste": "Incolla",
"tm-font": "Aumenta / diminuisci dimensione font",
"tm-reset": "Ripristina dimensione font",
"wn-new": "Nuova finestra",
"wn-settings": "Impostazioni",
"wn-reload": "Ricarica configurazione",
"wn-quit": "Esci"
},
"metaTitle": "Scorciatoie da tastiera"
},
"api": {
"title": "Riferimento API",
"metaDescription": "Riferimento API CLI e socket Unix di cmux. Gestione workspace, pannelli divisi, controllo input, notifiche, metadati della barra laterale, variabili d'ambiente e metodi di rilevamento.",
"intro": "cmux fornisce sia uno strumento CLI che un socket Unix per il controllo programmatico. Ogni comando è disponibile tramite entrambe le interfacce.",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "Percorso",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Build debug con tag",
"socketOverride": "Sovrascrivi con la variabile d'ambiente CMUX_SOCKET_PATH. Invia una richiesta JSON terminata da newline per chiamata:",
"socketCallout": "Le richieste JSON del socket devono usare method e params. I vecchi payload JSON v1 come <legacy>'{'\"command\":\"...\"'}'</legacy> non sono supportati.",
"accessModes": "Modalità di accesso",
"modeHeader": "Modalità",
"descriptionHeader": "Descrizione",
"howToEnableHeader": "Come attivare",
"offMode": "Socket disattivato",
"offEnable": "Interfaccia Impostazioni o CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "Solo i processi avviati nei terminali cmux possono connettersi.",
"cmuxOnlyEnable": "Modalità predefinita nell'interfaccia Impostazioni",
"allowAllMode": "Consenti a qualsiasi processo locale di connettersi (nessun controllo di discendenza).",
"allowAllEnable": "Solo override tramite variabile d'ambiente: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "Su macchine condivise, usa Disattivato o Solo processi cmux.",
"cliOptions": "Opzioni del CLI",
"flagHeader": "Flag",
"customSocketPath": "Percorso socket personalizzato",
"outputJson": "Output in formato JSON",
"targetWindow": "Specifica una finestra",
"targetWorkspace": "Specifica un workspace",
"targetSurface": "Specifica una superficie",
"idFormat": "Formato dell'identificatore di controllo nell'output JSON",
"workspaceCommands": "Comandi workspace",
"listWorkspacesDesc": "Elenca tutti i workspace aperti.",
"newWorkspaceDesc": "Crea un nuovo workspace.",
"selectWorkspaceDesc": "Passa a un workspace specifico.",
"currentWorkspaceDesc": "Ottieni il workspace attualmente attivo.",
"closeWorkspaceDesc": "Chiudi un workspace.",
"splitCommands": "Comandi di divisione",
"newSplitDesc": "Crea un nuovo pannello diviso. Direzioni: left, right, up, down.",
"listSurfacesDesc": "Elenca tutte le superfici nel workspace attuale.",
"focusSurfaceDesc": "Metti a fuoco una superficie specifica.",
"inputCommands": "Comandi di input",
"sendDesc": "Invia testo al terminale attivo.",
"sendKeyDesc": "Invia la pressione di un tasto. Tasti: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "Invia testo a una superficie specifica.",
"sendKeySurfaceDesc": "Invia la pressione di un tasto a una superficie specifica.",
"notificationCommands": "Comandi di notifica",
"notifyDesc": "Invia una notifica.",
"listNotificationsDesc": "Elenca tutte le notifiche.",
"clearNotificationsDesc": "Cancella tutte le notifiche.",
"sidebarMetadata": "Comandi metadati della barra laterale",
"sidebarMetadataDesc": "Imposta pillole di stato, barre di avanzamento e voci di log nella barra laterale per qualsiasi workspace. Utile per script di build, integrazioni CI e agenti di codice IA che vogliono mostrare lo stato a colpo d'occhio.",
"setStatusDesc": "Imposta una pillola di stato nella barra laterale. Usa una chiave univoca così diversi strumenti possono gestire le proprie voci.",
"clearStatusDesc": "Rimuovi una voce di stato dalla barra laterale per chiave.",
"listStatusDesc": "Elenca tutte le voci di stato della barra laterale per un workspace.",
"setProgressDesc": "Imposta una barra di avanzamento nella barra laterale (0.0 a 1.0).",
"clearProgressDesc": "Cancella la barra di avanzamento della barra laterale.",
"logDesc": "Aggiungi una voce di log alla barra laterale. Livelli: info, progress, success, warning, error.",
"clearLogDesc": "Cancella tutte le voci di log della barra laterale.",
"listLogDesc": "Elenca le voci di log della barra laterale.",
"sidebarStateDesc": "Mostra tutti i metadati della barra laterale (cwd, branch git, porte, stato, avanzamento, log).",
"utilityCommands": "Comandi di utilità",
"pingDesc": "Verifica se cmux è in esecuzione e risponde.",
"capabilitiesDesc": "Elenca i metodi socket disponibili e la modalità di accesso attuale.",
"identifyDesc": "Mostra il contesto finestra/workspace/pannello/superficie attivo.",
"envVariables": "Variabili d'ambiente",
"variableHeader": "Variabile",
"socketPathDesc": "Sovrascrivi il percorso del socket usato dal CLI e dalle integrazioni",
"socketEnableDesc": "Forza attivazione/disattivazione del socket (1/0, true/false, on/off)",
"socketModeDesc": "Sovrascrivi la modalità di accesso (cmuxOnly, allowAll, off). Accetta anche cmux-only/cmux_only e allow-all/allow_all",
"workspaceIdDesc": "Auto-impostato: ID del workspace attuale",
"surfaceIdDesc": "Auto-impostato: ID della superficie attuale",
"termProgramDesc": "Impostato a ghostty",
"termDesc": "Impostato a xterm-ghostty",
"envCallout": "I vecchi valori CMUX_SOCKET_MODE full e notifications sono ancora accettati per compatibilità.",
"detectingCmux": "Rilevare cmux",
"examples": "Esempi",
"pythonClient": "Client Python",
"shellScript": "Script shell",
"buildScriptNotification": "Script di build con notifica",
"metaTitle": "Riferimento API"
},
"notifications": {
"title": "Notifiche",
"metaDescription": "Invia notifiche desktop da agenti IA e script in cmux. CLI, sequenze di escape OSC 99/777 e integrazione degli hook di Claude Code.",
"intro": "cmux supporta le notifiche desktop, permettendo agli agenti IA e agli script di avvisarti quando hanno bisogno di attenzione.",
"lifecycle": "Ciclo di vita",
"received": "Ricevuta: la notifica appare nel pannello, l'avviso desktop si attiva (se non soppresso)",
"unread": "Non letta: badge mostrato sul tab del workspace",
"read": "Letta: cancellata quando visualizzi quel workspace",
"cleared": "Cancellata: rimossa dal pannello",
"suppression": "Soppressione",
"suppressionDesc": "Gli avvisi desktop vengono soppressi quando:",
"suppressItem1": "La finestra cmux è attiva",
"suppressItem2": "Il workspace specifico che invia la notifica è attivo",
"suppressItem3": "Il pannello notifiche è aperto",
"notificationPanel": "Pannello notifiche",
"notificationPanelDesc": "Premi <openShortcut>⌘⇧I</openShortcut> per aprire il pannello notifiche. Clicca su una notifica per andare a quel workspace. Premi <jumpShortcut>⌘⇧U</jumpShortcut> per andare direttamente al workspace con la notifica non letta più recente.",
"customCommand": "Comando personalizzato",
"customCommandDesc": "Esegui un comando shell ogni volta che una notifica è pianificata. Impostalo in Impostazioni > App > Comando di notifica. Il comando viene eseguito tramite /bin/sh -c con queste variabili d'ambiente:",
"customCommandNote": "Il comando viene eseguito indipendentemente dal selettore di suoni di sistema. Imposta il selettore su \"Nessuno\" per usare solo il comando personalizzato, o mantieni entrambi per un suono di sistema più un'azione personalizzata.",
"sending": "Invio di notifiche",
"cli": "CLI",
"osc777Title": "OSC 777 (semplice)",
"osc777Desc": "Il protocollo RXVT usa un formato fisso con titolo e corpo:",
"osc99Title": "OSC 99 (ricco)",
"osc99Desc": "Il protocollo Kitty supporta sottotitoli e ID di notifica:",
"variableHeader": "Variabile",
"descriptionHeader": "Descrizione",
"envTitle": "Titolo della notifica (nome del workspace o dell'app)",
"envSubtitle": "Sottotitolo della notifica",
"envBody": "Testo del corpo della notifica",
"cmpTitleBody": "Titolo + corpo",
"cmpSubtitle": "Sottotitolo",
"cmpNotificationId": "ID notifica",
"cmpComplexity": "Complessità",
"cmpYes": "Sì",
"cmpNo": "No",
"cmpHigher": "Maggiore",
"cmpLower": "Minore",
"featureHeader": "Funzionalità",
"comparisonCallout": "Usa OSC 777 per notifiche semplici. Usa OSC 99 quando hai bisogno di sottotitoli o ID di notifica. Usa il CLI (cmux notify) per l'integrazione più semplice.",
"claudeCodeHooks": "Hook di Claude Code",
"claudeCodeHooksDesc": "cmux si integra con <link>Claude Code</link> tramite hook per notificarti quando le attività sono completate.",
"createHookScript": "1. Crea lo script hook",
"configureClaude": "2. Configura Claude Code",
"restartNote": "Riavvia Claude Code per applicare gli hook.",
"integrationExamples": "Esempi di integrazione",
"notifyAfterLong": "Notifica dopo un comando lungo",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "Passthrough tmux",
"tmuxDesc": "Se usi tmux all'interno di cmux, abilita il passthrough:",
"metaTitle": "Notifiche"
},
"browserAutomation": {
"title": "Automazione del browser",
"metaDescription": "Riferimento comandi browser cmux per navigazione, interazione DOM, attesa, ispezione, valutazione JavaScript, tab, dialoghi, frame, download e stato del browser.",
"intro": "Il gruppo di comandi cmux browser fornisce l'automazione del browser per le superfici browser di cmux. Usalo per navigare, interagire con gli elementi DOM, ispezionare lo stato della pagina, valutare JavaScript e gestire i dati di sessione del browser.",
"commandIndex": "Indice dei comandi",
"categoryHeader": "Categoria",
"subcommandsHeader": "Sottocomandi",
"navAndTargeting": "Navigazione e targeting",
"waiting": "Attesa",
"domInteraction": "Interazione DOM",
"inspection": "Ispezione",
"jsAndInjection": "JavaScript e injection",
"framesDialogsDownloads": "Frame, dialoghi, download",
"stateAndSession": "Stato e dati di sessione",
"tabsAndLogs": "Tab e log",
"targetingSurface": "Targeting di una superficie browser",
"targetingDesc": "La maggior parte dei sottocomandi richiede una superficie target. Puoi passarla posizionalmente o con --surface.",
"navigation": "Navigazione",
"waitingSection": "Attesa",
"waitingDesc": "Usa wait per bloccare fino a quando selettori, testo, frammenti URL, stato di caricamento o una condizione JavaScript sono soddisfatti.",
"domSection": "Interazione DOM",
"domDesc": "Le azioni di mutazione supportano --snapshot-after per una verifica rapida negli script.",
"inspectionSection": "Ispezione",
"inspectionDesc": "Usa i getter strutturati per gli script e snapshot/screenshot per la revisione umana.",
"jsSection": "Valutazione e injection JavaScript",
"stateSection": "Stato",
"stateDesc": "I comandi dei dati di sessione coprono cookie, storage locale/di sessione e snapshot completi dello stato del browser.",
"tabsSection": "Tab",
"tabsDesc": "Le operazioni sui tab del browser corrispondono alle superfici browser nel gruppo tab browser attivo.",
"consoleSection": "Console ed errori",
"dialogsSection": "Dialoghi",
"framesSection": "Frame",
"downloadsSection": "Download",
"commonPatterns": "Pattern comuni",
"patternNavigate": "Naviga, attendi, ispeziona",
"patternForm": "Compila un form e verifica il testo di successo",
"patternDebug": "Cattura artefatti di debug in caso di errore",
"patternSession": "Persisti e ripristina la sessione del browser",
"metaTitle": "Automazione del browser"
},
"changelog": {
"title": "Changelog",
"metaDescription": "Note di rilascio e cronologia delle versioni di cmux. Nuove funzionalità, correzioni di bug e modifiche per il terminale macOS nativo.",
"metaTitle": "Registro modifiche"
},
"navItems": {
"gettingStarted": "Per iniziare",
"concepts": "Concetti",
"configuration": "Configurazione",
"keyboardShortcuts": "Scorciatoie da tastiera",
"apiReference": "Riferimento API",
"browserAutomation": "Automazione del browser",
"notifications": "Notifiche",
"changelog": "Changelog"
}
},
"legal": {
"privacyPolicy": "Informativa sulla privacy",
"termsOfService": "Termini di servizio",
"eula": "EULA"
},
"wallOfLove": {
"title": "Wall of Love",
"description": "Cosa dicono le persone di cmux."
},
"testimonials": {
"mitchellh": "Un altro giorno, un altro progetto basato su libghostty, questa volta un terminale macOS con tab verticali, migliore organizzazione/notifiche, browser integrato/scriptabile specificamente pensato per chi usa un sacco di workflow agentici da terminale.",
"schrockn": "Questo è esattamente il prodotto che stavo cercando. Dopo due ore stamattina me ne sono innamorato.",
"egrefen": "L'ho usato tutto il weekend ed è fantastico.",
"max4c": "questo è stato il mio strumento preferito nelle ultime due settimane",
"asaza": "cmux è così bello che potrebbe essere finalmente il momento di dire addio a VSCode",
"johnthedebs": "Hey, sembra davvero fantastico. Adoro le idee qui, in particolare: la programmabilità, l'interfaccia a livelli, il browser con API. Non vedo l'ora di provarlo. Voglio anche aggiungere che apprezzo molto Mitchell Hashimoto per aver creato libghostty; sembra un momento entusiasmante per essere un utente di terminale.",
"joeriddles": "Tab verticali nel mio terminale! Non ci avevo mai pensato prima. Uso e adoro i tab verticali di Firefox.",
"dchu17": "L'ho provato ed è stato abbastanza intuitivo. Bel lavoro!",
"afruth": "Mi piace, l'ho usato nell'ultimo giorno su tre progetti paralleli, ciascuno con diversi worktree. Averlo insieme a lazygit e yazi / nvim mi ha reso un po' più produttivo del solito senza dover rincorrere più istanze di ghostty / iTerm. Inoltre sembra più naturale di tmux.",
"northprint": "Ho provato cmux perché sembrava buono, ed è buono",
"indykish": "cmux è piuttosto buono.",
"kataring": "Sono passato a cmux.dev",
"scottw": "È stata una scoperta così utile. Non lo consiglio mai abbastanza.",
"johnblythe": "l'ho preso nel weekend e mi è piaciuto. aspettavo qualcosa del genere.",
"bchris91": "Questo è esattamente quello che volevo. Lavoro fantastico, grazie!",
"connorelsea": "Lo uso da una settimana ed è fantastico. Un tab verticale per ogni task in corso. Dentro, Claude da un lato e il browser con PR e risorse dall'altro, passo tra i task e resto organizzato. Combinalo con le skill per far monitorare la CI a Claude ricorsivamente, ecc. mi sento illuminato onestamente",
"tonkotsuboy": "A inizio anno sono passato da Warp a Ghostty, ma ora sono passato a cmux. I tab verticali sono comodi e apprezzo le notifiche quando i task di Claude Code finiscono. È basato su Ghostty quindi le prestazioni fulminee restano. Anche la visualizzazione del branch e i completamenti che avevo impostato su Ghostty funzionano ancora."
},
"languageSwitcher": {
"label": "Lingua"
}
}

587
web/messages/ja.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — マルチタスクのために作られたターミナル",
"description": "Ghosttyベースのネイティブ macOS ターミナル。Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider、あらゆるCLIツールに対応。垂直タブ、通知リング、分割ペイン、ソケットAPI搭載。",
"ogDescription": "AIコーディングエージェント向けネイティブ macOS ターミナル。Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider、あらゆるCLIツールに対応。"
},
"common": {
"downloadForMac": "Mac版をダウンロード",
"viewOnGitHub": "GitHubで見る",
"closeMenu": "メニューを閉じる",
"openMenu": "メニューを開く",
"toggleTheme": "テーマを切り替え",
"backToBlog": "ブログに戻る",
"readTheDocs": "ドキュメントを読む",
"viewChangelog": "変更履歴を見る"
},
"nav": {
"docs": "ドキュメント",
"blog": "ブログ",
"changelog": "変更履歴",
"community": "コミュニティ",
"github": "GitHub"
},
"footer": {
"product": "プロダクト",
"resources": "リソース",
"legal": "法的事項",
"social": "ソーシャル",
"blog": "ブログ",
"community": "コミュニティ",
"docs": "ドキュメント",
"changelog": "変更履歴",
"privacy": "プライバシー",
"terms": "利用規約",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "お問い合わせ",
"copyright": "© {year} Manaflow",
"language": "言語"
},
"home": {
"taglinePrefix": "次のために作られたターミナル:",
"typingCodingAgents": "コーディングエージェント",
"typingMultitasking": "マルチタスク",
"subtitle": "GhosttyベースのネイティブmacOSアプリ。縦タブ、エージェントが注意を必要とするときの通知リング、分割ペイン、自動化用のsocket APIを搭載。",
"features": "機能",
"faq": "FAQ",
"communitySection": "コミュニティ",
"feature": {
"verticalTabs": "縦タブ",
"verticalTabsDesc": "サイドバーにgitブランチ、作業ディレクトリ、ポート、通知テキストを表示",
"notificationRings": "通知リング",
"notificationRingsDesc": ":エージェントが注意を必要とするとペインが点灯",
"inAppBrowser": "アプリ内ブラウザ",
"inAppBrowserDesc": "スクリプタブルなAPIでターミナルの横にブラウザを分割表示",
"splitPanes": "分割ペイン",
"splitPanesDesc": ":各タブ内で水平・垂直に分割",
"scriptable": "スクリプタブル",
"scriptableDesc": "CLIとsocket APIで自動化とスクリプティングが可能",
"gpuAccelerated": "GPU高速化",
"gpuAcceleratedDesc": "libghosttyによるスムーズなレンダリング",
"lightweight": "軽量",
"lightweightDesc": "ネイティブSwift + AppKit、Electronではない",
"keyboardShortcuts": "キーボードショートカット",
"keyboardShortcutsDesc": ":ワークスペース、分割、ブラウザなどの<link>豊富なショートカット</link>"
},
"faqGhosttyQ": "cmuxとGhosttyの関係は",
"faqGhosttyA": "cmuxはGhosttyのフォークではありません。アプリがWebKitをWebビューに使うのと同様に、ターミナルレンダリングのライブラリとして<link>libghostty</link>を使用しています。Ghosttyはスタンドアロンのターミナルで、cmuxはそのレンダリングエンジンの上に構築された別のアプリです。",
"faqPlatformQ": "対応プラットフォームは?",
"faqPlatformA": "現在はmacOSのみです。cmuxはネイティブSwift + AppKitアプリです。",
"faqAgentsQ": "cmuxはどのコーディングエージェントに対応していますか",
"faqAgentsA": "すべてに対応しています。cmuxはターミナルなので、ターミナルで動作するすべてのエージェントがそのまま使えますClaude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider、Goose、Amp、Cline、Cursor Agent、その他コマンドラインから起動できるすべてのツール。",
"faqNotificationsQ": "通知はどのように機能しますか?",
"faqNotificationsA": "プロセスが注意を必要とするとき、cmuxはペインに通知リング、サイドバーに未読バッジ、通知ポップオーバー、macOSデスクトップ通知を表示します。これらは標準的なターミナルエスケープシーケンスOSC 9/99/777で自動的に発火するほか、<cliLink>cmux CLI</cliLink>や<hooksLink>Claude Codeフック</hooksLink>で手動トリガーも可能です。",
"faqShortcutsQ": "キーボードショートカットはカスタマイズできますか?",
"faqShortcutsA": "ターミナルのキーバインドはGhosttyの設定ファイル<configPath>~/.config/ghostty/config</configPath>から読み込まれます。cmux固有のショートカットワークスペース、分割、ブラウザ、通知は設定画面でカスタマイズできます。全一覧は<link>デフォルトショートカット</link>をご覧ください。",
"faqTmuxQ": "tmuxとの違いは",
"faqTmuxA": "tmuxはどのターミナル内でも動作するターミナルマルチプレクサです。cmuxはGUI付きのネイティブmacOSアプリで、縦タブ、分割ペイン、組み込みブラウザ、socket APIがすべて内蔵されています。設定ファイルやプレフィックスキーは不要です。",
"faqFreeQ": "cmuxは無料ですか",
"faqFreeA": "はい、cmuxは無料で使えます。ソースコードは<link>GitHub</link>で公開されています。"
},
"community": {
"title": "コミュニティ",
"description": "cmuxのユーザーや開発チームとつながりましょう。",
"discord": "Discord",
"discordAction": "Discordに参加",
"discordDesc": "コミュニティとチャット、ヘルプの取得、フィードバックの共有",
"githubAction": "GitHubで見る",
"githubDesc": "リポジトリにスター、Issue報告、コントリビューション",
"twitter": "Twitter",
"twitterAction": "Xでフォロー",
"twitterDesc": "アップデート、お知らせ、Tips",
"youtube": "YouTube",
"youtubeAction": "チャンネル登録",
"youtubeDesc": "デモ、チュートリアル、ウォークスルー",
"linkedin": "LinkedIn",
"linkedinAction": "フォローする",
"linkedinDesc": "企業ニュースとエンジニアリングの最新情報",
"metaTitle": "コミュニティ — cmux",
"metaDescription": "Discord、Twitter、GitHubなどでcmuxコミュニティに参加"
},
"blog": {
"title": "ブログ",
"layoutTitle": "cmux blog",
"metaTitle": "ブログ",
"metaDescription": "cmuxチームからのニュースとアップデート",
"description": "cmuxチームからのニュースとアップデート",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Cmd+Shift+Uがcmuxのワークスペース間で完了したエージェントにどうナビゲートするか。",
"date": "2026年3月4日",
"p1": "cmuxで一番気に入っている機能はCmd+Shift+Uです。今、17個のワークスペースを開いていて、それぞれでエージェントを実行しています。以前はタブや通知パネルをクリックして何が完了したか確認していました。キーボードのほうが速いです。",
"p2": "Cmd+Shift+Uは最新の未読<link>通知</link>にジャンプします。実際にはそれは最後に完了したエージェントを意味します。適切なワークスペースに切り替え、該当ペインにフォーカスし、点滅させて視線を誘導し、既読にします。通知が別のウィンドウからのものなら、そのウィンドウが前面に出ます。"
},
"zenOfCmux": {
"title": "The Zen of cmux",
"summary": "cmuxはソリューションではなくプリミティブです。コンポーザブルな部品を提供し、ワークフローはあなた次第です。",
"date": "2026年2月27日",
"p1": "cmuxは開発者のツールの使い方を規定しません。ターミナルとブラウザにCLIがあり、あとはあなた次第です。",
"p2": "cmuxはソリューションではなくプリミティブです。ターミナル、ブラウザ、通知、ワークスペース、分割、タブ、そしてそのすべてを制御するCLIを提供します。cmuxはコーディングエージェントの使い方を強制しません。プリミティブで何を構築するかはあなた次第です。",
"p3": "優れた開発者は常に自分のツールを構築してきました。エージェントとの最適な作業方法はまだ誰も見つけていませんし、クローズドな製品を作っているチームも見つけていません。自分のコードベースに最も近い開発者が最初に見つけるでしょう。",
"p4": "100万人の開発者にコンポーザブルなプリミティブを与えれば、どんなプロダクトチームがトップダウンで設計するよりも速く、最も効率的なワークフローを集合的に見つけ出すでしょう。"
},
"showHnLaunch": {
"title": "Show HNでcmuxをローンチ",
"summary": "cmuxはHacker Newsで2位に到達し、Mitchell Hashimotoにシェアされ、日本でバイラルになりました。",
"date": "2026年2月21日",
"intro": "2月19日に<link>Show HN</link>にcmuxを投稿しました",
"blockquote1": "Claude CodeとCodexのセッションを多数並列で実行しています。Ghosttyで大量の分割ペインを使い、エージェントが私を必要としているときを知るためにmacOSのネイティブ通知に頼っていました。しかし、Claude Codeの通知本文はいつも「Claude is waiting for your input」というコンテキストのないものばかりで、タブを十分に開くとタイトルすら読めなくなっていました。",
"blockquote2": "いくつかのコーディングオーケストレーターを試しましたが、そのほとんどがElectron/Tauriアプリで、パフォーマンスが気になりました。また、GUIオーケストレーターはそのワークフローに縛られるため、単純にターミナルのほうが好みです。そこで、cmuxをSwift/AppKitのネイティブmacOSアプリとして構築しました。ターミナルレンダリングにはlibghosttyを使用し、テーマ、フォント、カラーなどは既存のGhostty設定を読み込みます。",
"blockquote3": "主な追加機能はサイドバーと通知システムです。サイドバーには、各ワークスペースのgitブランチ、作業ディレクトリ、リッスン中のポート、最新の通知テキストを表示する縦タブがあります。通知システムはターミナルシーケンスOSC 9/99/777を検出し、Claude CodeやOpenCodeなどのエージェントフックに接続できるCLIcmux notifyを備えています。エージェントが待機中のとき、そのペインに青いリングが表示され、サイドバーのタブが点灯するので、分割やタブをまたいでどれが私を必要としているかがわかります。Cmd+Shift+Uで最新の未読にジャンプします。",
"blockquote4": "アプリ内ブラウザにはスクリプタブルなAPIがあります。エージェントはアクセシビリティツリーのスナップショットを取得し、要素参照を取得し、クリック、フォーム入力、JS実行、コンソールログの読み取りが可能です。ターミナルの横にブラウザペインを分割し、Claude Codeに開発サーバーと直接やり取りさせることができます。",
"blockquote5": "すべてがCLIとsocket APIを通じてスクリプタブルですワークスペース/タブの作成、ペインの分割、キーストロークの送信、ブラウザでのURL表示。",
"hitNumber2": "ピーク時にはHacker Newsで2位に到達しました。Mitchell Hashimotoがシェアしました",
"favoriteComment": "<link>HNスレッド</link>で一番気に入ったコメント:",
"viralJapan": "意外にも、cmuxは日本でバイラルになりました",
"translation": "翻訳「これは良さそう。Claude Codeのような複数のCLIを並列実行しても迷わないように設計されたGhosttyベースのターミナルアプリ。入力待ちのパネルに青いフレームが付き、独自の通知システムを搭載。」",
"viralChina": "そして中国でも準バイラルに:",
"extensions": "もう一つ嬉しかったのは、cmux CLIの上に拡張機能を構築する人が現れたことです。sashaがpi-cmux拡張機能を作り、モデル情報、トークン使用量、エージェントの状態をサイドバーに表示できるようにしました",
"scriptable": "cmuxのすべてはCLIを通じてスクリプタブルですワークスペースの作成、キーストロークの送信、ブラウザの制御、通知の読み取り。cmuxの哲学の一部はプログラマブルでコンポーザブルであることで、コーディングエージェントとの作業方法を自由にカスタマイズできます。コーディングエージェントの最先端は急速に変化しており、追いつけない柔軟性のないGUIオーケストレーターに縛られたくはないはずです。",
"cta": "複数のコーディングエージェントを実行しているなら、<link>cmuxを試してみてください</link>。"
},
"introducingCmux": {
"title": "cmuxの紹介",
"summary": "GhosttyベースのネイティブmacOSターミナル。複数のAIコーディングエージェントを並行して実行するために設計されています。",
"date": "2026年2月12日",
"p1": "cmuxはGhosttyの上に構築されたネイティブmacOSターミナルアプリケーションで、複数のAIコーディングエージェントを同時に実行する開発者のためにゼロから設計されています。",
"whyTitle": "なぜcmux",
"whyP": "現代の開発ワークフローでは、複数のエージェントを同時に実行することが多くなっています。Claude Code、Codex、その他のツールがそれぞれ独自のターミナルで動作します。どれが注意を必要としているかを把握し、素早く切り替えることがcmuxの解決する課題です。",
"featuresTitle": "主な機能",
"featureVerticalTabsLabel": "縦タブ",
"featureVerticalTabsDesc": "サイドバーですべてのターミナルを一覧",
"featureNotificationsLabel": "通知リング",
"featureNotificationsDesc": "エージェントが入力を必要とするとタブが点灯",
"featureSplitPanesLabel": "分割ペイン",
"featureSplitPanesDesc": "各ワークスペース内で水平・垂直に分割",
"featureSocketApiLabel": "Socket API",
"featureSocketApiDesc": "タブの作成や入力の送信をプログラムで制御",
"featureGpuLabel": "GPU高速化",
"featureGpuDesc": "libghosttyによるスムーズなレンダリング",
"getStartedTitle": "はじめに",
"getStartedP": "Homebrewでインストールするか、<link>はじめにガイド</link>からDMGをダウンロードしてください。"
}
},
"zenOfCmux": {
"metaTitle": "cmuxの禅",
"metaDescription": "cmuxはソリューションではなくプリミティブ。組み合わせ可能なパーツを提供し、ワークフローはあなた次第。"
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "cmuxとの操作方法を変える新しいキーボードショートカット。"
},
"showHnLaunch": {
"metaTitle": "Show HNでcmuxをローンチ",
"metaDescription": "Hacker Newsでcmuxをローンチした話。"
},
"introducingCmux": {
"metaTitle": "cmuxのご紹介",
"metaDescription": "macOS向け新ターミナル、cmuxを作った理由。"
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "はじめに",
"metaDescription": "AIコーディングエージェント向けネイティブmacOSターミナル、cmuxのインストール方法。Homebrew、DMGダウンロード、CLIセットアップ、Sparkle経由の自動更新。",
"intro": "cmuxはGhosttyベースの軽量なネイティブmacOSターミナルで、複数のAIコーディングエージェントを管理するために設計されています。縦タブ、通知パネル、socketベースの制御APIを搭載しています。",
"install": "インストール",
"dmgRecommended": "DMG推奨",
"dmgDesc": ".dmgを開き、cmuxをアプリケーションフォルダにドラッグしてください。cmuxはSparkle経由で自動更新されるため、ダウンロードは一度だけで済みます。",
"homebrew": "Homebrew",
"updateLater": "後で更新する場合:",
"firstLaunchCallout": "初回起動時、macOSが確認済みの開発者からのアプリを開くことの確認を求める場合があります。<strong>開く</strong>をクリックして続行してください。",
"verifyTitle": "インストールの確認",
"verifyDesc": "cmuxを開くと、以下が表示されるはずです",
"verifyItem1": "左側に縦タブサイドバーがあるターミナルウィンドウ",
"verifyItem2": "既に開かれた1つのワークスペース",
"verifyItem3": "入力可能なGhosttyベースのターミナル",
"cliSetup": "CLIセットアップ",
"cliDesc": "cmuxには自動化用のコマンドラインツールが含まれています。cmuxターミナル内では自動的に動作します。cmuxの外部からCLIを使用するには、シンボリックリンクを作成してください",
"cliThen": "これで以下のようなコマンドを実行できます:",
"autoUpdates": "自動更新",
"autoUpdatesDesc": "cmuxはSparkle経由で自動的に更新を確認します。更新が利用可能な場合、タイトルバーに更新ピルが表示されます。メニューバーのcmux > アップデートを確認から手動で確認することもできます。",
"sessionRestore": "セッション復元(現在の動作)",
"sessionRestoreDesc": "再起動後、cmuxはレイアウトとメタデータのみを復元します",
"sessionItem1": "ウィンドウ、ワークスペース、ペインのレイアウト",
"sessionItem2": "作業ディレクトリ",
"sessionItem3": "ターミナルのスクロールバック(ベストエフォート)",
"sessionItem4": "ブラウザのURLとナビゲーション履歴",
"sessionCallout": "cmuxはライブプロセスの状態はまだ復元しません。Claude Code、tmux、vimなどのアクティブなターミナルアプリセッションは、アプリの再起動後に再開されません。",
"requirements": "動作要件",
"reqItem1": "macOS 14.0以降",
"reqItem2": "Apple SiliconまたはIntel Mac",
"metaTitle": "はじめに"
},
"concepts": {
"title": "コンセプト",
"metaDescription": "cmuxのターミナル構成ウィンドウ、ワークスペース、ペイン、サーフェス。サイドバー、分割、socket APIの背後にある階層構造。",
"intro": "cmuxはターミナルを4層の階層構造で管理します。これらのレベルを理解することで、socket API、CLI、キーボードショートカットの使用が容易になります。",
"hierarchy": "階層構造",
"windowTitle": "ウィンドウ",
"windowDesc": "macOSウィンドウです。{shortcut}で複数のウィンドウを開けます。各ウィンドウには独立したワークスペースを持つ独自のサイドバーがあります。",
"workspaceTitle": "ワークスペース",
"workspaceDesc": "サイドバーの項目です。各ワークスペースには1つ以上の分割ペインが含まれます。ワークスペースは左側のサイドバーに一覧表示されます。",
"workspaceNote": "UIやキーボードショートカットでは、ワークスペースはサイドバーのタブのように動作するため「タブ」と呼ばれることがあります。socket APIや環境変数では「ワークスペース」という用語が使われます。",
"contextHeader": "コンテキスト",
"termUsedHeader": "使用される用語",
"sidebarUI": "サイドバーUI",
"tab": "タブ",
"keyboardShortcuts": "キーボードショートカット",
"workspaceOrTab": "ワークスペースまたはタブ",
"socketAPI": "Socket API",
"environmentVariable": "環境変数",
"workspaceShortcuts": "ショートカット:{new}(新規)、{jump}(ジャンプ)、{close}(閉じる)、{prevNext}(前後)",
"paneTitle": "ペイン",
"paneDesc": "ワークスペース内の分割領域です。{right}(右)または{down}(下)で分割して作成します。{nav} + 矢印キーでペイン間を移動します。",
"paneNote": "各ペインは複数のサーフェス(ペイン内のタブ)を持つことができます。",
"surfaceTitle": "サーフェス",
"surfaceDesc": "ペイン内のタブです。各ペインには独自のタブバーがあり、複数のサーフェスを持てます。{new}で作成、{prev} / {next}または{jump}で切り替えます。",
"surfaceNote": "サーフェスは操作対象となる個々のターミナルまたはブラウザセッションです。各サーフェスには独自のCMUX_SURFACE_ID環境変数があります。",
"panelTitle": "パネル",
"panelDesc": "サーフェス内のコンテンツです。現在2種類あります",
"panelTerminal": "ターミナルGhosttyターミナルセッション",
"panelBrowser": "ブラウザ組み込みWebビュー",
"panelNote": "パネルは主に内部的な概念です。socket APIやCLIでは、パネルではなくサーフェスを直接操作します。",
"visualExample": "視覚的な例",
"visualExampleDesc": "この例では:",
"visualItem1": "ウィンドウに3つのワークスペースdev、server、logsがあるサイドバーがあります",
"visualItem2": "ワークスペース「dev」が選択されており、2つのペインが横に並んでいます",
"visualItem3": "ペイン1には2つのサーフェスタブバーの[S1]と[S2]があり、S1がアクティブです",
"visualItem4": "ペイン2には1つのサーフェスがあります",
"visualItem5": "各サーフェスにはパネル(この場合はターミナル)が含まれています",
"summary": "まとめ",
"levelHeader": "レベル",
"whatItIsHeader": "内容",
"createdByHeader": "作成方法",
"identifiedByHeader": "識別方法",
"macosWindow": "macOSウィンドウ",
"sidebarEntry": "サイドバーの項目",
"splitRegion": "分割領域",
"tabWithinPane": "ペイン内のタブ",
"terminalOrBrowser": "ターミナルまたはブラウザ",
"automatic": "自動",
"paneIdSocket": "ペインIDsocket API",
"panelIdInternal": "パネルID内部",
"metaTitle": "コンセプト"
},
"configuration": {
"title": "設定",
"metaDescription": "Ghostty設定ファイルによるcmuxの設定。フォント、テーマ、カラー、分割ペインのスタイル、スクロールバック、自動化モードのアプリ設定。",
"intro": "cmuxはGhosttyの設定ファイルから設定を読み込むため、Ghosttyから移行する場合は馴染みのあるオプションを使えます。",
"configLocations": "設定ファイルの場所",
"configLocationsDesc": "cmuxは以下の場所から設定を検索します順番に",
"createConfig": "設定ファイルが存在しない場合は作成してください:",
"appearance": "外観",
"font": "フォント",
"colors": "カラー",
"splitPanes": "分割ペイン",
"behavior": "動作",
"scrollback": "スクロールバック",
"workingDirectory": "作業ディレクトリ",
"appSettings": "アプリ設定",
"appSettingsDesc": "アプリ内設定はcmux > 設定({shortcut})から利用できます:",
"themeMode": "テーマモード",
"themeSystem": "システムmacOSの外観に追従",
"themeLight": "ライト:常にライトモード",
"themeDark": "ダーク:常にダークモード",
"automationMode": "自動化モード",
"automationModeDesc": "socketアクセスレベルの制御",
"automationOff": "オフsocketを無効化最も安全",
"automationCmux": "cmuxプロセスのみcmuxターミナル内で起動されたプロセスのみ接続を許可",
"automationAll": "allowAllローカルプロセスすべての接続を許可CMUX_SOCKET_MODE=allowAll、環境変数のみで設定",
"automationCallout": "共有マシンでは「オフ」または「cmuxプロセスのみ」モードの使用を検討してください。",
"browserLinkBehavior": "ブラウザリンクの動作",
"browserLinkDesc": "設定 > ブラウザで、cmuxは異なる目的の2つのホストリストを提供します",
"browserHostsEmbed": "組み込みブラウザで開くホストターミナル出力からクリックしたリンクに適用されます。このリストのホストはcmuxで開き、それ以外はデフォルトブラウザで開きます。1行に1つのホストまたはワイルドカードを指定できますexample.com、*.internal.example。",
"browserHostsHttp": "組み込みブラウザで許可するHTTPホストHTTP非HTTPSURLのみに適用されます。このリストのホストは警告プロンプトなしでcmuxで開けます。デフォルトはlocalhost、127.0.0.1、::1、0.0.0.0、*.localtest.meです。",
"exampleConfig": "設定例",
"metaTitle": "設定"
},
"keyboardShortcuts": {
"title": "キーボードショートカット",
"description": "cmuxで使用可能なすべてのキーボードショートカットカテゴリ別。",
"metaDescription": "cmuxのmacOS向けキーボードショートカット一覧。ワークスペース、サーフェス、分割ペイン、ブラウザ、通知、検索、ウィンドウ管理。",
"searchPlaceholder": "ショートカットを検索...",
"searchLabel": "キーボードショートカットを検索",
"noResults": "ショートカットが見つかりません",
"noResultsHint": "別の検索ワードをお試しください",
"cat": {
"workspaces": "ワークスペース",
"workspacesBlurb": "ワークスペースはサイドバーに表示されます。各ワークスペースには独自のペインとサーフェスがあります。",
"surfaces": "サーフェス",
"surfacesBlurb": "サーフェスはペイン内のタブです。",
"splitPanes": "分割ペイン",
"browser": "ブラウザ",
"notifications": "通知",
"find": "検索",
"terminal": "ターミナル",
"window": "ウィンドウ"
},
"sc": {
"ws-new": "新規ワークスペース",
"ws-jump-1-8": "ワークスペース1〜8にジャンプ",
"ws-jump-last": "最後のワークスペースにジャンプ",
"ws-close": "ワークスペースを閉じる",
"ws-rename": "ワークスペースの名前を変更",
"sf-new": "新規サーフェス",
"sf-prev-1": "前のサーフェス",
"sf-prev-2": "前のサーフェス",
"sf-jump-1-8": "サーフェス1〜8にジャンプ",
"sf-jump-last": "最後のサーフェスにジャンプ",
"sf-close": "サーフェスを閉じる",
"sp-right": "右に分割",
"sp-down": "下に分割",
"sp-focus": "方向指定でペインにフォーカス",
"sp-browser-right": "右にブラウザを分割",
"sp-browser-down": "下にブラウザを分割",
"br-open": "ブラウザサーフェスを開く",
"br-addr": "アドレスバーにフォーカス",
"br-forward": "進む",
"br-reload": "ページを再読み込み",
"br-devtools": "デベロッパーツールを開く",
"nt-panel": "通知パネルを表示",
"nt-latest": "最新の未読にジャンプ",
"nt-flash": "フラッシュをトリガー",
"fd-find": "検索",
"fd-next-prev": "次を検索 / 前を検索",
"fd-hide": "検索バーを非表示",
"fd-selection": "選択範囲で検索",
"tm-clear": "スクロールバックをクリア",
"tm-copy": "コピー(選択範囲あり)",
"tm-paste": "ペースト",
"tm-font": "フォントサイズを拡大 / 縮小",
"tm-reset": "フォントサイズをリセット",
"wn-new": "新規ウィンドウ",
"wn-settings": "設定",
"wn-reload": "設定を再読み込み",
"wn-quit": "終了"
},
"metaTitle": "キーボードショートカット"
},
"api": {
"title": "APIリファレンス",
"metaDescription": "cmux CLIおよびUnix socket APIリファレンス。ワークスペース管理、分割ペイン、入力制御、通知、サイドバーメタデータ、環境変数、検出方法。",
"intro": "cmuxはCLIツールとUnix socketの両方をプログラム制御に提供します。すべてのコマンドは両方のインターフェースから利用可能です。",
"socket": "Socket",
"buildHeader": "ビルド",
"pathHeader": "パス",
"release": "リリース",
"debug": "デバッグ",
"taggedDebug": "タグ付きデバッグビルド",
"socketOverride": "CMUX_SOCKET_PATH環境変数で上書きできます。呼び出しごとに1つの改行区切りJSONリクエストを送信します",
"socketCallout": "JSON socketリクエストにはmethodとparamsを使用する必要があります。<legacy>'{'\"command\":\"...\"'}'</legacy>などのレガシーv1 JSONペイロードはサポートされていません。",
"accessModes": "アクセスモード",
"modeHeader": "モード",
"descriptionHeader": "説明",
"howToEnableHeader": "有効化方法",
"offMode": "Socketを無効化",
"offEnable": "設定UIまたはCMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "cmuxターミナル内で起動されたプロセスのみ接続可能。",
"cmuxOnlyEnable": "設定UIのデフォルトモード",
"allowAllMode": "ローカルプロセスすべての接続を許可(祖先チェックなし)。",
"allowAllEnable": "環境変数のみで設定CMUX_SOCKET_MODE=allowAll",
"accessCallout": "共有マシンではオフまたはcmuxプロセスのみを使用してください。",
"cliOptions": "CLIオプション",
"flagHeader": "フラグ",
"customSocketPath": "カスタムsocketパス",
"outputJson": "JSON形式で出力",
"targetWindow": "特定のウィンドウを対象にする",
"targetWorkspace": "特定のワークスペースを対象にする",
"targetSurface": "特定のサーフェスを対象にする",
"idFormat": "JSON出力での識別子フォーマットを制御",
"workspaceCommands": "ワークスペースコマンド",
"listWorkspacesDesc": "すべてのワークスペースを一覧表示。",
"newWorkspaceDesc": "新しいワークスペースを作成。",
"selectWorkspaceDesc": "特定のワークスペースに切り替え。",
"currentWorkspaceDesc": "現在アクティブなワークスペースを取得。",
"closeWorkspaceDesc": "ワークスペースを閉じる。",
"splitCommands": "分割コマンド",
"newSplitDesc": "新しい分割ペインを作成。方向left、right、up、down。",
"listSurfacesDesc": "現在のワークスペースのすべてのサーフェスを一覧表示。",
"focusSurfaceDesc": "特定のサーフェスにフォーカス。",
"inputCommands": "入力コマンド",
"sendDesc": "フォーカス中のターミナルにテキスト入力を送信。",
"sendKeyDesc": "キー入力を送信。キーenter、tab、escape、backspace、delete、up、down、left、right。",
"sendSurfaceDesc": "特定のサーフェスにテキストを送信。",
"sendKeySurfaceDesc": "特定のサーフェスにキー入力を送信。",
"notificationCommands": "通知コマンド",
"notifyDesc": "通知を送信。",
"listNotificationsDesc": "すべての通知を一覧表示。",
"clearNotificationsDesc": "すべての通知をクリア。",
"sidebarMetadata": "サイドバーメタデータコマンド",
"sidebarMetadataDesc": "任意のワークスペースのサイドバーにステータスピル、プログレスバー、ログエントリを設定します。ビルドスクリプト、CI連携、状態を一目で確認したいAIコーディングエージェントに便利です。",
"setStatusDesc": "サイドバーのステータスピルを設定。ツールごとに独自のエントリを管理できるよう、一意のキーを使用してください。",
"clearStatusDesc": "キーを指定してサイドバーのステータスエントリを削除。",
"listStatusDesc": "ワークスペースのすべてのサイドバーステータスエントリを一覧表示。",
"setProgressDesc": "サイドバーにプログレスバーを設定0.0〜1.0)。",
"clearProgressDesc": "サイドバーのプログレスバーをクリア。",
"logDesc": "サイドバーにログエントリを追加。レベルinfo、progress、success、warning、error。",
"clearLogDesc": "すべてのサイドバーログエントリをクリア。",
"listLogDesc": "サイドバーのログエントリを一覧表示。",
"sidebarStateDesc": "すべてのサイドバーメタデータをダンプcwd、gitブランチ、ポート、ステータス、プログレス、ログ。",
"utilityCommands": "ユーティリティコマンド",
"pingDesc": "cmuxが実行中で応答可能か確認。",
"capabilitiesDesc": "利用可能なsocketメソッドと現在のアクセスモードを一覧表示。",
"identifyDesc": "フォーカス中のウィンドウ/ワークスペース/ペイン/サーフェスのコンテキストを表示。",
"envVariables": "環境変数",
"variableHeader": "変数",
"socketPathDesc": "CLIや連携ツールが使用するsocketパスを上書き",
"socketEnableDesc": "socketを強制的に有効/無効化1/0、true/false、on/off",
"socketModeDesc": "アクセスモードを上書きcmuxOnly、allowAll、off。cmux-only/cmux_onlyやallow-all/allow_allも使用可能",
"workspaceIdDesc": "自動設定現在のワークスペースID",
"surfaceIdDesc": "自動設定現在のサーフェスID",
"termProgramDesc": "ghosttyに設定",
"termDesc": "xterm-ghosttyに設定",
"envCallout": "レガシーのCMUX_SOCKET_MODE値fullとnotificationsは互換性のため引き続き使用可能です。",
"detectingCmux": "cmuxの検出",
"examples": "使用例",
"pythonClient": "Pythonクライアント",
"shellScript": "シェルスクリプト",
"buildScriptNotification": "通知付きビルドスクリプト",
"metaTitle": "APIリファレンス"
},
"notifications": {
"title": "通知",
"metaDescription": "cmuxでAIエージェントやスクリプトからデスクトップ通知を送信。CLI、OSC 99/777エスケープシーケンス、Claude Codeフック連携。",
"intro": "cmuxはデスクトップ通知をサポートしており、AIエージェントやスクリプトが注意を必要とするときに通知できます。",
"lifecycle": "ライフサイクル",
"received": "受信:通知がパネルに表示され、デスクトップアラートが発火(抑制されていない場合)",
"unread": "未読:ワークスペースタブにバッジを表示",
"read": "既読:そのワークスペースを表示するとクリア",
"cleared": "クリア済み:パネルから削除",
"suppression": "抑制",
"suppressionDesc": "デスクトップアラートは以下の場合に抑制されます:",
"suppressItem1": "cmuxウィンドウにフォーカスがある",
"suppressItem2": "通知を送信した特定のワークスペースがアクティブ",
"suppressItem3": "通知パネルが開いている",
"notificationPanel": "通知パネル",
"notificationPanelDesc": "<openShortcut>⌘⇧I</openShortcut>を押して通知パネルを開きます。通知をクリックするとそのワークスペースにジャンプします。<jumpShortcut>⌘⇧U</jumpShortcut>を押すと、最新の未読通知があるワークスペースに直接ジャンプします。",
"customCommand": "カスタムコマンド",
"customCommandDesc": "通知がスケジュールされるたびにシェルコマンドを実行できます。設定 > アプリ > 通知コマンドで設定してください。コマンドは/bin/sh -cで実行され、以下の環境変数が使用可能です",
"customCommandNote": "コマンドはシステムサウンドピッカーとは独立して実行されます。カスタムコマンドのみを使用する場合はピッカーを「なし」に設定し、システムサウンドとカスタムアクションの両方を使用する場合は両方を有効にしてください。",
"sending": "通知の送信",
"cli": "CLI",
"osc777Title": "OSC 777シンプル",
"osc777Desc": "RXVTプロトコルはタイトルと本文の固定フォーマットを使用します",
"osc99Title": "OSC 99リッチ",
"osc99Desc": "Kittyプロトコルはサブタイトルと通知IDをサポートします",
"variableHeader": "変数",
"descriptionHeader": "説明",
"envTitle": "通知タイトル(ワークスペース名またはアプリ名)",
"envSubtitle": "通知サブタイトル",
"envBody": "通知本文",
"cmpTitleBody": "タイトル + 本文",
"cmpSubtitle": "サブタイトル",
"cmpNotificationId": "通知ID",
"cmpComplexity": "複雑さ",
"cmpYes": "あり",
"cmpNo": "なし",
"cmpHigher": "高い",
"cmpLower": "低い",
"featureHeader": "機能",
"comparisonCallout": "シンプルな通知にはOSC 777を使用してください。サブタイトルや通知IDが必要な場合はOSC 99を使用してください。最も簡単な連携にはCLIcmux notifyを使用してください。",
"claudeCodeHooks": "Claude Codeフック",
"claudeCodeHooksDesc": "cmuxは<link>Claude Code</link>とフックで連携し、タスク完了時に通知します。",
"createHookScript": "1. フックスクリプトの作成",
"configureClaude": "2. Claude Codeの設定",
"restartNote": "フックを適用するにはClaude Codeを再起動してください。",
"integrationExamples": "連携の例",
"notifyAfterLong": "長時間コマンド後の通知",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmuxパススルー",
"tmuxDesc": "cmux内でtmuxを使用する場合、パススルーを有効にしてください",
"metaTitle": "通知"
},
"browserAutomation": {
"title": "ブラウザ自動化",
"metaDescription": "cmuxブラウザコマンドリファレンス。ナビゲーション、DOM操作、待機、インスペクション、JavaScript実行、タブ、ダイアログ、フレーム、ダウンロード、ブラウザ状態。",
"intro": "cmux browserコマンドグループは、cmuxブラウザサーフェスに対するブラウザ自動化を提供します。ナビゲーション、DOM要素の操作、ページ状態のインスペクション、JavaScriptの実行、ブラウザセッションデータの管理に使用できます。",
"commandIndex": "コマンド一覧",
"categoryHeader": "カテゴリ",
"subcommandsHeader": "サブコマンド",
"navAndTargeting": "ナビゲーションとターゲティング",
"waiting": "待機",
"domInteraction": "DOM操作",
"inspection": "インスペクション",
"jsAndInjection": "JavaScriptと注入",
"framesDialogsDownloads": "フレーム、ダイアログ、ダウンロード",
"stateAndSession": "状態とセッションデータ",
"tabsAndLogs": "タブとログ",
"targetingSurface": "ブラウザサーフェスの指定",
"targetingDesc": "ほとんどのサブコマンドにはターゲットサーフェスが必要です。位置引数または--surfaceで指定できます。",
"navigation": "ナビゲーション",
"waitingSection": "待機",
"waitingDesc": "waitを使用して、セレクタ、テキスト、URLフラグメント、ロード状態、またはJavaScript条件が満たされるまでブロックします。",
"domSection": "DOM操作",
"domDesc": "変更を伴うアクションは、スクリプトでの高速検証のために--snapshot-afterをサポートしています。",
"inspectionSection": "インスペクション",
"inspectionDesc": "スクリプト用には構造化されたゲッターを、人間によるレビュー用にはスナップショット/スクリーンショットを使用します。",
"jsSection": "JavaScript実行と注入",
"stateSection": "状態",
"stateDesc": "セッションデータコマンドはcookie、ローカル/セッションストレージ、完全なブラウザ状態スナップショットをカバーします。",
"tabsSection": "タブ",
"tabsDesc": "ブラウザタブ操作は、アクティブなブラウザタブグループのブラウザサーフェスにマッピングされます。",
"consoleSection": "コンソールとエラー",
"dialogsSection": "ダイアログ",
"framesSection": "フレーム",
"downloadsSection": "ダウンロード",
"commonPatterns": "よくあるパターン",
"patternNavigate": "ナビゲート、待機、インスペクト",
"patternForm": "フォーム入力と成功テキストの確認",
"patternDebug": "失敗時のデバッグアーティファクトの取得",
"patternSession": "ブラウザセッションの保存と復元",
"metaTitle": "ブラウザ自動化"
},
"changelog": {
"title": "変更履歴",
"metaDescription": "cmuxのリリースートとバージョン履歴。ネイティブmacOSターミナルの新機能、バグ修正、変更点。",
"metaTitle": "変更履歴"
},
"navItems": {
"gettingStarted": "はじめに",
"concepts": "コンセプト",
"configuration": "設定",
"keyboardShortcuts": "キーボードショートカット",
"apiReference": "APIリファレンス",
"browserAutomation": "ブラウザ自動化",
"notifications": "通知",
"changelog": "変更履歴"
}
},
"legal": {
"privacyPolicy": "プライバシーポリシー",
"termsOfService": "利用規約",
"eula": "EULA"
},
"wallOfLove": {
"title": "みんなの声",
"description": "cmuxについてみんなが言っていること。"
},
"testimonials": {
"mitchellh": "またlibghosttyベースのプロジェクトが登場。今回は縦タブ付きのmacOSターミナルで、ターミナルベースのAIエージェントワークフローを大量に使う人向けに、整理・通知機能や組み込み・スクリプタブルなブラウザを搭載。",
"schrockn": "まさに探していた製品です。今朝2時間使って、もう夢中です。",
"egrefen": "週末ずっと使ってたけど、すごくいい。",
"max4c": "この2週間で一番お気に入りのツール",
"asaza": "cmux 良さそうすぎてついにバイバイ VSCode するときなのかもしれない",
"johnthedebs": "これ、ガチですごいですね。特にプログラマビリティ、レイヤードUI、APIつきブラウザが気に入りました。早く試してみたい。あとMitchell Hashimotoがlibghosttyを作ってくれたことにも感謝。ターミナルユーザーにとってワクワクする時代ですね。",
"joeriddles": "ターミナルに縦タブ考えたことなかった。Firefoxの縦タブは愛用してるのに。",
"dchu17": "試してみたけど、かなり直感的だった。良い仕事してますね!",
"afruth": "気に入った。昨日3つのプロジェクトをそれぞれ複数のworktreeで並行作業した。lazygitやyazi/nvimと組み合わせると、複数のghostty/iTermインスタンスを追いかけなくても普段より生産性が上がった。tmuxより自然な感じ。",
"northprint": "cmux良さそうなので入れてみたけれど、良い",
"indykish": "cmux、かなりいい。",
"kataring": "cmux.dev に乗り換えた",
"scottw": "本当に便利な発見だった。みんなにおすすめしたい。",
"johnblythe": "週末に入れて気に入った。こういうのをずっと待ってた。",
"bchris91": "まさに欲しかったもの。最高です、ありがとう!",
"connorelsea": "1週間使ってるけど最高。WIPタスクごとに縦タブ。中にはClaudeを片側に、PRやリソースのブラウザをもう片側に。タスクを切り替えながら整理できる。スキルでClaudeにCIを再帰的に監視させたり。正直、悟りを開いた気分。",
"tonkotsuboy": "年初にWarpからGhosttyに乗り換えたけど、今はcmuxに乗り換えた💻 垂直タブが便利で、Claude Codeのタスクの終了が通知されるのがありがたい。Ghosttyベースだから爆速動作はそのまま。ghosttyでやったブランチ表示や補完もそのまま使える"
},
"languageSwitcher": {
"label": "言語"
}
}

587
web/messages/km.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — ស្ថានីយដែលបង្កើតសម្រាប់ពហុកិច្ចការ",
"description": "ស្ថានីយ macOS ដើមកំណើតបង្កើតលើ Ghostty។ ដំណើរការជាមួយ Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider និងឧបករណ៍ CLI ណាមួយ។",
"ogDescription": "ស្ថានីយ macOS ដើមកំណើតសម្រាប់ភ្នាក់ងារសរសេរកូដ AI។"
},
"common": {
"downloadForMac": "ទាញយកសម្រាប់ Mac",
"viewOnGitHub": "មើលនៅលើ GitHub",
"closeMenu": "បិទម៉ឺនុយ",
"openMenu": "បើកម៉ឺនុយ",
"toggleTheme": "ប្ដូរស្បែក",
"backToBlog": "ត្រឡប់ទៅប្លក់",
"readTheDocs": "អានឯកសារ",
"viewChangelog": "មើលកំណត់ត្រាផ្លាស់ប្ដូរ"
},
"nav": {
"docs": "ឯកសារ",
"blog": "ប្លក់",
"changelog": "កំណត់ត្រាផ្លាស់ប្ដូរ",
"community": "សហគមន៍",
"github": "GitHub"
},
"footer": {
"product": "ផលិតផល",
"resources": "ធនធាន",
"legal": "ផ្នែកច្បាប់",
"social": "បណ្ដាញសង្គម",
"blog": "ប្លក់",
"community": "សហគមន៍",
"docs": "ឯកសារ",
"changelog": "កំណត់ត្រាផ្លាស់ប្ដូរ",
"privacy": "ឯកជនភាព",
"terms": "លក្ខខណ្ឌ",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "ទំនាក់ទំនង",
"copyright": "© {year} Manaflow",
"language": "ភាសា"
},
"home": {
"taglinePrefix": "ទែមីណលដែលបង្កើតសម្រាប់ ",
"typingCodingAgents": "ភ្នាក់ងារសរសេរកូដ",
"typingMultitasking": "ពហុកិច្ចការ",
"subtitle": "កម្មវិធី macOS ដើមដែលបង្កើតលើ Ghostty។ ផ្ទាំងបញ្ឈរ, រង្វង់ជូនដំណឹងពេល agent ត្រូវការការយកចិត្តទុកដាក់, បន្ទះបំបែក, និង socket API សម្រាប់ស្វ័យប្រវត្តិកម្ម។",
"features": "មុខងារ",
"faq": "សំណួរញឹកញាប់",
"communitySection": "សហគមន៍",
"feature": {
"verticalTabs": "ផ្ទាំងបញ្ឈរ",
"verticalTabsDesc": ": របារចំហៀងបង្ហាញ git branch, ថតការងារ, ports, និងអត្ថបទជូនដំណឹង",
"notificationRings": "រង្វង់ជូនដំណឹង",
"notificationRingsDesc": ": បន្ទះភ្លឺឡើងពេល agent ត្រូវការការយកចិត្តទុកដាក់",
"inAppBrowser": "កម្មវិធីរុករកក្នុងកម្មវិធី",
"inAppBrowserDesc": ": បំបែកកម្មវិធីរុករកនៅជាប់ទែមីណលរបស់អ្នកជាមួយ API ដែលអាចសរសេរស្គ្រីបបាន",
"splitPanes": "បន្ទះបំបែក",
"splitPanesDesc": ": បំបែកផ្ដេកនិងបញ្ឈរក្នុងផ្ទាំងនីមួយៗ",
"scriptable": "អាចសរសេរស្គ្រីបបាន",
"scriptableDesc": ": CLI និង socket API សម្រាប់ស្វ័យប្រវត្តិកម្មនិងស្គ្រីប",
"gpuAccelerated": "បង្កើនល្បឿនដោយ GPU",
"gpuAcceleratedDesc": ": ដំណើរការដោយ libghostty សម្រាប់ការបង្ហាញរលូន",
"lightweight": "ស្រាល",
"lightweightDesc": ": Swift + AppKit ដើម, គ្មាន Electron",
"keyboardShortcuts": "ផ្លូវកាត់ក្ដារចុច",
"keyboardShortcutsDesc": ": <link>ផ្លូវកាត់ជាច្រើន</link> សម្រាប់ workspace, បំបែក, កម្មវិធីរុករក, និងច្រើនទៀត"
},
"faqGhosttyQ": "cmux ទាក់ទងនឹង Ghostty យ៉ាងដូចម្ដេច?",
"faqGhosttyA": "cmux មិនមែនជា fork នៃ Ghostty ទេ។ វាប្រើ <link>libghostty</link> ជាបណ្ណាល័យសម្រាប់ការបង្ហាញទែមីណល, ដូចគ្នានឹងកម្មវិធីប្រើ WebKit សម្រាប់ web views ដែរ។ Ghostty គឺជាទែមីណលឯករាជ្យ; cmux គឺជាកម្មវិធីផ្សេងដែលបង្កើតនៅលើម៉ាស៊ីនបង្ហាញរបស់វា។",
"faqPlatformQ": "វាគាំទ្រប្រព័ន្ធប្រតិបត្តិការអ្វីខ្លះ?",
"faqPlatformA": "macOS តែប៉ុណ្ណោះសម្រាប់ពេលនេះ។ cmux គឺជាកម្មវិធី Swift + AppKit ដើម។",
"faqAgentsQ": "cmux ដំណើរការជាមួយ coding agent អ្វីខ្លះ?",
"faqAgentsA": "ទាំងអស់។ cmux គឺជាទែមីណល, ដូច្នេះ agent ណាមួយដែលដំណើរការក្នុងទែមីណលអាចប្រើបានភ្លាមៗ: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent, និងអ្វីផ្សេងទៀតដែលអ្នកអាចចាប់ផ្ដើមពីបន្ទាត់ពាក្យបញ្ជា។",
"faqNotificationsQ": "ការជូនដំណឹងដំណើរការយ៉ាងដូចម្ដេច?",
"faqNotificationsA": "នៅពេលដំណើរការមួយត្រូវការការយកចិត្តទុកដាក់, cmux បង្ហាញរង្វង់ជូនដំណឹងជុំវិញបន្ទះ, ស្លាកមិនទាន់អានក្នុងរបារចំហៀង, ផ្ទាំងលេចជូនដំណឹង, និងការជូនដំណឹងផ្ទៃតុ macOS។ ទាំងនេះដំណើរការដោយស្វ័យប្រវត្តិតាមរយៈ terminal escape sequences ស្តង់ដារ (OSC 9/99/777), ឬអ្នកអាចកេះវាដោយ <cliLink>cmux CLI</cliLink> និង <hooksLink>Claude Code hooks</hooksLink>។",
"faqShortcutsQ": "តើខ្ញុំអាចប្ដូរផ្លូវកាត់ក្ដារចុចតាមបំណងបានទេ?",
"faqShortcutsA": "ការចងក្ដារចុចទែមីណលត្រូវបានអានពីឯកសារកំណត់រចនាសម្ព័ន្ធ Ghostty របស់អ្នក (<configPath>~/.config/ghostty/config</configPath>)។ ផ្លូវកាត់ជាក់លាក់របស់ cmux (workspace, បំបែក, កម្មវិធីរុករក, ជូនដំណឹង) អាចប្ដូរតាមបំណងក្នុងការកំណត់។ មើល <link>ផ្លូវកាត់លំនាំដើម</link> សម្រាប់បញ្ជីពេញ។",
"faqTmuxQ": "វាប្រៀបធៀបជាមួយ tmux យ៉ាងដូចម្ដេច?",
"faqTmuxA": "tmux គឺជា terminal multiplexer ដែលដំណើរការក្នុងទែមីណលណាមួយ។ cmux គឺជាកម្មវិធី macOS ដើមជាមួយ GUI: ផ្ទាំងបញ្ឈរ, បន្ទះបំបែក, កម្មវិធីរុករកដែលបង្កប់, និង socket API ទាំងអស់មានស្រាប់។ មិនត្រូវការឯកសារកំណត់រចនាសម្ព័ន្ធ ឬគ្រាប់ចុចបុព្វបទទេ។",
"faqFreeQ": "តើ cmux ឥតគិតថ្លៃទេ?",
"faqFreeA": "បាទ/ចាស, cmux ឥតគិតថ្លៃក្នុងការប្រើប្រាស់។ កូដប្រភពមាននៅលើ <link>GitHub</link>។"
},
"community": {
"title": "សហគមន៍",
"description": "ភ្ជាប់ជាមួយអ្នកប្រើ cmux ផ្សេងទៀតនិងក្រុមដែលនៅពីក្រោយវា។",
"discord": "Discord",
"discordAction": "ចូលរួម Discord របស់យើង",
"discordDesc": "ជជែកជាមួយសហគមន៍, ទទួលបានជំនួយ, និងចែករំលែកមតិកែលម្អ",
"githubAction": "មើលនៅលើ GitHub",
"githubDesc": "ដាក់ផ្កាយ repo, រាយការណ៍បញ្ហា, និងចូលរួមវិភាគទាន",
"twitter": "Twitter",
"twitterAction": "តាមដាននៅលើ X",
"twitterDesc": "ព័ត៌មានថ្មី, សេចក្ដីប្រកាស, និងគន្លឹះ",
"youtube": "YouTube",
"youtubeAction": "ជាវ",
"youtubeDesc": "ការបង្ហាញ, មេរៀន, និងការណែនាំ",
"linkedin": "LinkedIn",
"linkedinAction": "តាមដានយើង",
"linkedinDesc": "ព័ត៌មានក្រុមហ៊ុននិងព័ត៌មានថ្មីផ្នែកវិស្វកម្ម",
"metaTitle": "សហគមន៍ — cmux",
"metaDescription": "ចូលរួមសហគមន៍ cmux នៅលើ Discord, Twitter, GitHub និងច្រើនទៀត"
},
"blog": {
"title": "ប្លក់",
"layoutTitle": "cmux blog",
"metaTitle": "ប្លក់",
"metaDescription": "ព័ត៌មាននិងបច្ចុប្បន្នភាពពីក្រុម cmux",
"description": "ព័ត៌មាននិងព័ត៌មានថ្មីពីក្រុម cmux",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "របៀបដែល Cmd+Shift+U រុករករវាង agent ដែលបានបញ្ចប់ក្នុង workspace ផ្សេងៗក្នុង cmux។",
"date": "ថ្ងៃទី 4 ខែមីនា ឆ្នាំ 2026",
"p1": "មុខងារ cmux ដែលខ្ញុំចូលចិត្តបំផុតគឺ Cmd+Shift+U។ ខ្ញុំមាន workspace 17 បើកនៅពេលនេះ, នីមួយៗកំពុងដំណើរការ agent មួយ។ ខ្ញុំធ្លាប់ចុចតាមផ្ទាំងនិងផ្ទាំងជូនដំណឹងដើម្បីរកមើលអ្វីដែលបានបញ្ចប់។ ការវាយអក្សរលឿនជាង។",
"p2": "Cmd+Shift+U លោតទៅ <link>ជូនដំណឹង</link> មិនទាន់អានថ្មីបំផុត។ ក្នុងការអនុវត្តន៍វាមានន័យថា agent ចុងក្រោយដែលបានបញ្ចប់។ វាប្ដូរទៅ workspace ត្រឹមត្រូវ, ផ្ដោតលើបន្ទះពិតប្រាកដ, ភ្លឺវាឡើងដើម្បីអ្នកមើលឃើញកន្លែងដែលត្រូវមើល, និងសម្គាល់ថាបានអាន។ ប្រសិនបើជូនដំណឹងមកពីបង្អួចផ្សេង, បង្អួចនោះមកមុខ។"
},
"zenOfCmux": {
"title": "ទស្សនវិជ្ជា cmux",
"summary": "cmux គឺជាប្រដាប់មូលដ្ឋាន មិនមែនជាដំណោះស្រាយទេ។ វាផ្ដល់ឱ្យអ្នកនូវផ្នែកដែលអាចផ្សំបាន ហើយលំហូរការងាររបស់អ្នកអាស្រ័យលើអ្នក។",
"date": "ថ្ងៃទី 27 ខែកុម្ភៈ ឆ្នាំ 2026",
"p1": "cmux មិនកំណត់វិធីដែលអ្នកអភិវឌ្ឍន៍ប្រើឧបករណ៍របស់ពួកគេទេ។ វាជាទែមីណលនិងកម្មវិធីរុករកជាមួយ CLI ហើយផ្នែកដែលនៅសល់អាស្រ័យលើអ្នក។",
"p2": "cmux គឺជាប្រដាប់មូលដ្ឋាន មិនមែនជាដំណោះស្រាយទេ។ វាផ្ដល់ឱ្យអ្នកនូវទែមីណល, កម្មវិធីរុករក, ជូនដំណឹង, workspace, បំបែក, ផ្ទាំង, និង CLI ដើម្បីគ្រប់គ្រងទាំងអស់។ cmux មិនបង្ខំអ្នកឱ្យប្រើ coding agent តាមវិធីជាក់លាក់មួយទេ។ អ្វីដែលអ្នកបង្កើតជាមួយប្រដាប់មូលដ្ឋានទាំងនេះគឺជារបស់អ្នក។",
"p3": "អ្នកអភិវឌ្ឍន៍ល្អបំផុតតែងតែបង្កើតឧបករណ៍ផ្ទាល់ខ្លួន។ គ្មាននរណាបានរកឃើញវិធីល្អបំផុតក្នុងការធ្វើការជាមួយ agent នៅឡើយទេ ហើយក្រុមដែលបង្កើតផលិតផលបិទក៏មិនបានដែរ។ អ្នកអភិវឌ្ឍន៍ដែលជិតបំផុតទៅនឹង codebase ផ្ទាល់ខ្លួនរបស់ពួកគេនឹងរកឃើញវាមុនគេ។",
"p4": "ផ្ដល់ឱ្យអ្នកអភិវឌ្ឍន៍មួយលាននាក់នូវប្រដាប់មូលដ្ឋានដែលអាចផ្សំបាន ហើយពួកគេនឹងរកឃើញលំហូរការងារដែលមានប្រសិទ្ធភាពបំផុតរួមគ្នា លឿនជាងក្រុមផលិតផលណាមួយអាចរចនាពីលើចុះក្រោម។"
},
"showHnLaunch": {
"title": "បើកដំណើរការ cmux នៅលើ Show HN",
"summary": "cmux ឡើងដល់ #2 នៅលើ Hacker News, ត្រូវបានចែករំលែកដោយ Mitchell Hashimoto, និងប្រជាប្រិយនៅជប៉ុន។",
"date": "ថ្ងៃទី 21 ខែកុម្ភៈ ឆ្នាំ 2026",
"intro": "យើងបានបង្ហោះ cmux នៅលើ <link>Show HN</link> នៅថ្ងៃទី 19 កុម្ភៈ:",
"blockquote1": "ខ្ញុំដំណើរការ Claude Code និង Codex sessions ជាច្រើនស្របគ្នា។ ខ្ញុំកំពុងប្រើ Ghostty ជាមួយបន្ទះបំបែកជាច្រើន ហើយពឹងផ្អែកលើការជូនដំណឹង macOS ដើមដើម្បីដឹងពេល agent ត្រូវការខ្ញុំ។ ប៉ុន្តែមាតិកាជូនដំណឹង Claude Code តែងតែជា \"Claude is waiting for your input\" ដោយគ្មានបរិបទ ហើយនៅពេលបើកផ្ទាំងគ្រប់គ្រាន់ ខ្ញុំមិនអាចអានចំណងជើងបានទៀតទេ។",
"blockquote2": "ខ្ញុំបានសាកល្បង coding orchestrator មួយចំនួន ប៉ុន្តែភាគច្រើនជាកម្មវិធី Electron/Tauri ហើយប្រតិបត្តិការរំខានខ្ញុំ។ ខ្ញុំក៏ចូលចិត្តទែមីណលដែរ ព្រោះ GUI orchestrator ចាប់អ្នកក្នុងលំហូរការងាររបស់ពួកគេ។ ដូច្នេះខ្ញុំបានបង្កើត cmux ជាកម្មវិធី macOS ដើមក្នុង Swift/AppKit។ វាប្រើ libghostty សម្រាប់បង្ហាញទែមីណល ហើយអានកំណត់រចនាសម្ព័ន្ធ Ghostty ដែលមានស្រាប់របស់អ្នកសម្រាប់ស្បែក, ពុម្ពអក្សរ, ពណ៌, និងច្រើនទៀត។",
"blockquote3": "ការបន្ថែមសំខាន់គឺរបារចំហៀងនិងប្រព័ន្ធជូនដំណឹង។ របារចំហៀងមានផ្ទាំងបញ្ឈរដែលបង្ហាញ git branch, ថតការងារ, ports ដែលកំពុងស្ដាប់, និងអត្ថបទជូនដំណឹងថ្មីបំផុតសម្រាប់ workspace នីមួយៗ។ ប្រព័ន្ធជូនដំណឹងចាប់យក terminal sequences (OSC 9/99/777) ហើយមាន CLI (cmux notify) ដែលអ្នកអាចភ្ជាប់ទៅ agent hooks សម្រាប់ Claude Code, OpenCode ជាដើម។ នៅពេល agent កំពុងរង់ចាំ បន្ទះរបស់វាទទួលរង្វង់ខៀវ ហើយផ្ទាំងភ្លឺឡើងក្នុងរបារចំហៀង ដូច្នេះខ្ញុំអាចដឹងថាមួយណាត្រូវការខ្ញុំក្នុងការបំបែកនិងផ្ទាំង។ Cmd+Shift+U លោតទៅមិនទាន់អានថ្មីបំផុត។",
"blockquote4": "កម្មវិធីរុករកក្នុងកម្មវិធីមាន API ដែលអាចសរសេរស្គ្រីបបាន។ Agent អាចថតរូបមែកធាង accessibility, ទទួល element refs, ចុច, បំពេញទម្រង់, វាយតម្លៃ JS, និងអានកំណត់ត្រា console។ អ្នកអាចបំបែកបន្ទះកម្មវិធីរុករកនៅជាប់ទែមីណលរបស់អ្នក ហើយឱ្យ Claude Code ធ្វើអន្តរកម្មជាមួយ dev server របស់អ្នកដោយផ្ទាល់។",
"blockquote5": "អ្វីទាំងអស់អាចសរសេរស្គ្រីបបានតាមរយៈ CLI និង socket API: បង្កើត workspace/ផ្ទាំង, បំបែកបន្ទះ, ផ្ញើការចុចគ្រាប់ចុច, បើក URL ក្នុងកម្មវិធីរុករក។",
"hitNumber2": "នៅពេលកំពូលវាឡើងដល់ #2 នៅលើ Hacker News។ Mitchell Hashimoto បានចែករំលែកវា:",
"favoriteComment": "មតិដែលខ្ញុំចូលចិត្តបំផុតពី <link>ខ្សែរឹត HN</link>:",
"viralJapan": "ដោយភ្ញាក់ផ្អើល, cmux បានប្រជាប្រិយនៅជប៉ុន:",
"translation": "ការបកប្រែ: \"នេះមើលទៅល្អ។ កម្មវិធីទែមីណលផ្អែកលើ Ghostty ដែលរចនាឡើងដើម្បីអ្នកមិនវង្វេងនៅពេលដំណើរការ CLI ជាច្រើនដូចជា Claude Code ស្របគ្នា។ បន្ទះដែលរង់ចាំការបញ្ចូលទទួលស៊ុមខៀវ ហើយវាមានប្រព័ន្ធជូនដំណឹងផ្ទាល់ខ្លួន។\"",
"viralChina": "និងពាក់កណ្ដាលប្រជាប្រិយនៅចិន:",
"extensions": "រឿងគួរឱ្យរំភើបមួយទៀតគឺឃើញមនុស្សបង្កើតនៅលើ cmux CLI។ sasha បានបង្កើត pi-cmux extension ដែលបង្ហាញព័ត៌មាន model, ការប្រើប្រាស់ token, និងស្ថានភាព agent ក្នុងរបារចំហៀង:",
"scriptable": "អ្វីទាំងអស់ក្នុង cmux អាចសរសេរស្គ្រីបបានតាមរយៈ CLI: បង្កើត workspace, ផ្ញើការចុចគ្រាប់ចុច, គ្រប់គ្រងកម្មវិធីរុករក, អានជូនដំណឹង។ ផ្នែកមួយនៃទស្សនវិជ្ជា cmux គឺអាចសរសេរកម្មវិធីនិងផ្សំបាន ដើម្បីមនុស្សអាចប្ដូរវិធីធ្វើការជាមួយ coding agent តាមបំណង។ បច្ចេកវិទ្យាទំនើបបំផុតសម្រាប់ coding agent កំពុងផ្លាស់ប្ដូរយ៉ាងលឿន ហើយអ្នកមិនចង់ជាប់នៅក្នុង GUI orchestrator ដែលមិនអាចតាមទានទេ។",
"cta": "ប្រសិនបើអ្នកកំពុងដំណើរការ coding agent ជាច្រើន, <link>សាកល្បង cmux</link>។"
},
"introducingCmux": {
"title": "ណែនាំ cmux",
"summary": "ទែមីណល macOS ដើមដែលបង្កើតនៅលើ Ghostty, រចនាសម្រាប់ដំណើរការ AI coding agent ជាច្រើនជាប់គ្នា។",
"date": "ថ្ងៃទី 12 ខែកុម្ភៈ ឆ្នាំ 2026",
"p1": "cmux គឺជាកម្មវិធីទែមីណល macOS ដើមដែលបង្កើតនៅលើ Ghostty, រចនាពីមូលដ្ឋានសម្រាប់អ្នកអភិវឌ្ឍន៍ដែលដំណើរការ AI coding agent ជាច្រើនក្នុងពេលតែមួយ។",
"whyTitle": "ហេតុអ្វី cmux?",
"whyP": "លំហូរការងារអភិវឌ្ឍន៍ទំនើបជារឿយៗពាក់ព័ន្ធនឹងការដំណើរការ agent ជាច្រើនក្នុងពេលតែមួយ។ Claude Code, Codex, និងឧបករណ៍ផ្សេងទៀតនីមួយៗក្នុងទែមីណលផ្ទាល់ខ្លួន។ ការតាមដានថាមួយណាត្រូវការការយកចិត្តទុកដាក់ និងប្ដូររវាងពួកវាយ៉ាងលឿន គឺជាបញ្ហាដែល cmux ដោះស្រាយ។",
"featuresTitle": "មុខងារសំខាន់ៗ",
"getStartedTitle": "ចាប់ផ្ដើម",
"getStartedP": "ដំឡើង cmux តាមរយៈ Homebrew ឬទាញយក DMG ពី <link>មគ្គុទ្ទេសក៍ចាប់ផ្ដើម</link>។",
"featureVerticalTabsLabel": "ផ្ទាំងបញ្ឈរ",
"featureVerticalTabsDesc": "មើលទែមីណលទាំងអស់ក្នុងមួយភ្លែតក្នុងរបារចំហៀង",
"featureNotificationsLabel": "រង្វង់ជូនដំណឹង",
"featureNotificationsDesc": "ផ្ទាំងភ្លឺនៅពេល agent ត្រូវការការបញ្ចូលរបស់អ្នក",
"featureSplitPanesLabel": "បន្ទះបំបែក",
"featureSplitPanesDesc": "បំបែកផ្ដេកនិងបញ្ឈរក្នុង workspace នីមួយៗ",
"featureSocketApiLabel": "Socket API",
"featureSocketApiDesc": "ការគ្រប់គ្រងដោយកម្មវិធីសម្រាប់បង្កើតផ្ទាំងនិងផ្ញើការបញ្ចូល",
"featureGpuLabel": "បង្កើនល្បឿនដោយ GPU",
"featureGpuDesc": "ដំណើរការដោយ libghostty សម្រាប់ការបង្ហាញរលូន"
}
},
"zenOfCmux": {
"metaTitle": "ហ្សែនរបស់ cmux",
"metaDescription": "cmux គឺជាបុព្វបទ មិនមែនដំណោះស្រាយទេ។"
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "ផ្លូវកាត់ក្តារចុចថ្មីដែលផ្លាស់ប្ដូរវិធីអន្តរកម្មរបស់អ្នកជាមួយ cmux។"
},
"showHnLaunch": {
"metaTitle": "ចាប់ផ្តើម cmux នៅ Show HN",
"metaDescription": "រឿងរ៉ាវនៃការចាប់ផ្តើម cmux នៅ Hacker News។"
},
"introducingCmux": {
"metaTitle": "ណែនាំ cmux",
"metaDescription": "ហេតុអ្វីយើងបង្កើត cmux ស្ថានីយថ្មីសម្រាប់ macOS។"
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "ចាប់ផ្ដើម",
"metaDescription": "ដំឡើង cmux, ទែមីណល macOS ដើមសម្រាប់ AI coding agent។ Homebrew, ទាញយក DMG, ដំឡើង CLI, និងធ្វើបច្ចុប្បន្នភាពស្វ័យប្រវត្តិតាមរយៈ Sparkle។",
"intro": "cmux គឺជាទែមីណល macOS ដើមស្រាលដែលបង្កើតនៅលើ Ghostty សម្រាប់គ្រប់គ្រង AI coding agent ជាច្រើន។ វាមានផ្ទាំងបញ្ឈរ, ផ្ទាំងជូនដំណឹង, និង API គ្រប់គ្រងផ្អែកលើ socket។",
"install": "ដំឡើង",
"dmgRecommended": "DMG (បានណែនាំ)",
"dmgDesc": "បើកឯកសារ .dmg ហើយអូស cmux ទៅថតកម្មវិធី។ cmux ធ្វើបច្ចុប្បន្នភាពស្វ័យប្រវត្តិតាមរយៈ Sparkle, ដូច្នេះអ្នកត្រូវទាញយកតែម្ដងប៉ុណ្ណោះ។",
"homebrew": "Homebrew",
"updateLater": "ដើម្បីធ្វើបច្ចុប្បន្នភាពនៅពេលក្រោយ:",
"firstLaunchCallout": "នៅពេលបើកដំបូង, macOS អាចស្នើឱ្យអ្នកបញ្ជាក់ការបើកកម្មវិធីពីអ្នកអភិវឌ្ឍន៍ដែលបានកំណត់អត្តសញ្ញាណ។ ចុច <strong>បើក</strong> ដើម្បីបន្ត។",
"verifyTitle": "ផ្ទៀងផ្ទាត់ការដំឡើង",
"verifyDesc": "បើក cmux ហើយអ្នកគួរឃើញ:",
"verifyItem1": "បង្អួចទែមីណលជាមួយរបារចំហៀងផ្ទាំងបញ្ឈរនៅខាងឆ្វេង",
"verifyItem2": "workspace ដំបូងមួយបានបើករួចហើយ",
"verifyItem3": "ទែមីណល Ghostty រួចរាល់សម្រាប់ការបញ្ចូល",
"cliSetup": "ដំឡើង CLI",
"cliDesc": "cmux រួមបញ្ចូលឧបករណ៍បន្ទាត់ពាក្យបញ្ជាសម្រាប់ស្វ័យប្រវត្តិកម្ម។ នៅក្នុងទែមីណល cmux វាដំណើរការដោយស្វ័យប្រវត្តិ។ ដើម្បីប្រើ CLI ពីក្រៅ cmux, បង្កើត symlink:",
"cliThen": "បន្ទាប់មកអ្នកអាចដំណើរការពាក្យបញ្ជាដូចជា:",
"autoUpdates": "បច្ចុប្បន្នភាពស្វ័យប្រវត្តិ",
"autoUpdatesDesc": "cmux ពិនិត្យរកបច្ចុប្បន្នភាពដោយស្វ័យប្រវត្តិតាមរយៈ Sparkle។ នៅពេលមានបច្ចុប្បន្នភាព អ្នកនឹងឃើញសញ្ញាបច្ចុប្បន្នភាពក្នុងរបារចំណងជើង។ អ្នកក៏អាចពិនិត្យដោយផ្ទាល់តាមរយៈ cmux > Check for Updates ក្នុងរបារម៉ឺនុយ។",
"sessionRestore": "ស្ដារវគ្គ (អាកប្បកិរិយាបច្ចុប្បន្ន)",
"sessionRestoreDesc": "បន្ទាប់ពីបើកឡើងវិញ, cmux ស្ដារប្លង់និងទិន្នន័យមេតាប៉ុណ្ណោះ:",
"sessionItem1": "ប្លង់បង្អួច, workspace, និងបន្ទះ",
"sessionItem2": "ថតការងារ",
"sessionItem3": "ប្រវត្តិរមូរទែមីណល (ខិតខំអស់ពីសមត្ថភាព)",
"sessionItem4": "URL កម្មវិធីរុករកនិងប្រវត្តិរុករក",
"sessionCallout": "cmux មិនទាន់ស្ដារស្ថានភាពដំណើរការផ្ទាល់ទេ។ វគ្គកម្មវិធីទែមីណលដែលកំពុងដំណើរការដូចជា Claude Code, tmux, និង vim មិនត្រូវបានបន្តបន្ទាប់ពីចាប់ផ្ដើមកម្មវិធីឡើងវិញទេ។",
"requirements": "តម្រូវការ",
"reqItem1": "macOS 14.0 ឬក្រោយ",
"reqItem2": "Mac Apple Silicon ឬ Intel",
"metaTitle": "ចាប់ផ្តើម"
},
"concepts": {
"title": "គោលគំនិត",
"metaDescription": "របៀបដែល cmux រៀបចំទែមីណល: បង្អួច, workspace, បន្ទះ, និង surface។ ឋានានុក្រមពីក្រោយរបារចំហៀង, បំបែក, និង socket API។",
"intro": "cmux រៀបចំទែមីណលរបស់អ្នកក្នុងឋានានុក្រមបួនកម្រិត។ ការយល់ដឹងពីកម្រិតទាំងនេះជួយនៅពេលប្រើ socket API, CLI, និងផ្លូវកាត់ក្ដារចុច។",
"hierarchy": "ឋានានុក្រម",
"windowTitle": "បង្អួច",
"windowDesc": "បង្អួច macOS។ បើកបង្អួចជាច្រើនជាមួយ {shortcut}។ បង្អួចនីមួយៗមានរបារចំហៀងផ្ទាល់ខ្លួនជាមួយ workspace ឯករាជ្យ។",
"workspaceTitle": "Workspace",
"workspaceDesc": "ធាតុរបារចំហៀង។ workspace នីមួយៗមានបន្ទះបំបែកមួយ ឬច្រើន។ Workspace គឺជាអ្វីដែលអ្នកឃើញរាយក្នុងរបារចំហៀងឆ្វេង។",
"workspaceNote": "ក្នុង UI និងផ្លូវកាត់ក្ដារចុច, workspace ជារឿយៗត្រូវបានហៅថា \"ផ្ទាំង\" ព្រោះវាប្រព្រឹត្តដូចផ្ទាំងក្នុងរបារចំហៀង។ Socket API និងអថេរបរិស្ថានប្រើពាក្យ \"workspace\"។",
"contextHeader": "បរិបទ",
"termUsedHeader": "ពាក្យដែលប្រើ",
"sidebarUI": "UI របារចំហៀង",
"tab": "ផ្ទាំង",
"keyboardShortcuts": "ផ្លូវកាត់ក្ដារចុច",
"workspaceOrTab": "Workspace ឬផ្ទាំង",
"socketAPI": "Socket API",
"environmentVariable": "អថេរបរិស្ថាន",
"workspaceShortcuts": "ផ្លូវកាត់: {new} (ថ្មី), {jump} (លោត), {close} (បិទ), {prevNext} (មុន/បន្ទាប់)",
"paneTitle": "បន្ទះ",
"paneDesc": "តំបន់បំបែកក្នុង workspace។ បង្កើតដោយបំបែកជាមួយ {right} (ស្ដាំ) ឬ {down} (ក្រោម)។ រុករករវាងបន្ទះជាមួយ {nav} + គ្រាប់ចុចទិសដៅ។",
"paneNote": "បន្ទះនីមួយៗអាចមាន surface ជាច្រើន (ផ្ទាំងក្នុងបន្ទះ)។",
"surfaceTitle": "Surface",
"surfaceDesc": "ផ្ទាំងក្នុងបន្ទះ។ បន្ទះនីមួយៗមានរបារផ្ទាំងផ្ទាល់ខ្លួន ហើយអាចមាន surface ជាច្រើន។ បង្កើតជាមួយ {new}, រុករកជាមួយ {prev} / {next} ឬ {jump}។",
"surfaceNote": "Surface គឺជាវគ្គទែមីណល ឬកម្មវិធីរុករកម្នាក់ៗដែលអ្នកធ្វើអន្តរកម្មជាមួយ។ Surface នីមួយៗមានអថេរបរិស្ថាន CMUX_SURFACE_ID ផ្ទាល់ខ្លួន។",
"panelTitle": "Panel",
"panelDesc": "មាតិកានៅក្នុង surface។ បច្ចុប្បន្នមានពីរប្រភេទ:",
"panelTerminal": "ទែមីណល: វគ្គទែមីណល Ghostty",
"panelBrowser": "កម្មវិធីរុករក: web view ដែលបង្កប់",
"panelNote": "Panel ភាគច្រើនជាគោលគំនិតខាងក្នុង។ នៅក្នុង socket API និង CLI, អ្នកធ្វើអន្តរកម្មជាមួយ surface ជាជាង panel ដោយផ្ទាល់។",
"visualExample": "ឧទាហរណ៍ដែលមើលឃើញ",
"visualExampleDesc": "ក្នុងឧទាហរណ៍នេះ:",
"visualItem1": "បង្អួចមានរបារចំហៀងជាមួយ workspace បី (dev, server, logs)",
"visualItem2": "Workspace \"dev\" ត្រូវបានជ្រើសរើស, បង្ហាញបន្ទះពីរនៅជាប់គ្នា",
"visualItem3": "បន្ទះ 1 មាន surface ពីរ ([S1] និង [S2] ក្នុងរបារផ្ទាំង), ជាមួយ S1 កំពុងដំណើរការ",
"visualItem4": "បន្ទះ 2 មាន surface មួយ",
"visualItem5": "Surface នីមួយៗមាន panel (ទែមីណលក្នុងករណីនេះ)",
"summary": "សង្ខេប",
"levelHeader": "កម្រិត",
"whatItIsHeader": "អ្វីដែលវាជា",
"createdByHeader": "បង្កើតដោយ",
"identifiedByHeader": "កំណត់អត្តសញ្ញាណដោយ",
"macosWindow": "បង្អួច macOS",
"sidebarEntry": "ធាតុរបារចំហៀង",
"splitRegion": "តំបន់បំបែក",
"tabWithinPane": "ផ្ទាំងក្នុងបន្ទះ",
"terminalOrBrowser": "ទែមីណល ឬកម្មវិធីរុករក",
"automatic": "ស្វ័យប្រវត្តិ",
"paneIdSocket": "Pane ID (socket API)",
"panelIdInternal": "Panel ID (ខាងក្នុង)",
"metaTitle": "គំនិត"
},
"configuration": {
"title": "កំណត់រចនាសម្ព័ន្ធ",
"metaDescription": "កំណត់រចនាសម្ព័ន្ធ cmux តាមរយៈឯកសារកំណត់រចនាសម្ព័ន្ធ Ghostty។ ពុម្ពអក្សរ, ស្បែក, ពណ៌, រចនាប័ទ្មបន្ទះបំបែក, ប្រវត្តិរមូរ, និងការកំណត់កម្មវិធីសម្រាប់មុខងារស្វ័យប្រវត្តិកម្ម។",
"intro": "cmux អានកំណត់រចនាសម្ព័ន្ធពីឯកសារកំណត់រចនាសម្ព័ន្ធ Ghostty, ផ្ដល់ឱ្យអ្នកនូវជម្រើសដែលធ្លាប់ស្គាល់ប្រសិនបើអ្នកមកពី Ghostty។",
"configLocations": "ទីតាំងឯកសារកំណត់រចនាសម្ព័ន្ធ",
"configLocationsDesc": "cmux ស្វែងរកកំណត់រចនាសម្ព័ន្ធនៅទីតាំងទាំងនេះ (តាមលំដាប់):",
"createConfig": "បង្កើតឯកសារកំណត់រចនាសម្ព័ន្ធប្រសិនបើមិនមាន:",
"appearance": "រូបរាង",
"font": "ពុម្ពអក្សរ",
"colors": "ពណ៌",
"splitPanes": "បន្ទះបំបែក",
"behavior": "អាកប្បកិរិយា",
"scrollback": "ប្រវត្តិរមូរ",
"workingDirectory": "ថតការងារ",
"appSettings": "ការកំណត់កម្មវិធី",
"appSettingsDesc": "ការកំណត់ក្នុងកម្មវិធីមានតាមរយៈ cmux > Settings ({shortcut}):",
"themeMode": "មុខងារស្បែក",
"themeSystem": "ប្រព័ន្ធ: តាម macOS",
"themeLight": "ភ្លឺ: មុខងារភ្លឺជានិច្ច",
"themeDark": "ងងឹត: មុខងារងងឹតជានិច្ច",
"automationMode": "មុខងារស្វ័យប្រវត្តិកម្ម",
"automationModeDesc": "កម្រិតចូលប្រើ socket:",
"automationOff": "បិទ: គ្មានការគ្រប់គ្រង socket (សុវត្ថិភាពបំផុត)",
"automationCmux": "ដំណើរការ cmux ប៉ុណ្ណោះ: អនុញ្ញាតតែដំណើរការដែលចាប់ផ្ដើមក្នុងទែមីណល cmux ភ្ជាប់",
"automationAll": "allowAll: អនុញ្ញាតដំណើរការមូលដ្ឋានណាមួយភ្ជាប់ (CMUX_SOCKET_MODE=allowAll, បដិសេធអថេរបរិស្ថានប៉ុណ្ណោះ)",
"automationCallout": "នៅលើម៉ាស៊ីនចែករំលែក, ពិចារណាប្រើមុខងារ \"បិទ\" ឬ \"ដំណើរការ cmux ប៉ុណ្ណោះ\"។",
"browserLinkBehavior": "អាកប្បកិរិយាតំណកម្មវិធីរុករក",
"browserLinkDesc": "នៅក្នុងការកំណត់ > កម្មវិធីរុករក, cmux បង្ហាញបញ្ជី host ពីរជាមួយគោលបំណងផ្សេងគ្នា:",
"browserHostsEmbed": "Host ដែលត្រូវបើកក្នុងកម្មវិធីរុករកដែលបង្កប់: អនុវត្តចំពោះតំណដែលចុចពីលទ្ធផលទែមីណល។ Host ក្នុងបញ្ជីនេះបើកក្នុង cmux; host ផ្សេងទៀតបើកក្នុងកម្មវិធីរុករកលំនាំដើមរបស់អ្នក។ គាំទ្រ host មួយ ឬ wildcard ក្នុងមួយជួរ (ឧទាហរណ៍: example.com, *.internal.example)។",
"browserHostsHttp": "HTTP Host ដែលអនុញ្ញាតក្នុងកម្មវិធីរុករកដែលបង្កប់: អនុវត្តតែចំពោះ HTTP (មិនមែន HTTPS) URL។ Host ក្នុងបញ្ជីនេះអាចបើកក្នុង cmux ដោយមិនមានការព្រមានទេ។ លំនាំដើមរួមមាន localhost, 127.0.0.1, ::1, 0.0.0.0, និង *.localtest.me។",
"exampleConfig": "ឧទាហរណ៍កំណត់រចនាសម្ព័ន្ធ",
"metaTitle": "ការកំណត់រចនាសម្ព័ន្ធ"
},
"keyboardShortcuts": {
"title": "ផ្លូវកាត់ក្ដារចុច",
"description": "ផ្លូវកាត់ក្ដារចុចទាំងអស់ដែលមានក្នុង cmux, ដាក់ជាក្រុមតាមប្រភេទ។",
"metaDescription": "ផ្លូវកាត់ក្ដារចុច cmux ទាំងអស់សម្រាប់ workspace, surface, បន្ទះបំបែក, កម្មវិធីរុករក, ជូនដំណឹង, ស្វែងរក, និងការគ្រប់គ្រងបង្អួចនៅលើ macOS។",
"searchPlaceholder": "ស្វែងរកផ្លូវកាត់...",
"searchLabel": "ស្វែងរកផ្លូវកាត់ក្ដារចុច",
"noResults": "រកមិនឃើញផ្លូវកាត់ទេ",
"noResultsHint": "សាកល្បងពាក្យស្វែងរកផ្សេង",
"cat": {
"workspaces": "Workspace",
"workspacesBlurb": "Workspace មាននៅក្នុងរបារចំហៀង។ Workspace នីមួយៗមានសំណុំបន្ទះនិង surface ផ្ទាល់ខ្លួន។",
"surfaces": "Surface",
"surfacesBlurb": "Surface គឺជាផ្ទាំងក្នុងបន្ទះ។",
"splitPanes": "បន្ទះបំបែក",
"browser": "កម្មវិធីរុករក",
"notifications": "ជូនដំណឹង",
"find": "ស្វែងរក",
"terminal": "ទែមីណល",
"window": "បង្អួច"
},
"sc": {
"ws-new": "Workspace ថ្មី",
"ws-jump-1-8": "លោតទៅ workspace 18",
"ws-jump-last": "លោតទៅ workspace ចុងក្រោយ",
"ws-close": "បិទ workspace",
"ws-rename": "ប្ដូរឈ្មោះ workspace",
"sf-new": "Surface ថ្មី",
"sf-prev-1": "Surface មុន",
"sf-prev-2": "Surface មុន",
"sf-jump-1-8": "លោតទៅ surface 18",
"sf-jump-last": "លោតទៅ surface ចុងក្រោយ",
"sf-close": "បិទ surface",
"sp-right": "បំបែកស្ដាំ",
"sp-down": "បំបែកក្រោម",
"sp-focus": "ផ្ដោតបន្ទះតាមទិសដៅ",
"sp-browser-right": "បំបែកកម្មវិធីរុករកស្ដាំ",
"sp-browser-down": "បំបែកកម្មវិធីរុករកក្រោម",
"br-open": "បើក surface កម្មវិធីរុករក",
"br-addr": "ផ្ដោតរបារអាសយដ្ឋាន",
"br-forward": "មុខ",
"br-reload": "ផ្ទុកទំព័រឡើងវិញ",
"br-devtools": "បើកឧបករណ៍អ្នកអភិវឌ្ឍន៍",
"nt-panel": "បង្ហាញផ្ទាំងជូនដំណឹង",
"nt-latest": "លោតទៅមិនទាន់អានថ្មីបំផុត",
"nt-flash": "កេះការភ្លឺ",
"fd-find": "ស្វែងរក",
"fd-next-prev": "ស្វែងរកបន្ទាប់ / មុន",
"fd-hide": "លាក់របារស្វែងរក",
"fd-selection": "ប្រើការជ្រើសរើសសម្រាប់ស្វែងរក",
"tm-clear": "សម្អាតប្រវត្តិរមូរ",
"tm-copy": "ចម្លង (ជាមួយការជ្រើសរើស)",
"tm-paste": "បិទភ្ជាប់",
"tm-font": "បង្កើន / បន្ថយទំហំពុម្ពអក្សរ",
"tm-reset": "កំណត់ទំហំពុម្ពអក្សរឡើងវិញ",
"wn-new": "បង្អូចថ្មី",
"wn-settings": "ការកំណត់",
"wn-reload": "ផ្ទុកកំណត់រចនាសម្ព័ន្ធឡើងវិញ",
"wn-quit": "ចាកចេញ"
},
"metaTitle": "ផ្លូវកាត់ក្តារចុច"
},
"api": {
"title": "ឯកសារយោង API",
"metaDescription": "ឯកសារយោង cmux CLI និង Unix socket API។ ការគ្រប់គ្រង workspace, បន្ទះបំបែក, ការគ្រប់គ្រងការបញ្ចូល, ជូនដំណឹង, ទិន្នន័យមេតារបារចំហៀង, អថេរបរិស្ថាន, និងវិធីកំណត់។",
"intro": "cmux ផ្ដល់ទាំងឧបករណ៍ CLI និង Unix socket សម្រាប់ការគ្រប់គ្រងដោយកម្មវិធី។ ពាក្យបញ្ជាទាំងអស់មានតាមរយៈចំណុចប្រទាក់ទាំងពីរ។",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "ផ្លូវ",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Tagged debug build",
"socketOverride": "បដិសេធជាមួយអថេរបរិស្ថាន CMUX_SOCKET_PATH។ ផ្ញើសំណើ JSON មួយដែលបញ្ចប់ដោយបន្ទាត់ថ្មីក្នុងការហៅម្ដង:",
"socketCallout": "សំណើ socket JSON ត្រូវប្រើ method និង params។ JSON payloads ចាស់ v1 ដូចជា <legacy>'{'\"command\":\"...\"'}'</legacy> មិនត្រូវបានគាំទ្រទេ។",
"accessModes": "មុខងារចូលប្រើ",
"modeHeader": "មុខងារ",
"descriptionHeader": "ការពិពណ៌នា",
"howToEnableHeader": "របៀបបើក",
"offMode": "Socket បានបិទ",
"offEnable": "UI ការកំណត់ ឬ CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "មានតែដំណើរការដែលចាប់ផ្ដើមក្នុងទែមីណល cmux ប៉ុណ្ណោះអាចភ្ជាប់បាន។",
"cmuxOnlyEnable": "មុខងារលំនាំដើមក្នុង UI ការកំណត់",
"allowAllMode": "អនុញ្ញាតដំណើរការមូលដ្ឋានណាមួយភ្ជាប់ (គ្មានការពិនិត្យដើមកំណើត)។",
"allowAllEnable": "បដិសេធអថេរបរិស្ថានប៉ុណ្ណោះ: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "នៅលើម៉ាស៊ីនចែករំលែក, ប្រើមុខងារបិទ ឬដំណើរការ cmux ប៉ុណ្ណោះ។",
"cliOptions": "ជម្រើស CLI",
"flagHeader": "ទង់",
"customSocketPath": "ផ្លូវ socket ផ្ទាល់ខ្លួន",
"outputJson": "លទ្ធផលក្នុងទម្រង់ JSON",
"targetWindow": "កំណត់គោលដៅបង្អួចជាក់លាក់",
"targetWorkspace": "កំណត់គោលដៅ workspace ជាក់លាក់",
"targetSurface": "កំណត់គោលដៅ surface ជាក់លាក់",
"idFormat": "គ្រប់គ្រងទម្រង់ identifier ក្នុងលទ្ធផល JSON",
"workspaceCommands": "ពាក្យបញ្ជា workspace",
"listWorkspacesDesc": "រាយ workspace ដែលបើកទាំងអស់។",
"newWorkspaceDesc": "បង្កើត workspace ថ្មី។",
"selectWorkspaceDesc": "ប្ដូរទៅ workspace ជាក់លាក់។",
"currentWorkspaceDesc": "ទទួល workspace ដែលកំពុងដំណើរការបច្ចុប្បន្ន។",
"closeWorkspaceDesc": "បិទ workspace។",
"splitCommands": "ពាក្យបញ្ជាបំបែក",
"newSplitDesc": "បង្កើតបន្ទះបំបែកថ្មី។ ទិសដៅ: ឆ្វេង, ស្ដាំ, លើ, ក្រោម។",
"listSurfacesDesc": "រាយ surface ទាំងអស់ក្នុង workspace បច្ចុប្បន្ន។",
"focusSurfaceDesc": "ផ្ដោតលើ surface ជាក់លាក់។",
"inputCommands": "ពាក្យបញ្ជាបញ្ចូល",
"sendDesc": "ផ្ញើអត្ថបទបញ្ចូលទៅទែមីណលដែលកំពុងផ្ដោត។",
"sendKeyDesc": "ផ្ញើការចុចគ្រាប់ចុច។ គ្រាប់ចុច: enter, tab, escape, backspace, delete, up, down, left, right។",
"sendSurfaceDesc": "ផ្ញើអត្ថបទទៅ surface ជាក់លាក់។",
"sendKeySurfaceDesc": "ផ្ញើការចុចគ្រាប់ចុចទៅ surface ជាក់លាក់។",
"notificationCommands": "ពាក្យបញ្ជាជូនដំណឹង",
"notifyDesc": "ផ្ញើជូនដំណឹង។",
"listNotificationsDesc": "រាយជូនដំណឹងទាំងអស់។",
"clearNotificationsDesc": "សម្អាតជូនដំណឹងទាំងអស់។",
"sidebarMetadata": "ពាក្យបញ្ជាទិន្នន័យមេតារបារចំហៀង",
"sidebarMetadataDesc": "កំណត់ស្ថានភាព pill, របារវឌ្ឍនភាព, និងធាតុកំណត់ត្រាក្នុងរបារចំហៀងសម្រាប់ workspace ណាមួយ។ មានប្រយោជន៍សម្រាប់ស្គ្រីប build, ការរួមបញ្ចូល CI, និង AI coding agent ដែលចង់បង្ហាញស្ថានភាពក្នុងមួយភ្លែត។",
"setStatusDesc": "កំណត់ស្ថានភាព pill របារចំហៀង។ ប្រើកូនសោតែមួយគត់ដើម្បីឧបករណ៍ផ្សេងៗអាចគ្រប់គ្រងធាតុផ្ទាល់ខ្លួន។",
"clearStatusDesc": "លុបធាតុស្ថានភាពរបារចំហៀងតាមកូនសោ។",
"listStatusDesc": "រាយធាតុស្ថានភាពរបារចំហៀងទាំងអស់សម្រាប់ workspace។",
"setProgressDesc": "កំណត់របារវឌ្ឍនភាពក្នុងរបារចំហៀង (0.0 ដល់ 1.0)។",
"clearProgressDesc": "សម្អាតរបារវឌ្ឍនភាពរបារចំហៀង។",
"logDesc": "បន្ថែមធាតុកំណត់ត្រាទៅរបារចំហៀង។ កម្រិត: info, progress, success, warning, error។",
"clearLogDesc": "សម្អាតធាតុកំណត់ត្រារបារចំហៀងទាំងអស់។",
"listLogDesc": "រាយធាតុកំណត់ត្រារបារចំហៀង។",
"sidebarStateDesc": "បង្ហាញទិន្នន័យមេតារបារចំហៀងទាំងអស់ (cwd, git branch, ports, ស្ថានភាព, វឌ្ឍនភាព, កំណត់ត្រា)។",
"utilityCommands": "ពាក្យបញ្ជាឧបករណ៍",
"pingDesc": "ពិនិត្យថា cmux កំពុងដំណើរការនិងឆ្លើយតប។",
"capabilitiesDesc": "រាយវិធី socket ដែលមាននិងមុខងារចូលប្រើបច្ចុប្បន្ន។",
"identifyDesc": "បង្ហាញបរិបទបង្អួច/workspace/បន្ទះ/surface ដែលកំពុងផ្ដោត។",
"envVariables": "អថេរបរិស្ថាន",
"variableHeader": "អថេរ",
"socketPathDesc": "បដិសេធផ្លូវ socket ដែលប្រើដោយ CLI និងការរួមបញ្ចូល",
"socketEnableDesc": "បង្ខំបើក/បិទ socket (1/0, true/false, on/off)",
"socketModeDesc": "បដិសេធមុខងារចូលប្រើ (cmuxOnly, allowAll, off)។ ទទួលផងដែរ cmux-only/cmux_only និង allow-all/allow_all",
"workspaceIdDesc": "កំណត់ស្វ័យប្រវត្តិ: ID workspace បច្ចុប្បន្ន",
"surfaceIdDesc": "កំណត់ស្វ័យប្រវត្តិ: ID surface បច្ចុប្បន្ន",
"termProgramDesc": "កំណត់ទៅ ghostty",
"termDesc": "កំណត់ទៅ xterm-ghostty",
"envCallout": "តម្លៃ CMUX_SOCKET_MODE ចាស់ full និង notifications នៅតែទទួលបានសម្រាប់ភាពឆបគ្នា។",
"detectingCmux": "កំណត់ cmux",
"examples": "ឧទាហរណ៍",
"pythonClient": "Python client",
"shellScript": "Shell script",
"buildScriptNotification": "Build script ជាមួយជូនដំណឹង",
"metaTitle": "ឯកសារ API"
},
"notifications": {
"title": "ជូនដំណឹង",
"metaDescription": "ផ្ញើជូនដំណឹងផ្ទៃតុពី AI agent និងស្គ្រីបក្នុង cmux។ CLI, OSC 99/777 escape sequences, និងការរួមបញ្ចូល Claude Code hooks។",
"intro": "cmux គាំទ្រជូនដំណឹងផ្ទៃតុ, អនុញ្ញាតឱ្យ AI agent និងស្គ្រីបជូនដំណឹងអ្នកនៅពេលពួកវាត្រូវការការយកចិត្តទុកដាក់។",
"lifecycle": "វដ្តជីវិត",
"received": "បានទទួល: ជូនដំណឹងបង្ហាញក្នុង panel, ការជូនដំណឹងផ្ទៃតុដំណើរការ (ប្រសិនបើមិនត្រូវបានបង្ហាប់)",
"unread": "មិនទាន់អាន: ស្លាកបង្ហាញនៅលើផ្ទាំង workspace",
"read": "បានអាន: សម្អាតនៅពេលអ្នកមើល workspace នោះ",
"cleared": "បានសម្អាត: លុបចេញពី panel",
"suppression": "ការបង្ហាប់",
"suppressionDesc": "ការជូនដំណឹងផ្ទៃតុត្រូវបានបង្ហាប់នៅពេល:",
"suppressItem1": "បង្អួច cmux កំពុងផ្ដោត",
"suppressItem2": "workspace ជាក់លាក់ដែលផ្ញើជូនដំណឹងកំពុងដំណើរការ",
"suppressItem3": "ផ្ទាំងជូនដំណឹងកំពុងបើក",
"notificationPanel": "ផ្ទាំងជូនដំណឹង",
"notificationPanelDesc": "ចុច <openShortcut>⌘⇧I</openShortcut> ដើម្បីបើកផ្ទាំងជូនដំណឹង។ ចុចជូនដំណឹងដើម្បីលោតទៅ workspace នោះ។ ចុច <jumpShortcut>⌘⇧U</jumpShortcut> ដើម្បីលោតផ្ទាល់ទៅ workspace ដែលមានជូនដំណឹងមិនទាន់អានថ្មីបំផុត។",
"customCommand": "ពាក្យបញ្ជាផ្ទាល់ខ្លួន",
"customCommandDesc": "ដំណើរការពាក្យបញ្ជា shell រាល់ពេលជូនដំណឹងត្រូវបានកំណត់។ កំណត់វាក្នុងការកំណត់ > កម្មវិធី > ពាក្យបញ្ជាជូនដំណឹង។ ពាក្យបញ្ជាដំណើរការតាមរយៈ /bin/sh -c ជាមួយអថេរបរិស្ថានទាំងនេះ:",
"customCommandNote": "ពាក្យបញ្ជាដំណើរការដោយឯករាជ្យពីឧបករណ៍ជ្រើសរើសសម្លេងប្រព័ន្ធ។ កំណត់ឧបករណ៍ជ្រើសរើសទៅ \"គ្មាន\" ដើម្បីប្រើតែពាក្យបញ្ជាផ្ទាល់ខ្លួន ឬរក្សាទាំងពីរសម្រាប់សម្លេងប្រព័ន្ធនិងសកម្មភាពផ្ទាល់ខ្លួន។",
"sending": "ការផ្ញើជូនដំណឹង",
"cli": "CLI",
"osc777Title": "OSC 777 (សាមញ្ញ)",
"osc777Desc": "ពិធីការ RXVT ប្រើទម្រង់ថេរជាមួយចំណងជើងនិងមាតិកា:",
"osc99Title": "OSC 99 (សម្បូរ)",
"osc99Desc": "ពិធីការ Kitty គាំទ្រចំណងជើងរង និង ID ជូនដំណឹង:",
"variableHeader": "អថេរ",
"descriptionHeader": "ការពិពណ៌នា",
"envTitle": "ចំណងជើងជូនដំណឹង (ឈ្មោះ workspace ឬឈ្មោះកម្មវិធី)",
"envSubtitle": "ចំណងជើងរងជូនដំណឹង",
"envBody": "អត្ថបទមាតិកាជូនដំណឹង",
"cmpTitleBody": "ចំណងជើង + មាតិកា",
"cmpSubtitle": "ចំណងជើងរង",
"cmpNotificationId": "ID ជូនដំណឹង",
"cmpComplexity": "ភាពស្មុគស្មាញ",
"cmpYes": "បាទ/ចាស",
"cmpNo": "ទេ",
"cmpHigher": "ខ្ពស់ជាង",
"cmpLower": "ទាបជាង",
"featureHeader": "មុខងារ",
"comparisonCallout": "ប្រើ OSC 777 សម្រាប់ជូនដំណឹងសាមញ្ញ។ ប្រើ OSC 99 នៅពេលអ្នកត្រូវការចំណងជើងរង ឬ ID ជូនដំណឹង។ ប្រើ CLI (cmux notify) សម្រាប់ការរួមបញ្ចូលងាយស្រួលបំផុត។",
"claudeCodeHooks": "Claude Code hooks",
"claudeCodeHooksDesc": "cmux រួមបញ្ចូលជាមួយ <link>Claude Code</link> តាមរយៈ hooks ដើម្បីជូនដំណឹងអ្នកនៅពេលភារកិច្ចបានបញ្ចប់។",
"createHookScript": "1. បង្កើត hook script",
"configureClaude": "2. កំណត់រចនាសម្ព័ន្ធ Claude Code",
"restartNote": "ចាប់ផ្ដើម Claude Code ឡើងវិញដើម្បីអនុវត្ត hooks។",
"integrationExamples": "ឧទាហរណ៍ការរួមបញ្ចូល",
"notifyAfterLong": "ជូនដំណឹងបន្ទាប់ពីពាក្យបញ្ជាយូរ",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux passthrough",
"tmuxDesc": "ប្រសិនបើប្រើ tmux ក្នុង cmux, បើក passthrough:",
"metaTitle": "ការជូនដំណឹង"
},
"browserAutomation": {
"title": "ស្វ័យប្រវត្តិកម្មកម្មវិធីរុករក",
"metaDescription": "ឯកសារយោងពាក្យបញ្ជាកម្មវិធីរុករក cmux សម្រាប់ការរុករក, អន្តរកម្ម DOM, ការរង់ចាំ, ការពិនិត្យ, ការវាយតម្លៃ JavaScript, ផ្ទាំង, ប្រអប់សន្ទនា, ស៊ុម, ការទាញយក, និងស្ថានភាពកម្មវិធីរុករក។",
"intro": "ក្រុមពាក្យបញ្ជាកម្មវិធីរុករក cmux ផ្ដល់ស្វ័យប្រវត្តិកម្មកម្មវិធីរុករកលើ surface កម្មវិធីរុករក cmux។ ប្រើវាដើម្បីរុករក, ធ្វើអន្តរកម្មជាមួយធាតុ DOM, ពិនិត្យស្ថានភាពទំព័រ, វាយតម្លៃ JavaScript, និងគ្រប់គ្រងទិន្នន័យវគ្គកម្មវិធីរុករក។",
"commandIndex": "សន្ទស្សន៍ពាក្យបញ្ជា",
"categoryHeader": "ប្រភេទ",
"subcommandsHeader": "ពាក្យបញ្ជារង",
"navAndTargeting": "ការរុករកនិងការកំណត់គោលដៅ",
"waiting": "ការរង់ចាំ",
"domInteraction": "អន្តរកម្ម DOM",
"inspection": "ការពិនិត្យ",
"jsAndInjection": "JavaScript និងការចាក់បញ្ចូល",
"framesDialogsDownloads": "ស៊ុម, ប្រអប់សន្ទនា, ការទាញយក",
"stateAndSession": "ស្ថានភាពនិងទិន្នន័យវគ្គ",
"tabsAndLogs": "ផ្ទាំងនិងកំណត់ត្រា",
"targetingSurface": "ការកំណត់គោលដៅ surface កម្មវិធីរុករក",
"targetingDesc": "ពាក្យបញ្ជារងភាគច្រើនត្រូវការ surface គោលដៅ។ អ្នកអាចបញ្ជូនវាតាមទីតាំង ឬជាមួយ --surface។",
"navigation": "ការរុករក",
"waitingSection": "ការរង់ចាំ",
"waitingDesc": "ប្រើ wait ដើម្បីរង់ចាំរហូតដល់ selectors, អត្ថបទ, ផ្នែក URL, ស្ថានភាពផ្ទុក, ឬលក្ខខណ្ឌ JavaScript ត្រូវបានបំពេញ។",
"domSection": "អន្តរកម្ម DOM",
"domDesc": "សកម្មភាពផ្លាស់ប្ដូរគាំទ្រ --snapshot-after សម្រាប់ការផ្ទៀងផ្ទាត់រហ័សក្នុងស្គ្រីប។",
"inspectionSection": "ការពិនិត្យ",
"inspectionDesc": "ប្រើ getters ដែលមានរចនាសម្ព័ន្ធសម្រាប់ស្គ្រីប និង snapshots/screenshots សម្រាប់ការត្រួតពិនិត្យដោយមនុស្ស។",
"jsSection": "ការវាយតម្លៃនិងចាក់បញ្ចូល JavaScript",
"stateSection": "ស្ថានភាព",
"stateDesc": "ពាក្យបញ្ជាទិន្នន័យវគ្គគ្រប cookies, local/session storage, និង snapshots ស្ថានភាពកម្មវិធីរុករកពេញលេញ។",
"tabsSection": "ផ្ទាំង",
"tabsDesc": "ប្រតិបត្តិការផ្ទាំងកម្មវិធីរុករកផ្គូផ្គងទៅ surface កម្មវិធីរុករកក្នុងក្រុមផ្ទាំងកម្មវិធីរុករកដែលកំពុងដំណើរការ។",
"consoleSection": "Console និងកំហុស",
"dialogsSection": "ប្រអប់សន្ទនា",
"framesSection": "ស៊ុម",
"downloadsSection": "ការទាញយក",
"commonPatterns": "គំរូទូទៅ",
"patternNavigate": "រុករក, រង់ចាំ, ពិនិត្យ",
"patternForm": "បំពេញទម្រង់និងផ្ទៀងផ្ទាត់អត្ថបទជោគជ័យ",
"patternDebug": "ចាប់យកវត្ថុ debug នៅពេលបរាជ័យ",
"patternSession": "រក្សាទុកនិងស្ដារវគ្គកម្មវិធីរុករក",
"metaTitle": "ស្វ័យប្រវត្តិកម្មកម្មវិធីរុករក"
},
"changelog": {
"title": "កំណត់ត្រាផ្លាស់ប្ដូរ",
"metaDescription": "កំណត់ត្រាការចេញផ្សាយ cmux និងប្រវត្តិកំណែ។ មុខងារថ្មី, ការជួសជុលកំហុស, និងការផ្លាស់ប្ដូរសម្រាប់ទែមីណល macOS ដើម។",
"metaTitle": "កំណត់ហេតុផ្លាស់ប្ដូរ"
},
"navItems": {
"gettingStarted": "ចាប់ផ្ដើម",
"concepts": "គោលគំនិត",
"configuration": "កំណត់រចនាសម្ព័ន្ធ",
"keyboardShortcuts": "ផ្លូវកាត់ក្ដារចុច",
"apiReference": "ឯកសារយោង API",
"browserAutomation": "ស្វ័យប្រវត្តិកម្មកម្មវិធីរុករក",
"notifications": "ជូនដំណឹង",
"changelog": "កំណត់ត្រាផ្លាស់ប្ដូរ"
}
},
"legal": {
"privacyPolicy": "គោលការណ៍ឯកជនភាព",
"termsOfService": "លក្ខខណ្ឌសេវាកម្ម",
"eula": "EULA"
},
"testimonials": {
"mitchellh": "មួយថ្ងៃទៀត មួយគម្រោង libghostty ទៀត លើកនេះជាទែមីណល macOS ជាមួយផ្ទាំងបញ្ឈរ, ការរៀបចំ/ជូនដំណឹងល្អជាង, កម្មវិធីរុករកបង្កប់/សរសេរស្គ្រីបបាន ដែលមានគោលដៅជាពិសេសសម្រាប់អ្នកដែលប្រើ workflow agent ផ្អែកលើទែមីណលច្រើន។",
"schrockn": "នេះជាផលិតផលដែលខ្ញុំកំពុងស្វែងរកពិតប្រាកដ។ បន្ទាប់ពីប្រើពីរម៉ោងព្រឹកនេះ ខ្ញុំស្រឡាញ់វាហើយ។",
"egrefen": "ខ្ញុំប្រើវាពេញចុងសប្តាហ៍ ហើយវាអស្ចារ្យ។",
"max4c": "នេះជាឧបករណ៍ដែលខ្ញុំចូលចិត្តបំផុតក្នុងរយៈពេលពីរសប្តាហ៍កន្លងមក",
"asaza": "cmux មើលទៅល្អខ្លាំងម៉ង អាចដល់ពេលហើយនឹងបញ្ចប់ជាមួយ VSCode",
"johnthedebs": "នេះមើលទៅអស្ចារ្យ។ ចូលចិត្តគំនិតនៅទីនេះ ជាពិសេស: ភាពអាចសរសេរកម្មវិធីបាន, UI ជាស្រទាប់, កម្មវិធីរុករកជាមួយ API។ រង់ចាំសាកល្បង។ ក៏ចង់និយាយថាខ្ញុំពិតជាអរគុណ Mitchell Hashimoto ដែលបង្កើត libghostty។ វារឹតតែគួរឱ្យរំភើបសម្រាប់អ្នកប្រើទែមីណល។",
"joeriddles": "ផ្ទាំងបញ្ឈរក្នុងទែមីណលរបស់ខ្ញុំ! ខ្ញុំមិនដែលគិតដល់រឿងនេះមកមុនទេ។ ខ្ញុំប្រើហើយចូលចិត្តផ្ទាំងបញ្ឈរ Firefox។",
"dchu17": "សាកល្បងហើយវាងាយស្រួលប្រើ។ ធ្វើបានល្អ!",
"afruth": "ខ្ញុំចូលចិត្តវា ប្រើក្នុងថ្ងៃកន្លងមកជាមួយគម្រោងបីស្របគ្នា នីមួយៗមាន worktree ជាច្រើន។ ការមានវាជាមួយ lazygit និង yazi / nvim ធ្វើឱ្យខ្ញុំផលិតភាពជាងធម្មតាដោយមិនចាំបាច់តាមរក ghostty / iTerm ជាច្រើនវិន្ដូ។ ក៏មានអារម្មណ៍ធម្មជាតិជាង tmux ដែរ។",
"northprint": "សាកល្បង cmux ព្រោះវាមើលទៅល្អ — វាល្អពិតមែន",
"indykish": "cmux ល្អដែរ។",
"kataring": "ប្ដូរមកប្រើ cmux.dev",
"scottw": "នេះជាការរកឃើញដ៏មានប្រយោជន៍។ ខ្ញុំណែនាំវាខ្លាំងណាស់។",
"johnblythe": "ទាញយកមកចុងសប្តាហ៍កន្លងមក ហើយចូលចិត្តវា។ រង់ចាំអ្វីបែបនេះយូរហើយ។",
"bchris91": "នេះជាអ្វីដែលខ្ញុំចង់បានពិតប្រាកដ។ ការងារអស្ចារ្យ អរគុណ!",
"connorelsea": "ប្រើមកមួយសប្តាហ៍ហើយ វាល្អខ្លាំង។ ផ្ទាំងបញ្ឈរសម្រាប់កិច្ចការនីមួយៗ។ ខាងក្នុង Claude នៅម្ខាង កម្មវិធីរុករកជាមួយ PR និងធនធាននៅម្ខាង ប្ដូររវាងកិច្ចការហើយរក្សាការរៀបចំ។ ផ្សំជាមួយ skills ឱ្យ Claude តាមដាន CI ដដែលៗ ។ រឹតតែស្រស់បំព្រង",
"tonkotsuboy": "ខ្ញុំប្ដូរពី Warp មក Ghostty ដើមឆ្នាំ ប៉ុន្តែឥឡូវខ្ញុំប្ដូរមក cmux។ ផ្ទាំងបញ្ឈរងាយស្រួល ហើយខ្ញុំពេញចិត្តដែលទទួលបានជូនដំណឹងពេល Claude Code បានបញ្ចប់។ វាផ្អែកលើ Ghostty ដូច្នេះល្បឿនលឿនប្រែកៗនៅតែមាន។ ការបង្ហាញ branch និង completion ដែលខ្ញុំបានកំណត់ក្នុង Ghostty នៅតែដំណើរការដែរ។"
},
"languageSwitcher": {
"label": "ភាសា"
},
"wallOfLove": {
"title": "ជញ្ជៀងសរសើរ",
"description": "អ្វីដែលមនុស្សនិយាយអំពី cmux។"
}
}

587
web/messages/ko.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — 멀티태스킹을 위해 만든 터미널",
"description": "Ghostty 기반 네이티브 macOS 터미널. Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider 등 모든 CLI 도구와 호환. 세로 탭, 알림 링, 분할 패널, 소켓 API 지원.",
"ogDescription": "AI 코딩 에이전트를 위한 네이티브 macOS 터미널. Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider 등 모든 CLI 도구와 호환."
},
"common": {
"downloadForMac": "Mac용 다운로드",
"viewOnGitHub": "GitHub에서 보기",
"closeMenu": "메뉴 닫기",
"openMenu": "메뉴 열기",
"toggleTheme": "테마 전환",
"backToBlog": "블로그로 돌아가기",
"readTheDocs": "문서 읽기",
"viewChangelog": "변경 로그 보기"
},
"nav": {
"docs": "문서",
"blog": "블로그",
"changelog": "변경 로그",
"community": "커뮤니티",
"github": "GitHub"
},
"footer": {
"product": "제품",
"resources": "리소스",
"legal": "법적 고지",
"social": "소셜",
"blog": "블로그",
"community": "커뮤니티",
"docs": "문서",
"changelog": "변경 로그",
"privacy": "개인정보 처리방침",
"terms": "이용약관",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "문의",
"copyright": "© {year} Manaflow",
"language": "언어"
},
"home": {
"taglinePrefix": "다음을 위해 만들어진 터미널: ",
"typingCodingAgents": "코딩 에이전트",
"typingMultitasking": "멀티태스킹",
"subtitle": "Ghostty 기반 네이티브 macOS 앱. 세로 탭, 에이전트가 주의를 필요로 할 때 알림 링, 분할 패널, 자동화를 위한 소켓 API를 제공합니다.",
"features": "기능",
"faq": "FAQ",
"communitySection": "커뮤니티",
"feature": {
"verticalTabs": "세로 탭",
"verticalTabsDesc": ": 사이드바에 git 브랜치, 작업 디렉토리, 포트, 알림 텍스트 표시",
"notificationRings": "알림 링",
"notificationRingsDesc": ": 에이전트가 주의를 필요로 하면 패널이 강조 표시됩니다",
"inAppBrowser": "내장 브라우저",
"inAppBrowserDesc": ": 스크립팅 가능한 API로 터미널 옆에 브라우저를 분할 배치",
"splitPanes": "분할 패널",
"splitPanesDesc": ": 각 탭 내에서 가로 및 세로 분할",
"scriptable": "스크립팅 가능",
"scriptableDesc": ": 자동화 및 스크립팅을 위한 CLI와 소켓 API",
"gpuAccelerated": "GPU 가속",
"gpuAcceleratedDesc": ": libghostty로 부드러운 렌더링",
"lightweight": "경량",
"lightweightDesc": ": 네이티브 Swift + AppKit, Electron 없음",
"keyboardShortcuts": "키보드 단축키",
"keyboardShortcutsDesc": ": 워크스페이스, 분할, 브라우저 등을 위한 <link>다양한 단축키</link>"
},
"faqGhosttyQ": "cmux와 Ghostty는 어떤 관계인가요?",
"faqGhosttyA": "cmux는 Ghostty의 포크가 아닙니다. 앱이 웹 뷰에 WebKit을 사용하는 것처럼, 터미널 렌더링을 위한 라이브러리로 <link>libghostty</link>를 사용합니다. Ghostty는 독립형 터미널이고, cmux는 그 렌더링 엔진 위에 구축된 별도의 앱입니다.",
"faqPlatformQ": "어떤 플랫폼을 지원하나요?",
"faqPlatformA": "현재는 macOS만 지원합니다. cmux는 네이티브 Swift + AppKit 앱입니다.",
"faqAgentsQ": "cmux는 어떤 코딩 에이전트와 호환되나요?",
"faqAgentsA": "모든 에이전트와 호환됩니다. cmux는 터미널이므로 터미널에서 실행되는 모든 에이전트가 바로 작동합니다. Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent 등 커맨드라인에서 실행할 수 있는 모든 것이 지원됩니다.",
"faqNotificationsQ": "알림은 어떻게 작동하나요?",
"faqNotificationsA": "프로세스가 주의를 필요로 하면, cmux는 패널 주위에 알림 링, 사이드바에 읽지 않은 배지, 알림 팝오버, macOS 데스크톱 알림을 표시합니다. 표준 터미널 이스케이프 시퀀스(OSC 9/99/777)를 통해 자동으로 작동하며, <cliLink>cmux CLI</cliLink>와 <hooksLink>Claude Code hooks</hooksLink>로 직접 트리거할 수도 있습니다.",
"faqShortcutsQ": "키보드 단축키를 커스터마이징할 수 있나요?",
"faqShortcutsA": "터미널 키 바인딩은 Ghostty 설정 파일(<configPath>~/.config/ghostty/config</configPath>)에서 읽어옵니다. cmux 고유 단축키(워크스페이스, 분할, 브라우저, 알림)는 설정에서 커스터마이징할 수 있습니다. 전체 목록은 <link>기본 단축키</link>를 참고하세요.",
"faqTmuxQ": "tmux와 비교하면 어떤가요?",
"faqTmuxA": "tmux는 모든 터미널 안에서 실행되는 터미널 멀티플렉서입니다. cmux는 GUI를 갖춘 네이티브 macOS 앱으로, 세로 탭, 분할 패널, 내장 브라우저, 소켓 API가 모두 내장되어 있습니다. 설정 파일이나 프리픽스 키가 필요 없습니다.",
"faqFreeQ": "cmux는 무료인가요?",
"faqFreeA": "네, cmux는 무료입니다. 소스 코드는 <link>GitHub</link>에서 확인할 수 있습니다."
},
"community": {
"title": "커뮤니티",
"description": "다른 cmux 사용자 및 개발팀과 소통하세요.",
"discord": "Discord",
"discordAction": "Discord 참여하기",
"discordDesc": "커뮤니티와 대화하고, 도움을 받고, 피드백을 공유하세요",
"githubAction": "GitHub에서 보기",
"githubDesc": "저장소에 스타를 누르고, 이슈를 보고하고, 기여하세요",
"twitter": "Twitter",
"twitterAction": "X 팔로우하기",
"twitterDesc": "업데이트, 공지사항, 팁",
"youtube": "YouTube",
"youtubeAction": "구독하기",
"youtubeDesc": "데모, 튜토리얼, 워크스루",
"linkedin": "LinkedIn",
"linkedinAction": "팔로우하기",
"linkedinDesc": "회사 소식 및 엔지니어링 업데이트",
"metaTitle": "커뮤니티 — cmux",
"metaDescription": "Discord, Twitter, GitHub 등에서 cmux 커뮤니티에 참여하세요"
},
"blog": {
"title": "블로그",
"layoutTitle": "cmux blog",
"metaTitle": "블로그",
"metaDescription": "cmux 팀의 뉴스와 업데이트",
"description": "cmux 팀의 뉴스와 업데이트",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "cmux에서 Cmd+Shift+U가 워크스페이스 간에 완료된 에이전트를 탐색하는 방법.",
"date": "2026년 3월 4일",
"p1": "제가 가장 좋아하는 cmux 기능은 Cmd+Shift+U입니다. 지금 17개의 워크스페이스가 열려 있고, 각각 에이전트를 실행 중입니다. 예전에는 탭과 알림 패널을 클릭하며 어떤 것이 완료되었는지 확인했습니다. 키보드가 더 빠릅니다.",
"p2": "Cmd+Shift+U는 가장 최근의 읽지 않은 <link>알림</link>으로 이동합니다. 실제로는 마지막으로 완료된 에이전트를 의미합니다. 올바른 워크스페이스로 전환하고, 정확한 패널에 포커스하고, 어디를 봐야 하는지 깜빡여서 알려주고, 읽음으로 표시합니다. 알림이 다른 창에서 온 경우 해당 창이 앞으로 나옵니다."
},
"zenOfCmux": {
"title": "cmux의 철학",
"summary": "cmux는 솔루션이 아닌 프리미티브입니다. 조합 가능한 구성 요소를 제공하며, 워크플로는 여러분에게 달려 있습니다.",
"date": "2026년 2월 27일",
"p1": "cmux는 개발자가 도구를 어떻게 사용해야 하는지 지시하지 않습니다. CLI가 포함된 터미널과 브라우저이며, 나머지는 여러분에게 달려 있습니다.",
"p2": "cmux는 솔루션이 아닌 프리미티브입니다. 터미널, 브라우저, 알림, 워크스페이스, 분할, 탭, 그리고 이 모든 것을 제어하는 CLI를 제공합니다. cmux는 코딩 에이전트 사용에 대해 특정 방식을 강요하지 않습니다. 프리미티브로 무엇을 만들지는 여러분의 몫입니다.",
"p3": "최고의 개발자들은 항상 자신만의 도구를 만들어 왔습니다. 아직 에이전트와 함께 일하는 최적의 방법을 아무도 알아내지 못했고, 클로즈드 제품을 만드는 팀들도 마찬가지입니다. 자신의 코드베이스에 가장 가까운 개발자가 먼저 알아낼 것입니다.",
"p4": "백만 명의 개발자에게 조합 가능한 프리미티브를 제공하면, 어떤 프로덕트 팀이 하향식으로 설계하는 것보다 더 빠르게 가장 효율적인 워크플로를 함께 찾아낼 것입니다."
},
"showHnLaunch": {
"title": "Show HN에서 cmux 출시",
"summary": "cmux가 Hacker News에서 2위를 달성하고, Mitchell Hashimoto가 공유했으며, 일본에서 화제가 되었습니다.",
"date": "2026년 2월 21일",
"intro": "2월 19일에 <link>Show HN</link>에 cmux를 게시했습니다:",
"blockquote1": "저는 Claude Code와 Codex 세션을 많이 병렬로 실행합니다. 여러 분할 패널이 있는 Ghostty를 사용하고, 에이전트가 필요할 때 네이티브 macOS 알림에 의존하고 있었습니다. 하지만 Claude Code의 알림 내용은 항상 \"Claude is waiting for your input\"이라는 맥락 없는 메시지뿐이었고, 탭이 충분히 많아지면 제목도 읽을 수 없었습니다.",
"blockquote2": "몇몇 코딩 오케스트레이터를 시도해 봤지만 대부분 Electron/Tauri 앱이라 성능이 신경 쓰였습니다. 또한 GUI 오케스트레이터는 워크플로를 고정시키기 때문에 터미널을 선호합니다. 그래서 Swift/AppKit으로 네이티브 macOS 앱으로 cmux를 만들었습니다. 터미널 렌더링에 libghostty를 사용하고 기존 Ghostty 설정에서 테마, 글꼴, 색상 등을 읽어옵니다.",
"blockquote3": "주요 추가 기능은 사이드바와 알림 시스템입니다. 사이드바에는 각 워크스페이스의 git 브랜치, 작업 디렉토리, 리스닝 포트, 최신 알림 텍스트를 보여주는 세로 탭이 있습니다. 알림 시스템은 터미널 시퀀스(OSC 9/99/777)를 감지하며, Claude Code, OpenCode 등의 에이전트 훅에 연결할 수 있는 CLI(cmux notify)가 있습니다. 에이전트가 대기 중이면 패널에 파란색 링이 표시되고 사이드바의 탭이 강조되어, 분할과 탭 전체에서 어떤 것이 필요한지 알 수 있습니다. Cmd+Shift+U로 가장 최근의 읽지 않은 항목으로 이동합니다.",
"blockquote4": "내장 브라우저에는 스크립팅 가능한 API가 있습니다. 에이전트가 접근성 트리를 스냅샷하고, 엘리먼트 참조를 가져오고, 클릭하고, 폼을 작성하고, JS를 실행하고, 콘솔 로그를 읽을 수 있습니다. 터미널 옆에 브라우저 패널을 분할 배치하고 Claude Code가 개발 서버와 직접 상호작용하게 할 수 있습니다.",
"blockquote5": "모든 것이 CLI와 소켓 API를 통해 스크립팅 가능합니다. 워크스페이스/탭 생성, 패널 분할, 키 입력 전송, 브라우저에서 URL 열기 등이 가능합니다.",
"hitNumber2": "최고 2위까지 Hacker News에 올랐습니다. Mitchell Hashimoto가 공유했습니다:",
"favoriteComment": "<link>HN 스레드</link>에서 가장 좋아하는 댓글:",
"viralJapan": "놀랍게도 cmux가 일본에서 화제가 되었습니다:",
"translation": "번역: \"이거 좋아 보인다. Claude Code 같은 여러 CLI를 병렬로 실행할 때 혼란스럽지 않도록 설계된 Ghostty 기반 터미널 앱. 입력 대기 패널에 파란색 프레임이 표시되고, 자체 알림 시스템이 있다.\"",
"viralChina": "그리고 중국에서도 화제가 되었습니다:",
"extensions": "또 다른 흥미로운 점은 사람들이 cmux CLI 위에 확장 기능을 만들기 시작한 것입니다. sasha가 사이드바에 모델 정보, 토큰 사용량, 에이전트 상태를 표시하는 pi-cmux 확장을 만들었습니다:",
"scriptable": "cmux의 모든 것은 CLI를 통해 스크립팅 가능합니다. 워크스페이스 생성, 키 입력 전송, 브라우저 제어, 알림 읽기 등. cmux의 철학 중 하나는 프로그래밍 가능하고 조합 가능하여 코딩 에이전트와 작업하는 방식을 커스터마이징할 수 있다는 것입니다. 코딩 에이전트의 최신 기술은 빠르게 변하고 있으며, 따라가지 못하는 유연하지 않은 GUI 오케스트레이터에 묶이고 싶지 않을 것입니다.",
"cta": "여러 코딩 에이전트를 실행하고 있다면, <link>cmux를 사용해 보세요</link>."
},
"introducingCmux": {
"title": "cmux 소개",
"summary": "Ghostty 기반 네이티브 macOS 터미널로, 여러 AI 코딩 에이전트를 나란히 실행하도록 설계되었습니다.",
"date": "2026년 2월 12일",
"p1": "cmux는 Ghostty를 기반으로 한 네이티브 macOS 터미널 앱으로, 여러 AI 코딩 에이전트를 동시에 실행하는 개발자를 위해 처음부터 설계되었습니다.",
"whyTitle": "왜 cmux인가?",
"whyP": "현대 개발 워크플로는 여러 에이전트를 동시에 실행하는 경우가 많습니다. Claude Code, Codex 등 각 도구가 자체 터미널에서 실행됩니다. 어떤 에이전트가 주의를 필요로 하는지 추적하고 빠르게 전환하는 것이 cmux가 해결하는 문제입니다.",
"featuresTitle": "주요 기능",
"getStartedTitle": "시작하기",
"getStartedP": "Homebrew로 cmux를 설치하거나 <link>시작 가이드</link>에서 DMG를 다운로드하세요.",
"featureVerticalTabsLabel": "세로 탭",
"featureVerticalTabsDesc": "사이드바에서 모든 터미널을 한눈에 확인",
"featureNotificationsLabel": "알림 링",
"featureNotificationsDesc": "에이전트가 입력을 필요로 하면 탭이 깜빡임",
"featureSplitPanesLabel": "분할 패널",
"featureSplitPanesDesc": "각 워크스페이스 내에서 가로 및 세로 분할",
"featureSocketApiLabel": "소켓 API",
"featureSocketApiDesc": "탭 생성 및 입력 전송을 위한 프로그래밍 방식 제어",
"featureGpuLabel": "GPU 가속",
"featureGpuDesc": "libghostty로 부드러운 렌더링"
}
},
"zenOfCmux": {
"metaTitle": "cmux의 선",
"metaDescription": "cmux는 솔루션이 아닌 프리미티브입니다. 조합 가능한 조각을 제공하며 워크플로는 여러분에게 달려 있습니다."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "cmux와의 상호작용을 바꾸는 새로운 키보드 단축키."
},
"showHnLaunch": {
"metaTitle": "Show HN에서 cmux 출시",
"metaDescription": "Hacker News에서 cmux를 출시한 이야기."
},
"introducingCmux": {
"metaTitle": "cmux를 소개합니다",
"metaDescription": "macOS용 새 터미널 cmux를 만든 이유."
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "시작하기",
"metaDescription": "AI 코딩 에이전트를 위한 네이티브 macOS 터미널 cmux를 설치하세요. Homebrew, DMG 다운로드, CLI 설정, Sparkle을 통한 자동 업데이트.",
"intro": "cmux는 여러 AI 코딩 에이전트를 관리하기 위해 Ghostty 기반으로 구축된 경량 네이티브 macOS 터미널입니다. 세로 탭, 알림 패널, 소켓 기반 제어 API를 제공합니다.",
"install": "설치",
"dmgRecommended": "DMG (권장)",
"dmgDesc": ".dmg 파일을 열고 cmux를 응용 프로그램 폴더로 드래그하세요. cmux는 Sparkle을 통해 자동 업데이트되므로 한 번만 다운로드하면 됩니다.",
"homebrew": "Homebrew",
"updateLater": "나중에 업데이트하려면:",
"firstLaunchCallout": "처음 실행할 때 macOS가 확인된 개발자의 앱을 열지 확인할 수 있습니다. <strong>열기</strong>를 클릭하여 진행하세요.",
"verifyTitle": "설치 확인",
"verifyDesc": "cmux를 열면 다음이 표시됩니다:",
"verifyItem1": "왼쪽에 세로 탭 사이드바가 있는 터미널 창",
"verifyItem2": "이미 열려 있는 하나의 초기 워크스페이스",
"verifyItem3": "입력 준비가 된 Ghostty 기반 터미널",
"cliSetup": "CLI 설정",
"cliDesc": "cmux에는 자동화를 위한 커맨드라인 도구가 포함되어 있습니다. cmux 터미널 안에서는 자동으로 작동합니다. cmux 외부에서 CLI를 사용하려면 심볼릭 링크를 만드세요:",
"cliThen": "그러면 다음과 같은 명령을 실행할 수 있습니다:",
"autoUpdates": "자동 업데이트",
"autoUpdatesDesc": "cmux는 Sparkle을 통해 자동으로 업데이트를 확인합니다. 업데이트가 있으면 타이틀바에 업데이트 알림이 표시됩니다. 메뉴 바에서 cmux > 업데이트 확인을 통해 수동으로 확인할 수도 있습니다.",
"sessionRestore": "세션 복원 (현재 동작)",
"sessionRestoreDesc": "재시작 후 cmux는 레이아웃과 메타데이터만 복원합니다:",
"sessionItem1": "창, 워크스페이스, 패널 레이아웃",
"sessionItem2": "작업 디렉토리",
"sessionItem3": "터미널 스크롤백 (최선의 노력)",
"sessionItem4": "브라우저 URL 및 탐색 기록",
"sessionCallout": "cmux는 아직 라이브 프로세스 상태를 복원하지 않습니다. Claude Code, tmux, vim 등의 활성 터미널 앱 세션은 앱 재시작 후 복원되지 않습니다.",
"requirements": "요구 사항",
"reqItem1": "macOS 14.0 이상",
"reqItem2": "Apple Silicon 또는 Intel Mac",
"metaTitle": "시작하기"
},
"concepts": {
"title": "개념",
"metaDescription": "cmux가 터미널을 구성하는 방법: 창, 워크스페이스, 패널, 서피스. 사이드바, 분할, 소켓 API 뒤의 계층 구조.",
"intro": "cmux는 터미널을 4단계 계층 구조로 구성합니다. 이 단계를 이해하면 소켓 API, CLI, 키보드 단축키를 사용할 때 도움이 됩니다.",
"hierarchy": "계층 구조",
"windowTitle": "창",
"windowDesc": "macOS 창. {shortcut}으로 여러 창을 엽니다. 각 창에는 독립적인 워크스페이스가 있는 자체 사이드바가 있습니다.",
"workspaceTitle": "워크스페이스",
"workspaceDesc": "사이드바 항목. 각 워크스페이스에는 하나 이상의 분할 패널이 포함됩니다. 워크스페이스는 왼쪽 사이드바에 나열된 항목입니다.",
"workspaceNote": "UI와 키보드 단축키에서 워크스페이스는 사이드바의 탭처럼 동작하므로 \"탭\"이라고 불리기도 합니다. 소켓 API와 환경 변수에서는 \"workspace\"라는 용어를 사용합니다.",
"contextHeader": "컨텍스트",
"termUsedHeader": "사용되는 용어",
"sidebarUI": "사이드바 UI",
"tab": "탭",
"keyboardShortcuts": "키보드 단축키",
"workspaceOrTab": "워크스페이스 또는 탭",
"socketAPI": "소켓 API",
"environmentVariable": "환경 변수",
"workspaceShortcuts": "단축키: {new} (새로 만들기), {jump} (이동), {close} (닫기), {prevNext} (이전/다음)",
"paneTitle": "패널",
"paneDesc": "워크스페이스 내의 분할 영역. {right} (오른쪽) 또는 {down} (아래)로 분할하여 생성합니다. {nav} + 방향키로 패널 간 이동합니다.",
"paneNote": "각 패널은 여러 서피스(패널 내의 탭)를 포함할 수 있습니다.",
"surfaceTitle": "서피스",
"surfaceDesc": "패널 내의 탭. 각 패널에는 자체 탭 바가 있으며 여러 서피스를 포함할 수 있습니다. {new}로 생성하고, {prev} / {next} 또는 {jump}로 탐색합니다.",
"surfaceNote": "서피스는 상호작용하는 개별 터미널 또는 브라우저 세션입니다. 각 서피스에는 고유한 CMUX_SURFACE_ID 환경 변수가 있습니다.",
"panelTitle": "패널",
"panelDesc": "서피스 내부의 콘텐츠. 현재 두 가지 유형이 있습니다:",
"panelTerminal": "터미널: Ghostty 터미널 세션",
"panelBrowser": "브라우저: 내장 웹 뷰",
"panelNote": "패널은 주로 내부 개념입니다. 소켓 API와 CLI에서는 패널이 아닌 서피스와 상호작용합니다.",
"visualExample": "시각적 예시",
"visualExampleDesc": "이 예시에서:",
"visualItem1": "창에는 세 개의 워크스페이스(dev, server, logs)가 있는 사이드바가 포함됩니다",
"visualItem2": "워크스페이스 \"dev\"가 선택되어 두 개의 패널이 나란히 표시됩니다",
"visualItem3": "패널 1에는 두 개의 서피스(탭 바의 [S1]과 [S2])가 있으며, S1이 활성 상태입니다",
"visualItem4": "패널 2에는 하나의 서피스가 있습니다",
"visualItem5": "각 서피스에는 패널(이 경우 터미널)이 포함됩니다",
"summary": "요약",
"levelHeader": "단계",
"whatItIsHeader": "설명",
"createdByHeader": "생성 방법",
"identifiedByHeader": "식별 방법",
"macosWindow": "macOS 창",
"sidebarEntry": "사이드바 항목",
"splitRegion": "분할 영역",
"tabWithinPane": "패널 내의 탭",
"terminalOrBrowser": "터미널 또는 브라우저",
"automatic": "자동",
"paneIdSocket": "패널 ID (소켓 API)",
"panelIdInternal": "패널 ID (내부)",
"metaTitle": "개념"
},
"configuration": {
"title": "설정",
"metaDescription": "Ghostty 설정 파일을 통해 cmux를 구성합니다. 글꼴, 테마, 색상, 분할 패널 스타일, 스크롤백, 자동화 모드의 앱 설정.",
"intro": "cmux는 Ghostty 설정 파일에서 구성을 읽어오므로, Ghostty에서 이전하는 경우 익숙한 옵션을 사용할 수 있습니다.",
"configLocations": "설정 파일 위치",
"configLocationsDesc": "cmux는 다음 위치에서 설정을 순서대로 찾습니다:",
"createConfig": "설정 파일이 없으면 생성하세요:",
"appearance": "외관",
"font": "글꼴",
"colors": "색상",
"splitPanes": "분할 패널",
"behavior": "동작",
"scrollback": "스크롤백",
"workingDirectory": "작업 디렉토리",
"appSettings": "앱 설정",
"appSettingsDesc": "인앱 설정은 cmux > 설정({shortcut})에서 사용할 수 있습니다:",
"themeMode": "테마 모드",
"themeSystem": "시스템: macOS 외관 따르기",
"themeLight": "라이트: 항상 라이트 모드",
"themeDark": "다크: 항상 다크 모드",
"automationMode": "자동화 모드",
"automationModeDesc": "소켓 접근 수준 제어:",
"automationOff": "끄기: 소켓 제어 없음 (가장 안전)",
"automationCmux": "cmux 프로세스만: cmux 터미널 내에서 시작된 프로세스만 연결 허용",
"automationAll": "allowAll: 모든 로컬 프로세스의 연결 허용 (CMUX_SOCKET_MODE=allowAll, 환경 변수 오버라이드만)",
"automationCallout": "공유 머신에서는 \"끄기\" 또는 \"cmux 프로세스만\" 모드를 사용하는 것이 좋습니다.",
"browserLinkBehavior": "브라우저 링크 동작",
"browserLinkDesc": "설정 > 브라우저에서 cmux는 서로 다른 목적의 두 가지 호스트 목록을 제공합니다:",
"browserHostsEmbed": "내장 브라우저에서 열 호스트: 터미널 출력에서 클릭한 링크에 적용됩니다. 이 목록의 호스트는 cmux에서 열리고, 다른 호스트는 기본 브라우저에서 열립니다. 줄당 하나의 호스트 또는 와일드카드를 지원합니다(예: example.com, *.internal.example).",
"browserHostsHttp": "내장 브라우저에서 허용되는 HTTP 호스트: HTTP(비 HTTPS) URL에만 적용됩니다. 이 목록의 호스트는 경고 프롬프트 없이 cmux에서 열 수 있습니다. 기본값에는 localhost, 127.0.0.1, ::1, 0.0.0.0, *.localtest.me가 포함됩니다.",
"exampleConfig": "예시 설정",
"metaTitle": "설정"
},
"keyboardShortcuts": {
"title": "키보드 단축키",
"description": "카테고리별로 정리된 cmux의 모든 키보드 단축키.",
"metaDescription": "워크스페이스, 서피스, 분할 패널, 브라우저, 알림, 검색, 창 관리를 위한 cmux의 모든 macOS 키보드 단축키.",
"searchPlaceholder": "단축키 검색...",
"searchLabel": "키보드 단축키 검색",
"noResults": "단축키를 찾을 수 없습니다",
"noResultsHint": "다른 검색어를 사용해 보세요",
"cat": {
"workspaces": "워크스페이스",
"workspacesBlurb": "워크스페이스는 사이드바에 있습니다. 각 워크스페이스에는 자체 패널과 서피스가 있습니다.",
"surfaces": "서피스",
"surfacesBlurb": "서피스는 패널 내의 탭입니다.",
"splitPanes": "분할 패널",
"browser": "브라우저",
"notifications": "알림",
"find": "찾기",
"terminal": "터미널",
"window": "창"
},
"sc": {
"ws-new": "새 워크스페이스",
"ws-jump-1-8": "워크스페이스 18로 이동",
"ws-jump-last": "마지막 워크스페이스로 이동",
"ws-close": "워크스페이스 닫기",
"ws-rename": "워크스페이스 이름 변경",
"sf-new": "새 서피스",
"sf-prev-1": "이전 서피스",
"sf-prev-2": "이전 서피스",
"sf-jump-1-8": "서피스 18로 이동",
"sf-jump-last": "마지막 서피스로 이동",
"sf-close": "서피스 닫기",
"sp-right": "오른쪽으로 분할",
"sp-down": "아래로 분할",
"sp-focus": "방향별 패널 포커스",
"sp-browser-right": "오른쪽에 브라우저 분할",
"sp-browser-down": "아래에 브라우저 분할",
"br-open": "브라우저 서피스 열기",
"br-addr": "주소 표시줄 포커스",
"br-forward": "앞으로",
"br-reload": "페이지 새로고침",
"br-devtools": "개발자 도구 열기",
"nt-panel": "알림 패널 표시",
"nt-latest": "최근 읽지 않은 알림으로 이동",
"nt-flash": "플래시 트리거",
"fd-find": "찾기",
"fd-next-prev": "다음 찾기 / 이전 찾기",
"fd-hide": "찾기 바 숨기기",
"fd-selection": "선택 영역으로 찾기",
"tm-clear": "스크롤백 지우기",
"tm-copy": "복사 (선택 영역)",
"tm-paste": "붙여넣기",
"tm-font": "글꼴 크기 확대 / 축소",
"tm-reset": "글꼴 크기 초기화",
"wn-new": "새 창",
"wn-settings": "설정",
"wn-reload": "설정 새로고침",
"wn-quit": "종료"
},
"metaTitle": "키보드 단축키"
},
"api": {
"title": "API 레퍼런스",
"metaDescription": "cmux CLI 및 Unix 소켓 API 레퍼런스. 워크스페이스 관리, 분할 패널, 입력 제어, 알림, 사이드바 메타데이터, 환경 변수, 감지 방법.",
"intro": "cmux는 프로그래밍 방식 제어를 위한 CLI 도구와 Unix 소켓을 모두 제공합니다. 모든 명령은 두 인터페이스를 통해 사용할 수 있습니다.",
"socket": "소켓",
"buildHeader": "빌드",
"pathHeader": "경로",
"release": "릴리스",
"debug": "디버그",
"taggedDebug": "태그된 디버그 빌드",
"socketOverride": "CMUX_SOCKET_PATH 환경 변수로 오버라이드합니다. 호출당 하나의 줄바꿈으로 끝나는 JSON 요청을 전송합니다:",
"socketCallout": "JSON 소켓 요청은 method와 params를 사용해야 합니다. <legacy>'{'\"command\":\"...\"'}'</legacy>와 같은 레거시 v1 JSON 페이로드는 지원되지 않습니다.",
"accessModes": "접근 모드",
"modeHeader": "모드",
"descriptionHeader": "설명",
"howToEnableHeader": "활성화 방법",
"offMode": "소켓 비활성화",
"offEnable": "설정 UI 또는 CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "cmux 터미널 내에서 생성된 프로세스만 연결할 수 있습니다.",
"cmuxOnlyEnable": "설정 UI의 기본 모드",
"allowAllMode": "모든 로컬 프로세스의 연결을 허용합니다 (상위 프로세스 확인 없음).",
"allowAllEnable": "환경 변수 오버라이드만: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "공유 머신에서는 끄기 또는 cmux 프로세스만을 사용하세요.",
"cliOptions": "CLI 옵션",
"flagHeader": "플래그",
"customSocketPath": "커스텀 소켓 경로",
"outputJson": "JSON 형식으로 출력",
"targetWindow": "특정 창 대상 지정",
"targetWorkspace": "특정 워크스페이스 대상 지정",
"targetSurface": "특정 서피스 대상 지정",
"idFormat": "JSON 출력의 식별자 형식 제어",
"workspaceCommands": "워크스페이스 명령",
"listWorkspacesDesc": "열려 있는 모든 워크스페이스를 나열합니다.",
"newWorkspaceDesc": "새 워크스페이스를 생성합니다.",
"selectWorkspaceDesc": "특정 워크스페이스로 전환합니다.",
"currentWorkspaceDesc": "현재 활성 워크스페이스를 가져옵니다.",
"closeWorkspaceDesc": "워크스페이스를 닫습니다.",
"splitCommands": "분할 명령",
"newSplitDesc": "새 분할 패널을 생성합니다. 방향: left, right, up, down.",
"listSurfacesDesc": "현재 워크스페이스의 모든 서피스를 나열합니다.",
"focusSurfaceDesc": "특정 서피스에 포커스합니다.",
"inputCommands": "입력 명령",
"sendDesc": "포커스된 터미널에 텍스트 입력을 전송합니다.",
"sendKeyDesc": "키 입력을 전송합니다. 키: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "특정 서피스에 텍스트를 전송합니다.",
"sendKeySurfaceDesc": "특정 서피스에 키 입력을 전송합니다.",
"notificationCommands": "알림 명령",
"notifyDesc": "알림을 전송합니다.",
"listNotificationsDesc": "모든 알림을 나열합니다.",
"clearNotificationsDesc": "모든 알림을 지웁니다.",
"sidebarMetadata": "사이드바 메타데이터 명령",
"sidebarMetadataDesc": "워크스페이스의 사이드바에 상태 뱃지, 프로그레스 바, 로그 항목을 설정합니다. 빌드 스크립트, CI 통합, 상태를 한눈에 표시하려는 AI 코딩 에이전트에 유용합니다.",
"setStatusDesc": "사이드바 상태 뱃지를 설정합니다. 다른 도구가 자체 항목을 관리할 수 있도록 고유 키를 사용하세요.",
"clearStatusDesc": "키로 사이드바 상태 항목을 제거합니다.",
"listStatusDesc": "워크스페이스의 모든 사이드바 상태 항목을 나열합니다.",
"setProgressDesc": "사이드바에 프로그레스 바를 설정합니다 (0.0에서 1.0).",
"clearProgressDesc": "사이드바 프로그레스 바를 지웁니다.",
"logDesc": "사이드바에 로그 항목을 추가합니다. 레벨: info, progress, success, warning, error.",
"clearLogDesc": "모든 사이드바 로그 항목을 지웁니다.",
"listLogDesc": "사이드바 로그 항목을 나열합니다.",
"sidebarStateDesc": "모든 사이드바 메타데이터를 덤프합니다 (cwd, git 브랜치, 포트, 상태, 프로그레스, 로그).",
"utilityCommands": "유틸리티 명령",
"pingDesc": "cmux가 실행 중이고 응답하는지 확인합니다.",
"capabilitiesDesc": "사용 가능한 소켓 메서드와 현재 접근 모드를 나열합니다.",
"identifyDesc": "포커스된 창/워크스페이스/패널/서피스 컨텍스트를 표시합니다.",
"envVariables": "환경 변수",
"variableHeader": "변수",
"socketPathDesc": "CLI 및 통합에서 사용하는 소켓 경로 오버라이드",
"socketEnableDesc": "소켓 강제 활성화/비활성화 (1/0, true/false, on/off)",
"socketModeDesc": "접근 모드 오버라이드 (cmuxOnly, allowAll, off). cmux-only/cmux_only, allow-all/allow_all도 허용",
"workspaceIdDesc": "자동 설정: 현재 워크스페이스 ID",
"surfaceIdDesc": "자동 설정: 현재 서피스 ID",
"termProgramDesc": "ghostty로 설정됨",
"termDesc": "xterm-ghostty로 설정됨",
"envCallout": "레거시 CMUX_SOCKET_MODE 값 full 및 notifications는 호환성을 위해 여전히 허용됩니다.",
"detectingCmux": "cmux 감지",
"examples": "예시",
"pythonClient": "Python 클라이언트",
"shellScript": "셸 스크립트",
"buildScriptNotification": "알림이 포함된 빌드 스크립트",
"metaTitle": "API 레퍼런스"
},
"notifications": {
"title": "알림",
"metaDescription": "cmux에서 AI 에이전트와 스크립트의 데스크톱 알림을 전송합니다. CLI, OSC 99/777 이스케이프 시퀀스, Claude Code hooks 통합.",
"intro": "cmux는 데스크톱 알림을 지원하여 AI 에이전트와 스크립트가 주의가 필요할 때 알려줄 수 있습니다.",
"lifecycle": "생명주기",
"received": "수신: 알림이 패널에 나타나고, 데스크톱 알림이 발생합니다 (억제되지 않은 경우)",
"unread": "읽지 않음: 워크스페이스 탭에 배지 표시",
"read": "읽음: 해당 워크스페이스를 볼 때 지워짐",
"cleared": "지워짐: 패널에서 제거됨",
"suppression": "억제",
"suppressionDesc": "다음 경우에 데스크톱 알림이 억제됩니다:",
"suppressItem1": "cmux 창이 포커스된 경우",
"suppressItem2": "알림을 보내는 특정 워크스페이스가 활성 상태인 경우",
"suppressItem3": "알림 패널이 열려 있는 경우",
"notificationPanel": "알림 패널",
"notificationPanelDesc": "<openShortcut>⌘⇧I</openShortcut>을 눌러 알림 패널을 엽니다. 알림을 클릭하면 해당 워크스페이스로 이동합니다. <jumpShortcut>⌘⇧U</jumpShortcut>을 눌러 가장 최근의 읽지 않은 알림이 있는 워크스페이스로 바로 이동합니다.",
"customCommand": "커스텀 명령",
"customCommandDesc": "알림이 예약될 때마다 셸 명령을 실행합니다. 설정 > 앱 > 알림 명령에서 설정하세요. 명령은 /bin/sh -c를 통해 실행되며 다음 환경 변수가 제공됩니다:",
"customCommandNote": "명령은 시스템 사운드 선택기와 독립적으로 실행됩니다. 커스텀 명령만 사용하려면 선택기를 \"없음\"으로 설정하고, 시스템 사운드와 커스텀 동작을 모두 사용하려면 둘 다 유지하세요.",
"sending": "알림 보내기",
"cli": "CLI",
"osc777Title": "OSC 777 (간단)",
"osc777Desc": "RXVT 프로토콜은 제목과 본문이 있는 고정 형식을 사용합니다:",
"osc99Title": "OSC 99 (리치)",
"osc99Desc": "Kitty 프로토콜은 부제목과 알림 ID를 지원합니다:",
"variableHeader": "변수",
"descriptionHeader": "설명",
"envTitle": "알림 제목 (워크스페이스 이름 또는 앱 이름)",
"envSubtitle": "알림 부제목",
"envBody": "알림 본문 텍스트",
"cmpTitleBody": "제목 + 본문",
"cmpSubtitle": "부제목",
"cmpNotificationId": "알림 ID",
"cmpComplexity": "복잡도",
"cmpYes": "예",
"cmpNo": "아니오",
"cmpHigher": "높음",
"cmpLower": "낮음",
"featureHeader": "기능",
"comparisonCallout": "간단한 알림에는 OSC 777을 사용하세요. 부제목이나 알림 ID가 필요한 경우 OSC 99를 사용하세요. 가장 쉬운 통합을 위해 CLI(cmux notify)를 사용하세요.",
"claudeCodeHooks": "Claude Code hooks",
"claudeCodeHooksDesc": "cmux는 hooks를 통해 <link>Claude Code</link>와 통합하여 작업이 완료되면 알려줍니다.",
"createHookScript": "1. 훅 스크립트 생성",
"configureClaude": "2. Claude Code 설정",
"restartNote": "hooks를 적용하려면 Claude Code를 재시작하세요.",
"integrationExamples": "통합 예시",
"notifyAfterLong": "긴 명령 후 알림",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux 패스스루",
"tmuxDesc": "cmux 내에서 tmux를 사용하는 경우 패스스루를 활성화하세요:",
"metaTitle": "알림"
},
"browserAutomation": {
"title": "브라우저 자동화",
"metaDescription": "내비게이션, DOM 상호작용, 대기, 검사, JavaScript 평가, 탭, 다이얼로그, 프레임, 다운로드, 브라우저 상태를 위한 cmux 브라우저 명령 레퍼런스.",
"intro": "cmux 브라우저 명령 그룹은 cmux 브라우저 서피스에 대한 브라우저 자동화를 제공합니다. 내비게이션, DOM 엘리먼트 상호작용, 페이지 상태 검사, JavaScript 평가, 브라우저 세션 데이터 관리에 사용합니다.",
"commandIndex": "명령 인덱스",
"categoryHeader": "카테고리",
"subcommandsHeader": "하위 명령",
"navAndTargeting": "내비게이션 및 대상 지정",
"waiting": "대기",
"domInteraction": "DOM 상호작용",
"inspection": "검사",
"jsAndInjection": "JavaScript 및 주입",
"framesDialogsDownloads": "프레임, 다이얼로그, 다운로드",
"stateAndSession": "상태 및 세션 데이터",
"tabsAndLogs": "탭 및 로그",
"targetingSurface": "브라우저 서피스 대상 지정",
"targetingDesc": "대부분의 하위 명령에는 대상 서피스가 필요합니다. 위치 인수 또는 --surface로 전달할 수 있습니다.",
"navigation": "내비게이션",
"waitingSection": "대기",
"waitingDesc": "셀렉터, 텍스트, URL 프래그먼트, 로드 상태 또는 JavaScript 조건이 충족될 때까지 차단하려면 wait를 사용하세요.",
"domSection": "DOM 상호작용",
"domDesc": "변경 작업은 스크립트에서 빠른 확인을 위해 --snapshot-after를 지원합니다.",
"inspectionSection": "검사",
"inspectionDesc": "스크립트에는 구조화된 getter를 사용하고, 사람이 검토할 때는 스냅샷/스크린샷을 사용하세요.",
"jsSection": "JavaScript 실행 및 주입",
"stateSection": "상태",
"stateDesc": "세션 데이터 명령은 쿠키, 로컬/세션 스토리지, 전체 브라우저 상태 스냅샷을 다룹니다.",
"tabsSection": "탭",
"tabsDesc": "브라우저 탭 작업은 활성 브라우저 탭 그룹의 브라우저 서피스에 매핑됩니다.",
"consoleSection": "콘솔 및 오류",
"dialogsSection": "다이얼로그",
"framesSection": "프레임",
"downloadsSection": "다운로드",
"commonPatterns": "일반적인 패턴",
"patternNavigate": "내비게이션, 대기, 검사",
"patternForm": "폼 작성 및 성공 텍스트 확인",
"patternDebug": "실패 시 디버그 아티팩트 캡처",
"patternSession": "브라우저 세션 저장 및 복원",
"metaTitle": "브라우저 자동화"
},
"changelog": {
"title": "변경 로그",
"metaDescription": "cmux 릴리스 노트 및 버전 히스토리. 네이티브 macOS 터미널의 새로운 기능, 버그 수정, 변경 사항.",
"metaTitle": "변경 내역"
},
"navItems": {
"gettingStarted": "시작하기",
"concepts": "개념",
"configuration": "설정",
"keyboardShortcuts": "키보드 단축키",
"apiReference": "API 레퍼런스",
"browserAutomation": "브라우저 자동화",
"notifications": "알림",
"changelog": "변경 로그"
}
},
"legal": {
"privacyPolicy": "개인정보 처리방침",
"termsOfService": "이용약관",
"eula": "EULA"
},
"wallOfLove": {
"title": "사랑의 벽",
"description": "사람들이 cmux에 대해 말하는 것."
},
"testimonials": {
"mitchellh": "또 하나의 libghostty 기반 프로젝트. 이번엔 세로 탭이 있는 macOS 터미널로, 터미널 기반 AI 에이전트 워크플로를 많이 쓰는 사람을 위해 정리/알림 기능과 내장 스크립팅 가능한 브라우저를 탑재.",
"schrockn": "정확히 찾고 있던 제품이에요. 오늘 아침 두 시간 쓰고 벌써 반했습니다.",
"egrefen": "주말 내내 써봤는데 정말 대단해요.",
"max4c": "지난 2주간 가장 좋아하는 도구",
"asaza": "cmux 너무 좋아보여서 드디어 VSCode에 작별 인사할 때인 것 같다",
"johnthedebs": "이거 진짜 대단해 보이네요. 특히 프로그래밍 가능성, 레이어드 UI, API가 있는 브라우저가 마음에 듭니다. 빨리 써보고 싶어요. Mitchell Hashimoto가 libghostty를 만들어준 것에도 감사합니다. 터미널 사용자에게 신나는 시대네요.",
"joeriddles": "터미널에 세로 탭이라니! 생각해 본 적이 없었어요. Firefox 세로 탭은 쓰면서 말이죠.",
"dchu17": "써봤는데 꽤 직관적이었어요. 잘 만드셨네요!",
"afruth": "마음에 들어요. 어제 세 개 프로젝트를 각각 여러 worktree로 병렬 작업했는데, lazygit이랑 yazi/nvim이랑 같이 쓰니까 여러 ghostty/iTerm 인스턴스를 쫓아다닐 필요 없이 평소보다 생산성이 올랐어요. tmux보다 자연스러운 느낌이에요.",
"northprint": "cmux 좋아 보여서 써봤는데, 좋다",
"indykish": "cmux 꽤 괜찮네요.",
"kataring": "cmux.dev로 갈아탔다",
"scottw": "정말 유용한 발견이에요. 충분히 추천할 수 없을 정도로.",
"johnblythe": "주말에 깔아봤는데 좋아요. 이런 걸 기다리고 있었어요.",
"bchris91": "딱 원하던 거예요. 정말 대단해요, 감사합니다!",
"connorelsea": "일주일째 쓰고 있는데 환상적이에요. WIP 작업마다 세로 탭 하나씩. 안에는 한쪽에 Claude, 다른 쪽에 PR과 리소스 브라우저. 작업 전환하면서 정리가 돼요. 스킬로 Claude에게 CI를 재귀적으로 감시시키는 것도 가능. 솔직히 깨달음을 얻은 기분.",
"tonkotsuboy": "연초에 Warp에서 Ghostty로 갈아탔는데, 이제는 cmux로 갈아탔어요. 세로 탭이 편하고, Claude Code 작업이 끝나면 알림이 와서 좋아요. Ghostty 기반이라 빠른 성능은 그대로. Ghostty에서 설정한 브랜치 표시랑 자동완성도 그대로 쓸 수 있어요."
},
"languageSwitcher": {
"label": "언어"
}
}

587
web/messages/no.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — Terminalen bygget for multitasking",
"description": "Nativ macOS-terminal bygget på Ghostty. Fungerer med Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider og ethvert CLI-verktøy. Vertikale faner, varselsringer, delte paneler og en socket-API.",
"ogDescription": "Nativ macOS-terminal for AI-kodingsagenter. Fungerer med Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider og ethvert CLI-verktøy."
},
"common": {
"downloadForMac": "Last ned for Mac",
"viewOnGitHub": "Se på GitHub",
"closeMenu": "Lukk meny",
"openMenu": "Åpne meny",
"toggleTheme": "Bytt tema",
"backToBlog": "Tilbake til bloggen",
"readTheDocs": "Les dokumentasjonen",
"viewChangelog": "Se endringslogg"
},
"nav": {
"docs": "Dokumentasjon",
"blog": "Blogg",
"changelog": "Endringslogg",
"community": "Fellesskap",
"github": "GitHub"
},
"footer": {
"product": "Produkt",
"resources": "Ressurser",
"legal": "Juridisk",
"social": "Sosiale medier",
"blog": "Blogg",
"community": "Fellesskap",
"docs": "Dokumentasjon",
"changelog": "Endringslogg",
"privacy": "Personvern",
"terms": "Vilkår",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "Kontakt",
"copyright": "© {year} Manaflow",
"language": "Språk"
},
"home": {
"taglinePrefix": "Terminalen bygget for ",
"typingCodingAgents": "kodeagenter",
"typingMultitasking": "multitasking",
"subtitle": "Nativ macOS-app bygget på Ghostty. Vertikale faner, varselsringer når agenter trenger oppmerksomhet, delte paneler og en socket-API for automatisering.",
"features": "Funksjoner",
"faq": "Vanlige spørsmål",
"communitySection": "Fellesskap",
"feature": {
"verticalTabs": "Vertikale faner",
"verticalTabsDesc": ": sidefeltet viser git-gren, arbeidskatalog, porter og varseltekst",
"notificationRings": "Varselsringer",
"notificationRingsDesc": ": paneler lyser opp når agenter trenger oppmerksomhet",
"inAppBrowser": "Innebygd nettleser",
"inAppBrowserDesc": ": del en nettleser ved siden av terminalen med et skriptbart API",
"splitPanes": "Delte paneler",
"splitPanesDesc": ": horisontale og vertikale delinger innenfor hver fane",
"scriptable": "Skriptbar",
"scriptableDesc": ": CLI og socket-API for automatisering og skripting",
"gpuAccelerated": "GPU-akselerert",
"gpuAcceleratedDesc": ": drevet av libghostty for jevn gjengivelse",
"lightweight": "Lettvekts",
"lightweightDesc": ": nativ Swift + AppKit, ingen Electron",
"keyboardShortcuts": "Tastatursnarveier",
"keyboardShortcutsDesc": ": <link>omfattende snarveier</link> for arbeidsområder, delinger, nettleser og mer"
},
"faqGhosttyQ": "Hva er forholdet mellom cmux og Ghostty?",
"faqGhosttyA": "cmux er ikke en fork av Ghostty. Den bruker <link>libghostty</link> som et bibliotek for terminalgjengivelse, på samme måte som apper bruker WebKit for nettvisninger. Ghostty er en frittstående terminal; cmux er en annen app bygget på toppen av gjengivelsesmotoren.",
"faqPlatformQ": "Hvilke plattformer støttes?",
"faqPlatformA": "Bare macOS, foreløpig. cmux er en nativ Swift + AppKit-app.",
"faqAgentsQ": "Hvilke kodeagenter fungerer cmux med?",
"faqAgentsA": "Alle. cmux er en terminal, så enhver agent som kjører i en terminal fungerer med en gang: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent og alt annet du kan starte fra kommandolinjen.",
"faqNotificationsQ": "Hvordan fungerer varsler?",
"faqNotificationsA": "Når en prosess trenger oppmerksomhet, viser cmux varselsringer rundt paneler, uleste merker i sidefeltet, en varselspopover og et macOS-skrivebordvarsel. Disse utløses automatisk via standard terminal-escape-sekvenser (OSC 9/99/777), eller du kan utløse dem med <cliLink>cmux CLI</cliLink> og <hooksLink>Claude Code hooks</hooksLink>.",
"faqShortcutsQ": "Kan jeg tilpasse tastatursnarveier?",
"faqShortcutsA": "Terminaltastebindinger leses fra Ghostty-konfigurasjonsfilen din (<configPath>~/.config/ghostty/config</configPath>). cmux-spesifikke snarveier (arbeidsområder, delinger, nettleser, varsler) kan tilpasses i Innstillinger. Se <link>standardsnarveiene</link> for en komplett liste.",
"faqTmuxQ": "Hvordan sammenligner det seg med tmux?",
"faqTmuxA": "tmux er en terminalmultiplekser som kjører inne i en hvilken som helst terminal. cmux er en nativ macOS-app med et GUI: vertikale faner, delte paneler, en innebygd nettleser og et socket-API er alle innebygd. Ingen konfigurasjonsfiler eller prefikstaster nødvendig.",
"faqFreeQ": "Er cmux gratis?",
"faqFreeA": "Ja, cmux er gratis å bruke. Kildekoden er tilgjengelig på <link>GitHub</link>."
},
"community": {
"title": "Fellesskap",
"description": "Ta kontakt med andre cmux-brukere og teamet bak det.",
"discord": "Discord",
"discordAction": "Bli med i vår Discord",
"discordDesc": "Chat med fellesskapet, få hjelp og del tilbakemeldinger",
"githubAction": "Se på GitHub",
"githubDesc": "Gi repoen en stjerne, rapporter problemer og bidra",
"twitter": "Twitter",
"twitterAction": "Følg på X",
"twitterDesc": "Oppdateringer, kunngjøringer og tips",
"youtube": "YouTube",
"youtubeAction": "Abonner",
"youtubeDesc": "Demoer, veiledninger og gjennomganger",
"linkedin": "LinkedIn",
"linkedinAction": "Følg oss",
"linkedinDesc": "Bedriftsnyheter og tekniske oppdateringer",
"metaTitle": "Fellesskap — cmux",
"metaDescription": "Bli med i cmux-fellesskapet på Discord, Twitter, GitHub og mer"
},
"blog": {
"title": "Blogg",
"layoutTitle": "cmux blog",
"metaTitle": "Blogg",
"metaDescription": "Nyheter og oppdateringer fra cmux-teamet",
"description": "Nyheter og oppdateringer fra cmux-teamet",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Hvordan Cmd+Shift+U navigerer mellom ferdige agenter på tvers av arbeidsområder i cmux.",
"date": "4. mars 2026",
"p1": "Min favorittfunksjon i cmux er Cmd+Shift+U. Jeg har 17 arbeidsområder åpne akkurat nå, hver kjører en agent. Jeg pleide å klikke gjennom faner og varselpanelet for å finne ut hva som var ferdig. Å skrive er raskere.",
"p2": "Cmd+Shift+U hopper til det nyeste uleste <link>varselet</link>. I praksis betyr det den siste agenten som ble ferdig. Den bytter til riktig arbeidsområde, fokuserer det nøyaktige panelet, blinker det slik at du ser hvor du skal se, og markerer det som lest. Hvis varselet kom fra et annet vindu, kommer det vinduet frem."
},
"zenOfCmux": {
"title": "cmux sin Zen",
"summary": "cmux er en primitiv, ikke en løsning. Den gir deg komponerbare deler, og arbeidsflyten er opp til deg.",
"date": "27. februar 2026",
"p1": "cmux dikterer ikke hvordan utviklere bruker verktøyene sine. Det er en terminal og nettleser med en CLI, og resten er opp til deg.",
"p2": "cmux er en primitiv, ikke en løsning. Den gir deg en terminal, en nettleser, varsler, arbeidsområder, delinger, faner og en CLI for å kontrollere alt. cmux tvinger deg ikke inn i en bestemt måte å bruke kodeagenter på. Det du bygger med primitivene er ditt.",
"p3": "De beste utviklerne har alltid bygget sine egne verktøy. Ingen har funnet ut den beste måten å jobbe med agenter på ennå, og teamene som bygger lukkede produkter har definitivt ikke gjort det heller. Utviklerne som er nærmest sine egne kodebaser vil finne det ut først.",
"p4": "Gi en million utviklere komponerbare primitiver, og de vil kollektivt finne de mest effektive arbeidsflytene raskere enn noe produktteam kunne designe ovenfra og ned."
},
"showHnLaunch": {
"title": "Lansering av cmux på Show HN",
"summary": "cmux nådde #2 på Hacker News, ble delt av Mitchell Hashimoto og gikk viralt i Japan.",
"date": "21. februar 2026",
"intro": "Vi publiserte cmux på <link>Show HN</link> den 19. februar:",
"blockquote1": "Jeg kjører mange Claude Code- og Codex-økter parallelt. Jeg brukte Ghostty med en haug med delte paneler og stolte på native macOS-varsler for å vite når en agent trengte meg. Men Claude Code sitt varselinnhold er alltid bare \"Claude is waiting for your input\" uten kontekst, og med nok åpne faner kunne jeg ikke engang lese titlene lenger.",
"blockquote2": "Jeg prøvde noen kodeorkestratorer, men de fleste var Electron/Tauri-apper og ytelsen plaget meg. Jeg foretrekker også bare terminalen siden GUI-orkestratorer låser deg inn i arbeidsflyten deres. Så jeg bygget cmux som en nativ macOS-app i Swift/AppKit. Den bruker libghostty for terminalgjengivelse og leser din eksisterende Ghostty-konfigurasjon for temaer, fonter, farger og mer.",
"blockquote3": "Hovedtilleggene er sidefeltet og varselsystemet. Sidefeltet har vertikale faner som viser git-gren, arbeidskatalog, lyttende porter og den nyeste varselteksten for hvert arbeidsområde. Varselsystemet fanger opp terminalsekvenser (OSC 9/99/777) og har en CLI (cmux notify) du kan koble til agentkroker for Claude Code, OpenCode, osv. Når en agent venter, får panelet en blå ring og fanen lyser opp i sidefeltet, slik at jeg kan se hvilken som trenger meg på tvers av delinger og faner. Cmd+Shift+U hopper til den nyeste uleste.",
"blockquote4": "Den innebygde nettleseren har et skriptbart API. Agenter kan ta et øyeblikksbilde av tilgjengelighetstreet, hente elementreferanser, klikke, fylle ut skjemaer, kjøre JS og lese konsollmeldinger. Du kan dele et nettleserpanel ved siden av terminalen og la Claude Code samhandle direkte med utviklingsserveren din.",
"blockquote5": "Alt er skriptbart gjennom CLI og socket-API: opprette arbeidsområder/faner, dele paneler, sende tastetrykk, åpne URL-er i nettleseren.",
"hitNumber2": "På det meste nådde den #2 på Hacker News. Mitchell Hashimoto delte den:",
"favoriteComment": "Min favorittkommentar fra <link>HN-tråden</link>:",
"viralJapan": "Overraskende nok gikk cmux viralt i Japan:",
"translation": "Oversettelse: \"Dette ser bra ut. En Ghostty-basert terminalapp designet slik at du ikke går deg vill når du kjører flere CLI-er som Claude Code parallelt. Panelet som venter på inndata får en blå ramme, og den har sitt eget varselsystem.\"",
"viralChina": "Og semi-viralt i Kina:",
"extensions": "En annen spennende ting var å se folk bygge på toppen av cmux CLI. sasha bygget en pi-cmux-utvidelse som viser modellinformasjon, tokenbruk og agentstatus i sidefeltet:",
"scriptable": "Alt i cmux er skriptbart gjennom CLI: opprette arbeidsområder, sende tastetrykk, kontrollere nettleseren, lese varsler. En del av cmux-filosofien er å være programmerbar og komponerbar, slik at folk kan tilpasse måten de jobber med kodeagenter på. State of the art for kodeagenter endrer seg raskt, og du vil ikke bli låst inn i en ufleksibel GUI-orkestrator som ikke kan holde følge.",
"cta": "Hvis du kjører flere kodeagenter, <link>prøv cmux</link>."
},
"introducingCmux": {
"title": "Vi introduserer cmux",
"summary": "En nativ macOS-terminal bygget på Ghostty, designet for å kjøre flere AI-kodeagenter side om side.",
"date": "12. februar 2026",
"p1": "cmux er en nativ macOS-terminalapplikasjon bygget på toppen av Ghostty, designet fra bunnen av for utviklere som kjører flere AI-kodeagenter samtidig.",
"whyTitle": "Hvorfor cmux?",
"whyP": "Moderne utviklingsarbeidsflyter involverer ofte å kjøre flere agenter samtidig. Claude Code, Codex og andre verktøy, hver i sin egen terminal. Å holde oversikt over hvilke som trenger oppmerksomhet og raskt bytte mellom dem er problemet cmux løser.",
"featuresTitle": "Nøkkelfunksjoner",
"getStartedTitle": "Kom i gang",
"getStartedP": "Installer cmux via Homebrew eller last ned DMG-filen fra <link>kom i gang-guiden</link>.",
"featureVerticalTabsLabel": "Vertikale faner",
"featureVerticalTabsDesc": "se alle terminalene dine på et øyeblikk i sidefeltet",
"featureNotificationsLabel": "Varselsringer",
"featureNotificationsDesc": "faner blinker når en agent trenger inndata",
"featureSplitPanesLabel": "Delte paneler",
"featureSplitPanesDesc": "horisontale og vertikale delinger innenfor hvert arbeidsområde",
"featureSocketApiLabel": "Socket-API",
"featureSocketApiDesc": "programmatisk kontroll for å opprette faner og sende inndata",
"featureGpuLabel": "GPU-akselerert",
"featureGpuDesc": "drevet av libghostty for jevn gjengivelse"
}
},
"zenOfCmux": {
"metaTitle": "Zen i cmux",
"metaDescription": "cmux er en primitiv, ikke en løsning. Det gir deg komponerbare deler, og arbeidsflyten er opp til deg."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "Den nye tastatursnarveien som endrer hvordan du samhandler med cmux."
},
"showHnLaunch": {
"metaTitle": "Lansering av cmux på Show HN",
"metaDescription": "Historien bak lanseringen av cmux på Hacker News."
},
"introducingCmux": {
"metaTitle": "Vi presenterer cmux",
"metaDescription": "Hvorfor vi bygde cmux, en ny terminal for macOS."
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "Kom i gang",
"metaDescription": "Installer cmux, den native macOS-terminalen for AI-kodeagenter. Homebrew, DMG-nedlasting, CLI-oppsett og automatiske oppdateringer via Sparkle.",
"intro": "cmux er en lettvekts, nativ macOS-terminal bygget på Ghostty for å administrere flere AI-kodeagenter. Den har vertikale faner, et varselpanel og et socket-basert kontroll-API.",
"install": "Installer",
"dmgRecommended": "DMG (anbefalt)",
"dmgDesc": "Åpne .dmg-filen og dra cmux til Programmer-mappen. cmux oppdaterer automatisk via Sparkle, så du trenger bare å laste ned én gang.",
"homebrew": "Homebrew",
"updateLater": "For å oppdatere senere:",
"firstLaunchCallout": "Ved første oppstart kan macOS be deg bekrefte at du vil åpne en app fra en identifisert utvikler. Klikk <strong>Åpne</strong> for å fortsette.",
"verifyTitle": "Bekreft installasjonen",
"verifyDesc": "Åpne cmux, og du skal se:",
"verifyItem1": "Et terminalvindu med en vertikal fanesidebar på venstre side",
"verifyItem2": "Ett innledende arbeidsområde allerede åpent",
"verifyItem3": "Den Ghostty-drevne terminalen klar for inndata",
"cliSetup": "CLI-oppsett",
"cliDesc": "cmux inkluderer et kommandolinjeverktøy for automatisering. I cmux-terminaler fungerer det automatisk. For å bruke CLI utenfor cmux, opprett en symbolsk lenke:",
"cliThen": "Deretter kan du kjøre kommandoer som:",
"autoUpdates": "Automatiske oppdateringer",
"autoUpdatesDesc": "cmux sjekker automatisk etter oppdateringer via Sparkle. Når en oppdatering er tilgjengelig, ser du en oppdateringsindikator i tittellinjen. Du kan også sjekke manuelt via cmux > Check for Updates i menylinjen.",
"sessionRestore": "Sesjongjenoppretting (nåværende oppførsel)",
"sessionRestoreDesc": "Etter omstart gjenoppretter cmux kun layout og metadata:",
"sessionItem1": "Vindu-, arbeidsområde- og panellayout",
"sessionItem2": "Arbeidskataloger",
"sessionItem3": "Terminal scrollback (best effort)",
"sessionItem4": "Nettleser-URL og navigasjonshistorikk",
"sessionCallout": "cmux gjenoppretter ikke live prosesstilstand ennå. Aktive terminalappsesjoner som Claude Code, tmux og vim gjenopptas ikke etter omstart av appen.",
"requirements": "Systemkrav",
"reqItem1": "macOS 14.0 eller nyere",
"reqItem2": "Apple Silicon eller Intel Mac",
"metaTitle": "Kom i gang"
},
"concepts": {
"title": "Konsepter",
"metaDescription": "Hvordan cmux organiserer terminaler: vinduer, arbeidsområder, paneler og overflater. Hierarkiet bak sidefeltet, delingene og socket-API-et.",
"intro": "cmux organiserer terminalene dine i et hierarki med fire nivåer. Å forstå disse nivåene hjelper når du bruker socket-API, CLI og tastatursnarveier.",
"hierarchy": "Hierarki",
"windowTitle": "Vindu",
"windowDesc": "Et macOS-vindu. Åpne flere vinduer med {shortcut}. Hvert vindu har sitt eget sidefelt med uavhengige arbeidsområder.",
"workspaceTitle": "Arbeidsområde",
"workspaceDesc": "En oppføring i sidefeltet. Hvert arbeidsområde inneholder ett eller flere delte paneler. Arbeidsområder er det du ser i venstre sidefelt.",
"workspaceNote": "I brukergrensesnittet og tastatursnarveier kalles arbeidsområder ofte \"faner\" fordi de oppfører seg som faner i sidefeltet. Socket-API og miljøvariabler bruker termen \"workspace\".",
"contextHeader": "Kontekst",
"termUsedHeader": "Begrep brukt",
"sidebarUI": "Sidefelt-UI",
"tab": "Fane",
"keyboardShortcuts": "Tastatursnarveier",
"workspaceOrTab": "Arbeidsområde eller fane",
"socketAPI": "Socket-API",
"environmentVariable": "Miljøvariabel",
"workspaceShortcuts": "Snarveier: {new} (ny), {jump} (hopp), {close} (lukk), {prevNext} (forrige/neste)",
"paneTitle": "Panel",
"paneDesc": "Et delt område innenfor et arbeidsområde. Opprettet ved å dele med {right} (høyre) eller {down} (ned). Naviger mellom paneler med {nav} + piltaster.",
"paneNote": "Hvert panel kan inneholde flere overflater (faner innenfor panelet).",
"surfaceTitle": "Overflate",
"surfaceDesc": "En fane innenfor et panel. Hvert panel har sin egen fanelinje og kan inneholde flere overflater. Opprettet med {new}, naviger med {prev} / {next} eller {jump}.",
"surfaceNote": "Overflater er de individuelle terminal- eller nettleseøktene du samhandler med. Hver overflate har sin egen CMUX_SURFACE_ID miljøvariabel.",
"panelTitle": "Panel",
"panelDesc": "Innholdet inne i en overflate. For tiden to typer:",
"panelTerminal": "Terminal: en Ghostty-terminaløkt",
"panelBrowser": "Nettleser: en innebygd webvisning",
"panelNote": "Panel er hovedsakelig et internt konsept. I socket-API og CLI samhandler du med overflater i stedet for paneler direkte.",
"visualExample": "Visuelt eksempel",
"visualExampleDesc": "I dette eksempelet:",
"visualItem1": "Vinduet inneholder et sidefelt med tre arbeidsområder (dev, server, logs)",
"visualItem2": "Arbeidsområdet \"dev\" er valgt og viser to paneler side om side",
"visualItem3": "Panel 1 har to overflater ([S1] og [S2] i fanelinjen), med S1 aktiv",
"visualItem4": "Panel 2 har én overflate",
"visualItem5": "Hver overflate inneholder et panel (en terminal i dette tilfellet)",
"summary": "Oppsummering",
"levelHeader": "Nivå",
"whatItIsHeader": "Hva det er",
"createdByHeader": "Opprettet av",
"identifiedByHeader": "Identifisert av",
"macosWindow": "macOS-vindu",
"sidebarEntry": "Sidefeltoppføring",
"splitRegion": "Delt område",
"tabWithinPane": "Fane i panel",
"terminalOrBrowser": "Terminal eller nettleser",
"automatic": "Automatisk",
"paneIdSocket": "Panel-ID (socket-API)",
"panelIdInternal": "Panel-ID (intern)",
"metaTitle": "Konsepter"
},
"configuration": {
"title": "Konfigurasjon",
"metaDescription": "Konfigurer cmux via Ghostty-konfigurasjonsfiler. Font, tema, farger, stil for delte paneler, scrollback og appinnstillinger for automatiseringsmodus.",
"intro": "cmux leser konfigurasjon fra Ghostty-konfigurasjonsfiler, slik at du får kjente alternativer hvis du kommer fra Ghostty.",
"configLocations": "Plasseringer for konfigurasjonsfiler",
"configLocationsDesc": "cmux ser etter konfigurasjon på disse plasseringene (i rekkefølge):",
"createConfig": "Opprett konfigurasjonsfilen hvis den ikke finnes:",
"appearance": "Utseende",
"font": "Font",
"colors": "Farger",
"splitPanes": "Delte paneler",
"behavior": "Oppførsel",
"scrollback": "Scrollback",
"workingDirectory": "Arbeidskatalog",
"appSettings": "Appinnstillinger",
"appSettingsDesc": "Innstillinger i appen er tilgjengelige via cmux > Settings ({shortcut}):",
"themeMode": "Temamodus",
"themeSystem": "System: følg macOS-utseende",
"themeLight": "Lys: alltid lys modus",
"themeDark": "Mørk: alltid mørk modus",
"automationMode": "Automatiseringsmodus",
"automationModeDesc": "Tilgangsnivå for kontrollsocket:",
"automationOff": "Av: ingen socket-kontroll (mest sikkert)",
"automationCmux": "Bare cmux-prosesser: bare prosesser startet i cmux-terminaler kan koble til",
"automationAll": "allowAll: tillat enhver lokal prosess å koble til (CMUX_SOCKET_MODE=allowAll, kun miljøvariabeloverstyring)",
"automationCallout": "På delte maskiner, vurder å bruke \"Av\" eller \"Bare cmux-prosesser\"-modus.",
"browserLinkBehavior": "Nettleser-lenkeatferd",
"browserLinkDesc": "I Innstillinger > Nettleser eksponerer cmux to vertslister med ulike formål:",
"browserHostsEmbed": "Verter å åpne i innebygd nettleser: gjelder lenker klikket fra terminalutdata. Verter på denne listen åpnes i cmux; andre verter åpnes i standardnettleseren din. Støtter én vert eller jokertegn per linje (for eksempel: example.com, *.internal.example).",
"browserHostsHttp": "HTTP-verter tillatt i innebygd nettleser: gjelder kun HTTP (ikke-HTTPS) URL-er. Verter på denne listen kan åpnes i cmux uten advarsel. Standardverdier inkluderer localhost, 127.0.0.1, ::1, 0.0.0.0 og *.localtest.me.",
"exampleConfig": "Eksempelkonfigurasjon",
"metaTitle": "Konfigurasjon"
},
"keyboardShortcuts": {
"title": "Tastatursnarveier",
"description": "Alle tastatursnarveier tilgjengelige i cmux, gruppert etter kategori.",
"metaDescription": "Alle cmux-tastatursnarveier for arbeidsområder, overflater, delte paneler, nettleser, varsler, søk og vindusbehandling på macOS.",
"searchPlaceholder": "Søk etter snarveier...",
"searchLabel": "Søk i tastatursnarveier",
"noResults": "Ingen snarveier funnet",
"noResultsHint": "Prøv et annet søkeord",
"cat": {
"workspaces": "Arbeidsområder",
"workspacesBlurb": "Arbeidsområder lever i sidefeltet. Hvert arbeidsområde har sitt eget sett med paneler og overflater.",
"surfaces": "Overflater",
"surfacesBlurb": "Overflater er faner inne i et panel.",
"splitPanes": "Delte paneler",
"browser": "Nettleser",
"notifications": "Varsler",
"find": "Finn",
"terminal": "Terminal",
"window": "Vindu"
},
"sc": {
"ws-new": "Nytt arbeidsområde",
"ws-jump-1-8": "Hopp til arbeidsområde 18",
"ws-jump-last": "Hopp til siste arbeidsområde",
"ws-close": "Lukk arbeidsområde",
"ws-rename": "Gi arbeidsområde nytt navn",
"sf-new": "Ny overflate",
"sf-prev-1": "Forrige overflate",
"sf-prev-2": "Forrige overflate",
"sf-jump-1-8": "Hopp til overflate 18",
"sf-jump-last": "Hopp til siste overflate",
"sf-close": "Lukk overflate",
"sp-right": "Del til høyre",
"sp-down": "Del nedover",
"sp-focus": "Fokuser panel retningsbestemt",
"sp-browser-right": "Del nettleser til høyre",
"sp-browser-down": "Del nettleser nedover",
"br-open": "Åpne nettleseroverflate",
"br-addr": "Fokuser adressefeltet",
"br-forward": "Fremover",
"br-reload": "Last inn side på nytt",
"br-devtools": "Åpne utviklerverktøy",
"nt-panel": "Vis varselpanel",
"nt-latest": "Hopp til siste uleste",
"nt-flash": "Utløs blink",
"fd-find": "Finn",
"fd-next-prev": "Finn neste / forrige",
"fd-hide": "Skjul søkelinje",
"fd-selection": "Bruk utvalg til søk",
"tm-clear": "Tøm scrollback",
"tm-copy": "Kopier (med utvalg)",
"tm-paste": "Lim inn",
"tm-font": "Øk / reduser skriftstørrelse",
"tm-reset": "Tilbakestill skriftstørrelse",
"wn-new": "Nytt vindu",
"wn-settings": "Innstillinger",
"wn-reload": "Last inn konfigurasjon på nytt",
"wn-quit": "Avslutt"
},
"metaTitle": "Tastatursnarveier"
},
"api": {
"title": "API-referanse",
"metaDescription": "cmux CLI og Unix socket API-referanse. Arbeidsområdeadministrasjon, delte paneler, inndatakontroll, varsler, sidefeltmetadata, miljøvariabler og deteksjonsmetoder.",
"intro": "cmux tilbyr både et CLI-verktøy og en Unix-socket for programmatisk kontroll. Hver kommando er tilgjengelig gjennom begge grensesnittene.",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "Sti",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Tagget debug-build",
"socketOverride": "Overstyr med CMUX_SOCKET_PATH-miljøvariabelen. Send én JSON-forespørsel terminert med linjeskift per kall:",
"socketCallout": "JSON-socketforespørsler må bruke method og params. Eldre v1 JSON-nyttelaster som <legacy>'{'\"command\":\"...\"'}'</legacy> støttes ikke.",
"accessModes": "Tilgangsmoduser",
"modeHeader": "Modus",
"descriptionHeader": "Beskrivelse",
"howToEnableHeader": "Hvordan aktivere",
"offMode": "Socket deaktivert",
"offEnable": "Innstillings-UI eller CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "Bare prosesser startet inne i cmux-terminaler kan koble til.",
"cmuxOnlyEnable": "Standardmodus i innstillings-UI",
"allowAllMode": "Tillat enhver lokal prosess å koble til (ingen herkomstsjekk).",
"allowAllEnable": "Kun miljøvariabeloverstyring: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "På delte maskiner, bruk Av eller Bare cmux-prosesser.",
"cliOptions": "CLI-alternativer",
"flagHeader": "Flagg",
"customSocketPath": "Egendefinert socket-sti",
"outputJson": "Utdata i JSON-format",
"targetWindow": "Mål et spesifikt vindu",
"targetWorkspace": "Mål et spesifikt arbeidsområde",
"targetSurface": "Mål en spesifikk overflate",
"idFormat": "Kontroller identifikatorformat i JSON-utdata",
"workspaceCommands": "Arbeidsområdekommandoer",
"listWorkspacesDesc": "List alle åpne arbeidsområder.",
"newWorkspaceDesc": "Opprett et nytt arbeidsområde.",
"selectWorkspaceDesc": "Bytt til et spesifikt arbeidsområde.",
"currentWorkspaceDesc": "Hent det aktive arbeidsområdet.",
"closeWorkspaceDesc": "Lukk et arbeidsområde.",
"splitCommands": "Delingskommandoer",
"newSplitDesc": "Opprett et nytt delt panel. Retninger: left, right, up, down.",
"listSurfacesDesc": "List alle overflater i det gjeldende arbeidsområdet.",
"focusSurfaceDesc": "Fokuser en spesifikk overflate.",
"inputCommands": "Inndatakommandoer",
"sendDesc": "Send tekstinndata til den fokuserte terminalen.",
"sendKeyDesc": "Send et tastetrykk. Taster: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "Send tekst til en spesifikk overflate.",
"sendKeySurfaceDesc": "Send et tastetrykk til en spesifikk overflate.",
"notificationCommands": "Varselkommandoer",
"notifyDesc": "Send et varsel.",
"listNotificationsDesc": "List alle varsler.",
"clearNotificationsDesc": "Fjern alle varsler.",
"sidebarMetadata": "Sidefeltmetadatakommandoer",
"sidebarMetadataDesc": "Sett statuspiller, fremdriftslinjer og loggoppføringer i sidefeltet for ethvert arbeidsområde. Nyttig for build-skript, CI-integrasjoner og AI-kodeagenter som vil vise tilstand med et øyekast.",
"setStatusDesc": "Sett en sidefelt-statuspille. Bruk en unik nøkkel slik at forskjellige verktøy kan administrere sine egne oppføringer.",
"clearStatusDesc": "Fjern en sidefelt-statusoppføring etter nøkkel.",
"listStatusDesc": "List alle sidefelt-statusoppføringer for et arbeidsområde.",
"setProgressDesc": "Sett en fremdriftslinje i sidefeltet (0.0 til 1.0).",
"clearProgressDesc": "Fjern sidefeltets fremdriftslinje.",
"logDesc": "Legg til en loggoppføring i sidefeltet. Nivåer: info, progress, success, warning, error.",
"clearLogDesc": "Fjern alle sidefeltets loggoppføringer.",
"listLogDesc": "List sidefeltets loggoppføringer.",
"sidebarStateDesc": "Dump all sidefeltmetadata (cwd, git-gren, porter, status, fremdrift, logger).",
"utilityCommands": "Hjelpekommandoer",
"pingDesc": "Sjekk om cmux kjører og svarer.",
"capabilitiesDesc": "List tilgjengelige socket-metoder og gjeldende tilgangsmodus.",
"identifyDesc": "Vis fokusert vindu/arbeidsområde/panel/overflate-kontekst.",
"envVariables": "Miljøvariabler",
"variableHeader": "Variabel",
"socketPathDesc": "Overstyr socket-stien brukt av CLI og integrasjoner",
"socketEnableDesc": "Tvangsaktiver/deaktiver socket (1/0, true/false, on/off)",
"socketModeDesc": "Overstyr tilgangsmodus (cmuxOnly, allowAll, off). Godtar også cmux-only/cmux_only og allow-all/allow_all",
"workspaceIdDesc": "Automatisk satt: gjeldende arbeidsområde-ID",
"surfaceIdDesc": "Automatisk satt: gjeldende overflate-ID",
"termProgramDesc": "Satt til ghostty",
"termDesc": "Satt til xterm-ghostty",
"envCallout": "Eldre CMUX_SOCKET_MODE-verdier full og notifications godtas fortsatt for kompatibilitet.",
"detectingCmux": "Oppdage cmux",
"examples": "Eksempler",
"pythonClient": "Python-klient",
"shellScript": "Shell-skript",
"buildScriptNotification": "Build-skript med varsel",
"metaTitle": "API-referanse"
},
"notifications": {
"title": "Varsler",
"metaDescription": "Send skrivebordsvarsler fra AI-agenter og skript i cmux. CLI, OSC 99/777 escape-sekvenser og Claude Code hooks-integrasjon.",
"intro": "cmux støtter skrivebordsvarsler, slik at AI-agenter og skript kan varsle deg når de trenger oppmerksomhet.",
"lifecycle": "Livssyklus",
"received": "Mottatt: varselet vises i panelet, skrivebordsvarsel utløses (hvis ikke undertrykt)",
"unread": "Ulest: merke vist på arbeidsområdefanen",
"read": "Lest: fjernet når du ser på det arbeidsområdet",
"cleared": "Fjernet: fjernet fra panelet",
"suppression": "Undertrykking",
"suppressionDesc": "Skrivebordsvarsler undertrykkes når:",
"suppressItem1": "cmux-vinduet er fokusert",
"suppressItem2": "Det spesifikke arbeidsområdet som sender varselet er aktivt",
"suppressItem3": "Varselpanelet er åpent",
"notificationPanel": "Varselpanel",
"notificationPanelDesc": "Trykk <openShortcut>⌘⇧I</openShortcut> for å åpne varselpanelet. Klikk et varsel for å hoppe til det arbeidsområdet. Trykk <jumpShortcut>⌘⇧U</jumpShortcut> for å hoppe direkte til arbeidsområdet med det nyeste uleste varselet.",
"customCommand": "Egendefinert kommando",
"customCommandDesc": "Kjør en shell-kommando hver gang et varsel planlegges. Sett den i Innstillinger > App > Varselkommando. Kommandoen kjøres via /bin/sh -c med disse miljøvariablene:",
"customCommandNote": "Kommandoen kjøres uavhengig av systemlydvelgeren. Sett velgeren til \"Ingen\" for å kun bruke den egendefinerte kommandoen, eller behold begge for en systemlyd pluss en egendefinert handling.",
"sending": "Sende varsler",
"cli": "CLI",
"osc777Title": "OSC 777 (enkel)",
"osc777Desc": "RXVT-protokollen bruker et fast format med tittel og brødtekst:",
"osc99Title": "OSC 99 (rik)",
"osc99Desc": "Kitty-protokollen støtter undertitler og varsel-ID-er:",
"variableHeader": "Variabel",
"descriptionHeader": "Beskrivelse",
"envTitle": "Varselstittel (arbeidsområdenavn eller appnavn)",
"envSubtitle": "Varselsundertittel",
"envBody": "Varselsbrødtekst",
"cmpTitleBody": "Tittel + brødtekst",
"cmpSubtitle": "Undertittel",
"cmpNotificationId": "Varsel-ID",
"cmpComplexity": "Kompleksitet",
"cmpYes": "Ja",
"cmpNo": "Nei",
"cmpHigher": "Høyere",
"cmpLower": "Lavere",
"featureHeader": "Funksjon",
"comparisonCallout": "Bruk OSC 777 for enkle varsler. Bruk OSC 99 når du trenger undertitler eller varsel-ID-er. Bruk CLI (cmux notify) for enklest integrasjon.",
"claudeCodeHooks": "Claude Code hooks",
"claudeCodeHooksDesc": "cmux integrerer med <link>Claude Code</link> via hooks for å varsle deg når oppgaver fullføres.",
"createHookScript": "1. Opprett hook-skriptet",
"configureClaude": "2. Konfigurer Claude Code",
"restartNote": "Start Claude Code på nytt for å bruke hooksene.",
"integrationExamples": "Integrasjonseksempler",
"notifyAfterLong": "Varsel etter lang kommando",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux-passthrough",
"tmuxDesc": "Hvis du bruker tmux inne i cmux, aktiver passthrough:",
"metaTitle": "Varsler"
},
"browserAutomation": {
"title": "Nettleserautomatisering",
"metaDescription": "Referanse for cmux browser-kommandoer for navigasjon, DOM-interaksjon, venting, inspeksjon, JavaScript-evaluering, faner, dialoger, rammer, nedlastinger og nettlesertilstand.",
"intro": "Kommandogruppen cmux browser gir nettleserautomatisering mot cmux-nettleseroverflater. Bruk den til å navigere, samhandle med DOM-elementer, inspisere sidetilstand, evaluere JavaScript og administrere nettlesersesjonsdata.",
"commandIndex": "Kommandoindeks",
"categoryHeader": "Kategori",
"subcommandsHeader": "Underkommandoer",
"navAndTargeting": "Navigasjon og målretting",
"waiting": "Venting",
"domInteraction": "DOM-interaksjon",
"inspection": "Inspeksjon",
"jsAndInjection": "JavaScript og injeksjon",
"framesDialogsDownloads": "Rammer, dialoger, nedlastinger",
"stateAndSession": "Tilstand og sesjonsdata",
"tabsAndLogs": "Faner og logger",
"targetingSurface": "Målrette en nettleseroverflate",
"targetingDesc": "De fleste underkommandoer krever en måloverflate. Du kan sende den posisjonelt eller med --surface.",
"navigation": "Navigasjon",
"waitingSection": "Venting",
"waitingDesc": "Bruk wait for å blokkere til selektorer, tekst, URL-fragmenter, lastetilstand eller en JavaScript-betingelse er oppfylt.",
"domSection": "DOM-interaksjon",
"domDesc": "Endrende handlinger støtter --snapshot-after for rask verifisering i skript.",
"inspectionSection": "Inspeksjon",
"inspectionDesc": "Bruk strukturerte getters for skript og øyeblikksbilder/skjermbilder for menneskelig gjennomgang.",
"jsSection": "JavaScript-evaluering og injeksjon",
"stateSection": "Tilstand",
"stateDesc": "Sesjonsdatakommandoer dekker informasjonskapsler, lokal/sesjonslagring og fullstendige nettlesertilstandsøyeblikksbilder.",
"tabsSection": "Faner",
"tabsDesc": "Nettleserfaneoperasjoner tilsvarer nettleseroverflater i den aktive nettleserfanegruppen.",
"consoleSection": "Konsoll og feil",
"dialogsSection": "Dialoger",
"framesSection": "Rammer",
"downloadsSection": "Nedlastinger",
"commonPatterns": "Vanlige mønstre",
"patternNavigate": "Naviger, vent, inspiser",
"patternForm": "Fyll ut et skjema og verifiser suksessmeldingen",
"patternDebug": "Fang debug-artefakter ved feil",
"patternSession": "Lagre og gjenopprett nettleserøkt",
"metaTitle": "Nettleserautomatisering"
},
"changelog": {
"title": "Endringslogg",
"metaDescription": "cmux utgivelsesnotater og versjonshistorikk. Nye funksjoner, feilrettinger og endringer for den native macOS-terminalen.",
"metaTitle": "Endringslogg"
},
"navItems": {
"gettingStarted": "Kom i gang",
"concepts": "Konsepter",
"configuration": "Konfigurasjon",
"keyboardShortcuts": "Tastatursnarveier",
"apiReference": "API-referanse",
"browserAutomation": "Nettleserautomatisering",
"notifications": "Varsler",
"changelog": "Endringslogg"
}
},
"legal": {
"privacyPolicy": "Personvernerklæring",
"termsOfService": "Vilkår for bruk",
"eula": "EULA"
},
"wallOfLove": {
"title": "Kjærlighetsveggen",
"description": "Hva folk sier om cmux."
},
"testimonials": {
"mitchellh": "Nok en dag, nok et libghostty-basert prosjekt, denne gangen en macOS-terminal med vertikale faner, bedre organisering/varsler, innebygd/skriptbar nettleser spesifikt rettet mot folk som bruker mange terminalbaserte agent-arbeidsflyter.",
"schrockn": "Dette er nøyaktig produktet jeg har lett etter. Etter to timer i morges er jeg forelsket.",
"egrefen": "Jeg har brukt dette hele helgen og det er fantastisk.",
"max4c": "dette har vært favorittverktøyet mitt de siste to ukene",
"asaza": "cmux ser så bra ut at det kanskje endelig er på tide å si adjø til VSCode",
"johnthedebs": "Hei, dette ser virkelig fantastisk ut. Elsker ideene her, spesielt: programmerbarhet, lagdelt UI, nettleser med API. Gleder meg til å prøve det. Vil også si at jeg virkelig setter pris på at Mitchell Hashimoto laget libghostty; det føles som en spennende tid å være terminalbruker.",
"joeriddles": "Vertikale faner i terminalen min! Det har jeg aldri tenkt på før. Jeg bruker og elsker Firefox vertikale faner.",
"dchu17": "Prøvde dette og det var ganske intuitivt. Bra jobba!",
"afruth": "Jeg liker det, brukte det i løpet av den siste dagen på tre parallelle prosjekter med flere worktrees. Å ha dette sammen med lazygit og yazi / nvim gjorde meg litt mer produktiv enn vanlig uten å måtte jakte på flere ghostty / iTerm-instanser. Føles også mer naturlig enn tmux.",
"northprint": "Prøvde cmux siden det så bra ut — det er bra",
"indykish": "cmux er ganske bra.",
"kataring": "Byttet til cmux.dev",
"scottw": "Dette har vært et så nyttig funn. Kan ikke anbefale det nok.",
"johnblythe": "lastet dette ned i helgen og elsket det. har ventet på noe slikt.",
"bchris91": "Dette er nøyaktig det jeg har ønsket meg. Fantastisk jobb, takk!",
"connorelsea": "Har brukt dette i en uke og det er fantastisk. Vertikal fane for hver pågående oppgave. Inni har jeg Claude på den ene siden og nettleser med PR og ressurser på den andre, bytter mellom oppgaver og holder orden. Bland det med skills for å la Claude overvåke CI rekursivt, osv. Føler meg opplyst tbh",
"tonkotsuboy": "Jeg byttet fra Warp til Ghostty i begynnelsen av året, men nå har jeg byttet til cmux. De vertikale fanene er praktiske, og jeg setter pris på å bli varslet når Claude Code-oppgaver er ferdige. Det er Ghostty-basert, så den lynraske ytelsen følger med. Grenvisning og autofullføringer jeg satte opp i Ghostty fungerer fortsatt også."
},
"languageSwitcher": {
"label": "Språk"
}
}

587
web/messages/pl.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — Terminal stworzony do wielozadaniowości",
"description": "Natywny terminal macOS oparty na Ghostty. Działa z Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider i dowolnym narzędziem CLI. Pionowe karty, pierścienie powiadomień, podzielone panele i API gniazd.",
"ogDescription": "Natywny terminal macOS dla agentów kodowania AI. Działa z Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider i dowolnym narzędziem CLI."
},
"common": {
"downloadForMac": "Pobierz na Mac",
"viewOnGitHub": "Zobacz na GitHub",
"closeMenu": "Zamknij menu",
"openMenu": "Otwórz menu",
"toggleTheme": "Przełącz motyw",
"backToBlog": "Powrót do bloga",
"readTheDocs": "Przeczytaj dokumentację",
"viewChangelog": "Zobacz dziennik zmian"
},
"nav": {
"docs": "Dokumentacja",
"blog": "Blog",
"changelog": "Dziennik zmian",
"community": "Społeczność",
"github": "GitHub"
},
"footer": {
"product": "Produkt",
"resources": "Zasoby",
"legal": "Informacje prawne",
"social": "Media społecznościowe",
"blog": "Blog",
"community": "Społeczność",
"docs": "Dokumentacja",
"changelog": "Dziennik zmian",
"privacy": "Prywatność",
"terms": "Regulamin",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "Kontakt",
"copyright": "© {year} Manaflow",
"language": "Język"
},
"home": {
"taglinePrefix": "Terminal stworzony dla ",
"typingCodingAgents": "agentów kodowania",
"typingMultitasking": "multitaskingu",
"subtitle": "Natywna aplikacja macOS zbudowana na Ghostty. Pionowe karty, pierścienie powiadomień gdy agenci potrzebują uwagi, dzielone panele i socket API do automatyzacji.",
"features": "Funkcje",
"faq": "FAQ",
"communitySection": "Społeczność",
"feature": {
"verticalTabs": "Pionowe karty",
"verticalTabsDesc": ": pasek boczny pokazuje gałąź git, katalog roboczy, porty i tekst powiadomień",
"notificationRings": "Pierścienie powiadomień",
"notificationRingsDesc": ": panele podświetlają się gdy agenci potrzebują uwagi",
"inAppBrowser": "Wbudowana przeglądarka",
"inAppBrowserDesc": ": podziel przeglądarkę obok terminala ze skryptowalnym API",
"splitPanes": "Dzielone panele",
"splitPanesDesc": ": poziome i pionowe podziały w każdej karcie",
"scriptable": "Skryptowalny",
"scriptableDesc": ": CLI i socket API do automatyzacji i skryptów",
"gpuAccelerated": "Akceleracja GPU",
"gpuAcceleratedDesc": ": napędzany przez libghostty dla płynnego renderowania",
"lightweight": "Lekki",
"lightweightDesc": ": natywny Swift + AppKit, bez Electron",
"keyboardShortcuts": "Skróty klawiszowe",
"keyboardShortcutsDesc": ": <link>rozbudowane skróty</link> dla workspace'ów, podziałów, przeglądarki i więcej"
},
"faqGhosttyQ": "Jaki jest związek cmux z Ghostty?",
"faqGhosttyA": "cmux nie jest forkiem Ghostty. Używa <link>libghostty</link> jako biblioteki do renderowania terminala, tak samo jak aplikacje używają WebKit do widoków webowych. Ghostty to samodzielny terminal; cmux to inna aplikacja zbudowana na jego silniku renderowania.",
"faqPlatformQ": "Jakie platformy są obsługiwane?",
"faqPlatformA": "Tylko macOS, na razie. cmux to natywna aplikacja Swift + AppKit.",
"faqAgentsQ": "Z jakimi agentami kodowania działa cmux?",
"faqAgentsA": "Ze wszystkimi. cmux to terminal, więc każdy agent działający w terminalu działa od razu: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent i wszystko inne co możesz uruchomić z linii poleceń.",
"faqNotificationsQ": "Jak działają powiadomienia?",
"faqNotificationsA": "Gdy proces potrzebuje uwagi, cmux pokazuje pierścienie powiadomień wokół paneli, odznaki nieprzeczytanych na pasku bocznym, okno powiadomień i powiadomienie na pulpicie macOS. Uruchamiają się automatycznie przez standardowe sekwencje ucieczki terminala (OSC 9/99/777), lub możesz je wywołać za pomocą <cliLink>cmux CLI</cliLink> i <hooksLink>hooków Claude Code</hooksLink>.",
"faqShortcutsQ": "Czy mogę dostosować skróty klawiszowe?",
"faqShortcutsA": "Przypisania klawiszy terminala są odczytywane z pliku konfiguracyjnego Ghostty (<configPath>~/.config/ghostty/config</configPath>). Skróty specyficzne dla cmux (workspace'y, podziały, przeglądarka, powiadomienia) można dostosować w Ustawieniach. Zobacz <link>domyślne skróty</link> po pełną listę.",
"faqTmuxQ": "Jak wypada w porównaniu z tmux?",
"faqTmuxA": "tmux to multiplekser terminala działający w dowolnym terminalu. cmux to natywna aplikacja macOS z GUI: pionowe karty, dzielone panele, wbudowana przeglądarka i socket API są wbudowane. Bez plików konfiguracyjnych i klawiszy prefiksu.",
"faqFreeQ": "Czy cmux jest darmowy?",
"faqFreeA": "Tak, cmux jest darmowy. Kod źródłowy jest dostępny na <link>GitHub</link>."
},
"community": {
"title": "Społeczność",
"description": "Połącz się z innymi użytkownikami cmux i zespołem za nim stojącym.",
"discord": "Discord",
"discordAction": "Dołącz do naszego Discorda",
"discordDesc": "Rozmawiaj ze społecznością, uzyskaj pomoc i podziel się opinią",
"githubAction": "Zobacz na GitHub",
"githubDesc": "Daj gwiazdkę, zgłaszaj problemy i przyczyniaj się do rozwoju",
"twitter": "Twitter",
"twitterAction": "Obserwuj na X",
"twitterDesc": "Aktualizacje, ogłoszenia i porady",
"youtube": "YouTube",
"youtubeAction": "Subskrybuj",
"youtubeDesc": "Dema, poradniki i przewodniki",
"linkedin": "LinkedIn",
"linkedinAction": "Obserwuj nas",
"linkedinDesc": "Wiadomości firmowe i aktualizacje techniczne",
"metaTitle": "Społeczność — cmux",
"metaDescription": "Dołącz do społeczności cmux na Discordzie, Twitterze, GitHubie i nie tylko"
},
"blog": {
"title": "Blog",
"layoutTitle": "cmux blog",
"metaTitle": "Blog",
"metaDescription": "Wiadomości i aktualizacje od zespołu cmux",
"description": "Wiadomości i aktualizacje od zespołu cmux",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Jak Cmd+Shift+U nawiguje między zakończonymi agentami w workspace'ach w cmux.",
"date": "4 marca 2026",
"p1": "Moją ulubioną funkcją cmux jest Cmd+Shift+U. Mam teraz otwartych 17 workspace'ów, każdy z uruchomionym agentem. Kiedyś przeklikiwałem się przez karty i panel powiadomień, żeby sprawdzić co się zakończyło. Klawiatura jest szybsza.",
"p2": "Cmd+Shift+U przeskakuje do najnowszego nieprzeczytanego <link>powiadomienia</link>. W praktyce oznacza to ostatniego agenta który skończył. Przełącza na właściwy workspace, fokusuje dokładny panel, miga nim żebyś widział gdzie patrzeć i oznacza go jako przeczytany. Jeśli powiadomienie przyszło z innego okna, to okno wysuwa się na przód."
},
"zenOfCmux": {
"title": "The Zen of cmux",
"summary": "cmux to prymityw, nie rozwiązanie. Daje ci komponowalne elementy, a Twój workflow zależy od Ciebie.",
"date": "27 lutego 2026",
"p1": "cmux nie narzuca sposobu używania narzędzi. To terminal i przeglądarka z CLI, a reszta zależy od Ciebie.",
"p2": "cmux to prymityw, nie rozwiązanie. Daje Ci terminal, przeglądarkę, powiadomienia, workspace'y, podziały, karty i CLI do kontroli tego wszystkiego. cmux nie wymusza żadnego konkretnego sposobu używania agentów kodowania. To co zbudujesz z prymitywów jest Twoje.",
"p3": "Najlepsi programiści zawsze budowali własne narzędzia. Nikt jeszcze nie znalazł najlepszego sposobu pracy z agentami, a zespoły budujące zamknięte produkty na pewno też nie. Programiści najbliżej swoich baz kodu odkryją to pierwsi.",
"p4": "Daj milionowi programistów komponowalne prymitywy, a wspólnie znajdą najefektywniejsze workflow'y szybciej niż jakikolwiek zespół produktowy mógłby zaprojektować odgórnie."
},
"showHnLaunch": {
"title": "Premiera cmux na Show HN",
"summary": "cmux osiągnął #2 na Hacker News, został udostępniony przez Mitchella Hashimoto i stał się viralowy w Japonii.",
"date": "21 lutego 2026",
"intro": "Opublikowaliśmy cmux na <link>Show HN</link> 19 lutego:",
"blockquote1": "Uruchamiam wiele sesji Claude Code i Codex równolegle. Używałem Ghostty z wieloma dzielonymi panelami i polegałem na natywnych powiadomieniach macOS, żeby wiedzieć kiedy agent mnie potrzebuje. Ale treść powiadomień Claude Code to zawsze tylko \"Claude is waiting for your input\" bez kontekstu, a przy wystarczającej liczbie kart nie mogłem nawet przeczytać tytułów.",
"blockquote2": "Próbowałem kilku orkiestratorów kodowania, ale większość to były aplikacje Electron/Tauri i irytowała mnie wydajność. Wolę też po prostu terminal, bo GUI-orkiestratory zamykają cię w swoim workflow. Więc zbudowałem cmux jako natywną aplikację macOS w Swift/AppKit. Używa libghostty do renderowania terminala i czyta Twoją istniejącą konfigurację Ghostty dla motywów, czcionek, kolorów i więcej.",
"blockquote3": "Główne dodatki to pasek boczny i system powiadomień. Pasek boczny ma pionowe karty pokazujące gałąź git, katalog roboczy, nasłuchujące porty i ostatni tekst powiadomienia dla każdego workspace'a. System powiadomień przechwytuje sekwencje terminala (OSC 9/99/777) i ma CLI (cmux notify) które możesz podpiąć do hooków agentów dla Claude Code, OpenCode itp. Gdy agent czeka, jego panel dostaje niebieski pierścień a karta podświetla się na pasku bocznym, więc widzę który potrzebuje mnie na przestrzeni podziałów i kart. Cmd+Shift+U przeskakuje do najnowszego nieprzeczytanego.",
"blockquote4": "Wbudowana przeglądarka ma skryptowalne API. Agenci mogą zrobić snapshot drzewa dostępności, pobrać referencje elementów, klikać, wypełniać formularze, ewaluować JS i czytać logi konsoli. Możesz podzielić panel przeglądarki obok terminala i pozwolić Claude Code bezpośrednio wchodzić w interakcję z Twoim serwerem deweloperskim.",
"blockquote5": "Wszystko jest skryptowalne przez CLI i socket API: tworzenie workspace'ów/kart, dzielenie paneli, wysyłanie naciśnięć klawiszy, otwieranie URL-i w przeglądarce.",
"hitNumber2": "W szczycie osiągnął #2 na Hacker News. Mitchell Hashimoto udostępnił go:",
"favoriteComment": "Mój ulubiony komentarz z <link>wątku HN</link>:",
"viralJapan": "Niespodziewanie cmux stał się viralowy w Japonii:",
"translation": "Tłumaczenie: \"To wygląda dobrze. Aplikacja terminalowa oparta na Ghostty, zaprojektowana żebyś się nie zgubił uruchamiając wiele CLI jak Claude Code równolegle. Panel czekający na input dostaje niebieską ramkę i ma własny system powiadomień.\"",
"viralChina": "I pół-viralowy w Chinach:",
"extensions": "Kolejną ekscytującą rzeczą było obserwowanie jak ludzie budują na bazie cmux CLI. sasha zbudował rozszerzenie pi-cmux które pokazuje informacje o modelu, zużycie tokenów i stan agenta na pasku bocznym:",
"scriptable": "Wszystko w cmux jest skryptowalne przez CLI: tworzenie workspace'ów, wysyłanie naciśnięć klawiszy, kontrola przeglądarki, odczytywanie powiadomień. Częścią filozofii cmux jest bycie programowalnym i komponowalnym, żeby ludzie mogli dostosować sposób pracy z agentami kodowania. Stan wiedzy o agentach kodowania zmienia się szybko, i nie chcesz być zamknięty w nieelastycznym GUI-orkiestratorze który nie nadąża.",
"cta": "Jeśli uruchamiasz wielu agentów kodowania, <link>wypróbuj cmux</link>."
},
"introducingCmux": {
"title": "Przedstawiamy cmux",
"summary": "Natywny terminal macOS zbudowany na Ghostty, zaprojektowany do uruchamiania wielu agentów kodowania AI obok siebie.",
"date": "12 lutego 2026",
"p1": "cmux to natywna aplikacja terminalowa macOS zbudowana na Ghostty, zaprojektowana od podstaw dla programistów uruchamiających wielu agentów kodowania AI jednocześnie.",
"whyTitle": "Dlaczego cmux?",
"whyP": "Nowoczesne workflow'y programistyczne często wymagają uruchamiania kilku agentów naraz. Claude Code, Codex i inne narzędzia, każde w swoim terminalu. Śledzenie które potrzebują uwagi i szybkie przełączanie między nimi to problem który cmux rozwiązuje.",
"featuresTitle": "Kluczowe funkcje",
"getStartedTitle": "Rozpocznij",
"getStartedP": "Zainstaluj cmux przez Homebrew lub pobierz DMG z <link>przewodnika szybkiego startu</link>.",
"featureVerticalTabsLabel": "Pionowe karty",
"featureVerticalTabsDesc": "zobacz wszystkie terminale na pierwszy rzut oka w pasku bocznym",
"featureNotificationsLabel": "Pierścienie powiadomień",
"featureNotificationsDesc": "karty migają gdy agent potrzebuje Twojego wejścia",
"featureSplitPanesLabel": "Dzielone panele",
"featureSplitPanesDesc": "poziome i pionowe podziały w każdym workspace",
"featureSocketApiLabel": "Socket API",
"featureSocketApiDesc": "programowa kontrola do tworzenia kart i wysyłania danych wejściowych",
"featureGpuLabel": "Akceleracja GPU",
"featureGpuDesc": "napędzany przez libghostty dla płynnego renderowania"
}
},
"zenOfCmux": {
"metaTitle": "Zen cmux",
"metaDescription": "cmux to prymityw, nie rozwiązanie. Daje ci komponowalne elementy, a przepływ pracy zależy od ciebie."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "Nowy skrót klawiszowy, który zmienia sposób interakcji z cmux."
},
"showHnLaunch": {
"metaTitle": "Premiera cmux na Show HN",
"metaDescription": "Historia premiery cmux na Hacker News."
},
"introducingCmux": {
"metaTitle": "Przedstawiamy cmux",
"metaDescription": "Dlaczego zbudowaliśmy cmux, nowy terminal dla macOS."
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "Szybki start",
"metaDescription": "Zainstaluj cmux, natywny terminal macOS dla agentów kodowania AI. Homebrew, pobieranie DMG, konfiguracja CLI i automatyczne aktualizacje przez Sparkle.",
"intro": "cmux to lekki, natywny terminal macOS zbudowany na Ghostty do zarządzania wieloma agentami kodowania AI. Oferuje pionowe karty, panel powiadomień i API kontroli opartą na socketach.",
"install": "Instalacja",
"dmgRecommended": "DMG (zalecane)",
"dmgDesc": "Otwórz plik .dmg i przeciągnij cmux do folderu Aplikacje. cmux aktualizuje się automatycznie przez Sparkle, więc pobierasz tylko raz.",
"homebrew": "Homebrew",
"updateLater": "Aby zaktualizować później:",
"firstLaunchCallout": "Przy pierwszym uruchomieniu macOS może poprosić o potwierdzenie otwarcia aplikacji od zidentyfikowanego dewelopera. Kliknij <strong>Otwórz</strong> aby kontynuować.",
"verifyTitle": "Weryfikacja instalacji",
"verifyDesc": "Otwórz cmux i powinieneś zobaczyć:",
"verifyItem1": "Okno terminala z pionowym paskiem bocznym kart po lewej",
"verifyItem2": "Jeden początkowy workspace już otwarty",
"verifyItem3": "Terminal napędzany przez Ghostty gotowy do wprowadzania danych",
"cliSetup": "Konfiguracja CLI",
"cliDesc": "cmux zawiera narzędzie wiersza poleceń do automatyzacji. W terminalach cmux działa automatycznie. Aby używać CLI spoza cmux, utwórz dowiązanie symboliczne:",
"cliThen": "Następnie możesz uruchamiać polecenia takie jak:",
"autoUpdates": "Automatyczne aktualizacje",
"autoUpdatesDesc": "cmux automatycznie sprawdza aktualizacje przez Sparkle. Gdy aktualizacja jest dostępna, zobaczysz wskaźnik aktualizacji na pasku tytułu. Możesz też sprawdzić ręcznie przez cmux > Sprawdź aktualizacje w pasku menu.",
"sessionRestore": "Przywracanie sesji (obecne zachowanie)",
"sessionRestoreDesc": "Po ponownym uruchomieniu cmux przywraca tylko układ i metadane:",
"sessionItem1": "Układ okien, workspace'ów i paneli",
"sessionItem2": "Katalogi robocze",
"sessionItem3": "Scrollback terminala (najlepszy wysiłek)",
"sessionItem4": "URL przeglądarki i historia nawigacji",
"sessionCallout": "cmux jeszcze nie przywraca stanu żywych procesów. Aktywne sesje terminalowe takie jak Claude Code, tmux i vim nie są wznawiane po restarcie aplikacji.",
"requirements": "Wymagania",
"reqItem1": "macOS 14.0 lub nowszy",
"reqItem2": "Apple Silicon lub Intel Mac",
"metaTitle": "Rozpoczęcie"
},
"concepts": {
"title": "Koncepty",
"metaDescription": "Jak cmux organizuje terminale: okna, workspace'y, panele i surface'y. Hierarchia za paskiem bocznym, podziałami i socket API.",
"intro": "cmux organizuje Twoje terminale w czteropoziomowej hierarchii. Zrozumienie tych poziomów pomaga przy korzystaniu z socket API, CLI i skrótów klawiszowych.",
"hierarchy": "Hierarchia",
"windowTitle": "Okno",
"windowDesc": "Okno macOS. Otwórz wiele okien za pomocą {shortcut}. Każde okno ma własny pasek boczny z niezależnymi workspace'ami.",
"workspaceTitle": "Workspace",
"workspaceDesc": "Wpis w pasku bocznym. Każdy workspace zawiera jeden lub więcej dzielonych paneli. Workspace'y to elementy widoczne na liście w lewym pasku bocznym.",
"workspaceNote": "W interfejsie i skrótach klawiszowych workspace'y często nazywane są \"kartami\", ponieważ zachowują się jak karty w pasku bocznym. Socket API i zmienne środowiskowe używają terminu \"workspace\".",
"contextHeader": "Kontekst",
"termUsedHeader": "Używany termin",
"sidebarUI": "Interfejs paska bocznego",
"tab": "Karta",
"keyboardShortcuts": "Skróty klawiszowe",
"workspaceOrTab": "Workspace lub karta",
"socketAPI": "Socket API",
"environmentVariable": "Zmienna środowiskowa",
"workspaceShortcuts": "Skróty: {new} (nowy), {jump} (przejdź), {close} (zamknij), {prevNext} (poprzedni/następny)",
"paneTitle": "Panel",
"paneDesc": "Podzielony region w workspace. Tworzony przez podział za pomocą {right} (prawo) lub {down} (dół). Nawiguj między panelami za pomocą {nav} + klawisze strzałek.",
"paneNote": "Każdy panel może zawierać wiele surface'ów (karty wewnątrz panelu).",
"surfaceTitle": "Surface",
"surfaceDesc": "Karta wewnątrz panelu. Każdy panel ma własny pasek kart i może zawierać wiele surface'ów. Tworzony za pomocą {new}, nawigacja za pomocą {prev} / {next} lub {jump}.",
"surfaceNote": "Surface'y to indywidualne sesje terminala lub przeglądarki z którymi wchodzisz w interakcję. Każdy surface ma własną zmienną środowiskową CMUX_SURFACE_ID.",
"panelTitle": "Panel",
"panelDesc": "Zawartość wewnątrz surface'a. Obecnie dwa typy:",
"panelTerminal": "Terminal: sesja terminala Ghostty",
"panelBrowser": "Przeglądarka: osadzony widok webowy",
"panelNote": "Panel to głównie wewnętrzny koncept. W socket API i CLI wchodzisz w interakcję z surface'ami, a nie bezpośrednio z panelami.",
"visualExample": "Przykład wizualny",
"visualExampleDesc": "W tym przykładzie:",
"visualItem1": "Okno zawiera pasek boczny z trzema workspace'ami (dev, server, logs)",
"visualItem2": "Workspace \"dev\" jest wybrany, pokazując dwa panele obok siebie",
"visualItem3": "Panel 1 ma dwa surface'y ([S1] i [S2] w pasku kart), z aktywnym S1",
"visualItem4": "Panel 2 ma jeden surface",
"visualItem5": "Każdy surface zawiera panel (w tym przypadku terminal)",
"summary": "Podsumowanie",
"levelHeader": "Poziom",
"whatItIsHeader": "Czym jest",
"createdByHeader": "Tworzony przez",
"identifiedByHeader": "Identyfikowany przez",
"macosWindow": "Okno macOS",
"sidebarEntry": "Wpis w pasku bocznym",
"splitRegion": "Podzielony region",
"tabWithinPane": "Karta wewnątrz panelu",
"terminalOrBrowser": "Terminal lub przeglądarka",
"automatic": "Automatycznie",
"paneIdSocket": "ID panelu (socket API)",
"panelIdInternal": "ID panelu (wewnętrzny)",
"metaTitle": "Koncepcje"
},
"configuration": {
"title": "Konfiguracja",
"metaDescription": "Konfiguruj cmux przez pliki konfiguracyjne Ghostty. Czcionka, motyw, kolory, styl dzielonych paneli, scrollback i ustawienia aplikacji dla trybu automatyzacji.",
"intro": "cmux odczytuje konfigurację z plików konfiguracyjnych Ghostty, dając Ci znajome opcje jeśli przechodzisz z Ghostty.",
"configLocations": "Lokalizacje plików konfiguracyjnych",
"configLocationsDesc": "cmux szuka konfiguracji w tych lokalizacjach (w kolejności):",
"createConfig": "Utwórz plik konfiguracyjny jeśli nie istnieje:",
"appearance": "Wygląd",
"font": "Czcionka",
"colors": "Kolory",
"splitPanes": "Dzielone panele",
"behavior": "Zachowanie",
"scrollback": "Scrollback",
"workingDirectory": "Katalog roboczy",
"appSettings": "Ustawienia aplikacji",
"appSettingsDesc": "Ustawienia w aplikacji są dostępne przez cmux > Ustawienia ({shortcut}):",
"themeMode": "Tryb motywu",
"themeSystem": "Systemowy: podążaj za wyglądem macOS",
"themeLight": "Jasny: zawsze jasny tryb",
"themeDark": "Ciemny: zawsze ciemny tryb",
"automationMode": "Tryb automatyzacji",
"automationModeDesc": "Poziom dostępu do gniazda kontrolnego:",
"automationOff": "Wyłączony: brak kontroli przez socket (najbezpieczniejszy)",
"automationCmux": "Tylko procesy cmux: zezwalaj tylko procesom uruchomionym w terminalach cmux na połączenie",
"automationAll": "allowAll: zezwalaj dowolnemu lokalnemu procesowi na połączenie (CMUX_SOCKET_MODE=allowAll, tylko nadpisanie zmiennej środowiskowej)",
"automationCallout": "Na współdzielonych maszynach rozważ użycie trybu \"Wyłączony\" lub \"Tylko procesy cmux\".",
"browserLinkBehavior": "Zachowanie linków w przeglądarce",
"browserLinkDesc": "W Ustawieniach > Przeglądarka cmux udostępnia dwie listy hostów o różnych zastosowaniach:",
"browserHostsEmbed": "Hosty do otwarcia we wbudowanej przeglądarce: dotyczy linków klikniętych z wyjścia terminala. Hosty na tej liście otwierają się w cmux; pozostałe hosty otwierają się w domyślnej przeglądarce. Obsługuje jeden host lub wildcard na linię (na przykład: example.com, *.internal.example).",
"browserHostsHttp": "Hosty HTTP dozwolone we wbudowanej przeglądarce: dotyczy tylko URL-i HTTP (nie-HTTPS). Hosty na tej liście mogą otwierać się w cmux bez monitu ostrzegawczego. Domyślnie obejmuje localhost, 127.0.0.1, ::1, 0.0.0.0 i *.localtest.me.",
"exampleConfig": "Przykładowa konfiguracja",
"metaTitle": "Konfiguracja"
},
"keyboardShortcuts": {
"title": "Skróty klawiszowe",
"description": "Wszystkie skróty klawiszowe dostępne w cmux, pogrupowane według kategorii.",
"metaDescription": "Wszystkie skróty klawiszowe cmux dla workspace'ów, surface'ów, dzielonych paneli, przeglądarki, powiadomień, wyszukiwania i zarządzania oknami na macOS.",
"searchPlaceholder": "Szukaj skrótów...",
"searchLabel": "Szukaj skrótów klawiszowych",
"noResults": "Nie znaleziono skrótów",
"noResultsHint": "Spróbuj innego wyszukiwania",
"cat": {
"workspaces": "Workspace'y",
"workspacesBlurb": "Workspace'y znajdują się w pasku bocznym. Każdy workspace ma własny zestaw paneli i surface'ów.",
"surfaces": "Surface'y",
"surfacesBlurb": "Surface'y to karty wewnątrz panelu.",
"splitPanes": "Dzielone panele",
"browser": "Przeglądarka",
"notifications": "Powiadomienia",
"find": "Znajdź",
"terminal": "Terminal",
"window": "Okno"
},
"sc": {
"ws-new": "Nowy workspace",
"ws-jump-1-8": "Przejdź do workspace 18",
"ws-jump-last": "Przejdź do ostatniego workspace",
"ws-close": "Zamknij workspace",
"ws-rename": "Zmień nazwę workspace",
"sf-new": "Nowy surface",
"sf-prev-1": "Poprzedni surface",
"sf-prev-2": "Poprzedni surface",
"sf-jump-1-8": "Przejdź do surface 18",
"sf-jump-last": "Przejdź do ostatniego surface",
"sf-close": "Zamknij surface",
"sp-right": "Podziel w prawo",
"sp-down": "Podziel w dół",
"sp-focus": "Fokus na panelu kierunkowo",
"sp-browser-right": "Podziel przeglądarkę w prawo",
"sp-browser-down": "Podziel przeglądarkę w dół",
"br-open": "Otwórz surface przeglądarki",
"br-addr": "Fokus na pasku adresu",
"br-forward": "Do przodu",
"br-reload": "Odśwież stronę",
"br-devtools": "Otwórz narzędzia deweloperskie",
"nt-panel": "Pokaż panel powiadomień",
"nt-latest": "Przejdź do najnowszego nieprzeczytanego",
"nt-flash": "Wyzwól błysk",
"fd-find": "Znajdź",
"fd-next-prev": "Znajdź następny / poprzedni",
"fd-hide": "Ukryj pasek wyszukiwania",
"fd-selection": "Użyj zaznaczenia do wyszukiwania",
"tm-clear": "Wyczyść historię przewijania",
"tm-copy": "Kopiuj (z zaznaczeniem)",
"tm-paste": "Wklej",
"tm-font": "Zwiększ / zmniejsz rozmiar czcionki",
"tm-reset": "Zresetuj rozmiar czcionki",
"wn-new": "Nowe okno",
"wn-settings": "Ustawienia",
"wn-reload": "Przeładuj konfigurację",
"wn-quit": "Zakończ"
},
"metaTitle": "Skróty klawiszowe"
},
"api": {
"title": "Dokumentacja API",
"metaDescription": "Dokumentacja cmux CLI i Unix socket API. Zarządzanie workspace'ami, dzielone panele, sterowanie wejściem, powiadomienia, metadane paska bocznego, zmienne środowiskowe i metody wykrywania.",
"intro": "cmux zapewnia zarówno narzędzie CLI jak i Unix socket do programowej kontroli. Każde polecenie jest dostępne przez oba interfejsy.",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "Ścieżka",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Tagowany build debugowy",
"socketOverride": "Nadpisz zmienną środowiskową CMUX_SOCKET_PATH. Wyślij jedno żądanie JSON zakończone nową linią na wywołanie:",
"socketCallout": "Żądania JSON na socket muszą używać method i params. Starsze payloady JSON v1 takie jak <legacy>'{'\"command\":\"...\"'}'</legacy> nie są obsługiwane.",
"accessModes": "Tryby dostępu",
"modeHeader": "Tryb",
"descriptionHeader": "Opis",
"howToEnableHeader": "Jak włączyć",
"offMode": "Socket wyłączony",
"offEnable": "Interfejs ustawień lub CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "Tylko procesy uruchomione w terminalach cmux mogą się połączyć.",
"cmuxOnlyEnable": "Domyślny tryb w interfejsie ustawień",
"allowAllMode": "Pozwól dowolnemu lokalnemu procesowi na połączenie (bez sprawdzania pochodzenia).",
"allowAllEnable": "Tylko nadpisanie zmiennej środowiskowej: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "Na współdzielonych maszynach używaj trybu Wyłączony lub Tylko procesy cmux.",
"cliOptions": "Opcje CLI",
"flagHeader": "Flaga",
"customSocketPath": "Niestandardowa ścieżka socketa",
"outputJson": "Wyjście w formacie JSON",
"targetWindow": "Celuj w konkretne okno",
"targetWorkspace": "Celuj w konkretny workspace",
"targetSurface": "Celuj w konkretny surface",
"idFormat": "Kontroluj format identyfikatorów w wyjściu JSON",
"workspaceCommands": "Polecenia workspace",
"listWorkspacesDesc": "Wyświetl wszystkie otwarte workspace'y.",
"newWorkspaceDesc": "Utwórz nowy workspace.",
"selectWorkspaceDesc": "Przełącz na konkretny workspace.",
"currentWorkspaceDesc": "Pobierz aktualnie aktywny workspace.",
"closeWorkspaceDesc": "Zamknij workspace.",
"splitCommands": "Polecenia podziału",
"newSplitDesc": "Utwórz nowy dzielony panel. Kierunki: left, right, up, down.",
"listSurfacesDesc": "Wyświetl wszystkie surface'y w bieżącym workspace.",
"focusSurfaceDesc": "Ustaw fokus na konkretnym surface.",
"inputCommands": "Polecenia wejścia",
"sendDesc": "Wyślij tekst do fokusowanego terminala.",
"sendKeyDesc": "Wyślij naciśnięcie klawisza. Klawisze: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "Wyślij tekst do konkretnego surface'a.",
"sendKeySurfaceDesc": "Wyślij naciśnięcie klawisza do konkretnego surface'a.",
"notificationCommands": "Polecenia powiadomień",
"notifyDesc": "Wyślij powiadomienie.",
"listNotificationsDesc": "Wyświetl wszystkie powiadomienia.",
"clearNotificationsDesc": "Wyczyść wszystkie powiadomienia.",
"sidebarMetadata": "Polecenia metadanych paska bocznego",
"sidebarMetadataDesc": "Ustaw wskaźniki statusu, paski postępu i wpisy logów w pasku bocznym dla dowolnego workspace'a. Przydatne do skryptów budowania, integracji CI i agentów kodowania AI którzy chcą wyświetlić stan na pierwszy rzut oka.",
"setStatusDesc": "Ustaw wskaźnik statusu w pasku bocznym. Użyj unikalnego klucza żeby różne narzędzia mogły zarządzać własnymi wpisami.",
"clearStatusDesc": "Usuń wpis statusu z paska bocznego po kluczu.",
"listStatusDesc": "Wyświetl wszystkie wpisy statusu paska bocznego dla workspace'a.",
"setProgressDesc": "Ustaw pasek postępu w pasku bocznym (0.0 do 1.0).",
"clearProgressDesc": "Wyczyść pasek postępu paska bocznego.",
"logDesc": "Dodaj wpis logu do paska bocznego. Poziomy: info, progress, success, warning, error.",
"clearLogDesc": "Wyczyść wszystkie wpisy logów paska bocznego.",
"listLogDesc": "Wyświetl wpisy logów paska bocznego.",
"sidebarStateDesc": "Wyświetl wszystkie metadane paska bocznego (cwd, gałąź git, porty, status, postęp, logi).",
"utilityCommands": "Polecenia narzędziowe",
"pingDesc": "Sprawdź czy cmux działa i odpowiada.",
"capabilitiesDesc": "Wyświetl dostępne metody socketa i aktualny tryb dostępu.",
"identifyDesc": "Pokaż kontekst fokusowanego okna/workspace'a/panelu/surface'a.",
"envVariables": "Zmienne środowiskowe",
"variableHeader": "Zmienna",
"socketPathDesc": "Nadpisz ścieżkę socketa używaną przez CLI i integracje",
"socketEnableDesc": "Wymuś włączenie/wyłączenie socketa (1/0, true/false, on/off)",
"socketModeDesc": "Nadpisz tryb dostępu (cmuxOnly, allowAll, off). Akceptuje też cmux-only/cmux_only i allow-all/allow_all",
"workspaceIdDesc": "Ustawiane automatycznie: ID bieżącego workspace'a",
"surfaceIdDesc": "Ustawiane automatycznie: ID bieżącego surface'a",
"termProgramDesc": "Ustawione na ghostty",
"termDesc": "Ustawione na xterm-ghostty",
"envCallout": "Starsze wartości CMUX_SOCKET_MODE full i notifications są nadal akceptowane dla kompatybilności.",
"detectingCmux": "Wykrywanie cmux",
"examples": "Przykłady",
"pythonClient": "Klient Python",
"shellScript": "Skrypt powłoki",
"buildScriptNotification": "Skrypt budowania z powiadomieniem",
"metaTitle": "Dokumentacja API"
},
"notifications": {
"title": "Powiadomienia",
"metaDescription": "Wysyłaj powiadomienia na pulpit z agentów AI i skryptów w cmux. CLI, sekwencje ucieczki OSC 99/777 i integracja z hookami Claude Code.",
"intro": "cmux obsługuje powiadomienia na pulpicie, pozwalając agentom AI i skryptom alarmować Cię gdy potrzebują uwagi.",
"lifecycle": "Cykl życia",
"received": "Odebrane: powiadomienie pojawia się w panelu, alert na pulpicie się uruchamia (jeśli nie jest wytłumiony)",
"unread": "Nieprzeczytane: odznaka wyświetlana na karcie workspace'a",
"read": "Przeczytane: usunięte gdy wyświetlisz ten workspace",
"cleared": "Wyczyszczone: usunięte z panelu",
"suppression": "Wyciszanie",
"suppressionDesc": "Alerty na pulpicie są wyciszane gdy:",
"suppressItem1": "Okno cmux jest sfokusowane",
"suppressItem2": "Konkretny workspace wysyłający powiadomienie jest aktywny",
"suppressItem3": "Panel powiadomień jest otwarty",
"notificationPanel": "Panel powiadomień",
"notificationPanelDesc": "Naciśnij <openShortcut>⌘⇧I</openShortcut> aby otworzyć panel powiadomień. Kliknij powiadomienie aby przejść do tego workspace'a. Naciśnij <jumpShortcut>⌘⇧U</jumpShortcut> aby przejść bezpośrednio do workspace'a z najnowszym nieprzeczytanym powiadomieniem.",
"customCommand": "Niestandardowe polecenie",
"customCommandDesc": "Uruchom polecenie powłoki za każdym razem gdy powiadomienie jest zaplanowane. Ustaw to w Ustawieniach > Aplikacja > Polecenie powiadomienia. Polecenie uruchamia się przez /bin/sh -c z tymi zmiennymi środowiskowymi:",
"customCommandNote": "Polecenie działa niezależnie od wybieraka dźwięku systemowego. Ustaw wybierak na \"Brak\" aby używać tylko niestandardowego polecenia, lub zachowaj oba dla dźwięku systemowego plus niestandardowa akcja.",
"sending": "Wysyłanie powiadomień",
"cli": "CLI",
"osc777Title": "OSC 777 (prosty)",
"osc777Desc": "Protokół RXVT używa stałego formatu z tytułem i treścią:",
"osc99Title": "OSC 99 (zaawansowany)",
"osc99Desc": "Protokół Kitty obsługuje podtytuły i identyfikatory powiadomień:",
"variableHeader": "Zmienna",
"descriptionHeader": "Opis",
"envTitle": "Tytuł powiadomienia (nazwa workspace'a lub aplikacji)",
"envSubtitle": "Podtytuł powiadomienia",
"envBody": "Treść powiadomienia",
"cmpTitleBody": "Tytuł + treść",
"cmpSubtitle": "Podtytuł",
"cmpNotificationId": "ID powiadomienia",
"cmpComplexity": "Złożoność",
"cmpYes": "Tak",
"cmpNo": "Nie",
"cmpHigher": "Wyższa",
"cmpLower": "Niższa",
"featureHeader": "Funkcja",
"comparisonCallout": "Użyj OSC 777 do prostych powiadomień. Użyj OSC 99 gdy potrzebujesz podtytułów lub identyfikatorów powiadomień. Użyj CLI (cmux notify) dla najłatwiejszej integracji.",
"claudeCodeHooks": "Hooki Claude Code",
"claudeCodeHooksDesc": "cmux integruje się z <link>Claude Code</link> przez hooki aby powiadamiać Cię gdy zadania się zakończą.",
"createHookScript": "1. Utwórz skrypt hooka",
"configureClaude": "2. Skonfiguruj Claude Code",
"restartNote": "Zrestartuj Claude Code aby zastosować hooki.",
"integrationExamples": "Przykłady integracji",
"notifyAfterLong": "Powiadom po długim poleceniu",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux passthrough",
"tmuxDesc": "Jeśli używasz tmux wewnątrz cmux, włącz passthrough:",
"metaTitle": "Powiadomienia"
},
"browserAutomation": {
"title": "Automatyzacja przeglądarki",
"metaDescription": "Dokumentacja poleceń przeglądarki cmux: nawigacja, interakcja z DOM, oczekiwanie, inspekcja, ewaluacja JavaScript, karty, dialogi, ramki, pobieranie i stan przeglądarki.",
"intro": "Grupa poleceń cmux browser zapewnia automatyzację przeglądarki wobec surface'ów przeglądarki cmux. Używaj jej do nawigacji, interakcji z elementami DOM, inspekcji stanu strony, ewaluacji JavaScript i zarządzania danymi sesji przeglądarki.",
"commandIndex": "Indeks poleceń",
"categoryHeader": "Kategoria",
"subcommandsHeader": "Podpolecenia",
"navAndTargeting": "Nawigacja i celowanie",
"waiting": "Oczekiwanie",
"domInteraction": "Interakcja z DOM",
"inspection": "Inspekcja",
"jsAndInjection": "JavaScript i wstrzykiwanie",
"framesDialogsDownloads": "Ramki, dialogi, pobieranie",
"stateAndSession": "Stan i dane sesji",
"tabsAndLogs": "Karty i logi",
"targetingSurface": "Celowanie w surface przeglądarki",
"targetingDesc": "Większość podpoleceń wymaga surface'a docelowego. Możesz go podać pozycyjnie lub z --surface.",
"navigation": "Nawigacja",
"waitingSection": "Oczekiwanie",
"waitingDesc": "Użyj wait aby blokować do momentu spełnienia selektorów, tekstu, fragmentów URL, stanu ładowania lub warunku JavaScript.",
"domSection": "Interakcja z DOM",
"domDesc": "Akcje mutujące obsługują --snapshot-after do szybkiej weryfikacji w skryptach.",
"inspectionSection": "Inspekcja",
"inspectionDesc": "Użyj strukturalnych getterów do skryptów i snapshotów/zrzutów ekranu do przeglądu przez człowieka.",
"jsSection": "Ewaluacja i wstrzykiwanie JavaScript",
"stateSection": "Stan",
"stateDesc": "Polecenia danych sesji obejmują ciasteczka, pamięć lokalną/sesyjną i pełne snapshoty stanu przeglądarki.",
"tabsSection": "Karty",
"tabsDesc": "Operacje na kartach przeglądarki mapują się na surface'y przeglądarki w aktywnej grupie kart przeglądarki.",
"consoleSection": "Konsola i błędy",
"dialogsSection": "Dialogi",
"framesSection": "Ramki",
"downloadsSection": "Pobieranie",
"commonPatterns": "Typowe wzorce",
"patternNavigate": "Nawiguj, czekaj, inspektuj",
"patternForm": "Wypełnij formularz i zweryfikuj tekst sukcesu",
"patternDebug": "Przechwyć artefakty debugowania przy błędzie",
"patternSession": "Zapisz i przywróć sesję przeglądarki",
"metaTitle": "Automatyzacja przeglądarki"
},
"changelog": {
"title": "Dziennik zmian",
"metaDescription": "Notatki wydań i historia wersji cmux. Nowe funkcje, poprawki błędów i zmiany dla natywnego terminala macOS.",
"metaTitle": "Historia zmian"
},
"navItems": {
"gettingStarted": "Szybki start",
"concepts": "Koncepty",
"configuration": "Konfiguracja",
"keyboardShortcuts": "Skróty klawiszowe",
"apiReference": "Dokumentacja API",
"browserAutomation": "Automatyzacja przeglądarki",
"notifications": "Powiadomienia",
"changelog": "Dziennik zmian"
}
},
"legal": {
"privacyPolicy": "Polityka prywatności",
"termsOfService": "Regulamin",
"eula": "EULA"
},
"wallOfLove": {
"title": "Ściana Miłości",
"description": "Co ludzie mówią o cmux."
},
"testimonials": {
"mitchellh": "Kolejny dzień, kolejny projekt oparty na libghostty, tym razem terminal macOS z pionowymi kartami, lepszą organizacją/powiadomieniami, wbudowaną/skryptowalną przeglądarką, specjalnie skierowany do ludzi używających mnóstwa terminalowych workflow'ów agentowych.",
"schrockn": "To jest dokładnie produkt, którego szukałem. Po dwóch godzinach rano jestem zakochany.",
"egrefen": "Używałem tego cały weekend i jest niesamowite.",
"max4c": "to było moje ulubione narzędzie przez ostatnie dwa tygodnie",
"asaza": "cmux wygląda tak dobrze, że może wreszcie czas pożegnać się z VSCode",
"johnthedebs": "Hej, to wygląda naprawdę świetnie. Uwielbiam pomysły tutaj, konkretnie: programowalność, warstwowy UI, przeglądarka z API. Nie mogę się doczekać żeby to wypróbować. Chcę też dodać, że naprawdę doceniam Mitchella Hashimoto za stworzenie libghostty; czuć, że to ekscytujący czas dla użytkowników terminala.",
"joeriddles": "Pionowe karty w moim terminalu! Nigdy wcześniej o tym nie pomyślałem. Używam i kocham pionowe karty w Firefoxie.",
"dchu17": "Dałem temu szansę i było dość intuicyjne. Dobra robota!",
"afruth": "Podoba mi się, używałem tego ostatniego dnia na trzech równoległych projektach, każdy z kilkoma worktree'ami. Mając to w parze z lazygit i yazi / nvim byłem trochę bardziej produktywny niż zwykle, bez konieczności ścigania wielu instancji ghostty / iTerm. Czuję się też bardziej naturalnie niż tmux.",
"northprint": "Wypróbowałem cmux bo wyglądał dobrze, i jest dobry",
"indykish": "cmux jest całkiem niezły.",
"kataring": "Przeszedłem na cmux.dev",
"scottw": "To było takie przydatne odkrycie. Nie mogę go wystarczająco polecić.",
"johnblythe": "wziąłem to w weekend i pokochałem. czekałem na coś takiego.",
"bchris91": "To jest dokładnie to, czego chciałem. Świetna robota, dziękuję!",
"connorelsea": "Używam tego od tygodnia i jest fantastyczne. Pionowa karta dla każdego zadania w toku. Wewnątrz, Claude po jednej stronie a przeglądarka z PR i zasobami po drugiej, przełączam się między zadaniami i utrzymuję porządek. Połącz to ze skillami żeby Claude monitorował CI rekursywnie itp. czuję się oświecony szczerze mówiąc",
"tonkotsuboy": "Na początku roku przeszedłem z Warpa na Ghostty, ale teraz przeszedłem na cmux. Pionowe karty są wygodne i doceniam powiadomienia gdy zadania Claude Code się kończą. Jest oparty na Ghostty więc błyskawiczna wydajność zostaje. Wyświetlanie brancha i uzupełniania które skonfigurowałem w Ghostty nadal działają."
},
"languageSwitcher": {
"label": "Język"
}
}

587
web/messages/pt-BR.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — O terminal feito para multitarefa",
"description": "Terminal nativo macOS baseado no Ghostty. Funciona com Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider e qualquer ferramenta CLI. Abas verticais, anéis de notificação, painéis divididos e uma API de socket.",
"ogDescription": "Terminal nativo macOS para agentes de código IA. Funciona com Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider e qualquer ferramenta CLI."
},
"common": {
"downloadForMac": "Baixar para Mac",
"viewOnGitHub": "Ver no GitHub",
"closeMenu": "Fechar menu",
"openMenu": "Abrir menu",
"toggleTheme": "Alternar tema",
"backToBlog": "Voltar ao blog",
"readTheDocs": "Ler a Documentação",
"viewChangelog": "Ver Changelog"
},
"nav": {
"docs": "Documentação",
"blog": "Blog",
"changelog": "Changelog",
"community": "Comunidade",
"github": "GitHub"
},
"footer": {
"product": "Produto",
"resources": "Recursos",
"legal": "Jurídico",
"social": "Social",
"blog": "Blog",
"community": "Comunidade",
"docs": "Documentação",
"changelog": "Changelog",
"privacy": "Privacidade",
"terms": "Termos",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "Contato",
"copyright": "© {year} Manaflow",
"language": "Idioma"
},
"home": {
"taglinePrefix": "O terminal feito para ",
"typingCodingAgents": "agentes de código",
"typingMultitasking": "multitarefa",
"subtitle": "App nativo para macOS construído sobre o Ghostty. Abas verticais, anéis de notificação quando agentes precisam de atenção, painéis divididos e uma API de socket para automação.",
"features": "Recursos",
"faq": "Perguntas Frequentes",
"communitySection": "Comunidade",
"feature": {
"verticalTabs": "Abas verticais",
"verticalTabsDesc": ": a barra lateral mostra branch git, diretório de trabalho, portas e texto de notificação",
"notificationRings": "Anéis de notificação",
"notificationRingsDesc": ": os painéis acendem quando agentes precisam de atenção",
"inAppBrowser": "Navegador integrado",
"inAppBrowserDesc": ": divida um navegador ao lado do seu terminal com uma API programável",
"splitPanes": "Painéis divididos",
"splitPanesDesc": ": divisões horizontais e verticais dentro de cada aba",
"scriptable": "Programável",
"scriptableDesc": ": CLI e API de socket para automação e scripts",
"gpuAccelerated": "Acelerado por GPU",
"gpuAcceleratedDesc": ": alimentado pelo libghostty para renderização suave",
"lightweight": "Leve",
"lightweightDesc": ": Swift + AppKit nativo, sem Electron",
"keyboardShortcuts": "Atalhos de teclado",
"keyboardShortcutsDesc": ": <link>atalhos abrangentes</link> para workspaces, divisões, navegador e mais"
},
"faqGhosttyQ": "Qual a relação do cmux com o Ghostty?",
"faqGhosttyA": "O cmux não é um fork do Ghostty. Ele usa o <link>libghostty</link> como biblioteca para renderização de terminal, da mesma forma que apps usam o WebKit para visualizações web. O Ghostty é um terminal independente; o cmux é um app diferente construído sobre seu motor de renderização.",
"faqPlatformQ": "Quais plataformas são suportadas?",
"faqPlatformA": "Apenas macOS, por enquanto. O cmux é um app nativo em Swift + AppKit.",
"faqAgentsQ": "Com quais agentes de código o cmux funciona?",
"faqAgentsA": "Todos eles. O cmux é um terminal, então qualquer agente que roda em um terminal funciona diretamente: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent e qualquer outro que você possa executar pela linha de comando.",
"faqNotificationsQ": "Como funcionam as notificações?",
"faqNotificationsA": "Quando um processo precisa de atenção, o cmux mostra anéis de notificação ao redor dos painéis, badges de não lido na barra lateral, um popover de notificações e uma notificação no desktop do macOS. Elas disparam automaticamente via sequências de terminal padrão (OSC 9/99/777), ou você pode acioná-las com o <cliLink>CLI do cmux</cliLink> e os <hooksLink>hooks do Claude Code</hooksLink>.",
"faqShortcutsQ": "Posso personalizar os atalhos de teclado?",
"faqShortcutsA": "Os atalhos do terminal são lidos do seu arquivo de configuração do Ghostty (<configPath>~/.config/ghostty/config</configPath>). Atalhos específicos do cmux (workspaces, divisões, navegador, notificações) podem ser personalizados nas Configurações. Veja os <link>atalhos padrão</link> para a lista completa.",
"faqTmuxQ": "Como ele se compara ao tmux?",
"faqTmuxA": "O tmux é um multiplexador de terminal que roda dentro de qualquer terminal. O cmux é um app macOS nativo com interface gráfica: abas verticais, painéis divididos, navegador integrado e uma API de socket são todos embutidos. Sem arquivos de configuração ou teclas de prefixo necessários.",
"faqFreeQ": "O cmux é gratuito?",
"faqFreeA": "Sim, o cmux é gratuito. O código-fonte está disponível no <link>GitHub</link>."
},
"community": {
"title": "Comunidade",
"description": "Conecte-se com outros usuários do cmux e a equipe por trás dele.",
"discord": "Discord",
"discordAction": "Entre no nosso Discord",
"discordDesc": "Converse com a comunidade, obtenha ajuda e compartilhe feedback",
"githubAction": "Ver no GitHub",
"githubDesc": "Dê uma estrela no repo, reporte problemas e contribua",
"twitter": "Twitter",
"twitterAction": "Siga no X",
"twitterDesc": "Atualizações, anúncios e dicas",
"youtube": "YouTube",
"youtubeAction": "Inscreva-se",
"youtubeDesc": "Demos, tutoriais e walkthroughs",
"linkedin": "LinkedIn",
"linkedinAction": "Siga-nos",
"linkedinDesc": "Notícias da empresa e atualizações de engenharia",
"metaTitle": "Comunidade — cmux",
"metaDescription": "Junte-se à comunidade cmux no Discord, Twitter, GitHub e mais"
},
"blog": {
"title": "Blog",
"layoutTitle": "cmux blog",
"metaTitle": "Blog",
"metaDescription": "Notícias e atualizações da equipe cmux",
"description": "Novidades e atualizações da equipe do cmux",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Como o Cmd+Shift+U navega entre agentes finalizados nos workspaces do cmux.",
"date": "4 de março de 2026",
"p1": "Meu recurso favorito do cmux é o Cmd+Shift+U. Tenho 17 workspaces abertos agora, cada um rodando um agente. Eu costumava clicar entre abas e o painel de notificações para descobrir o que havia terminado. Digitar é mais rápido.",
"p2": "Cmd+Shift+U pula para a <link>notificação</link> não lida mais recente. Na prática, isso significa o último agente que terminou. Ele muda para o workspace correto, foca no painel exato, pisca para você ver onde olhar e marca como lido. Se a notificação veio de outra janela, essa janela vem para frente."
},
"zenOfCmux": {
"title": "O Zen do cmux",
"summary": "O cmux é uma primitiva, não uma solução. Ele te dá peças combináveis e seu fluxo de trabalho é por sua conta.",
"date": "27 de fevereiro de 2026",
"p1": "O cmux não é prescritivo sobre como desenvolvedores usam suas ferramentas. É um terminal e navegador com uma CLI, e o resto é com você.",
"p2": "O cmux é uma primitiva, não uma solução. Ele te dá um terminal, um navegador, notificações, workspaces, divisões, abas e uma CLI para controlar tudo isso. O cmux não te força a uma forma opinativa de usar agentes de código. O que você constrói com as primitivas é seu.",
"p3": "Os melhores desenvolvedores sempre construíram suas próprias ferramentas. Ninguém descobriu a melhor forma de trabalhar com agentes ainda, e as equipes construindo produtos fechados definitivamente também não. Os desenvolvedores mais próximos de seus próprios codebases vão descobrir primeiro.",
"p4": "Dê a um milhão de desenvolvedores primitivas combináveis e eles coletivamente encontrarão os fluxos de trabalho mais eficientes mais rápido do que qualquer equipe de produto poderia projetar de cima para baixo."
},
"showHnLaunch": {
"title": "Lançando o cmux no Show HN",
"summary": "O cmux chegou ao #2 no Hacker News, foi compartilhado por Mitchell Hashimoto e viralizou no Japão.",
"date": "21 de fevereiro de 2026",
"intro": "Postamos o cmux no <link>Show HN</link> em 19 de fevereiro:",
"blockquote1": "Eu rodo muitas sessões de Claude Code e Codex em paralelo. Estava usando o Ghostty com vários painéis divididos, e dependendo das notificações nativas do macOS para saber quando um agente precisava de mim. Mas o corpo da notificação do Claude Code é sempre apenas \"Claude is waiting for your input\" sem contexto, e com abas suficientes abertas, eu não conseguia nem ler os títulos.",
"blockquote2": "Tentei alguns orquestradores de código, mas a maioria era apps Electron/Tauri e a performance me incomodava. Também prefiro o terminal, já que orquestradores com GUI te prendem ao fluxo de trabalho deles. Então construí o cmux como um app macOS nativo em Swift/AppKit. Ele usa o libghostty para renderização de terminal e lê sua configuração existente do Ghostty para temas, fontes, cores e mais.",
"blockquote3": "As principais adições são a barra lateral e o sistema de notificações. A barra lateral tem abas verticais que mostram branch git, diretório de trabalho, portas em escuta e o texto da última notificação de cada workspace. O sistema de notificações captura sequências de terminal (OSC 9/99/777) e tem uma CLI (cmux notify) que você pode conectar aos hooks de agentes para Claude Code, OpenCode, etc. Quando um agente está esperando, seu painel recebe um anel azul e a aba acende na barra lateral, para eu saber qual precisa de mim entre divisões e abas. Cmd+Shift+U pula para o não lido mais recente.",
"blockquote4": "O navegador integrado tem uma API programável. Agentes podem capturar a árvore de acessibilidade, obter referências de elementos, clicar, preencher formulários, avaliar JS e ler logs do console. Você pode dividir um painel de navegador ao lado do seu terminal e ter o Claude Code interagindo com seu servidor de desenvolvimento diretamente.",
"blockquote5": "Tudo é programável através da CLI e API de socket: criar workspaces/abas, dividir painéis, enviar teclas, abrir URLs no navegador.",
"hitNumber2": "No pico, chegou ao #2 no Hacker News. Mitchell Hashimoto compartilhou:",
"favoriteComment": "Meu comentário favorito do <link>thread do HN</link>:",
"viralJapan": "Surpreendentemente, o cmux viralizou no Japão:",
"translation": "Tradução: \"Isso parece bom. Um app de terminal baseado no Ghostty projetado para você não se perder ao rodar múltiplas CLIs como Claude Code em paralelo. O painel aguardando entrada recebe uma moldura azul e tem seu próprio sistema de notificações.\"",
"viralChina": "E semi-viral na China:",
"extensions": "Outra coisa empolgante foi ver pessoas construindo em cima da CLI do cmux. sasha construiu uma extensão pi-cmux que mostra informações do modelo, uso de tokens e estado do agente na barra lateral:",
"scriptable": "Tudo no cmux é programável através da CLI: criando workspaces, enviando teclas, controlando o navegador, lendo notificações. Parte da filosofia do cmux é ser programável e combinável, para que as pessoas possam personalizar a forma como trabalham com agentes de código. O estado da arte para agentes de código está mudando rápido, e você não quer ficar preso a um orquestrador GUI inflexível que não consegue acompanhar.",
"cta": "Se você está rodando múltiplos agentes de código, <link>experimente o cmux</link>."
},
"introducingCmux": {
"title": "Apresentando o cmux",
"summary": "Um terminal macOS nativo construído sobre o Ghostty, projetado para rodar múltiplos agentes de código com IA lado a lado.",
"date": "12 de fevereiro de 2026",
"p1": "O cmux é um aplicativo de terminal macOS nativo construído sobre o Ghostty, projetado desde o início para desenvolvedores que rodam múltiplos agentes de código com IA simultaneamente.",
"whyTitle": "Por que cmux?",
"whyP": "Fluxos de trabalho modernos de desenvolvimento frequentemente envolvem rodar vários agentes ao mesmo tempo. Claude Code, Codex e outras ferramentas, cada uma em seu próprio terminal. Acompanhar quais precisam de atenção e alternar entre elas rapidamente é o problema que o cmux resolve.",
"featuresTitle": "Principais recursos",
"getStartedTitle": "Comece agora",
"getStartedP": "Instale o cmux via Homebrew ou baixe o DMG do <link>guia de início</link>.",
"featureVerticalTabsLabel": "Abas verticais",
"featureVerticalTabsDesc": "veja todos os seus terminais de relance na barra lateral",
"featureNotificationsLabel": "Anéis de notificação",
"featureNotificationsDesc": "abas piscam quando um agente precisa da sua atenção",
"featureSplitPanesLabel": "Painéis divididos",
"featureSplitPanesDesc": "divisões horizontais e verticais dentro de cada workspace",
"featureSocketApiLabel": "API de socket",
"featureSocketApiDesc": "controle programático para criar abas e enviar entrada",
"featureGpuLabel": "Acelerado por GPU",
"featureGpuDesc": "alimentado pelo libghostty para renderização suave"
}
},
"zenOfCmux": {
"metaTitle": "O Zen do cmux",
"metaDescription": "cmux é uma primitiva, não uma solução. Oferece peças combináveis e seu fluxo de trabalho é por sua conta."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "O novo atalho de teclado que muda como você interage com o cmux."
},
"showHnLaunch": {
"metaTitle": "Lançamento do cmux no Show HN",
"metaDescription": "A história do lançamento do cmux no Hacker News."
},
"introducingCmux": {
"metaTitle": "Apresentando o cmux",
"metaDescription": "Por que construímos o cmux, um novo terminal para macOS."
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "Primeiros Passos",
"metaDescription": "Instale o cmux, o terminal macOS nativo para agentes de código com IA. Homebrew, download DMG, configuração da CLI e atualizações automáticas via Sparkle.",
"intro": "O cmux é um terminal macOS nativo e leve, construído sobre o Ghostty para gerenciar múltiplos agentes de código com IA. Ele possui abas verticais, um painel de notificações e uma API de controle baseada em socket.",
"install": "Instalação",
"dmgRecommended": "DMG (recomendado)",
"dmgDesc": "Abra o .dmg e arraste o cmux para a pasta Aplicativos. O cmux se atualiza automaticamente via Sparkle, então você só precisa baixar uma vez.",
"homebrew": "Homebrew",
"updateLater": "Para atualizar depois:",
"firstLaunchCallout": "Na primeira execução, o macOS pode pedir para confirmar a abertura de um app de um desenvolvedor identificado. Clique em <strong>Abrir</strong> para continuar.",
"verifyTitle": "Verificar instalação",
"verifyDesc": "Abra o cmux e você deve ver:",
"verifyItem1": "Uma janela de terminal com uma barra lateral de abas verticais à esquerda",
"verifyItem2": "Um workspace inicial já aberto",
"verifyItem3": "O terminal Ghostty pronto para entrada",
"cliSetup": "Configuração da CLI",
"cliDesc": "O cmux inclui uma ferramenta de linha de comando para automação. Dentro dos terminais do cmux, funciona automaticamente. Para usar a CLI de fora do cmux, crie um link simbólico:",
"cliThen": "Depois você pode executar comandos como:",
"autoUpdates": "Atualizações automáticas",
"autoUpdatesDesc": "O cmux verifica atualizações automaticamente via Sparkle. Quando uma atualização estiver disponível, você verá um indicador de atualização na barra de título. Você também pode verificar manualmente via cmux > Verificar Atualizações na barra de menus.",
"sessionRestore": "Restauração de sessão (comportamento atual)",
"sessionRestoreDesc": "Após reinício, o cmux restaura apenas layout e metadados:",
"sessionItem1": "Layout de janelas, workspaces e painéis",
"sessionItem2": "Diretórios de trabalho",
"sessionItem3": "Histórico de rolagem do terminal (melhor esforço)",
"sessionItem4": "URL do navegador e histórico de navegação",
"sessionCallout": "O cmux ainda não restaura o estado de processos em execução. Sessões ativas de aplicativos de terminal como Claude Code, tmux e vim não são retomadas após reinício do app.",
"requirements": "Requisitos",
"reqItem1": "macOS 14.0 ou posterior",
"reqItem2": "Mac com Apple Silicon ou Intel",
"metaTitle": "Primeiros passos"
},
"concepts": {
"title": "Conceitos",
"metaDescription": "Como o cmux organiza terminais: janelas, workspaces, painéis e superfícies. A hierarquia por trás da barra lateral, divisões e API de socket.",
"intro": "O cmux organiza seus terminais em uma hierarquia de quatro níveis. Entender esses níveis ajuda ao usar a API de socket, CLI e atalhos de teclado.",
"hierarchy": "Hierarquia",
"windowTitle": "Janela",
"windowDesc": "Uma janela do macOS. Abra múltiplas janelas com {shortcut}. Cada janela tem sua própria barra lateral com workspaces independentes.",
"workspaceTitle": "Workspace",
"workspaceDesc": "Uma entrada na barra lateral. Cada workspace contém um ou mais painéis divididos. Workspaces são o que você vê listado na barra lateral esquerda.",
"workspaceNote": "Na interface e nos atalhos de teclado, workspaces são frequentemente chamados de \"abas\" já que se comportam como abas na barra lateral. A API de socket e variáveis de ambiente usam o termo \"workspace\".",
"contextHeader": "Contexto",
"termUsedHeader": "Termo usado",
"sidebarUI": "Interface da barra lateral",
"tab": "Aba",
"keyboardShortcuts": "Atalhos de teclado",
"workspaceOrTab": "Workspace ou aba",
"socketAPI": "API de socket",
"environmentVariable": "Variável de ambiente",
"workspaceShortcuts": "Atalhos: {new} (novo), {jump} (pular), {close} (fechar), {prevNext} (anterior/próximo)",
"paneTitle": "Painel",
"paneDesc": "Uma região dividida dentro de um workspace. Criado dividindo com {right} (direita) ou {down} (baixo). Navegue entre painéis com {nav} + teclas de seta.",
"paneNote": "Cada painel pode conter múltiplas superfícies (abas dentro do painel).",
"surfaceTitle": "Superfície",
"surfaceDesc": "Uma aba dentro de um painel. Cada painel tem sua própria barra de abas e pode conter múltiplas superfícies. Criada com {new}, navegada com {prev} / {next} ou {jump}.",
"surfaceNote": "Superfícies são as sessões individuais de terminal ou navegador com as quais você interage. Cada superfície tem sua própria variável de ambiente CMUX_SURFACE_ID.",
"panelTitle": "Panel",
"panelDesc": "O conteúdo dentro de uma superfície. Atualmente dois tipos:",
"panelTerminal": "Terminal: uma sessão de terminal Ghostty",
"panelBrowser": "Navegador: uma visualização web integrada",
"panelNote": "Panel é majoritariamente um conceito interno. Na API de socket e CLI, você interage com superfícies em vez de panels diretamente.",
"visualExample": "Exemplo visual",
"visualExampleDesc": "Neste exemplo:",
"visualItem1": "A janela contém uma barra lateral com três workspaces (dev, server, logs)",
"visualItem2": "O workspace \"dev\" está selecionado, mostrando dois painéis lado a lado",
"visualItem3": "O Painel 1 tem duas superfícies ([S1] e [S2] na barra de abas), com S1 ativa",
"visualItem4": "O Painel 2 tem uma superfície",
"visualItem5": "Cada superfície contém um panel (um terminal neste caso)",
"summary": "Resumo",
"levelHeader": "Nível",
"whatItIsHeader": "O que é",
"createdByHeader": "Criado por",
"identifiedByHeader": "Identificado por",
"macosWindow": "Janela do macOS",
"sidebarEntry": "Entrada na barra lateral",
"splitRegion": "Região dividida",
"tabWithinPane": "Aba dentro do painel",
"terminalOrBrowser": "Terminal ou navegador",
"automatic": "Automático",
"paneIdSocket": "ID do painel (API de socket)",
"panelIdInternal": "ID do panel (interno)",
"metaTitle": "Conceitos"
},
"configuration": {
"title": "Configuração",
"metaDescription": "Configure o cmux via arquivos de configuração do Ghostty. Fonte, tema, cores, estilo de painéis divididos, histórico de rolagem e configurações do app para modo de automação.",
"intro": "O cmux lê a configuração dos arquivos de configuração do Ghostty, oferecendo opções familiares se você vem do Ghostty.",
"configLocations": "Locais do arquivo de configuração",
"configLocationsDesc": "O cmux procura configuração nestes locais (em ordem):",
"createConfig": "Crie o arquivo de configuração se ele não existir:",
"appearance": "Aparência",
"font": "Fonte",
"colors": "Cores",
"splitPanes": "Painéis divididos",
"behavior": "Comportamento",
"scrollback": "Histórico de rolagem",
"workingDirectory": "Diretório de trabalho",
"appSettings": "Configurações do app",
"appSettingsDesc": "Configurações do app estão disponíveis via cmux > Configurações ({shortcut}):",
"themeMode": "Modo de tema",
"themeSystem": "Sistema: seguir aparência do macOS",
"themeLight": "Claro: sempre modo claro",
"themeDark": "Escuro: sempre modo escuro",
"automationMode": "Modo de automação",
"automationModeDesc": "Nível de acesso ao socket:",
"automationOff": "Desligado: sem controle por socket (mais seguro)",
"automationCmux": "Apenas processos cmux: permitir apenas processos iniciados dentro dos terminais do cmux se conectarem",
"automationAll": "allowAll: permitir qualquer processo local se conectar (CMUX_SOCKET_MODE=allowAll, apenas por variável de ambiente)",
"automationCallout": "Em máquinas compartilhadas, considere usar o modo \"Desligado\" ou \"Apenas processos cmux\".",
"browserLinkBehavior": "Comportamento de links do navegador",
"browserLinkDesc": "Em Configurações > Navegador, o cmux expõe duas listas de hosts com propósitos diferentes:",
"browserHostsEmbed": "Hosts para abrir no navegador integrado: aplica-se a links clicados na saída do terminal. Hosts nesta lista abrem no cmux; outros hosts abrem no seu navegador padrão. Suporta um host ou wildcard por linha (por exemplo: example.com, *.internal.example).",
"browserHostsHttp": "Hosts HTTP permitidos no navegador integrado: aplica-se apenas a URLs HTTP (não HTTPS). Hosts nesta lista podem abrir no cmux sem aviso. Os padrões incluem localhost, 127.0.0.1, ::1, 0.0.0.0 e *.localtest.me.",
"exampleConfig": "Exemplo de configuração",
"metaTitle": "Configuração"
},
"keyboardShortcuts": {
"title": "Atalhos de Teclado",
"description": "Todos os atalhos de teclado disponíveis no cmux, agrupados por categoria.",
"metaDescription": "Todos os atalhos de teclado do cmux para workspaces, superfícies, painéis divididos, navegador, notificações, busca e gerenciamento de janelas no macOS.",
"searchPlaceholder": "Buscar atalhos...",
"searchLabel": "Buscar atalhos de teclado",
"noResults": "Nenhum atalho encontrado",
"noResultsHint": "Tente um termo de busca diferente",
"cat": {
"workspaces": "Workspaces",
"workspacesBlurb": "Workspaces ficam na barra lateral. Cada workspace tem seu próprio conjunto de painéis e superfícies.",
"surfaces": "Superfícies",
"surfacesBlurb": "Superfícies são abas dentro de um painel.",
"splitPanes": "Painéis Divididos",
"browser": "Navegador",
"notifications": "Notificações",
"find": "Buscar",
"terminal": "Terminal",
"window": "Janela"
},
"sc": {
"ws-new": "Novo workspace",
"ws-jump-1-8": "Ir para workspace 18",
"ws-jump-last": "Ir para último workspace",
"ws-close": "Fechar workspace",
"ws-rename": "Renomear workspace",
"sf-new": "Nova superfície",
"sf-prev-1": "Superfície anterior",
"sf-prev-2": "Superfície anterior",
"sf-jump-1-8": "Ir para superfície 18",
"sf-jump-last": "Ir para última superfície",
"sf-close": "Fechar superfície",
"sp-right": "Dividir à direita",
"sp-down": "Dividir abaixo",
"sp-focus": "Focar painel direcionalmente",
"sp-browser-right": "Dividir navegador à direita",
"sp-browser-down": "Dividir navegador abaixo",
"br-open": "Abrir superfície do navegador",
"br-addr": "Focar barra de endereço",
"br-forward": "Avançar",
"br-reload": "Recarregar página",
"br-devtools": "Abrir Ferramentas de Desenvolvedor",
"nt-panel": "Mostrar painel de notificações",
"nt-latest": "Ir para última não lida",
"nt-flash": "Disparar flash",
"fd-find": "Buscar",
"fd-next-prev": "Buscar próximo / anterior",
"fd-hide": "Ocultar barra de busca",
"fd-selection": "Usar seleção para busca",
"tm-clear": "Limpar histórico de rolagem",
"tm-copy": "Copiar (com seleção)",
"tm-paste": "Colar",
"tm-font": "Aumentar / diminuir tamanho da fonte",
"tm-reset": "Resetar tamanho da fonte",
"wn-new": "Nova janela",
"wn-settings": "Configurações",
"wn-reload": "Recarregar configuração",
"wn-quit": "Sair"
},
"metaTitle": "Atalhos de teclado"
},
"api": {
"title": "Referência da API",
"metaDescription": "Referência da CLI e API de socket Unix do cmux. Gerenciamento de workspaces, painéis divididos, controle de entrada, notificações, metadados da barra lateral, variáveis de ambiente e métodos de detecção.",
"intro": "O cmux oferece uma ferramenta CLI e um socket Unix para controle programático. Cada comando está disponível através de ambas as interfaces.",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "Caminho",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Build de debug com tag",
"socketOverride": "Substitua com a variável de ambiente CMUX_SOCKET_PATH. Envie uma requisição JSON terminada em nova linha por chamada:",
"socketCallout": "Requisições JSON via socket devem usar method e params. Payloads JSON legados v1 como <legacy>'{'\"command\":\"...\"'}'</legacy> não são suportados.",
"accessModes": "Modos de acesso",
"modeHeader": "Modo",
"descriptionHeader": "Descrição",
"howToEnableHeader": "Como ativar",
"offMode": "Socket desativado",
"offEnable": "Interface de Configurações ou CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "Apenas processos iniciados dentro dos terminais do cmux podem se conectar.",
"cmuxOnlyEnable": "Modo padrão na interface de Configurações",
"allowAllMode": "Permitir qualquer processo local se conectar (sem verificação de ancestralidade).",
"allowAllEnable": "Apenas por variável de ambiente: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "Em máquinas compartilhadas, use Desligado ou apenas processos cmux.",
"cliOptions": "Opções da CLI",
"flagHeader": "Flag",
"customSocketPath": "Caminho de socket personalizado",
"outputJson": "Saída em formato JSON",
"targetWindow": "Direcionar uma janela específica",
"targetWorkspace": "Direcionar um workspace específico",
"targetSurface": "Direcionar uma superfície específica",
"idFormat": "Controlar formato de identificador na saída JSON",
"workspaceCommands": "Comandos de workspace",
"listWorkspacesDesc": "Listar todos os workspaces abertos.",
"newWorkspaceDesc": "Criar um novo workspace.",
"selectWorkspaceDesc": "Alternar para um workspace específico.",
"currentWorkspaceDesc": "Obter o workspace atualmente ativo.",
"closeWorkspaceDesc": "Fechar um workspace.",
"splitCommands": "Comandos de divisão",
"newSplitDesc": "Criar um novo painel dividido. Direções: left, right, up, down.",
"listSurfacesDesc": "Listar todas as superfícies no workspace atual.",
"focusSurfaceDesc": "Focar uma superfície específica.",
"inputCommands": "Comandos de entrada",
"sendDesc": "Enviar texto para o terminal focado.",
"sendKeyDesc": "Enviar uma tecla. Teclas: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "Enviar texto para uma superfície específica.",
"sendKeySurfaceDesc": "Enviar uma tecla para uma superfície específica.",
"notificationCommands": "Comandos de notificação",
"notifyDesc": "Enviar uma notificação.",
"listNotificationsDesc": "Listar todas as notificações.",
"clearNotificationsDesc": "Limpar todas as notificações.",
"sidebarMetadata": "Comandos de metadados da barra lateral",
"sidebarMetadataDesc": "Definir indicadores de status, barras de progresso e entradas de log na barra lateral para qualquer workspace. Útil para scripts de build, integrações de CI e agentes de código com IA que querem exibir estado rapidamente.",
"setStatusDesc": "Definir um indicador de status na barra lateral. Use uma chave única para que diferentes ferramentas possam gerenciar suas próprias entradas.",
"clearStatusDesc": "Remover uma entrada de status da barra lateral por chave.",
"listStatusDesc": "Listar todas as entradas de status da barra lateral para um workspace.",
"setProgressDesc": "Definir uma barra de progresso na barra lateral (0.0 a 1.0).",
"clearProgressDesc": "Limpar a barra de progresso da barra lateral.",
"logDesc": "Adicionar uma entrada de log à barra lateral. Níveis: info, progress, success, warning, error.",
"clearLogDesc": "Limpar todas as entradas de log da barra lateral.",
"listLogDesc": "Listar entradas de log da barra lateral.",
"sidebarStateDesc": "Exportar todos os metadados da barra lateral (cwd, branch git, portas, status, progresso, logs).",
"utilityCommands": "Comandos utilitários",
"pingDesc": "Verificar se o cmux está rodando e respondendo.",
"capabilitiesDesc": "Listar métodos de socket disponíveis e modo de acesso atual.",
"identifyDesc": "Mostrar contexto da janela/workspace/painel/superfície focados.",
"envVariables": "Variáveis de ambiente",
"variableHeader": "Variável",
"socketPathDesc": "Substituir o caminho do socket usado pela CLI e integrações",
"socketEnableDesc": "Forçar ativação/desativação do socket (1/0, true/false, on/off)",
"socketModeDesc": "Substituir modo de acesso (cmuxOnly, allowAll, off). Também aceita cmux-only/cmux_only e allow-all/allow_all",
"workspaceIdDesc": "Definido automaticamente: ID do workspace atual",
"surfaceIdDesc": "Definido automaticamente: ID da superfície atual",
"termProgramDesc": "Definido como ghostty",
"termDesc": "Definido como xterm-ghostty",
"envCallout": "Valores legados de CMUX_SOCKET_MODE full e notifications ainda são aceitos para compatibilidade.",
"detectingCmux": "Detectando o cmux",
"examples": "Exemplos",
"pythonClient": "Cliente Python",
"shellScript": "Script shell",
"buildScriptNotification": "Script de build com notificação",
"metaTitle": "Referência da API"
},
"notifications": {
"title": "Notificações",
"metaDescription": "Envie notificações de desktop de agentes de IA e scripts no cmux. CLI, sequências de escape OSC 99/777 e integração com hooks do Claude Code.",
"intro": "O cmux suporta notificações de desktop, permitindo que agentes de IA e scripts alertem você quando precisam de atenção.",
"lifecycle": "Ciclo de vida",
"received": "Recebida: notificação aparece no painel, alerta de desktop é disparado (se não suprimido)",
"unread": "Não lida: badge exibido na aba do workspace",
"read": "Lida: limpa quando você visualiza aquele workspace",
"cleared": "Limpa: removida do painel",
"suppression": "Supressão",
"suppressionDesc": "Alertas de desktop são suprimidos quando:",
"suppressItem1": "A janela do cmux está focada",
"suppressItem2": "O workspace específico enviando a notificação está ativo",
"suppressItem3": "O painel de notificações está aberto",
"notificationPanel": "Painel de notificações",
"notificationPanelDesc": "Pressione <openShortcut>⌘⇧I</openShortcut> para abrir o painel de notificações. Clique em uma notificação para ir ao workspace. Pressione <jumpShortcut>⌘⇧U</jumpShortcut> para ir diretamente ao workspace com a notificação não lida mais recente.",
"customCommand": "Comando personalizado",
"customCommandDesc": "Execute um comando shell toda vez que uma notificação for agendada. Defina em Configurações > App > Comando de Notificação. O comando é executado via /bin/sh -c com estas variáveis de ambiente:",
"customCommandNote": "O comando é executado independentemente do seletor de som do sistema. Defina o seletor como \"Nenhum\" para usar apenas o comando personalizado, ou mantenha ambos para um som do sistema mais uma ação personalizada.",
"sending": "Enviando notificações",
"cli": "CLI",
"osc777Title": "OSC 777 (simples)",
"osc777Desc": "O protocolo RXVT usa um formato fixo com título e corpo:",
"osc99Title": "OSC 99 (rico)",
"osc99Desc": "O protocolo Kitty suporta subtítulos e IDs de notificação:",
"variableHeader": "Variável",
"descriptionHeader": "Descrição",
"envTitle": "Título da notificação (nome do workspace ou do app)",
"envSubtitle": "Subtítulo da notificação",
"envBody": "Corpo da notificação",
"cmpTitleBody": "Título + corpo",
"cmpSubtitle": "Subtítulo",
"cmpNotificationId": "ID da notificação",
"cmpComplexity": "Complexidade",
"cmpYes": "Sim",
"cmpNo": "Não",
"cmpHigher": "Maior",
"cmpLower": "Menor",
"featureHeader": "Recurso",
"comparisonCallout": "Use OSC 777 para notificações simples. Use OSC 99 quando precisar de subtítulos ou IDs de notificação. Use a CLI (cmux notify) para a integração mais fácil.",
"claudeCodeHooks": "Hooks do Claude Code",
"claudeCodeHooksDesc": "O cmux se integra com o <link>Claude Code</link> via hooks para notificá-lo quando tarefas são concluídas.",
"createHookScript": "1. Crie o script de hook",
"configureClaude": "2. Configure o Claude Code",
"restartNote": "Reinicie o Claude Code para aplicar os hooks.",
"integrationExamples": "Exemplos de integração",
"notifyAfterLong": "Notificar após comando longo",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "Passthrough do tmux",
"tmuxDesc": "Se estiver usando tmux dentro do cmux, ative o passthrough:",
"metaTitle": "Notificações"
},
"browserAutomation": {
"title": "Automação do Navegador",
"metaDescription": "Referência de comandos do navegador cmux para navegação, interação com DOM, espera, inspeção, avaliação de JavaScript, abas, diálogos, frames, downloads e estado do navegador.",
"intro": "O grupo de comandos de navegador do cmux oferece automação de navegador contra superfícies de navegador do cmux. Use para navegar, interagir com elementos DOM, inspecionar estado da página, avaliar JavaScript e gerenciar dados de sessão do navegador.",
"commandIndex": "Índice de Comandos",
"categoryHeader": "Categoria",
"subcommandsHeader": "Subcomandos",
"navAndTargeting": "Navegação e direcionamento",
"waiting": "Espera",
"domInteraction": "Interação com DOM",
"inspection": "Inspeção",
"jsAndInjection": "JavaScript e injeção",
"framesDialogsDownloads": "Frames, diálogos, downloads",
"stateAndSession": "Estado e dados de sessão",
"tabsAndLogs": "Abas e logs",
"targetingSurface": "Direcionando uma superfície de navegador",
"targetingDesc": "A maioria dos subcomandos requer uma superfície alvo. Você pode passá-la posicionalmente ou com --surface.",
"navigation": "Navegação",
"waitingSection": "Espera",
"waitingDesc": "Use wait para bloquear até que seletores, texto, fragmentos de URL, estado de carregamento ou uma condição JavaScript seja satisfeita.",
"domSection": "Interação com DOM",
"domDesc": "Ações mutáveis suportam --snapshot-after para verificação rápida em scripts.",
"inspectionSection": "Inspeção",
"inspectionDesc": "Use getters estruturados para scripts e snapshots/screenshots para revisão humana.",
"jsSection": "Avaliação e Injeção de JavaScript",
"stateSection": "Estado",
"stateDesc": "Comandos de dados de sessão cobrem cookies, armazenamento local/de sessão e snapshots completos do estado do navegador.",
"tabsSection": "Abas",
"tabsDesc": "Operações de abas do navegador mapeiam para superfícies de navegador no grupo de abas ativo.",
"consoleSection": "Console e Erros",
"dialogsSection": "Diálogos",
"framesSection": "Frames",
"downloadsSection": "Downloads",
"commonPatterns": "Padrões Comuns",
"patternNavigate": "Navegar, esperar, inspecionar",
"patternForm": "Preencher um formulário e verificar texto de sucesso",
"patternDebug": "Capturar artefatos de debug em falha",
"patternSession": "Persistir e restaurar sessão do navegador",
"metaTitle": "Automação do navegador"
},
"changelog": {
"title": "Changelog",
"metaDescription": "Notas de lançamento e histórico de versões do cmux. Novos recursos, correções de bugs e mudanças para o terminal macOS nativo.",
"metaTitle": "Registro de alterações"
},
"navItems": {
"gettingStarted": "Primeiros Passos",
"concepts": "Conceitos",
"configuration": "Configuração",
"keyboardShortcuts": "Atalhos de Teclado",
"apiReference": "Referência da API",
"browserAutomation": "Automação do Navegador",
"notifications": "Notificações",
"changelog": "Changelog"
}
},
"legal": {
"privacyPolicy": "Política de Privacidade",
"termsOfService": "Termos de Serviço",
"eula": "EULA"
},
"wallOfLove": {
"title": "Mural de Amor",
"description": "O que as pessoas estão dizendo sobre o cmux."
},
"testimonials": {
"mitchellh": "Mais um dia, mais um projeto baseado em libghostty, desta vez um terminal macOS com abas verticais, melhor organização/notificações, navegador integrado/programável voltado especificamente para quem usa muitos workflows de agentes baseados em terminal.",
"schrockn": "Isso é exatamente o produto que eu estava procurando. Depois de duas horas esta manhã, estou apaixonado.",
"egrefen": "Estou usando isso o fim de semana inteiro e é incrível.",
"max4c": "essa tem sido minha ferramenta favorita nas últimas duas semanas",
"asaza": "cmux parece tão bom que talvez finalmente seja hora de dizer adeus ao VSCode",
"johnthedebs": "Ei, isso parece seriamente incrível. Amei as ideias aqui, especificamente: a programabilidade, UI em camadas, navegador com API. Ansioso para testar. Também quero dizer que aprecio muito o Mitchell Hashimoto ter criado o libghostty; parece um momento empolgante para ser usuário de terminal.",
"joeriddles": "Abas verticais no meu terminal! Nunca tinha pensado nisso antes. Eu uso e amo abas verticais no Firefox.",
"dchu17": "Testei e foi bem intuitivo. Bom trabalho!",
"afruth": "Gostei, usei no último dia em três projetos paralelos, cada um com vários worktrees. Ter isso junto com lazygit e yazi / nvim me deixou um pouco mais produtivo que o normal sem precisar ficar correndo atrás de várias instâncias de ghostty / iTerm. Também parece mais natural que tmux.",
"northprint": "Experimentei o cmux porque parecia bom — é bom",
"indykish": "cmux é bem bom.",
"kataring": "Migrei para o cmux.dev",
"scottw": "Essa foi uma descoberta muito útil. Recomendo demais.",
"johnblythe": "baixei no fim de semana e adorei. estava esperando algo assim.",
"bchris91": "Isso é exatamente o que eu queria. Trabalho incrível, obrigado!",
"connorelsea": "Usando há uma semana e é fantástico. Aba vertical para cada tarefa em andamento. Dentro, claudes de um lado e navegador com PR e recursos do outro, alterno entre tarefas e mantenho tudo organizado. Misture com skills para o Claude monitorar CI recursivamente, etc. me sinto iluminado pra ser honesto",
"tonkotsuboy": "Mudei do Warp para o Ghostty no início do ano, mas agora migrei para o cmux. As abas verticais são práticas e gosto de ser notificado quando tarefas do Claude Code terminam. É baseado no Ghostty, então a performance ultrarrápida se mantém. A exibição de branches e completions que configurei no Ghostty continuam funcionando também."
},
"languageSwitcher": {
"label": "Idioma"
}
}

587
web/messages/ru.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — Терминал для многозадачности",
"description": "Нативный терминал macOS на базе Ghostty. Работает с Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider и любым CLI-инструментом. Вертикальные вкладки, кольца уведомлений, разделённые панели и socket API.",
"ogDescription": "Нативный терминал macOS для ИИ-агентов программирования. Работает с Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider и любым CLI-инструментом."
},
"common": {
"downloadForMac": "Скачать для Mac",
"viewOnGitHub": "Смотреть на GitHub",
"closeMenu": "Закрыть меню",
"openMenu": "Открыть меню",
"toggleTheme": "Переключить тему",
"backToBlog": "Назад к блогу",
"readTheDocs": "Читать документацию",
"viewChangelog": "Смотреть историю изменений"
},
"nav": {
"docs": "Документация",
"blog": "Блог",
"changelog": "Изменения",
"community": "Сообщество",
"github": "GitHub"
},
"footer": {
"product": "Продукт",
"resources": "Ресурсы",
"legal": "Юридическое",
"social": "Соцсети",
"blog": "Блог",
"community": "Сообщество",
"docs": "Документация",
"changelog": "Изменения",
"privacy": "Конфиденциальность",
"terms": "Условия",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "Контакты",
"copyright": "© {year} Manaflow",
"language": "Язык"
},
"home": {
"taglinePrefix": "Терминал, созданный для ",
"typingCodingAgents": "код-агентов",
"typingMultitasking": "многозадачности",
"subtitle": "Нативное macOS-приложение на базе Ghostty. Вертикальные вкладки, кольца уведомлений когда агенты ждут внимания, разделённые панели и socket API для автоматизации.",
"features": "Возможности",
"faq": "FAQ",
"communitySection": "Сообщество",
"feature": {
"verticalTabs": "Вертикальные вкладки",
"verticalTabsDesc": ": боковая панель показывает ветку git, рабочую директорию, порты и текст уведомлений",
"notificationRings": "Кольца уведомлений",
"notificationRingsDesc": ": панели подсвечиваются когда агенты ждут внимания",
"inAppBrowser": "Встроенный браузер",
"inAppBrowserDesc": ": открой браузер рядом с терминалом со скриптуемым API",
"splitPanes": "Разделённые панели",
"splitPanesDesc": ": горизонтальные и вертикальные разделения внутри каждой вкладки",
"scriptable": "Скриптуемый",
"scriptableDesc": ": CLI и socket API для автоматизации и скриптов",
"gpuAccelerated": "GPU-ускорение",
"gpuAcceleratedDesc": ": на базе libghostty для плавного рендеринга",
"lightweight": "Лёгкий",
"lightweightDesc": ": нативный Swift + AppKit, без Electron",
"keyboardShortcuts": "Горячие клавиши",
"keyboardShortcutsDesc": ": <link>обширные шорткаты</link> для рабочих пространств, разделений, браузера и не только"
},
"faqGhosttyQ": "Как cmux связан с Ghostty?",
"faqGhosttyA": "cmux не является форком Ghostty. Он использует <link>libghostty</link> как библиотеку для рендеринга терминала, так же как приложения используют WebKit для веб-представлений. Ghostty это самостоятельный терминал; cmux это другое приложение, построенное на его движке рендеринга.",
"faqPlatformQ": "Какие платформы поддерживаются?",
"faqPlatformA": "Только macOS, пока что. cmux это нативное приложение на Swift + AppKit.",
"faqAgentsQ": "С какими агентами для кода работает cmux?",
"faqAgentsA": "Со всеми. cmux это терминал, поэтому любой агент, работающий в терминале, работает из коробки: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent и всё остальное, что можно запустить из командной строки.",
"faqNotificationsQ": "Как работают уведомления?",
"faqNotificationsA": "Когда процесс требует внимания, cmux показывает кольца уведомлений вокруг панелей, бейджи непрочитанных на боковой панели, поповер уведомлений и десктопное уведомление macOS. Они срабатывают автоматически через стандартные escape-последовательности терминала (OSC 9/99/777), или ты можешь вызвать их через <cliLink>cmux CLI</cliLink> и <hooksLink>Claude Code hooks</hooksLink>.",
"faqShortcutsQ": "Можно настроить горячие клавиши?",
"faqShortcutsA": "Привязки клавиш терминала читаются из конфига Ghostty (<configPath>~/.config/ghostty/config</configPath>). Шорткаты, специфичные для cmux (рабочие пространства, разделения, браузер, уведомления), настраиваются в Настройках. Смотри <link>шорткаты по умолчанию</link> для полного списка.",
"faqTmuxQ": "Чем отличается от tmux?",
"faqTmuxA": "tmux это мультиплексор терминала, который работает внутри любого терминала. cmux это нативное macOS-приложение с GUI: вертикальные вкладки, разделённые панели, встроенный браузер и socket API уже встроены. Не нужны конфиг-файлы или prefix-клавиши.",
"faqFreeQ": "cmux бесплатный?",
"faqFreeA": "Да, cmux бесплатный. Исходный код доступен на <link>GitHub</link>."
},
"community": {
"title": "Сообщество",
"description": "Свяжись с другими пользователями cmux и командой разработки.",
"discord": "Discord",
"discordAction": "Присоединяйся к Discord",
"discordDesc": "Общайся с сообществом, получай помощь и делись обратной связью",
"githubAction": "Смотреть на GitHub",
"githubDesc": "Поставь звезду репозиторию, сообщай об ошибках и вноси вклад",
"twitter": "Twitter",
"twitterAction": "Подписаться на X",
"twitterDesc": "Обновления, анонсы и советы",
"youtube": "YouTube",
"youtubeAction": "Подписаться",
"youtubeDesc": "Демо, обучающие материалы и пошаговые руководства",
"linkedin": "LinkedIn",
"linkedinAction": "Подписаться",
"linkedinDesc": "Новости компании и инженерные обновления",
"metaTitle": "Сообщество — cmux",
"metaDescription": "Присоединяйтесь к сообществу cmux в Discord, Twitter, GitHub и других платформах"
},
"blog": {
"title": "Блог",
"layoutTitle": "cmux blog",
"metaTitle": "Блог",
"metaDescription": "Новости и обновления от команды cmux",
"description": "Новости и обновления от команды cmux",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Как Cmd+Shift+U навигирует между завершёнными агентами в рабочих пространствах cmux.",
"date": "4 марта 2026",
"p1": "Моя любимая функция cmux это Cmd+Shift+U. У меня сейчас открыто 17 рабочих пространств, каждое запускает агента. Раньше я кликал по вкладкам и панели уведомлений, чтобы понять, что завершилось. Печатать быстрее.",
"p2": "Cmd+Shift+U прыгает к самому свежему непрочитанному <link>уведомлению</link>. На практике это значит последний завершивший работу агент. Переключает на нужное рабочее пространство, фокусирует нужную панель, мигает ей чтобы ты увидел куда смотреть и помечает как прочитанное. Если уведомление пришло из другого окна, то окно выходит на передний план."
},
"zenOfCmux": {
"title": "Дзен cmux",
"summary": "cmux это примитив, а не решение. Он даёт тебе составные части, а рабочий процесс ты определяешь сам.",
"date": "27 февраля 2026",
"p1": "cmux не навязывает разработчикам как использовать инструменты. Это терминал и браузер с CLI, а дальше решаешь ты.",
"p2": "cmux это примитив, а не решение. Он даёт тебе терминал, браузер, уведомления, рабочие пространства, разделения, вкладки и CLI для управления всем этим. cmux не заставляет использовать агентов для кода каким-то определённым образом. То, что ты построишь из примитивов, принадлежит тебе.",
"p3": "Лучшие разработчики всегда создавали собственные инструменты. Никто пока не нашёл лучший способ работы с агентами, и команды, создающие закрытые продукты, тем более нет. Разработчики, ближе всего к своим кодовым базам, разберутся первыми.",
"p4": "Дай миллиону разработчиков составные примитивы, и они коллективно найдут самые эффективные рабочие процессы быстрее, чем любая продуктовая команда смогла бы спроектировать сверху вниз."
},
"showHnLaunch": {
"title": "Запуск cmux на Show HN",
"summary": "cmux попал на #2 на Hacker News, его расшарил Mitchell Hashimoto, и он стал вирусным в Японии.",
"date": "21 февраля 2026",
"intro": "Мы опубликовали cmux на <link>Show HN</link> 19 февраля:",
"blockquote1": "Я запускаю много сессий Claude Code и Codex параллельно. Использовал Ghostty с кучей разделённых панелей и полагался на нативные уведомления macOS, чтобы знать когда агент меня ждёт. Но тело уведомления Claude Code это всегда просто \"Claude is waiting for your input\" без контекста, а с достаточным количеством открытых вкладок я уже не мог прочитать даже заголовки.",
"blockquote2": "Я попробовал несколько оркестраторов для кода, но большинство были Electron/Tauri приложениями и производительность меня раздражала. Я просто предпочитаю терминал, потому что GUI-оркестраторы привязывают к своему рабочему процессу. Поэтому я сделал cmux как нативное macOS-приложение на Swift/AppKit. Оно использует libghostty для рендеринга терминала и читает твой существующий конфиг Ghostty для тем, шрифтов, цветов и прочего.",
"blockquote3": "Основные дополнения это боковая панель и система уведомлений. Боковая панель имеет вертикальные вкладки, показывающие ветку git, рабочую директорию, слушающие порты и последний текст уведомления для каждого рабочего пространства. Система уведомлений ловит терминальные последовательности (OSC 9/99/777) и имеет CLI (cmux notify), который можно подключить к хукам агентов для Claude Code, OpenCode и т.д. Когда агент ждёт, его панель получает синее кольцо и вкладка подсвечивается на боковой панели, так что я вижу какой из них меня ждёт среди разделений и вкладок. Cmd+Shift+U прыгает к самому свежему непрочитанному.",
"blockquote4": "Встроенный браузер имеет скриптуемый API. Агенты могут сделать снимок дерева доступности, получить ссылки на элементы, кликать, заполнять формы, выполнять JS и читать логи консоли. Можно разделить панель браузера рядом с терминалом и дать Claude Code взаимодействовать с твоим dev-сервером напрямую.",
"blockquote5": "Всё скриптуется через CLI и socket API: создание рабочих пространств/вкладок, разделение панелей, отправка нажатий клавиш, открытие URL-ов в браузере.",
"hitNumber2": "На пике попал на #2 на Hacker News. Mitchell Hashimoto расшарил его:",
"favoriteComment": "Мой любимый комментарий из <link>ветки HN</link>:",
"viralJapan": "Неожиданно cmux стал вирусным в Японии:",
"translation": "Перевод: \"Выглядит хорошо. Терминальное приложение на базе Ghostty, спроектированное чтобы не потеряться при параллельном запуске нескольких CLI вроде Claude Code. Панель ожидающая ввода получает синюю рамку, и есть собственная система уведомлений.\"",
"viralChina": "И полу-вирусный в Китае:",
"extensions": "Ещё одна крутая штука, это видеть как люди строят поверх cmux CLI. sasha сделал расширение pi-cmux, которое показывает информацию о модели, использование токенов и состояние агента на боковой панели:",
"scriptable": "Всё в cmux скриптуется через CLI: создание рабочих пространств, отправка нажатий клавиш, управление браузером, чтение уведомлений. Часть философии cmux это быть программируемым и составным, чтобы люди могли настроить работу с агентами для кода под себя. Состояние дел с агентами для кода меняется быстро, и ты не хочешь быть привязанным к негибкому GUI-оркестратору, который не успевает за изменениями.",
"cta": "Если запускаешь несколько агентов для кода, <link>попробуй cmux</link>."
},
"introducingCmux": {
"title": "Представляем cmux",
"summary": "Нативный macOS-терминал на базе Ghostty, спроектированный для параллельного запуска нескольких AI-агентов для кода.",
"date": "12 февраля 2026",
"p1": "cmux это нативное терминальное macOS-приложение на базе Ghostty, спроектированное с нуля для разработчиков, которые запускают несколько AI-агентов для кода одновременно.",
"whyTitle": "Зачем cmux?",
"whyP": "Современные рабочие процессы разработки часто включают запуск нескольких агентов одновременно. Claude Code, Codex и другие инструменты, каждый в своём терминале. Отслеживание того, какие из них ждут внимания и быстрое переключение между ними это проблема, которую cmux решает.",
"featuresTitle": "Ключевые возможности",
"getStartedTitle": "Начни",
"getStartedP": "Установи cmux через Homebrew или скачай DMG из <link>руководства по началу работы</link>.",
"featureVerticalTabsLabel": "Вертикальные вкладки",
"featureVerticalTabsDesc": "видишь все терминалы одним взглядом на боковой панели",
"featureNotificationsLabel": "Кольца уведомлений",
"featureNotificationsDesc": "вкладки мигают когда агент ждёт твоего ввода",
"featureSplitPanesLabel": "Разделённые панели",
"featureSplitPanesDesc": "горизонтальные и вертикальные разделения внутри каждого рабочего пространства",
"featureSocketApiLabel": "Socket API",
"featureSocketApiDesc": "программное управление для создания вкладок и отправки ввода",
"featureGpuLabel": "GPU-ускорение",
"featureGpuDesc": "на базе libghostty для плавного рендеринга"
}
},
"zenOfCmux": {
"metaTitle": "Дзен cmux",
"metaDescription": "cmux — это примитив, а не решение. Он даёт вам комбинируемые компоненты, а рабочий процесс — за вами."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "Новая комбинация клавиш, которая меняет взаимодействие с cmux."
},
"showHnLaunch": {
"metaTitle": "Запуск cmux на Show HN",
"metaDescription": "История запуска cmux на Hacker News."
},
"introducingCmux": {
"metaTitle": "Представляем cmux",
"metaDescription": "Почему мы создали cmux — новый терминал для macOS."
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "Начало работы",
"metaDescription": "Установи cmux, нативный macOS-терминал для AI-агентов. Homebrew, скачивание DMG, настройка CLI и автообновления через Sparkle.",
"intro": "cmux это лёгкий нативный macOS-терминал на базе Ghostty для управления несколькими AI-агентами. Вертикальные вкладки, панель уведомлений и API управления на базе socket.",
"install": "Установка",
"dmgRecommended": "DMG (рекомендуется)",
"dmgDesc": "Открой .dmg и перетащи cmux в папку Программы. cmux обновляется автоматически через Sparkle, так что скачать нужно только раз.",
"homebrew": "Homebrew",
"updateLater": "Для обновления позже:",
"firstLaunchCallout": "При первом запуске macOS может попросить подтвердить открытие приложения от идентифицированного разработчика. Нажми <strong>Открыть</strong> чтобы продолжить.",
"verifyTitle": "Проверка установки",
"verifyDesc": "Открой cmux и ты увидишь:",
"verifyItem1": "Окно терминала с вертикальной боковой панелью вкладок слева",
"verifyItem2": "Одно начальное рабочее пространство уже открыто",
"verifyItem3": "Терминал на базе Ghostty готов к вводу",
"cliSetup": "Настройка CLI",
"cliDesc": "cmux включает утилиту командной строки для автоматизации. Внутри терминалов cmux она работает автоматически. Чтобы использовать CLI извне cmux, создай символическую ссылку:",
"cliThen": "Затем можно запускать команды вроде:",
"autoUpdates": "Автообновления",
"autoUpdatesDesc": "cmux проверяет обновления автоматически через Sparkle. Когда обновление доступно, ты увидишь значок обновления в заголовке окна. Можно также проверить вручную через cmux > Check for Updates в строке меню.",
"sessionRestore": "Восстановление сессии (текущее поведение)",
"sessionRestoreDesc": "После перезапуска cmux восстанавливает только компоновку и метаданные:",
"sessionItem1": "Компоновка окон, рабочих пространств и панелей",
"sessionItem2": "Рабочие директории",
"sessionItem3": "Scrollback терминала (по возможности)",
"sessionItem4": "URL браузера и история навигации",
"sessionCallout": "cmux пока не восстанавливает состояние живых процессов. Активные сессии терминальных приложений, таких как Claude Code, tmux и vim, не возобновляются после перезапуска приложения.",
"requirements": "Требования",
"reqItem1": "macOS 14.0 или новее",
"reqItem2": "Apple Silicon или Intel Mac",
"metaTitle": "Начало работы"
},
"concepts": {
"title": "Концепции",
"metaDescription": "Как cmux организует терминалы: окна, рабочие пространства, панели и поверхности. Иерархия за боковой панелью, разделениями и socket API.",
"intro": "cmux организует терминалы в четырёхуровневую иерархию. Понимание этих уровней помогает при работе с socket API, CLI и горячими клавишами.",
"hierarchy": "Иерархия",
"windowTitle": "Окно",
"windowDesc": "Окно macOS. Открой несколько окон с помощью {shortcut}. У каждого окна своя боковая панель с независимыми рабочими пространствами.",
"workspaceTitle": "Рабочее пространство",
"workspaceDesc": "Элемент боковой панели. Каждое рабочее пространство содержит одну или более разделённых панелей. Рабочие пространства это то, что ты видишь на левой боковой панели.",
"workspaceNote": "В интерфейсе и горячих клавишах рабочие пространства часто называются \"вкладками\", потому что ведут себя как вкладки на боковой панели. Socket API и переменные окружения используют термин \"workspace\".",
"contextHeader": "Контекст",
"termUsedHeader": "Используемый термин",
"sidebarUI": "Интерфейс боковой панели",
"tab": "Вкладка",
"keyboardShortcuts": "Горячие клавиши",
"workspaceOrTab": "Рабочее пространство или вкладка",
"socketAPI": "Socket API",
"environmentVariable": "Переменная окружения",
"workspaceShortcuts": "Шорткаты: {new} (новый), {jump} (прыжок), {close} (закрыть), {prevNext} (пред./след.)",
"paneTitle": "Панель",
"paneDesc": "Разделённая область внутри рабочего пространства. Создаётся разделением с помощью {right} (вправо) или {down} (вниз). Навигация между панелями: {nav} + стрелки.",
"paneNote": "Каждая панель может содержать несколько поверхностей (вкладок внутри панели).",
"surfaceTitle": "Поверхность",
"surfaceDesc": "Вкладка внутри панели. У каждой панели своя полоса вкладок и она может содержать несколько поверхностей. Создаётся через {new}, навигация через {prev} / {next} или {jump}.",
"surfaceNote": "Поверхности это отдельные сессии терминала или браузера, с которыми ты взаимодействуешь. У каждой поверхности своя переменная окружения CMUX_SURFACE_ID.",
"panelTitle": "Панель",
"panelDesc": "Содержимое внутри поверхности. Сейчас два типа:",
"panelTerminal": "Терминал: сессия терминала Ghostty",
"panelBrowser": "Браузер: встроенный веб-вид",
"panelNote": "Панель это в основном внутренняя концепция. В socket API и CLI ты взаимодействуешь с поверхностями, а не напрямую с панелями.",
"visualExample": "Визуальный пример",
"visualExampleDesc": "В этом примере:",
"visualItem1": "Окно содержит боковую панель с тремя рабочими пространствами (dev, server, logs)",
"visualItem2": "Рабочее пространство \"dev\" выбрано, показывает две панели рядом",
"visualItem3": "Панель 1 имеет две поверхности ([S1] и [S2] на полосе вкладок), с активной S1",
"visualItem4": "Панель 2 имеет одну поверхность",
"visualItem5": "Каждая поверхность содержит панель (в данном случае терминал)",
"summary": "Итого",
"levelHeader": "Уровень",
"whatItIsHeader": "Что это",
"createdByHeader": "Создаётся",
"identifiedByHeader": "Идентифицируется",
"macosWindow": "Окно macOS",
"sidebarEntry": "Элемент боковой панели",
"splitRegion": "Разделённая область",
"tabWithinPane": "Вкладка в панели",
"terminalOrBrowser": "Терминал или браузер",
"automatic": "Автоматически",
"paneIdSocket": "ID панели (socket API)",
"panelIdInternal": "ID панели (внутренний)",
"metaTitle": "Концепции"
},
"configuration": {
"title": "Конфигурация",
"metaDescription": "Настрой cmux через конфиг-файлы Ghostty. Шрифт, тема, цвета, стиль разделённых панелей, scrollback и настройки приложения для режима автоматизации.",
"intro": "cmux читает конфигурацию из конфиг-файлов Ghostty, предоставляя знакомые опции если ты переходишь с Ghostty.",
"configLocations": "Расположение конфиг-файлов",
"configLocationsDesc": "cmux ищет конфигурацию в этих расположениях (по порядку):",
"createConfig": "Создай конфиг-файл если он не существует:",
"appearance": "Внешний вид",
"font": "Шрифт",
"colors": "Цвета",
"splitPanes": "Разделённые панели",
"behavior": "Поведение",
"scrollback": "Scrollback",
"workingDirectory": "Рабочая директория",
"appSettings": "Настройки приложения",
"appSettingsDesc": "Настройки в приложении доступны через cmux > Settings ({shortcut}):",
"themeMode": "Режим темы",
"themeSystem": "Системный: следует за внешним видом macOS",
"themeLight": "Светлый: всегда светлая тема",
"themeDark": "Тёмный: всегда тёмная тема",
"automationMode": "Режим автоматизации",
"automationModeDesc": "Уровень доступа к сокету:",
"automationOff": "Выключен: нет управления через socket (самый безопасный)",
"automationCmux": "Только процессы cmux: только процессы, запущенные внутри терминалов cmux, могут подключаться",
"automationAll": "allowAll: любой локальный процесс может подключиться (CMUX_SOCKET_MODE=allowAll, только через переменную окружения)",
"automationCallout": "На общих машинах используй режим \"Выключен\" или \"Только процессы cmux\".",
"browserLinkBehavior": "Поведение ссылок браузера",
"browserLinkDesc": "В Настройки > Браузер, cmux предоставляет два списка хостов с разными целями:",
"browserHostsEmbed": "Хосты для открытия во встроенном браузере: применяется к ссылкам, нажатым в выводе терминала. Хосты из этого списка открываются в cmux; остальные хосты открываются в твоём браузере по умолчанию. Поддерживает один хост или wildcard на строку (например: example.com, *.internal.example).",
"browserHostsHttp": "HTTP-хосты, разрешённые во встроенном браузере: применяется только к HTTP (не HTTPS) URL-ам. Хосты из этого списка могут открываться в cmux без предупреждения. По умолчанию включают localhost, 127.0.0.1, ::1, 0.0.0.0 и *.localtest.me.",
"exampleConfig": "Пример конфигурации",
"metaTitle": "Конфигурация"
},
"keyboardShortcuts": {
"title": "Горячие клавиши",
"description": "Все горячие клавиши в cmux, сгруппированные по категориям.",
"metaDescription": "Все горячие клавиши cmux для рабочих пространств, поверхностей, разделённых панелей, браузера, уведомлений, поиска и управления окнами на macOS.",
"searchPlaceholder": "Поиск по горячим клавишам...",
"searchLabel": "Поиск горячих клавиш",
"noResults": "Горячие клавиши не найдены",
"noResultsHint": "Попробуйте другой запрос",
"cat": {
"workspaces": "Рабочие пространства",
"workspacesBlurb": "Рабочие пространства находятся на боковой панели. У каждого свой набор панелей и поверхностей.",
"surfaces": "Поверхности",
"surfacesBlurb": "Поверхности — это вкладки внутри панели.",
"splitPanes": "Разделённые панели",
"browser": "Браузер",
"notifications": "Уведомления",
"find": "Поиск",
"terminal": "Терминал",
"window": "Окно"
},
"sc": {
"ws-new": "Новое рабочее пространство",
"ws-jump-1-8": "Перейти к рабочему пространству 18",
"ws-jump-last": "Перейти к последнему рабочему пространству",
"ws-close": "Закрыть рабочее пространство",
"ws-rename": "Переименовать рабочее пространство",
"sf-new": "Новая поверхность",
"sf-prev-1": "Предыдущая поверхность",
"sf-prev-2": "Предыдущая поверхность",
"sf-jump-1-8": "Перейти к поверхности 18",
"sf-jump-last": "Перейти к последней поверхности",
"sf-close": "Закрыть поверхность",
"sp-right": "Разделить вправо",
"sp-down": "Разделить вниз",
"sp-focus": "Фокус на панель по направлению",
"sp-browser-right": "Разделить браузер вправо",
"sp-browser-down": "Разделить браузер вниз",
"br-open": "Открыть поверхность браузера",
"br-addr": "Фокус на адресную строку",
"br-forward": "Вперёд",
"br-reload": "Перезагрузить страницу",
"br-devtools": "Открыть инструменты разработчика",
"nt-panel": "Показать панель уведомлений",
"nt-latest": "Перейти к последнему непрочитанному",
"nt-flash": "Вызвать вспышку",
"fd-find": "Найти",
"fd-next-prev": "Найти следующий / предыдущий",
"fd-hide": "Скрыть панель поиска",
"fd-selection": "Использовать выделение для поиска",
"tm-clear": "Очистить scrollback",
"tm-copy": "Копировать (с выделением)",
"tm-paste": "Вставить",
"tm-font": "Увеличить / уменьшить шрифт",
"tm-reset": "Сбросить размер шрифта",
"wn-new": "Новое окно",
"wn-settings": "Настройки",
"wn-reload": "Перезагрузить конфигурацию",
"wn-quit": "Выход"
},
"metaTitle": "Горячие клавиши"
},
"api": {
"title": "Справочник API",
"metaDescription": "Справочник cmux CLI и Unix socket API. Управление рабочими пространствами, разделённые панели, управление вводом, уведомления, метаданные боковой панели, переменные окружения и методы обнаружения.",
"intro": "cmux предоставляет и CLI-утилиту, и Unix socket для программного управления. Каждая команда доступна через оба интерфейса.",
"socket": "Socket",
"buildHeader": "Сборка",
"pathHeader": "Путь",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Тегированная debug-сборка",
"socketOverride": "Переопределить переменной окружения CMUX_SOCKET_PATH. Отправляй один JSON-запрос с переводом строки за вызов:",
"socketCallout": "JSON socket-запросы должны использовать method и params. Устаревшие v1 JSON-форматы типа <legacy>'{'\"command\":\"...\"'}'</legacy> не поддерживаются.",
"accessModes": "Режимы доступа",
"modeHeader": "Режим",
"descriptionHeader": "Описание",
"howToEnableHeader": "Как включить",
"offMode": "Socket отключён",
"offEnable": "Интерфейс настроек или CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "Только процессы, запущенные внутри терминалов cmux, могут подключаться.",
"cmuxOnlyEnable": "Режим по умолчанию в интерфейсе настроек",
"allowAllMode": "Любой локальный процесс может подключиться (без проверки происхождения).",
"allowAllEnable": "Только через переменную окружения: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "На общих машинах используй Выключен или Только процессы cmux.",
"cliOptions": "Опции CLI",
"flagHeader": "Флаг",
"customSocketPath": "Пользовательский путь к сокету",
"outputJson": "Вывод в формате JSON",
"targetWindow": "Указать конкретное окно",
"targetWorkspace": "Указать конкретное рабочее пространство",
"targetSurface": "Указать конкретную поверхность",
"idFormat": "Формат идентификаторов в JSON-выводе",
"workspaceCommands": "Команды рабочих пространств",
"listWorkspacesDesc": "Список всех открытых рабочих пространств.",
"newWorkspaceDesc": "Создать новое рабочее пространство.",
"selectWorkspaceDesc": "Переключиться на конкретное рабочее пространство.",
"currentWorkspaceDesc": "Получить текущее активное рабочее пространство.",
"closeWorkspaceDesc": "Закрыть рабочее пространство.",
"splitCommands": "Команды разделения",
"newSplitDesc": "Создать новую разделённую панель. Направления: left, right, up, down.",
"listSurfacesDesc": "Список всех поверхностей в текущем рабочем пространстве.",
"focusSurfaceDesc": "Сфокусировать конкретную поверхность.",
"inputCommands": "Команды ввода",
"sendDesc": "Отправить текст в сфокусированный терминал.",
"sendKeyDesc": "Отправить нажатие клавиши. Клавиши: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "Отправить текст в конкретную поверхность.",
"sendKeySurfaceDesc": "Отправить нажатие клавиши в конкретную поверхность.",
"notificationCommands": "Команды уведомлений",
"notifyDesc": "Отправить уведомление.",
"listNotificationsDesc": "Список всех уведомлений.",
"clearNotificationsDesc": "Очистить все уведомления.",
"sidebarMetadata": "Команды метаданных боковой панели",
"sidebarMetadataDesc": "Устанавливай значки статуса, прогресс-бары и записи лога на боковой панели для любого рабочего пространства. Полезно для скриптов сборки, CI-интеграций и AI-агентов, которые хотят показать состояние на одном взгляде.",
"setStatusDesc": "Установить значок статуса на боковой панели. Используй уникальный ключ, чтобы разные инструменты могли управлять своими записями.",
"clearStatusDesc": "Удалить запись статуса боковой панели по ключу.",
"listStatusDesc": "Список всех записей статуса боковой панели для рабочего пространства.",
"setProgressDesc": "Установить прогресс-бар на боковой панели (0.0 до 1.0).",
"clearProgressDesc": "Очистить прогресс-бар боковой панели.",
"logDesc": "Добавить запись лога на боковую панель. Уровни: info, progress, success, warning, error.",
"clearLogDesc": "Очистить все записи лога боковой панели.",
"listLogDesc": "Список записей лога боковой панели.",
"sidebarStateDesc": "Дамп всех метаданных боковой панели (cwd, ветка git, порты, статус, прогресс, логи).",
"utilityCommands": "Служебные команды",
"pingDesc": "Проверить работает ли cmux и отвечает.",
"capabilitiesDesc": "Список доступных методов сокета и текущего режима доступа.",
"identifyDesc": "Показать контекст сфокусированного окна/рабочего пространства/панели/поверхности.",
"envVariables": "Переменные окружения",
"variableHeader": "Переменная",
"socketPathDesc": "Переопределить путь к сокету для CLI и интеграций",
"socketEnableDesc": "Принудительно включить/отключить сокет (1/0, true/false, on/off)",
"socketModeDesc": "Переопределить режим доступа (cmuxOnly, allowAll, off). Также принимает cmux-only/cmux_only и allow-all/allow_all",
"workspaceIdDesc": "Устанавливается автоматически: ID текущего рабочего пространства",
"surfaceIdDesc": "Устанавливается автоматически: ID текущей поверхности",
"termProgramDesc": "Установлен в ghostty",
"termDesc": "Установлен в xterm-ghostty",
"envCallout": "Устаревшие значения CMUX_SOCKET_MODE full и notifications всё ещё принимаются для совместимости.",
"detectingCmux": "Обнаружение cmux",
"examples": "Примеры",
"pythonClient": "Python-клиент",
"shellScript": "Shell-скрипт",
"buildScriptNotification": "Скрипт сборки с уведомлением",
"metaTitle": "Справочник API"
},
"notifications": {
"title": "Уведомления",
"metaDescription": "Отправляй десктопные уведомления из AI-агентов и скриптов в cmux. CLI, escape-последовательности OSC 99/777 и интеграция с Claude Code hooks.",
"intro": "cmux поддерживает десктопные уведомления, позволяя AI-агентам и скриптам оповещать тебя когда им нужно внимание.",
"lifecycle": "Жизненный цикл",
"received": "Получено: уведомление появляется в панели, десктопный алерт срабатывает (если не подавлен)",
"unread": "Непрочитанное: бейдж показан на вкладке рабочего пространства",
"read": "Прочитанное: убирается когда ты просматриваешь это рабочее пространство",
"cleared": "Очищено: удалено из панели",
"suppression": "Подавление",
"suppressionDesc": "Десктопные алерты подавляются когда:",
"suppressItem1": "Окно cmux сфокусировано",
"suppressItem2": "Конкретное рабочее пространство, отправляющее уведомление, активно",
"suppressItem3": "Панель уведомлений открыта",
"notificationPanel": "Панель уведомлений",
"notificationPanelDesc": "Нажми <openShortcut>⌘⇧I</openShortcut> чтобы открыть панель уведомлений. Кликни на уведомление чтобы перейти к этому рабочему пространству. Нажми <jumpShortcut>⌘⇧U</jumpShortcut> чтобы перейти напрямую к рабочему пространству с самым свежим непрочитанным уведомлением.",
"customCommand": "Пользовательская команда",
"customCommandDesc": "Запускай shell-команду каждый раз когда уведомление запланировано. Задай её в Настройки > Приложение > Команда уведомления. Команда запускается через /bin/sh -c с этими переменными окружения:",
"customCommandNote": "Команда работает независимо от системного выбора звуков. Установи выбор на \"Нет\" чтобы использовать только пользовательскую команду, или оставь оба для системного звука плюс пользовательского действия.",
"sending": "Отправка уведомлений",
"cli": "CLI",
"osc777Title": "OSC 777 (простой)",
"osc777Desc": "Протокол RXVT использует фиксированный формат с заголовком и телом:",
"osc99Title": "OSC 99 (расширенный)",
"osc99Desc": "Протокол Kitty поддерживает подзаголовки и ID уведомлений:",
"variableHeader": "Переменная",
"descriptionHeader": "Описание",
"envTitle": "Заголовок уведомления (имя рабочего пространства или приложения)",
"envSubtitle": "Подзаголовок уведомления",
"envBody": "Текст уведомления",
"cmpTitleBody": "Заголовок + текст",
"cmpSubtitle": "Подзаголовок",
"cmpNotificationId": "ID уведомления",
"cmpComplexity": "Сложность",
"cmpYes": "Да",
"cmpNo": "Нет",
"cmpHigher": "Выше",
"cmpLower": "Ниже",
"featureHeader": "Функция",
"comparisonCallout": "Используй OSC 777 для простых уведомлений. Используй OSC 99 когда нужны подзаголовки или ID уведомлений. Используй CLI (cmux notify) для самой простой интеграции.",
"claudeCodeHooks": "Claude Code hooks",
"claudeCodeHooksDesc": "cmux интегрируется с <link>Claude Code</link> через hooks чтобы уведомлять тебя когда задачи завершаются.",
"createHookScript": "1. Создай скрипт хука",
"configureClaude": "2. Настрой Claude Code",
"restartNote": "Перезапусти Claude Code чтобы применить хуки.",
"integrationExamples": "Примеры интеграций",
"notifyAfterLong": "Уведомление после долгой команды",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux passthrough",
"tmuxDesc": "Если используешь tmux внутри cmux, включи passthrough:",
"metaTitle": "Уведомления"
},
"browserAutomation": {
"title": "Автоматизация браузера",
"metaDescription": "Справочник команд cmux browser для навигации, взаимодействия с DOM, ожидания, инспекции, выполнения JavaScript, вкладок, диалогов, фреймов, загрузок и состояния браузера.",
"intro": "Группа команд cmux browser предоставляет автоматизацию браузера над поверхностями браузера cmux. Используй для навигации, взаимодействия с DOM-элементами, инспекции состояния страницы, выполнения JavaScript и управления данными сессии браузера.",
"commandIndex": "Индекс команд",
"categoryHeader": "Категория",
"subcommandsHeader": "Подкоманды",
"navAndTargeting": "Навигация и таргетинг",
"waiting": "Ожидание",
"domInteraction": "Взаимодействие с DOM",
"inspection": "Инспекция",
"jsAndInjection": "JavaScript и инъекция",
"framesDialogsDownloads": "Фреймы, диалоги, загрузки",
"stateAndSession": "Состояние и данные сессии",
"tabsAndLogs": "Вкладки и логи",
"targetingSurface": "Указание поверхности браузера",
"targetingDesc": "Большинство подкоманд требуют целевую поверхность. Можно передать позиционно или через --surface.",
"navigation": "Навигация",
"waitingSection": "Ожидание",
"waitingDesc": "Используй wait для блокировки до выполнения условия: селекторы, текст, фрагменты URL, состояние загрузки или JavaScript-условие.",
"domSection": "Взаимодействие с DOM",
"domDesc": "Мутирующие действия поддерживают --snapshot-after для быстрой верификации в скриптах.",
"inspectionSection": "Инспекция",
"inspectionDesc": "Используй структурированные геттеры для скриптов и снапшоты/скриншоты для просмотра человеком.",
"jsSection": "Выполнение и инъекция JavaScript",
"stateSection": "Состояние",
"stateDesc": "Команды данных сессии покрывают куки, локальное/сессионное хранилище и полные снапшоты состояния браузера.",
"tabsSection": "Вкладки",
"tabsDesc": "Операции с вкладками браузера отображаются на поверхности браузера в активной группе вкладок.",
"consoleSection": "Консоль и ошибки",
"dialogsSection": "Диалоги",
"framesSection": "Фреймы",
"downloadsSection": "Загрузки",
"commonPatterns": "Типичные паттерны",
"patternNavigate": "Навигация, ожидание, инспекция",
"patternForm": "Заполнение формы и проверка текста успеха",
"patternDebug": "Захват debug-артефактов при ошибке",
"patternSession": "Сохранение и восстановление сессии браузера",
"metaTitle": "Автоматизация браузера"
},
"changelog": {
"title": "История изменений",
"metaDescription": "Заметки о релизах cmux и история версий. Новые функции, исправления ошибок и изменения для нативного macOS-терминала.",
"metaTitle": "Журнал изменений"
},
"navItems": {
"gettingStarted": "Начало работы",
"concepts": "Концепции",
"configuration": "Конфигурация",
"keyboardShortcuts": "Горячие клавиши",
"apiReference": "Справочник API",
"browserAutomation": "Автоматизация браузера",
"notifications": "Уведомления",
"changelog": "Изменения"
}
},
"legal": {
"privacyPolicy": "Политика конфиденциальности",
"termsOfService": "Условия использования",
"eula": "EULA"
},
"wallOfLove": {
"title": "Стена любви",
"description": "Что люди говорят о cmux."
},
"testimonials": {
"mitchellh": "Очередной день, очередной проект на libghostty, на этот раз терминал для macOS с вертикальными вкладками, лучшей организацией/уведомлениями, встроенным/скриптуемым браузером, специально для тех, кто активно использует агентские workflow из терминала.",
"schrockn": "Это именно тот продукт, который я искал. Через два часа утром я влюбился.",
"egrefen": "Использовал это всё выходные и это потрясающе.",
"max4c": "это был мой любимый инструмент последние две недели",
"asaza": "cmux выглядит так хорошо, что, может, наконец пора попрощаться с VSCode",
"johnthedebs": "Привет, выглядит реально круто. Нравятся идеи, конкретно: программируемость, слоистый UI, браузер с API. Жду не дождусь попробовать. И хочу добавить, что очень ценю Mitchell Hashimoto за создание libghostty; ощущается как захватывающее время для пользователей терминала.",
"joeriddles": "Вертикальные вкладки в моём терминале! Я раньше об этом даже не думал. Использую и обожаю вертикальные вкладки Firefox.",
"dchu17": "Попробовал и это довольно интуитивно. Хорошая работа!",
"afruth": "Мне нравится, использовал целый день на трёх параллельных проектах, каждый с несколькими worktree. В связке с lazygit и yazi / nvim стал чуть продуктивнее обычного, без необходимости гоняться за несколькими экземплярами ghostty / iTerm. Также ощущается естественнее чем tmux.",
"northprint": "Попробовал cmux потому что выглядел хорошо, и он хорош",
"indykish": "cmux довольно хорош.",
"kataring": "Перешёл на cmux.dev",
"scottw": "Невероятно полезная находка. Рекомендую всем.",
"johnblythe": "скачал на выходных и полюбил. ждал чего-то подобного.",
"bchris91": "Это именно то, что я хотел. Потрясающая работа, спасибо!",
"connorelsea": "Использую неделю и это фантастика. Вертикальная вкладка для каждой текущей задачи. Внутри Claude с одной стороны и браузер с PR и ресурсами с другой, переключаюсь между задачами и остаюсь организованным. Сочетай это со скиллами чтобы Claude рекурсивно следил за CI и т.д. чувствую себя просветлённым честно говоря",
"tonkotsuboy": "В начале года перешёл с Warp на Ghostty, а теперь перешёл на cmux. Вертикальные вкладки удобны, и ценю уведомления когда задачи Claude Code завершаются. Он на базе Ghostty, так что молниеносная скорость сохраняется. Отображение веток и автодополнения, которые я настроил в Ghostty, тоже работают."
},
"languageSwitcher": {
"label": "Язык"
}
}

587
web/messages/th.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — เทอร์มินัลที่สร้างมาเพื่อมัลติทาสกิ้ง",
"description": "เทอร์มินัล macOS ดั้งเดิมที่สร้างบน Ghostty รองรับ Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider และเครื่องมือ CLI ใดก็ได้ แท็บแนวตั้ง วงแหวนการแจ้งเตือน แผงแบ่ง และ socket API",
"ogDescription": "เทอร์มินัล macOS ดั้งเดิมสำหรับเอเจนต์เขียนโค้ด AI รองรับ Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider และเครื่องมือ CLI ใดก็ได้"
},
"common": {
"downloadForMac": "ดาวน์โหลดสำหรับ Mac",
"viewOnGitHub": "ดูบน GitHub",
"closeMenu": "ปิดเมนู",
"openMenu": "เปิดเมนู",
"toggleTheme": "สลับธีม",
"backToBlog": "กลับไปบล็อก",
"readTheDocs": "อ่านเอกสาร",
"viewChangelog": "ดู Changelog"
},
"nav": {
"docs": "เอกสาร",
"blog": "บล็อก",
"changelog": "Changelog",
"community": "ชุมชน",
"github": "GitHub"
},
"footer": {
"product": "ผลิตภัณฑ์",
"resources": "แหล่งข้อมูล",
"legal": "ข้อกฎหมาย",
"social": "โซเชียล",
"blog": "บล็อก",
"community": "ชุมชน",
"docs": "เอกสาร",
"changelog": "Changelog",
"privacy": "ความเป็นส่วนตัว",
"terms": "ข้อกำหนด",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "ติดต่อ",
"copyright": "© {year} Manaflow",
"language": "ภาษา"
},
"home": {
"taglinePrefix": "เทอร์มินัลที่สร้างมาเพื่อ",
"typingCodingAgents": "เอเจนต์เขียนโค้ด",
"typingMultitasking": "มัลติทาสกิ้ง",
"subtitle": "แอป macOS เนทีฟที่สร้างบน Ghostty แท็บแนวตั้ง, วงแหวนแจ้งเตือนเมื่อ agent ต้องการความสนใจ, แยกหน้าจอ และ socket API สำหรับระบบอัตโนมัติ",
"features": "ฟีเจอร์",
"faq": "คำถามที่พบบ่อย",
"communitySection": "ชุมชน",
"feature": {
"verticalTabs": "แท็บแนวตั้ง",
"verticalTabsDesc": ": แถบข้างแสดง git branch, working directory, port และข้อความแจ้งเตือน",
"notificationRings": "วงแหวนแจ้งเตือน",
"notificationRingsDesc": ": พาเนลจะสว่างขึ้นเมื่อ agent ต้องการความสนใจ",
"inAppBrowser": "เบราว์เซอร์ในแอป",
"inAppBrowserDesc": ": แยกเบราว์เซอร์คู่กับเทอร์มินัลพร้อม API ที่เขียนสคริปต์ได้",
"splitPanes": "แยกหน้าจอ",
"splitPanesDesc": ": แยกแนวนอนและแนวตั้งภายในแต่ละแท็บ",
"scriptable": "เขียนสคริปต์ได้",
"scriptableDesc": ": CLI และ socket API สำหรับระบบอัตโนมัติและการเขียนสคริปต์",
"gpuAccelerated": "เร่งความเร็วด้วย GPU",
"gpuAcceleratedDesc": ": ขับเคลื่อนด้วย libghostty เพื่อการเรนเดอร์ที่ลื่นไหล",
"lightweight": "เบา",
"lightweightDesc": ": เนทีฟ Swift + AppKit ไม่ใช่ Electron",
"keyboardShortcuts": "คีย์ลัด",
"keyboardShortcutsDesc": ": <link>คีย์ลัดมากมาย</link>สำหรับ workspace, แยกหน้าจอ, เบราว์เซอร์ และอื่นๆ"
},
"faqGhosttyQ": "cmux เกี่ยวข้องกับ Ghostty อย่างไร?",
"faqGhosttyA": "cmux ไม่ใช่ fork ของ Ghostty แต่ใช้ <link>libghostty</link> เป็นไลบรารีสำหรับการเรนเดอร์เทอร์มินัล เหมือนกับที่แอปต่างๆ ใช้ WebKit สำหรับ web view Ghostty เป็นเทอร์มินัลแบบ standalone ส่วน cmux เป็นแอปที่แตกต่างที่สร้างบน rendering engine ของมัน",
"faqPlatformQ": "รองรับแพลตฟอร์มอะไรบ้าง?",
"faqPlatformA": "macOS เท่านั้นในตอนนี้ cmux เป็นแอปเนทีฟ Swift + AppKit",
"faqAgentsQ": "cmux ใช้งานร่วมกับ coding agent ตัวไหนได้บ้าง?",
"faqAgentsA": "ทั้งหมดเลย cmux เป็นเทอร์มินัล ดังนั้น agent ใดก็ตามที่รันในเทอร์มินัลก็ใช้ได้ทันที: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent และอะไรก็ตามที่คุณเปิดได้จาก command line",
"faqNotificationsQ": "การแจ้งเตือนทำงานอย่างไร?",
"faqNotificationsA": "เมื่อโปรเซสต้องการความสนใจ cmux จะแสดงวงแหวนแจ้งเตือนรอบพาเนล, badge ที่ยังไม่ได้อ่านในแถบข้าง, ป็อปโอเวอร์แจ้งเตือน และการแจ้งเตือนบนเดสก์ท็อป macOS สิ่งเหล่านี้ทำงานอัตโนมัติผ่าน terminal escape sequence มาตรฐาน (OSC 9/99/777) หรือคุณสามารถเรียกใช้ผ่าน <cliLink>cmux CLI</cliLink> และ <hooksLink>Claude Code hooks</hooksLink>",
"faqShortcutsQ": "ปรับแต่งคีย์ลัดได้ไหม?",
"faqShortcutsA": "การตั้งค่าคีย์ของเทอร์มินัลอ่านจากไฟล์คอนฟิก Ghostty (<configPath>~/.config/ghostty/config</configPath>) คีย์ลัดเฉพาะของ cmux (workspace, แยกหน้าจอ, เบราว์เซอร์, แจ้งเตือน) ปรับแต่งได้ในการตั้งค่า ดู<link>คีย์ลัดเริ่มต้น</link>สำหรับรายการทั้งหมด",
"faqTmuxQ": "เปรียบเทียบกับ tmux อย่างไร?",
"faqTmuxA": "tmux เป็น terminal multiplexer ที่รันภายในเทอร์มินัลใดก็ได้ cmux เป็นแอป macOS เนทีฟที่มี GUI: แท็บแนวตั้ง, แยกหน้าจอ, เบราว์เซอร์ในตัว และ socket API ทั้งหมดมีมาให้ ไม่ต้องมีไฟล์คอนฟิกหรือ prefix key",
"faqFreeQ": "cmux ฟรีไหม?",
"faqFreeA": "ใช่ cmux ใช้งานฟรี ซอร์สโค้ดอยู่บน <link>GitHub</link>"
},
"community": {
"title": "ชุมชน",
"description": "เชื่อมต่อกับผู้ใช้ cmux คนอื่นๆ และทีมงานเบื้องหลัง",
"discord": "Discord",
"discordAction": "เข้าร่วม Discord ของเรา",
"discordDesc": "พูดคุยกับชุมชน ขอความช่วยเหลือ และแชร์ความคิดเห็น",
"githubAction": "ดูบน GitHub",
"githubDesc": "กดดาว repo, รายงานปัญหา และมีส่วนร่วม",
"twitter": "Twitter",
"twitterAction": "ติดตามบน X",
"twitterDesc": "อัปเดต ประกาศ และเคล็ดลับ",
"youtube": "YouTube",
"youtubeAction": "สมัครสมาชิก",
"youtubeDesc": "สาธิต บทเรียน และ walkthrough",
"linkedin": "LinkedIn",
"linkedinAction": "ติดตามเรา",
"linkedinDesc": "ข่าวบริษัทและอัปเดตด้านวิศวกรรม",
"metaTitle": "ชุมชน — cmux",
"metaDescription": "เข้าร่วมชุมชน cmux บน Discord, Twitter, GitHub และอื่นๆ"
},
"blog": {
"title": "บล็อก",
"layoutTitle": "cmux blog",
"metaTitle": "บล็อก",
"metaDescription": "ข่าวสารและอัปเดตจากทีม cmux",
"description": "ข่าวสารและอัปเดตจากทีม cmux",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Cmd+Shift+U นำทางระหว่าง agent ที่ทำงานเสร็จแล้วข้าม workspace ใน cmux ได้อย่างไร",
"date": "4 มีนาคม 2026",
"p1": "ฟีเจอร์ cmux ที่ผมชอบที่สุดคือ Cmd+Shift+U ตอนนี้ผมเปิด 17 workspace แต่ละอันรัน agent อยู่ ก่อนหน้านี้ผมต้องคลิกผ่านแท็บและแผงแจ้งเตือนเพื่อดูว่าอันไหนเสร็จแล้ว การพิมพ์เร็วกว่า",
"p2": "Cmd+Shift+U กระโดดไปที่<link>การแจ้งเตือน</link>ที่ยังไม่ได้อ่านล่าสุด ในทางปฏิบัติหมายถึง agent ตัวล่าสุดที่ทำงานเสร็จ มันจะสลับไป workspace ที่ถูกต้อง, โฟกัสพาเนลที่แน่นอน, กระพริบให้เห็นว่าต้องดูตรงไหน และทำเครื่องหมายว่าอ่านแล้ว ถ้าการแจ้งเตือนมาจากหน้าต่างอื่น หน้าต่างนั้นจะถูกนำมาด้านหน้า"
},
"zenOfCmux": {
"title": "The Zen of cmux",
"summary": "cmux เป็นชิ้นส่วนพื้นฐาน ไม่ใช่โซลูชัน มันให้ชิ้นส่วนที่ประกอบกันได้ และ workflow เป็นเรื่องของคุณ",
"date": "27 กุมภาพันธ์ 2026",
"p1": "cmux ไม่ได้กำหนดว่านักพัฒนาจะต้องใช้เครื่องมืออย่างไร มันเป็นเทอร์มินัลและเบราว์เซอร์พร้อม CLI ที่เหลือเป็นเรื่องของคุณ",
"p2": "cmux เป็นชิ้นส่วนพื้นฐาน ไม่ใช่โซลูชัน มันให้เทอร์มินัล, เบราว์เซอร์, แจ้งเตือน, workspace, แยกหน้าจอ, แท็บ และ CLI เพื่อควบคุมทั้งหมด cmux ไม่บังคับให้คุณใช้ coding agent แบบที่มีความเห็นตายตัว สิ่งที่คุณสร้างจากชิ้นส่วนพื้นฐานเป็นของคุณ",
"p3": "นักพัฒนาที่ดีที่สุดสร้างเครื่องมือของตัวเองมาตลอด ยังไม่มีใครค้นพบวิธีที่ดีที่สุดในการทำงานกับ agent และทีมที่สร้างผลิตภัณฑ์ปิดก็ยังไม่พบเช่นกัน นักพัฒนาที่ใกล้ชิดกับ codebase ของตัวเองมากที่สุดจะเป็นคนค้นพบก่อน",
"p4": "ให้ชิ้นส่วนพื้นฐานที่ประกอบกันได้แก่นักพัฒนาล้านคน แล้วพวกเขาจะร่วมกันค้นพบ workflow ที่มีประสิทธิภาพที่สุดเร็วกว่าทีมผลิตภัณฑ์ใดจะออกแบบจากบนลงล่างได้"
},
"showHnLaunch": {
"title": "เปิดตัว cmux บน Show HN",
"summary": "cmux ขึ้นอันดับ 2 บน Hacker News, ถูกแชร์โดย Mitchell Hashimoto และกลายเป็นไวรัลในญี่ปุ่น",
"date": "21 กุมภาพันธ์ 2026",
"intro": "เราโพสต์ cmux บน <link>Show HN</link> เมื่อ 19 ก.พ.:",
"blockquote1": "ผมรัน Claude Code และ Codex หลายเซสชันพร้อมกัน ก่อนหน้านี้ใช้ Ghostty กับแยกหน้าจอหลายอัน และพึ่งพาการแจ้งเตือน macOS เนทีฟเพื่อรู้ว่า agent ตัวไหนต้องการผม แต่เนื้อหาแจ้งเตือนของ Claude Code มีแค่ \"Claude is waiting for your input\" โดยไม่มีบริบท และเมื่อเปิดแท็บมากพอ ผมอ่านชื่อแท็บไม่ได้อีกแล้ว",
"blockquote2": "ผมลอง coding orchestrator หลายตัวแต่ส่วนใหญ่เป็นแอป Electron/Tauri และประสิทธิภาพทำให้ผมรำคาญ ผมยังชอบเทอร์มินัลมากกว่าเพราะ GUI orchestrator ล็อคคุณเข้ากับ workflow ของมัน ดังนั้นผมจึงสร้าง cmux เป็นแอป macOS เนทีฟใน Swift/AppKit ใช้ libghostty สำหรับการเรนเดอร์เทอร์มินัลและอ่านคอนฟิก Ghostty ที่มีอยู่สำหรับธีม, ฟอนต์, สี และอื่นๆ",
"blockquote3": "สิ่งที่เพิ่มเข้ามาหลักๆ คือแถบข้างและระบบแจ้งเตือน แถบข้างมีแท็บแนวตั้งที่แสดง git branch, working directory, port ที่กำลัง listen และข้อความแจ้งเตือนล่าสุดของแต่ละ workspace ระบบแจ้งเตือนรับ terminal sequence (OSC 9/99/777) และมี CLI (cmux notify) ที่คุณต่อเข้ากับ agent hook สำหรับ Claude Code, OpenCode ฯลฯ ได้ เมื่อ agent กำลังรอ พาเนลของมันจะมีวงแหวนสีน้ำเงินและแท็บจะสว่างในแถบข้าง ผมจึงบอกได้ว่าอันไหนต้องการผมข้ามแยกหน้าจอและแท็บ Cmd+Shift+U กระโดดไปที่แจ้งเตือนที่ยังไม่ได้อ่านล่าสุด",
"blockquote4": "เบราว์เซอร์ในแอปมี API ที่เขียนสคริปต์ได้ Agent สามารถ snapshot accessibility tree, รับ element ref, คลิก, กรอกฟอร์ม, evaluate JS และอ่าน console log คุณสามารถแยกเบราว์เซอร์ข้างเทอร์มินัลและให้ Claude Code โต้ตอบกับ dev server ของคุณโดยตรง",
"blockquote5": "ทุกอย่างเขียนสคริปต์ได้ผ่าน CLI และ socket API: สร้าง workspace/แท็บ, แยกหน้าจอ, ส่งการกดปุ่ม, เปิด URL ในเบราว์เซอร์",
"hitNumber2": "ตอนที่ขึ้นสูงสุด มันขึ้นอันดับ 2 บน Hacker News Mitchell Hashimoto แชร์มัน:",
"favoriteComment": "คอมเมนต์ที่ผมชอบที่สุดจาก<link>กระทู้ HN</link>:",
"viralJapan": "อย่างไม่คาดคิด cmux กลายเป็นไวรัลในญี่ปุ่น:",
"translation": "คำแปล: \"ดูดีนะ แอปเทอร์มินัลที่สร้างบน Ghostty ออกแบบมาเพื่อไม่ให้หลงทางเมื่อรัน CLI หลายตัวอย่าง Claude Code พร้อมกัน แผงที่รอ input จะมีกรอบสีน้ำเงิน และมีระบบแจ้งเตือนของตัวเอง\"",
"viralChina": "และกึ่งไวรัลในจีน:",
"extensions": "อีกสิ่งที่น่าตื่นเต้นคือเห็นคนสร้างสิ่งต่างๆ บน cmux CLI sasha สร้างส่วนขยาย pi-cmux ที่แสดงข้อมูลโมเดล, การใช้โทเค็น และสถานะ agent ในแถบข้าง:",
"scriptable": "ทุกอย่างใน cmux เขียนสคริปต์ได้ผ่าน CLI: สร้าง workspace, ส่งการกดปุ่ม, ควบคุมเบราว์เซอร์, อ่านการแจ้งเตือน ส่วนหนึ่งของปรัชญา cmux คือการเขียนโปรแกรมได้และประกอบกันได้ เพื่อให้คนปรับแต่งวิธีทำงานกับ coding agent ได้ สถานะของ coding agent เปลี่ยนแปลงเร็ว และคุณไม่อยากถูกล็อคอยู่กับ GUI orchestrator ที่ไม่ยืดหยุ่นซึ่งตามไม่ทัน",
"cta": "ถ้าคุณรัน coding agent หลายตัว <link>ลองใช้ cmux ดู</link>"
},
"introducingCmux": {
"title": "แนะนำ cmux",
"summary": "เทอร์มินัล macOS เนทีฟที่สร้างบน Ghostty ออกแบบมาเพื่อรัน AI coding agent หลายตัวพร้อมกัน",
"date": "12 กุมภาพันธ์ 2026",
"p1": "cmux เป็นแอปพลิเคชันเทอร์มินัล macOS เนทีฟที่สร้างบน Ghostty ออกแบบมาตั้งแต่ต้นสำหรับนักพัฒนาที่รัน AI coding agent หลายตัวพร้อมกัน",
"whyTitle": "ทำไมต้อง cmux?",
"whyP": "Workflow การพัฒนาสมัยใหม่มักต้องรัน agent หลายตัวพร้อมกัน Claude Code, Codex และเครื่องมืออื่นๆ แต่ละตัวในเทอร์มินัลของตัวเอง การติดตามว่าตัวไหนต้องการความสนใจและสลับระหว่างพวกมันอย่างรวดเร็วคือปัญหาที่ cmux แก้ไข",
"featuresTitle": "ฟีเจอร์หลัก",
"getStartedTitle": "เริ่มต้นใช้งาน",
"getStartedP": "ติดตั้ง cmux ผ่าน Homebrew หรือดาวน์โหลด DMG จาก<link>คู่มือเริ่มต้นใช้งาน</link>",
"featureVerticalTabsLabel": "แท็บแนวตั้ง",
"featureVerticalTabsDesc": "ดูเทอร์มินัลทั้งหมดได้ในแถบข้าง",
"featureNotificationsLabel": "วงแหวนแจ้งเตือน",
"featureNotificationsDesc": "แท็บกระพริบเมื่อ agent ต้องการ input ของคุณ",
"featureSplitPanesLabel": "แยกหน้าจอ",
"featureSplitPanesDesc": "แยกแนวนอนและแนวตั้งภายในแต่ละ workspace",
"featureSocketApiLabel": "Socket API",
"featureSocketApiDesc": "ควบคุมแบบโปรแกรมเพื่อสร้างแท็บและส่ง input",
"featureGpuLabel": "เร่งความเร็วด้วย GPU",
"featureGpuDesc": "ขับเคลื่อนด้วย libghostty เพื่อการเรนเดอร์ที่ลื่นไหล"
}
},
"zenOfCmux": {
"metaTitle": "เซนของ cmux",
"metaDescription": "cmux เป็นพื้นฐาน ไม่ใช่โซลูชัน ให้ชิ้นส่วนที่ประกอบได้และเวิร์กโฟลว์ขึ้นอยู่กับคุณ"
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "ทางลัดคีย์บอร์ดใหม่ที่เปลี่ยนวิธีการโต้ตอบกับ cmux"
},
"showHnLaunch": {
"metaTitle": "เปิดตัว cmux บน Show HN",
"metaDescription": "เรื่องราวการเปิดตัว cmux บน Hacker News"
},
"introducingCmux": {
"metaTitle": "แนะนำ cmux",
"metaDescription": "ทำไมเราถึงสร้าง cmux เทอร์มินัลใหม่สำหรับ macOS"
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "เริ่มต้นใช้งาน",
"metaDescription": "ติดตั้ง cmux เทอร์มินัล macOS เนทีฟสำหรับ AI coding agent ดาวน์โหลด Homebrew, DMG, ตั้งค่า CLI และอัปเดตอัตโนมัติผ่าน Sparkle",
"intro": "cmux เป็นเทอร์มินัล macOS เนทีฟที่เบาสร้างบน Ghostty สำหรับจัดการ AI coding agent หลายตัว มีแท็บแนวตั้ง, แผงแจ้งเตือน และ API ควบคุมผ่าน socket",
"install": "ติดตั้ง",
"dmgRecommended": "DMG (แนะนำ)",
"dmgDesc": "เปิด .dmg แล้วลาก cmux ไปที่โฟลเดอร์ Applications cmux อัปเดตอัตโนมัติผ่าน Sparkle คุณจึงต้องดาวน์โหลดแค่ครั้งเดียว",
"homebrew": "Homebrew",
"updateLater": "อัปเดตภายหลัง:",
"firstLaunchCallout": "เมื่อเปิดครั้งแรก macOS อาจขอให้คุณยืนยันการเปิดแอปจากนักพัฒนาที่ระบุตัวตนแล้ว คลิก <strong>เปิด</strong> เพื่อดำเนินการต่อ",
"verifyTitle": "ยืนยันการติดตั้ง",
"verifyDesc": "เปิด cmux แล้วคุณจะเห็น:",
"verifyItem1": "หน้าต่างเทอร์มินัลที่มีแถบข้างแท็บแนวตั้งทางซ้าย",
"verifyItem2": "workspace เริ่มต้นหนึ่งอันเปิดอยู่แล้ว",
"verifyItem3": "เทอร์มินัลที่ขับเคลื่อนด้วย Ghostty พร้อมรับ input",
"cliSetup": "ตั้งค่า CLI",
"cliDesc": "cmux มีเครื่องมือ command-line สำหรับระบบอัตโนมัติ ภายในเทอร์มินัล cmux มันทำงานอัตโนมัติ หากต้องการใช้ CLI จากนอก cmux ให้สร้าง symlink:",
"cliThen": "จากนั้นคุณสามารถรันคำสั่งเช่น:",
"autoUpdates": "อัปเดตอัตโนมัติ",
"autoUpdatesDesc": "cmux ตรวจสอบอัปเดตอัตโนมัติผ่าน Sparkle เมื่อมีอัปเดต คุณจะเห็นปุ่มอัปเดตใน titlebar คุณยังตรวจสอบด้วยตัวเองได้ผ่าน cmux > Check for Updates ในแถบเมนู",
"sessionRestore": "การกู้คืนเซสชัน (พฤติกรรมปัจจุบัน)",
"sessionRestoreDesc": "หลังจากเปิดใหม่ cmux กู้คืน layout และ metadata เท่านั้น:",
"sessionItem1": "Layout ของหน้าต่าง, workspace และพาเนล",
"sessionItem2": "Working directory",
"sessionItem3": "Terminal scrollback (พยายามอย่างดีที่สุด)",
"sessionItem4": "URL เบราว์เซอร์และประวัติการนำทาง",
"sessionCallout": "cmux ยังไม่กู้คืนสถานะโปรเซสที่กำลังทำงาน เซสชันแอปเทอร์มินัลที่ใช้งานอยู่เช่น Claude Code, tmux และ vim จะไม่ถูกกู้คืนหลังรีสตาร์ทแอป",
"requirements": "ความต้องการ",
"reqItem1": "macOS 14.0 หรือใหม่กว่า",
"reqItem2": "Apple Silicon หรือ Intel Mac",
"metaTitle": "เริ่มต้นใช้งาน"
},
"concepts": {
"title": "แนวคิด",
"metaDescription": "cmux จัดระเบียบเทอร์มินัลอย่างไร: หน้าต่าง, workspace, พาเนล และ surface ลำดับชั้นเบื้องหลังแถบข้าง, แยกหน้าจอ และ socket API",
"intro": "cmux จัดระเบียบเทอร์มินัลของคุณเป็นลำดับชั้น 4 ระดับ การเข้าใจระดับเหล่านี้ช่วยเมื่อใช้ socket API, CLI และคีย์ลัด",
"hierarchy": "ลำดับชั้น",
"windowTitle": "หน้าต่าง",
"windowDesc": "หน้าต่าง macOS เปิดหลายหน้าต่างด้วย {shortcut} แต่ละหน้าต่างมีแถบข้างของตัวเองพร้อม workspace อิสระ",
"workspaceTitle": "Workspace",
"workspaceDesc": "รายการในแถบข้าง แต่ละ workspace มีพาเนลแยกหน้าจอหนึ่งอันหรือมากกว่า Workspace คือสิ่งที่คุณเห็นในรายการแถบข้างซ้าย",
"workspaceNote": "ใน UI และคีย์ลัด workspace มักถูกเรียกว่า \"แท็บ\" เพราะมันทำหน้าที่เหมือนแท็บในแถบข้าง Socket API และตัวแปรสภาพแวดล้อมใช้คำว่า \"workspace\"",
"contextHeader": "บริบท",
"termUsedHeader": "คำที่ใช้",
"sidebarUI": "UI แถบข้าง",
"tab": "แท็บ",
"keyboardShortcuts": "คีย์ลัด",
"workspaceOrTab": "Workspace หรือแท็บ",
"socketAPI": "Socket API",
"environmentVariable": "ตัวแปรสภาพแวดล้อม",
"workspaceShortcuts": "คีย์ลัด: {new} (ใหม่), {jump} (กระโดด), {close} (ปิด), {prevNext} (ก่อนหน้า/ถัดไป)",
"paneTitle": "พาเนล",
"paneDesc": "พื้นที่แยกภายใน workspace สร้างโดยแยกด้วย {right} (ขวา) หรือ {down} (ล่าง) นำทางระหว่างพาเนลด้วย {nav} + ปุ่มลูกศร",
"paneNote": "แต่ละพาเนลสามารถมี surface หลายอัน (แท็บภายในพาเนล)",
"surfaceTitle": "Surface",
"surfaceDesc": "แท็บภายในพาเนล แต่ละพาเนลมี tab bar ของตัวเองและสามารถมี surface หลายอัน สร้างด้วย {new}, นำทางด้วย {prev} / {next} หรือ {jump}",
"surfaceNote": "Surface คือเซสชันเทอร์มินัลหรือเบราว์เซอร์ที่คุณโต้ตอบด้วย แต่ละ surface มีตัวแปรสภาพแวดล้อม CMUX_SURFACE_ID ของตัวเอง",
"panelTitle": "Panel",
"panelDesc": "เนื้อหาภายใน surface ปัจจุบันมีสองประเภท:",
"panelTerminal": "Terminal: เซสชันเทอร์มินัล Ghostty",
"panelBrowser": "Browser: embedded web view",
"panelNote": "Panel เป็นแนวคิดภายในเป็นหลัก ใน socket API และ CLI คุณโต้ตอบกับ surface มากกว่า panel โดยตรง",
"visualExample": "ตัวอย่างภาพ",
"visualExampleDesc": "ในตัวอย่างนี้:",
"visualItem1": "หน้าต่างมีแถบข้างที่มีสาม workspace (dev, server, logs)",
"visualItem2": "Workspace \"dev\" ถูกเลือก แสดงสองพาเนลเคียงข้างกัน",
"visualItem3": "พาเนล 1 มีสอง surface ([S1] และ [S2] ใน tab bar) โดย S1 เป็นตัวที่ใช้งานอยู่",
"visualItem4": "พาเนล 2 มี surface หนึ่งอัน",
"visualItem5": "แต่ละ surface มี panel (เทอร์มินัลในกรณีนี้)",
"summary": "สรุป",
"levelHeader": "ระดับ",
"whatItIsHeader": "คืออะไร",
"createdByHeader": "สร้างโดย",
"identifiedByHeader": "ระบุโดย",
"macosWindow": "หน้าต่าง macOS",
"sidebarEntry": "รายการในแถบข้าง",
"splitRegion": "พื้นที่แยก",
"tabWithinPane": "แท็บภายในพาเนล",
"terminalOrBrowser": "เทอร์มินัลหรือเบราว์เซอร์",
"automatic": "อัตโนมัติ",
"paneIdSocket": "Pane ID (socket API)",
"panelIdInternal": "Panel ID (ภายใน)",
"metaTitle": "แนวคิด"
},
"configuration": {
"title": "การตั้งค่า",
"metaDescription": "ตั้งค่า cmux ผ่านไฟล์คอนฟิก Ghostty ฟอนต์, ธีม, สี, สไตล์แยกหน้าจอ, scrollback และการตั้งค่าแอปสำหรับโหมดระบบอัตโนมัติ",
"intro": "cmux อ่านการตั้งค่าจากไฟล์คอนฟิก Ghostty ให้ตัวเลือกที่คุ้นเคยถ้าคุณมาจาก Ghostty",
"configLocations": "ตำแหน่งไฟล์คอนฟิก",
"configLocationsDesc": "cmux ค้นหาการตั้งค่าในตำแหน่งเหล่านี้ (ตามลำดับ):",
"createConfig": "สร้างไฟล์คอนฟิกถ้ายังไม่มี:",
"appearance": "รูปลักษณ์",
"font": "ฟอนต์",
"colors": "สี",
"splitPanes": "แยกหน้าจอ",
"behavior": "พฤติกรรม",
"scrollback": "Scrollback",
"workingDirectory": "Working directory",
"appSettings": "การตั้งค่าแอป",
"appSettingsDesc": "การตั้งค่าในแอปพร้อมใช้งานผ่าน cmux > Settings ({shortcut}):",
"themeMode": "โหมดธีม",
"themeSystem": "System: ตามรูปลักษณ์ macOS",
"themeLight": "Light: โหมดสว่างเสมอ",
"themeDark": "Dark: โหมดมืดเสมอ",
"automationMode": "โหมดระบบอัตโนมัติ",
"automationModeDesc": "ควบคุมระดับการเข้าถึง socket:",
"automationOff": "Off: ไม่มีการควบคุม socket (ปลอดภัยที่สุด)",
"automationCmux": "cmux processes only: อนุญาตเฉพาะโปรเซสที่เริ่มจากภายในเทอร์มินัล cmux เท่านั้น",
"automationAll": "allowAll: อนุญาตให้โปรเซสในเครื่องใดก็ได้เชื่อมต่อ (CMUX_SOCKET_MODE=allowAll, override ผ่าน env เท่านั้น)",
"automationCallout": "บนเครื่องที่ใช้ร่วมกัน ควรใช้โหมด \"Off\" หรือ \"cmux processes only\"",
"browserLinkBehavior": "พฤติกรรมลิงก์เบราว์เซอร์",
"browserLinkDesc": "ใน Settings > Browser cmux มีรายการ host สองรายการที่มีจุดประสงค์ต่างกัน:",
"browserHostsEmbed": "Hosts to Open in Embedded Browser: ใช้กับลิงก์ที่คลิกจากเอาต์พุตเทอร์มินัล Host ในรายการนี้เปิดใน cmux ส่วน host อื่นเปิดในเบราว์เซอร์เริ่มต้นของคุณ รองรับ host เดี่ยวหรือ wildcard ต่อบรรทัด (เช่น: example.com, *.internal.example)",
"browserHostsHttp": "HTTP Hosts Allowed in Embedded Browser: ใช้เฉพาะกับ URL แบบ HTTP (ไม่ใช่ HTTPS) Host ในรายการนี้เปิดใน cmux ได้โดยไม่มีข้อความเตือน ค่าเริ่มต้นรวม localhost, 127.0.0.1, ::1, 0.0.0.0 และ *.localtest.me",
"exampleConfig": "ตัวอย่างคอนฟิก",
"metaTitle": "การตั้งค่า"
},
"keyboardShortcuts": {
"title": "คีย์ลัด",
"description": "คีย์ลัดทั้งหมดใน cmux จัดกลุ่มตามหมวดหมู่",
"metaDescription": "คีย์ลัด cmux ทั้งหมดสำหรับ workspace, surface, แยกหน้าจอ, เบราว์เซอร์, แจ้งเตือน, ค้นหา และจัดการหน้าต่างบน macOS",
"searchPlaceholder": "ค้นหาทางลัด...",
"searchLabel": "ค้นหาทางลัดแป้นพิมพ์",
"noResults": "ไม่พบทางลัด",
"noResultsHint": "ลองใช้คำค้นหาอื่น",
"cat": {
"workspaces": "Workspace",
"workspacesBlurb": "Workspace อยู่ในแถบด้านข้าง Workspace แต่ละอันมีชุดพาเนลและ surface ของตัวเอง",
"surfaces": "Surface",
"surfacesBlurb": "Surface คือแท็บภายในพาเนล",
"splitPanes": "พาเนลแบ่ง",
"browser": "เบราว์เซอร์",
"notifications": "การแจ้งเตือน",
"find": "ค้นหา",
"terminal": "เทอร์มินัล",
"window": "หน้าต่าง"
},
"sc": {
"ws-new": "Workspace ใหม่",
"ws-jump-1-8": "ไปยัง workspace 18",
"ws-jump-last": "ไปยัง workspace สุดท้าย",
"ws-close": "ปิด workspace",
"ws-rename": "เปลี่ยนชื่อ workspace",
"sf-new": "Surface ใหม่",
"sf-prev-1": "Surface ก่อนหน้า",
"sf-prev-2": "Surface ก่อนหน้า",
"sf-jump-1-8": "ไปยัง surface 18",
"sf-jump-last": "ไปยัง surface สุดท้าย",
"sf-close": "ปิด surface",
"sp-right": "แบ่งขวา",
"sp-down": "แบ่งล่าง",
"sp-focus": "โฟกัสพาเนลตามทิศทาง",
"sp-browser-right": "แบ่งเบราว์เซอร์ขวา",
"sp-browser-down": "แบ่งเบราว์เซอร์ล่าง",
"br-open": "เปิด surface เบราว์เซอร์",
"br-addr": "โฟกัสแถบที่อยู่",
"br-forward": "ไปข้างหน้า",
"br-reload": "โหลดหน้าใหม่",
"br-devtools": "เปิดเครื่องมือนักพัฒนา",
"nt-panel": "แสดงแผงการแจ้งเตือน",
"nt-latest": "ไปยังที่ยังไม่ได้อ่านล่าสุด",
"nt-flash": "เรียกการกระพริบ",
"fd-find": "ค้นหา",
"fd-next-prev": "ค้นหาถัดไป / ก่อนหน้า",
"fd-hide": "ซ่อนแถบค้นหา",
"fd-selection": "ใช้ข้อความที่เลือกสำหรับค้นหา",
"tm-clear": "ล้างประวัติการเลื่อน",
"tm-copy": "คัดลอก (เมื่อเลือกข้อความ)",
"tm-paste": "วาง",
"tm-font": "เพิ่ม / ลดขนาดตัวอักษร",
"tm-reset": "รีเซ็ตขนาดตัวอักษร",
"wn-new": "หน้าต่างใหม่",
"wn-settings": "การตั้งค่า",
"wn-reload": "โหลดการตั้งค่าใหม่",
"wn-quit": "ออก"
},
"metaTitle": "ทางลัดคีย์บอร์ด"
},
"api": {
"title": "เอกสาร API",
"metaDescription": "เอกสาร cmux CLI และ Unix socket API การจัดการ workspace, แยกหน้าจอ, ควบคุม input, แจ้งเตือน, metadata แถบข้าง, ตัวแปรสภาพแวดล้อม และวิธีตรวจจับ",
"intro": "cmux มีทั้งเครื่องมือ CLI และ Unix socket สำหรับการควบคุมแบบโปรแกรม ทุกคำสั่งพร้อมใช้งานผ่านทั้งสองอินเทอร์เฟซ",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "Path",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Tagged debug build",
"socketOverride": "Override ด้วยตัวแปรสภาพแวดล้อม CMUX_SOCKET_PATH ส่ง JSON request ที่จบด้วย newline หนึ่งรายการต่อการเรียก:",
"socketCallout": "JSON socket request ต้องใช้ method และ params Legacy v1 JSON payload เช่น <legacy>'{'\"command\":\"...\"'}'</legacy> ไม่รองรับ",
"accessModes": "โหมดการเข้าถึง",
"modeHeader": "โหมด",
"descriptionHeader": "คำอธิบาย",
"howToEnableHeader": "วิธีเปิดใช้งาน",
"offMode": "ปิด socket",
"offEnable": "Settings UI หรือ CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "เฉพาะโปรเซสที่เกิดภายในเทอร์มินัล cmux เท่านั้นที่เชื่อมต่อได้",
"cmuxOnlyEnable": "โหมดเริ่มต้นใน Settings UI",
"allowAllMode": "อนุญาตให้โปรเซสในเครื่องใดก็ได้เชื่อมต่อ (ไม่ตรวจสอบ ancestry)",
"allowAllEnable": "Override ผ่าน environment เท่านั้น: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "บนเครื่องที่ใช้ร่วมกัน ใช้ Off หรือ cmux processes only",
"cliOptions": "ตัวเลือก CLI",
"flagHeader": "Flag",
"customSocketPath": "กำหนด socket path เอง",
"outputJson": "แสดงผลในรูปแบบ JSON",
"targetWindow": "ระบุหน้าต่างเป้าหมาย",
"targetWorkspace": "ระบุ workspace เป้าหมาย",
"targetSurface": "ระบุ surface เป้าหมาย",
"idFormat": "ควบคุมรูปแบบ identifier ในเอาต์พุต JSON",
"workspaceCommands": "คำสั่ง workspace",
"listWorkspacesDesc": "แสดงรายการ workspace ที่เปิดอยู่ทั้งหมด",
"newWorkspaceDesc": "สร้าง workspace ใหม่",
"selectWorkspaceDesc": "สลับไปยัง workspace ที่ระบุ",
"currentWorkspaceDesc": "รับ workspace ที่ใช้งานอยู่ปัจจุบัน",
"closeWorkspaceDesc": "ปิด workspace",
"splitCommands": "คำสั่งแยกหน้าจอ",
"newSplitDesc": "สร้างพาเนลแยกใหม่ ทิศทาง: left, right, up, down",
"listSurfacesDesc": "แสดงรายการ surface ทั้งหมดใน workspace ปัจจุบัน",
"focusSurfaceDesc": "โฟกัส surface ที่ระบุ",
"inputCommands": "คำสั่ง input",
"sendDesc": "ส่งข้อความไปยังเทอร์มินัลที่โฟกัสอยู่",
"sendKeyDesc": "ส่งการกดปุ่ม คีย์: enter, tab, escape, backspace, delete, up, down, left, right",
"sendSurfaceDesc": "ส่งข้อความไปยัง surface ที่ระบุ",
"sendKeySurfaceDesc": "ส่งการกดปุ่มไปยัง surface ที่ระบุ",
"notificationCommands": "คำสั่งแจ้งเตือน",
"notifyDesc": "ส่งการแจ้งเตือน",
"listNotificationsDesc": "แสดงรายการแจ้งเตือนทั้งหมด",
"clearNotificationsDesc": "ล้างแจ้งเตือนทั้งหมด",
"sidebarMetadata": "คำสั่ง metadata แถบข้าง",
"sidebarMetadataDesc": "ตั้งค่า status pill, progress bar และรายการ log ในแถบข้างสำหรับ workspace ใดก็ได้ เหมาะสำหรับ build script, CI integration และ AI coding agent ที่ต้องการแสดงสถานะอย่างรวดเร็ว",
"setStatusDesc": "ตั้ง status pill ในแถบข้าง ใช้ key ที่ไม่ซ้ำเพื่อให้เครื่องมือต่างๆ จัดการรายการของตัวเองได้",
"clearStatusDesc": "ลบรายการ status ในแถบข้างตาม key",
"listStatusDesc": "แสดงรายการ status ทั้งหมดในแถบข้างสำหรับ workspace",
"setProgressDesc": "ตั้ง progress bar ในแถบข้าง (0.0 ถึง 1.0)",
"clearProgressDesc": "ล้าง progress bar ในแถบข้าง",
"logDesc": "เพิ่มรายการ log ในแถบข้าง ระดับ: info, progress, success, warning, error",
"clearLogDesc": "ล้างรายการ log ทั้งหมดในแถบข้าง",
"listLogDesc": "แสดงรายการ log ในแถบข้าง",
"sidebarStateDesc": "แสดง metadata แถบข้างทั้งหมด (cwd, git branch, port, status, progress, log)",
"utilityCommands": "คำสั่งยูทิลิตี้",
"pingDesc": "ตรวจสอบว่า cmux กำลังทำงานและตอบสนองอยู่",
"capabilitiesDesc": "แสดง socket method ที่พร้อมใช้งานและโหมดการเข้าถึงปัจจุบัน",
"identifyDesc": "แสดงบริบทหน้าต่าง/workspace/พาเนล/surface ที่โฟกัสอยู่",
"envVariables": "ตัวแปรสภาพแวดล้อม",
"variableHeader": "ตัวแปร",
"socketPathDesc": "Override socket path ที่ใช้โดย CLI และ integration",
"socketEnableDesc": "บังคับเปิด/ปิด socket (1/0, true/false, on/off)",
"socketModeDesc": "Override โหมดการเข้าถึง (cmuxOnly, allowAll, off) รับ cmux-only/cmux_only และ allow-all/allow_all ด้วย",
"workspaceIdDesc": "ตั้งอัตโนมัติ: workspace ID ปัจจุบัน",
"surfaceIdDesc": "ตั้งอัตโนมัติ: surface ID ปัจจุบัน",
"termProgramDesc": "ตั้งเป็น ghostty",
"termDesc": "ตั้งเป็น xterm-ghostty",
"envCallout": "ค่า CMUX_SOCKET_MODE แบบเก่า full และ notifications ยังรับได้เพื่อความเข้ากันได้",
"detectingCmux": "การตรวจจับ cmux",
"examples": "ตัวอย่าง",
"pythonClient": "Python client",
"shellScript": "Shell script",
"buildScriptNotification": "Build script พร้อมแจ้งเตือน",
"metaTitle": "เอกสาร API"
},
"notifications": {
"title": "การแจ้งเตือน",
"metaDescription": "ส่งการแจ้งเตือนเดสก์ท็อปจาก AI agent และสคริปต์ใน cmux CLI, OSC 99/777 escape sequence และการรวมกับ Claude Code hooks",
"intro": "cmux รองรับการแจ้งเตือนเดสก์ท็อป ช่วยให้ AI agent และสคริปต์แจ้งเตือนคุณเมื่อต้องการความสนใจ",
"lifecycle": "วงจรชีวิต",
"received": "ได้รับ: แจ้งเตือนปรากฏในแผง, แจ้งเตือนเดสก์ท็อปทำงาน (ถ้าไม่ถูกระงับ)",
"unread": "ยังไม่ได้อ่าน: แสดง badge บนแท็บ workspace",
"read": "อ่านแล้ว: ล้างเมื่อคุณดู workspace นั้น",
"cleared": "ล้างแล้ว: ลบออกจากแผง",
"suppression": "การระงับ",
"suppressionDesc": "แจ้งเตือนเดสก์ท็อปจะถูกระงับเมื่อ:",
"suppressItem1": "หน้าต่าง cmux ถูกโฟกัส",
"suppressItem2": "workspace ที่ส่งแจ้งเตือนกำลังทำงานอยู่",
"suppressItem3": "แผงแจ้งเตือนเปิดอยู่",
"notificationPanel": "แผงแจ้งเตือน",
"notificationPanelDesc": "กด <openShortcut>⌘⇧I</openShortcut> เพื่อเปิดแผงแจ้งเตือน คลิกที่แจ้งเตือนเพื่อกระโดดไป workspace นั้น กด <jumpShortcut>⌘⇧U</jumpShortcut> เพื่อกระโดดตรงไป workspace ที่มีแจ้งเตือนที่ยังไม่ได้อ่านล่าสุด",
"customCommand": "คำสั่งที่กำหนดเอง",
"customCommandDesc": "รัน shell command ทุกครั้งที่มีการตั้งเวลาแจ้งเตือน ตั้งค่าใน Settings > App > Notification Command คำสั่งรันผ่าน /bin/sh -c พร้อมตัวแปรสภาพแวดล้อมเหล่านี้:",
"customCommandNote": "คำสั่งทำงานอิสระจากตัวเลือกเสียงระบบ ตั้งตัวเลือกเป็น \"None\" เพื่อใช้เฉพาะคำสั่งที่กำหนดเอง หรือใช้ทั้งสองสำหรับเสียงระบบพร้อมกับ action ที่กำหนดเอง",
"sending": "การส่งแจ้งเตือน",
"cli": "CLI",
"osc777Title": "OSC 777 (แบบง่าย)",
"osc777Desc": "โปรโตคอล RXVT ใช้รูปแบบตายตัวพร้อมชื่อเรื่องและเนื้อหา:",
"osc99Title": "OSC 99 (แบบเต็ม)",
"osc99Desc": "โปรโตคอล Kitty รองรับ subtitle และ notification ID:",
"variableHeader": "ตัวแปร",
"descriptionHeader": "คำอธิบาย",
"envTitle": "ชื่อการแจ้งเตือน (ชื่อ workspace หรือชื่อแอป)",
"envSubtitle": "ชื่อรองของการแจ้งเตือน",
"envBody": "เนื้อหาการแจ้งเตือน",
"cmpTitleBody": "ชื่อ + เนื้อหา",
"cmpSubtitle": "ชื่อรอง",
"cmpNotificationId": "ID การแจ้งเตือน",
"cmpComplexity": "ความซับซ้อน",
"cmpYes": "ใช่",
"cmpNo": "ไม่",
"cmpHigher": "สูงกว่า",
"cmpLower": "ต่ำกว่า",
"featureHeader": "ฟีเจอร์",
"comparisonCallout": "ใช้ OSC 777 สำหรับแจ้งเตือนแบบง่าย ใช้ OSC 99 เมื่อต้องการ subtitle หรือ notification ID ใช้ CLI (cmux notify) สำหรับการรวมที่ง่ายที่สุด",
"claudeCodeHooks": "Claude Code hooks",
"claudeCodeHooksDesc": "cmux รวมกับ <link>Claude Code</link> ผ่าน hooks เพื่อแจ้งเตือนคุณเมื่อ task เสร็จ",
"createHookScript": "1. สร้าง hook script",
"configureClaude": "2. ตั้งค่า Claude Code",
"restartNote": "รีสตาร์ท Claude Code เพื่อใช้ hooks",
"integrationExamples": "ตัวอย่าง integration",
"notifyAfterLong": "แจ้งเตือนหลังคำสั่งที่ใช้เวลานาน",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux passthrough",
"tmuxDesc": "ถ้าใช้ tmux ภายใน cmux ให้เปิด passthrough:",
"metaTitle": "การแจ้งเตือน"
},
"browserAutomation": {
"title": "Browser Automation",
"metaDescription": "เอกสารคำสั่ง cmux browser สำหรับ navigation, DOM interaction, waiting, inspection, JavaScript evaluation, แท็บ, dialog, frame, download และสถานะเบราว์เซอร์",
"intro": "กลุ่มคำสั่ง cmux browser ให้ browser automation กับ cmux browser surface ใช้สำหรับ navigate, โต้ตอบกับ DOM element, ตรวจสอบสถานะหน้าเว็บ, evaluate JavaScript และจัดการข้อมูลเซสชันเบราว์เซอร์",
"commandIndex": "ดัชนีคำสั่ง",
"categoryHeader": "หมวดหมู่",
"subcommandsHeader": "คำสั่งย่อย",
"navAndTargeting": "Navigation และ targeting",
"waiting": "Waiting",
"domInteraction": "DOM interaction",
"inspection": "Inspection",
"jsAndInjection": "JavaScript และ injection",
"framesDialogsDownloads": "Frame, dialog, download",
"stateAndSession": "State และข้อมูลเซสชัน",
"tabsAndLogs": "แท็บและ log",
"targetingSurface": "การ target browser surface",
"targetingDesc": "คำสั่งย่อยส่วนใหญ่ต้องการ target surface คุณสามารถส่งแบบ positional หรือด้วย --surface",
"navigation": "Navigation",
"waitingSection": "Waiting",
"waitingDesc": "ใช้ wait เพื่อบล็อกจนกว่า selector, ข้อความ, URL fragment, load state หรือเงื่อนไข JavaScript จะเป็นจริง",
"domSection": "DOM Interaction",
"domDesc": "Action ที่เปลี่ยนแปลงรองรับ --snapshot-after สำหรับการยืนยันอย่างรวดเร็วในสคริปต์",
"inspectionSection": "Inspection",
"inspectionDesc": "ใช้ structured getter สำหรับสคริปต์ และ snapshot/screenshot สำหรับการตรวจสอบโดยมนุษย์",
"jsSection": "JavaScript Eval และ Injection",
"stateSection": "State",
"stateDesc": "คำสั่งข้อมูลเซสชันครอบคลุม cookie, local/session storage และ browser state snapshot ทั้งหมด",
"tabsSection": "แท็บ",
"tabsDesc": "การดำเนินการแท็บเบราว์เซอร์แมปกับ browser surface ในกลุ่มแท็บเบราว์เซอร์ที่ใช้งานอยู่",
"consoleSection": "Console และ Error",
"dialogsSection": "Dialog",
"framesSection": "Frame",
"downloadsSection": "Download",
"commonPatterns": "รูปแบบทั่วไป",
"patternNavigate": "Navigate, wait, inspect",
"patternForm": "กรอกฟอร์มและยืนยันข้อความสำเร็จ",
"patternDebug": "จับ debug artifact เมื่อล้มเหลว",
"patternSession": "บันทึกและกู้คืนเซสชันเบราว์เซอร์",
"metaTitle": "ระบบอัตโนมัติของเบราว์เซอร์"
},
"changelog": {
"title": "Changelog",
"metaDescription": "บันทึกการอัปเดต cmux และประวัติเวอร์ชัน ฟีเจอร์ใหม่, แก้ไขบั๊ก และการเปลี่ยนแปลงสำหรับเทอร์มินัล macOS เนทีฟ",
"metaTitle": "บันทึกการเปลี่ยนแปลง"
},
"navItems": {
"gettingStarted": "เริ่มต้นใช้งาน",
"concepts": "แนวคิด",
"configuration": "การตั้งค่า",
"keyboardShortcuts": "คีย์ลัด",
"apiReference": "เอกสาร API",
"browserAutomation": "Browser Automation",
"notifications": "การแจ้งเตือน",
"changelog": "Changelog"
}
},
"legal": {
"privacyPolicy": "นโยบายความเป็นส่วนตัว",
"termsOfService": "ข้อกำหนดการใช้บริการ",
"eula": "EULA"
},
"testimonials": {
"mitchellh": "อีกวันอีกโปรเจกต์ที่ใช้ libghostty คราวนี้เป็นเทอร์มินัล macOS ที่มีแท็บแนวตั้ง, การจัดระเบียบ/แจ้งเตือนที่ดีขึ้น, เบราว์เซอร์ในตัวที่เขียนสคริปต์ได้ โดยเฉพาะสำหรับคนที่ใช้ workflow แบบ agent บนเทอร์มินัลเยอะๆ",
"schrockn": "นี่คือผลิตภัณฑ์ที่ผมตามหาพอดีเลย หลังจากใช้สองชั่วโมงเมื่อเช้านี้ ผมหลงรักมันแล้ว",
"egrefen": "ผมใช้มันทั้งสุดสัปดาห์แล้ว มันเยี่ยมมาก",
"max4c": "นี่เป็นเครื่องมือที่ชอบที่สุดในช่วงสองสัปดาห์ที่ผ่านมา",
"asaza": "cmux ดูดีขนาดนี้ อาจถึงเวลาบอกลา VSCode แล้ว",
"johnthedebs": "เฮ้ นี่มันดูเจ๋งมากจริงๆ ชอบไอเดียที่นี่ โดยเฉพาะ: ความสามารถในการเขียนโปรแกรม, UI แบบเลเยอร์, เบราว์เซอร์พร้อม API รอลองใช้อยู่ อยากบอกด้วยว่าขอบคุณ Mitchell Hashimoto ที่สร้าง libghostty มาก รู้สึกว่านี่เป็นช่วงเวลาที่น่าตื่นเต้นสำหรับผู้ใช้เทอร์มินัล",
"joeriddles": "แท็บแนวตั้งในเทอร์มินัล! ไม่เคยคิดถึงเรื่องนี้มาก่อน ผมใช้และชอบแท็บแนวตั้งของ Firefox",
"dchu17": "ลองใช้แล้วค่อนข้างใช้ง่าย ทำได้ดี!",
"afruth": "ชอบเลย ใช้ในวันที่ผ่านมากับสามโปรเจกต์ที่ทำพร้อมกัน แต่ละโปรเจกต์มี worktree หลายอัน การมีสิ่งนี้คู่กับ lazygit และ yazi / nvim ทำให้ผมทำงานได้มากขึ้นกว่าปกติโดยไม่ต้องวิ่งไล่หลายหน้าต่าง ghostty / iTerm รู้สึกเป็นธรรมชาติกว่า tmux ด้วย",
"northprint": "ลอง cmux เพราะมันดูดี — มันดีจริง",
"indykish": "cmux ดีนะ",
"kataring": "ย้ายมาใช้ cmux.dev แล้ว",
"scottw": "นี่เป็นการค้นพบที่มีประโยชน์มาก แนะนำเลย",
"johnblythe": "โหลดมาเมื่อสุดสัปดาห์แล้วชอบมาก รอของแบบนี้มานานแล้ว",
"bchris91": "นี่คือสิ่งที่ผมต้องการเป๊ะเลย ทำได้ยอดเยี่ยม ขอบคุณ!",
"connorelsea": "ใช้มาสัปดาห์นึงแล้ว เยี่ยมมาก แท็บแนวตั้งสำหรับแต่ละงานที่ทำอยู่ ข้างในมี Claude อยู่ด้านนึงและเบราว์เซอร์กับ PR และทรัพยากรอยู่อีกด้าน สลับไปมาระหว่างงานได้อย่างเป็นระเบียบ ผสมกับ skills ให้ Claude คอยดู CI แบบ recursive ฯลฯ รู้สึกตาสว่างเลย",
"tonkotsuboy": "ผมเปลี่ยนจาก Warp มา Ghostty ตอนต้นปี แต่ตอนนี้เปลี่ยนมา cmux แล้ว แท็บแนวตั้งสะดวกดี และชอบที่แจ้งเตือนเมื่องาน Claude Code เสร็จ มันใช้ Ghostty เป็นฐานก็เลยเร็วเหมือนเดิม การแสดง branch และ completion ที่ตั้งไว้ใน Ghostty ก็ยังใช้ได้อยู่"
},
"languageSwitcher": {
"label": "ภาษา"
},
"wallOfLove": {
"title": "กำแพงแห่งความรัก",
"description": "สิ่งที่ผู้คนพูดเกี่ยวกับ cmux"
}
}

587
web/messages/tr.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — Çoklu görev için tasarlanmış terminal",
"description": "Ghostty üzerine kurulu yerel macOS terminali. Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider ve herhangi bir CLI aracıyla çalışır. Dikey sekmeler, bildirim halkaları, bölünmüş paneller ve bir soket API.",
"ogDescription": "AI kodlama ajanları için yerel macOS terminali. Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider ve herhangi bir CLI aracıyla çalışır."
},
"common": {
"downloadForMac": "Mac için İndir",
"viewOnGitHub": "GitHub'da Görüntüle",
"closeMenu": "Menüyü kapat",
"openMenu": "Menüyü aç",
"toggleTheme": "Temayı değiştir",
"backToBlog": "Bloga dön",
"readTheDocs": "Belgeleri Oku",
"viewChangelog": "Değişiklik Günlüğünü Görüntüle"
},
"nav": {
"docs": "Belgeler",
"blog": "Blog",
"changelog": "Değişiklik Günlüğü",
"community": "Topluluk",
"github": "GitHub"
},
"footer": {
"product": "Ürün",
"resources": "Kaynaklar",
"legal": "Yasal",
"social": "Sosyal Medya",
"blog": "Blog",
"community": "Topluluk",
"docs": "Belgeler",
"changelog": "Değişiklik Günlüğü",
"privacy": "Gizlilik",
"terms": "Koşullar",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "İletişim",
"copyright": "© {year} Manaflow",
"language": "Dil"
},
"home": {
"taglinePrefix": "Şunun için tasarlanmış terminal: ",
"typingCodingAgents": "kodlama ajanları",
"typingMultitasking": "çoklu görev",
"subtitle": "Ghostty üzerine kurulu yerel macOS uygulaması. Dikey sekmeler, ajanlar dikkat istediğinde bildirim halkaları, bölünmüş paneller ve otomasyon için socket API.",
"features": "Özellikler",
"faq": "SSS",
"communitySection": "Topluluk",
"feature": {
"verticalTabs": "Dikey sekmeler",
"verticalTabsDesc": ": kenar çubuğu git dalını, çalışma dizinini, portları ve bildirim metnini gösterir",
"notificationRings": "Bildirim halkaları",
"notificationRingsDesc": ": ajanlar dikkat istediğinde paneller yanar",
"inAppBrowser": "Uygulama içi tarayıcı",
"inAppBrowserDesc": ": terminalinizin yanına betiklenebilir bir API ile tarayıcı bölün",
"splitPanes": "Bölünmüş paneller",
"splitPanesDesc": ": her sekme içinde yatay ve dikey bölmeler",
"scriptable": "Betiklenebilir",
"scriptableDesc": ": otomasyon ve betikleme için CLI ve socket API",
"gpuAccelerated": "GPU hızlandırmalı",
"gpuAcceleratedDesc": ": akıcı işleme için libghostty tarafından desteklenir",
"lightweight": "Hafif",
"lightweightDesc": ": yerel Swift + AppKit, Electron yok",
"keyboardShortcuts": "Klavye kısayolları",
"keyboardShortcutsDesc": ": çalışma alanları, bölmeler, tarayıcı ve daha fazlası için <link>kapsamlı kısayollar</link>"
},
"faqGhosttyQ": "cmux'un Ghostty ile ilişkisi nedir?",
"faqGhosttyA": "cmux, Ghostty'nin bir forku değildir. Uygulamaların web görünümleri için WebKit kullanması gibi, terminal işleme için bir kütüphane olarak <link>libghostty</link>'yi kullanır. Ghostty bağımsız bir terminaldir; cmux, onun işleme motoru üzerine kurulmuş farklı bir uygulamadır.",
"faqPlatformQ": "Hangi platformları destekliyor?",
"faqPlatformA": "Şimdilik yalnızca macOS. cmux yerel bir Swift + AppKit uygulamasıdır.",
"faqAgentsQ": "cmux hangi kodlama ajanlarıyla çalışır?",
"faqAgentsA": "Hepsiyle. cmux bir terminaldir, bu nedenle terminalde çalışan her ajan kutudan çıktığı gibi çalışır: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent ve komut satırından başlatabileceğiniz her şey.",
"faqNotificationsQ": "Bildirimler nasıl çalışır?",
"faqNotificationsA": "Bir işlem dikkat istediğinde cmux, panellerin etrafında bildirim halkaları, kenar çubuğunda okunmamış rozetleri, bir bildirim açılır penceresi ve bir macOS masaüstü bildirimi gösterir. Bunlar standart terminal kaçış dizileri (OSC 9/99/777) aracılığıyla otomatik olarak tetiklenir veya <cliLink>cmux CLI</cliLink> ve <hooksLink>Claude Code hooks</hooksLink> ile tetikleyebilirsiniz.",
"faqShortcutsQ": "Klavye kısayollarını özelleştirebilir miyim?",
"faqShortcutsA": "Terminal tuş atamaları Ghostty yapılandırma dosyanızdan (<configPath>~/.config/ghostty/config</configPath>) okunur. cmux'a özgü kısayollar (çalışma alanları, bölmeler, tarayıcı, bildirimler) Ayarlar'dan özelleştirilebilir. Tam liste için <link>varsayılan kısayollara</link> bakın.",
"faqTmuxQ": "tmux ile nasıl karşılaştırılır?",
"faqTmuxA": "tmux, herhangi bir terminal içinde çalışan bir terminal çoklayıcısıdır. cmux, GUI'ye sahip yerel bir macOS uygulamasıdır: dikey sekmeler, bölünmüş paneller, gömülü tarayıcı ve socket API hepsi yerleşiktir. Yapılandırma dosyaları veya ön ek tuşları gerekmez.",
"faqFreeQ": "cmux ücretsiz mi?",
"faqFreeA": "Evet, cmux kullanımı ücretsizdir. Kaynak kodu <link>GitHub</link>'da mevcuttur."
},
"community": {
"title": "Topluluk",
"description": "Diğer cmux kullanıcıları ve arkasındaki ekiple bağlantı kurun.",
"discord": "Discord",
"discordAction": "Discord'umuza katılın",
"discordDesc": "Toplulukla sohbet edin, yardım alın ve geri bildirim paylaşın",
"githubAction": "GitHub'da Görüntüle",
"githubDesc": "Repoya yıldız verin, sorun bildirin ve katkıda bulunun",
"twitter": "Twitter",
"twitterAction": "X'te takip edin",
"twitterDesc": "Güncellemeler, duyurular ve ipuçları",
"youtube": "YouTube",
"youtubeAction": "Abone olun",
"youtubeDesc": "Demolar, öğreticiler ve incelemeler",
"linkedin": "LinkedIn",
"linkedinAction": "Bizi takip edin",
"linkedinDesc": "Şirket haberleri ve mühendislik güncellemeleri",
"metaTitle": "Topluluk — cmux",
"metaDescription": "Discord, Twitter, GitHub ve daha fazlasında cmux topluluğuna katılın"
},
"blog": {
"title": "Blog",
"layoutTitle": "cmux blog",
"metaTitle": "Blog",
"metaDescription": "cmux ekibinden haberler ve güncellemeler",
"description": "cmux ekibinden haberler ve güncellemeler",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Cmd+Shift+U, cmux'ta çalışma alanları arasında tamamlanmış ajanlar arasında nasıl gezinir.",
"date": "4 Mart 2026",
"p1": "En sevdiğim cmux özelliği Cmd+Shift+U. Şu anda her biri bir ajan çalıştıran 17 açık çalışma alanım var. Eskiden neyin tamamlandığını anlamak için sekmelere ve bildirim paneline tıklardım. Yazmak daha hızlı.",
"p2": "Cmd+Shift+U en yeni okunmamış <link>bildirime</link> atlar. Pratikte bu, biten son ajan demektir. Doğru çalışma alanına geçer, tam panele odaklanır, nereye bakacağınızı görmeniz için yanıp söner ve okundu olarak işaretler. Bildirim başka bir pencereden geldiyse, o pencere öne gelir."
},
"zenOfCmux": {
"title": "cmux'un Zen'i",
"summary": "cmux bir ilkel yapıdır, çözüm değil. Size birleştirilebilir parçalar verir ve iş akışınız size kalmıştır.",
"date": "27 Şubat 2026",
"p1": "cmux, geliştiricilerin araçlarını nasıl kullanacağı konusunda kuralcı değildir. Bir terminal ve CLI'ye sahip bir tarayıcıdır, geri kalanı size kalmıştır.",
"p2": "cmux bir ilkel yapıdır, çözüm değil. Size bir terminal, bir tarayıcı, bildirimler, çalışma alanları, bölmeler, sekmeler ve hepsini kontrol etmek için bir CLI verir. cmux sizi kodlama ajanlarını kullanmanın belirli bir yoluna zorlamaz. İlkel yapılarla ne inşa ettiğiniz sizindir.",
"p3": "En iyi geliştiriciler her zaman kendi araçlarını yapmışlardır. Henüz kimse ajanlarla çalışmanın en iyi yolunu bulmadı ve kapalı ürünler geliştiren ekipler kesinlikle bulmadı. Kendi kod tabanlarına en yakın geliştiriciler bunu ilk bulacaklardır.",
"p4": "Bir milyon geliştiriciye birleştirilebilir ilkel yapılar verin, herhangi bir ürün ekibinin yukarıdan aşağıya tasarlayabileceğinden daha hızlı bir şekilde en verimli iş akışlarını toplu olarak bulacaklardır."
},
"showHnLaunch": {
"title": "cmux'u Show HN'de Yayınlama",
"summary": "cmux Hacker News'te #2'ye ulaştı, Mitchell Hashimoto tarafından paylaşıldı ve Japonya'da viral oldu.",
"date": "21 Şubat 2026",
"intro": "cmux'u 19 Şubat'ta <link>Show HN</link>'de yayınladık:",
"blockquote1": "Paralel olarak çok sayıda Claude Code ve Codex oturumu çalıştırıyorum. Bir sürü bölünmüş panel ile Ghostty kullanıyor ve bir ajanın bana ihtiyacı olduğunu bilmek için yerel macOS bildirimlerine güveniyordum. Ancak Claude Code'un bildirim gövdesi her zaman sadece \"Claude is waiting for your input\" şeklinde bağlam olmadan geliyordu ve yeterince sekme açıkken artık başlıkları bile okuyamıyordum.",
"blockquote2": "Birkaç kodlama orkestratörü denedim ama çoğu Electron/Tauri uygulamalarıydı ve performansları beni rahatsız etti. Ayrıca terminali tercih ediyorum çünkü GUI orkestratörleri sizi kendi iş akışlarına kilitler. Bu yüzden cmux'u Swift/AppKit'te yerel bir macOS uygulaması olarak yaptım. Terminal işleme için libghostty kullanır ve temalar, fontlar, renkler ve daha fazlası için mevcut Ghostty yapılandırmanızı okur.",
"blockquote3": "Ana eklemeler kenar çubuğu ve bildirim sistemidir. Kenar çubuğunda her çalışma alanı için git dalını, çalışma dizinini, dinlenen portları ve en son bildirim metnini gösteren dikey sekmeler vardır. Bildirim sistemi terminal dizilerini (OSC 9/99/777) yakalar ve Claude Code, OpenCode vb. için ajan hook'larına bağlayabileceğiniz bir CLI (cmux notify) içerir. Bir ajan beklerken, paneli mavi bir halka alır ve sekme kenar çubuğunda yanar, böylece bölmeler ve sekmeler arasında hangisinin bana ihtiyacı olduğunu görebiliyorum. Cmd+Shift+U en son okunmamışa atlar.",
"blockquote4": "Uygulama içi tarayıcının betiklenebilir bir API'si vardır. Ajanlar erişilebilirlik ağacının anlık görüntüsünü alabilir, element referansları alabilir, tıklayabilir, formları doldurabilir, JS çalıştırabilir ve konsol günlüklerini okuyabilir. Terminalinizin yanına bir tarayıcı paneli bölebilir ve Claude Code'un geliştirme sunucunuzla doğrudan etkileşime girmesini sağlayabilirsiniz.",
"blockquote5": "Her şey CLI ve socket API aracılığıyla betiklenebilir: çalışma alanları/sekmeler oluşturma, panelleri bölme, tuş vuruşları gönderme, tarayıcıda URL açma.",
"hitNumber2": "Zirvede Hacker News'te #2'ye ulaştı. Mitchell Hashimoto paylaştı:",
"favoriteComment": "<link>HN konusu</link>ndan en sevdiğim yorum:",
"viralJapan": "Şaşırtıcı bir şekilde cmux Japonya'da viral oldu:",
"translation": "Çeviri: \"Bu iyi görünüyor. Claude Code gibi birden fazla CLI'yi paralel çalıştırırken kaybolmamanız için tasarlanmış Ghostty tabanlı bir terminal uygulaması. Giriş bekleyen panel mavi bir çerçeve alıyor ve kendi bildirim sistemi var.\"",
"viralChina": "Ve Çin'de yarı-viral oldu:",
"extensions": "Bir diğer heyecan verici şey, insanların cmux CLI üzerine inşa ettiğini görmekti. sasha, kenar çubuğunda model bilgisi, token kullanımı ve ajan durumunu gösteren bir pi-cmux eklentisi yaptı:",
"scriptable": "cmux'taki her şey CLI aracılığıyla betiklenebilir: çalışma alanları oluşturma, tuş vuruşları gönderme, tarayıcıyı kontrol etme, bildirimleri okuma. cmux felsefesinin bir parçası programlanabilir ve birleştirilebilir olmaktır, böylece insanlar kodlama ajanlarıyla çalışma şekillerini özelleştirebilir. Kodlama ajanları için son teknoloji hızla değişiyor ve ayak uyduramayan esnek olmayan bir GUI orkestratörüne kilitlenmek istemezsiniz.",
"cta": "Birden fazla kodlama ajanı çalıştırıyorsanız, <link>cmux'u deneyin</link>."
},
"introducingCmux": {
"title": "cmux'u Tanıtıyoruz",
"summary": "Ghostty üzerine kurulu, birden fazla AI kodlama ajanını yan yana çalıştırmak için tasarlanmış yerel bir macOS terminali.",
"date": "12 Şubat 2026",
"p1": "cmux, Ghostty üzerine kurulu, birden fazla AI kodlama ajanını aynı anda çalıştıran geliştiriciler için sıfırdan tasarlanmış yerel bir macOS terminal uygulamasıdır.",
"whyTitle": "Neden cmux?",
"whyP": "Modern geliştirme iş akışları genellikle aynı anda birkaç ajan çalıştırmayı içerir. Claude Code, Codex ve diğer araçlar, her biri kendi terminalinde. Hangilerinin dikkat istediğini takip etmek ve aralarında hızla geçiş yapmak cmux'un çözdüğü sorundur.",
"featuresTitle": "Temel özellikler",
"getStartedTitle": "Başlayın",
"getStartedP": "cmux'u Homebrew ile kurun veya <link>başlangıç kılavuzundan</link> DMG'yi indirin.",
"featureVerticalTabsLabel": "Dikey sekmeler",
"featureVerticalTabsDesc": "kenar çubuğunda tüm terminallerinizi bir bakışta görün",
"featureNotificationsLabel": "Bildirim halkaları",
"featureNotificationsDesc": "bir ajan girdi istediğinde sekmeler yanıp söner",
"featureSplitPanesLabel": "Bölünmüş paneller",
"featureSplitPanesDesc": "her çalışma alanı içinde yatay ve dikey bölmeler",
"featureSocketApiLabel": "Socket API",
"featureSocketApiDesc": "sekmeler oluşturmak ve girdi göndermek için programatik kontrol",
"featureGpuLabel": "GPU hızlandırmalı",
"featureGpuDesc": "akıcı işleme için libghostty tarafından desteklenir"
}
},
"zenOfCmux": {
"metaTitle": "cmux'un Zeni",
"metaDescription": "cmux bir çözüm değil, bir ilkeldir. Size birleştirilebilir parçalar verir ve iş akışınız size bağlıdır."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "cmux ile etkileşim şeklinizi değiştiren yeni klavye kısayolu."
},
"showHnLaunch": {
"metaTitle": "cmux Show HN'de",
"metaDescription": "cmux'un Hacker News'da lansmanının hikayesi."
},
"introducingCmux": {
"metaTitle": "cmux'u tanıtıyoruz",
"metaDescription": "macOS için yeni bir terminal olan cmux'u neden geliştirdik."
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "Başlarken",
"metaDescription": "AI kodlama ajanları için yerel macOS terminali cmux'u kurun. Homebrew, DMG indirme, CLI kurulumu ve Sparkle ile otomatik güncellemeler.",
"intro": "cmux, birden fazla AI kodlama ajanını yönetmek için Ghostty üzerine kurulmuş hafif, yerel bir macOS terminalidir. Dikey sekmeler, bir bildirim paneli ve socket tabanlı kontrol API'si içerir.",
"install": "Kurulum",
"dmgRecommended": "DMG (önerilen)",
"dmgDesc": ".dmg dosyasınıın ve cmux'u Uygulamalar klasörünüze sürükleyin. cmux, Sparkle aracılığıyla otomatik güncellenir, bu nedenle yalnızca bir kez indirmeniz gerekir.",
"homebrew": "Homebrew",
"updateLater": "Daha sonra güncellemek için:",
"firstLaunchCallout": "İlk başlatmada, macOS tanımlanmış bir geliştiriciden bir uygulamayı açmayı onaylamanızı isteyebilir. Devam etmek için <strong>Aç</strong>'a tıklayın.",
"verifyTitle": "Kurulumu doğrulayın",
"verifyDesc": "cmux'u açın, şunu görmelisiniz:",
"verifyItem1": "Solda dikey sekme kenar çubuğu olan bir terminal penceresi",
"verifyItem2": "Zaten açık olan bir başlangıç çalışma alanı",
"verifyItem3": "Girdi için hazır Ghostty destekli terminal",
"cliSetup": "CLI kurulumu",
"cliDesc": "cmux, otomasyon için bir komut satırı aracı içerir. cmux terminalleri içinde otomatik olarak çalışır. CLI'yi cmux dışında kullanmak için bir sembolik bağlantı oluşturun:",
"cliThen": "Ardından şu gibi komutları çalıştırabilirsiniz:",
"autoUpdates": "Otomatik güncellemeler",
"autoUpdatesDesc": "cmux, Sparkle aracılığıyla güncellemeleri otomatik olarak kontrol eder. Bir güncelleme mevcut olduğunda başlık çubuğunda bir güncelleme göstergesi göreceksiniz. Ayrıca menü çubuğunda cmux > Check for Updates ile manuel olarak kontrol edebilirsiniz.",
"sessionRestore": "Oturum geri yükleme (mevcut davranış)",
"sessionRestoreDesc": "Yeniden başlatmadan sonra cmux yalnızca düzeni ve meta verileri geri yükler:",
"sessionItem1": "Pencere, çalışma alanı ve panel düzeni",
"sessionItem2": "Çalışma dizinleri",
"sessionItem3": "Terminal scrollback (en iyi çaba)",
"sessionItem4": "Tarayıcı URL'si ve gezinme geçmişi",
"sessionCallout": "cmux henüz canlı süreç durumunu geri yüklemiyor. Claude Code, tmux ve vim gibi aktif terminal uygulama oturumları, uygulama yeniden başlatıldıktan sonra devam ettirilmez.",
"requirements": "Gereksinimler",
"reqItem1": "macOS 14.0 veya üstü",
"reqItem2": "Apple Silicon veya Intel Mac",
"metaTitle": "Başlarken"
},
"concepts": {
"title": "Kavramlar",
"metaDescription": "cmux terminalleri nasıl düzenler: pencereler, çalışma alanları, paneller ve yüzeyler. Kenar çubuğu, bölmeler ve socket API'nin arkasındaki hiyerarşi.",
"intro": "cmux, terminallerinizi dört seviyeli bir hiyerarşi içinde düzenler. Bu seviyeleri anlamak, socket API, CLI ve klavye kısayollarını kullanırken yardımcı olur.",
"hierarchy": "Hiyerarşi",
"windowTitle": "Pencere",
"windowDesc": "Bir macOS penceresi. {shortcut} ile birden fazla pencere açın. Her pencerenin bağımsız çalışma alanlarıyla kendi kenar çubuğu vardır.",
"workspaceTitle": "Çalışma alanı",
"workspaceDesc": "Bir kenar çubuğu girişi. Her çalışma alanı bir veya daha fazla bölünmüş panel içerir. Çalışma alanları, sol kenar çubuğunda listelenen şeylerdir.",
"workspaceNote": "Arayüzde ve klavye kısayollarında çalışma alanları, kenar çubuğunda sekmeler gibi davrandıkları için genellikle \"sekmeler\" olarak adlandırılır. Socket API ve ortam değişkenleri \"workspace\" terimini kullanır.",
"contextHeader": "Bağlam",
"termUsedHeader": "Kullanılan terim",
"sidebarUI": "Kenar çubuğu arayüzü",
"tab": "Sekme",
"keyboardShortcuts": "Klavye kısayolları",
"workspaceOrTab": "Çalışma alanı veya sekme",
"socketAPI": "Socket API",
"environmentVariable": "Ortam değişkeni",
"workspaceShortcuts": "Kısayollar: {new} (yeni), {jump} (atla), {close} (kapat), {prevNext} (önceki/sonraki)",
"paneTitle": "Panel",
"paneDesc": "Bir çalışma alanı içinde bölünmüş bir alan. {right} (sağ) veya {down} (aşağı) ile bölerek oluşturulur. {nav} + ok tuşları ile paneller arasında gezinin.",
"paneNote": "Her panel birden fazla yüzey (panel içi sekmeler) barındırabilir.",
"surfaceTitle": "Yüzey",
"surfaceDesc": "Bir panel içindeki sekme. Her panelin kendi sekme çubuğu vardır ve birden fazla yüzey barındırabilir. {new} ile oluşturulur, {prev} / {next} veya {jump} ile gezinilir.",
"surfaceNote": "Yüzeyler, etkileşim kurduğunuz bireysel terminal veya tarayıcı oturumlarıdır. Her yüzeyin kendi CMUX_SURFACE_ID ortam değişkeni vardır.",
"panelTitle": "Panel",
"panelDesc": "Bir yüzeyin içindeki içerik. Şu anda iki tür:",
"panelTerminal": "Terminal: bir Ghostty terminal oturumu",
"panelBrowser": "Tarayıcı: gömülü bir web görünümü",
"panelNote": "Panel çoğunlukla dahili bir kavramdır. Socket API ve CLI'de, panellerle değil yüzeylerle doğrudan etkileşim kurarsınız.",
"visualExample": "Görsel örnek",
"visualExampleDesc": "Bu örnekte:",
"visualItem1": "Pencere, üç çalışma alanı (dev, server, logs) olan bir kenar çubuğu içerir",
"visualItem2": "\"dev\" çalışma alanı seçilmiş, yan yana iki panel gösteriyor",
"visualItem3": "Panel 1'de iki yüzey var (sekme çubuğunda [S1] ve [S2]), S1 aktif",
"visualItem4": "Panel 2'de bir yüzey var",
"visualItem5": "Her yüzey bir panel içerir (bu durumda bir terminal)",
"summary": "Özet",
"levelHeader": "Seviye",
"whatItIsHeader": "Ne olduğu",
"createdByHeader": "Oluşturan",
"identifiedByHeader": "Tanımlayan",
"macosWindow": "macOS penceresi",
"sidebarEntry": "Kenar çubuğu girişi",
"splitRegion": "Bölünmüş alan",
"tabWithinPane": "Panel içi sekme",
"terminalOrBrowser": "Terminal veya tarayıcı",
"automatic": "Otomatik",
"paneIdSocket": "Panel ID (socket API)",
"panelIdInternal": "Panel ID (dahili)",
"metaTitle": "Kavramlar"
},
"configuration": {
"title": "Yapılandırma",
"metaDescription": "cmux'u Ghostty yapılandırma dosyaları aracılığıyla yapılandırın. Font, tema, renkler, bölünmüş panel stili, scrollback ve otomasyon modu için uygulama ayarları.",
"intro": "cmux, Ghostty yapılandırma dosyalarından yapılandırma okur ve Ghostty'den geliyorsanız size tanıdık seçenekler sunar.",
"configLocations": "Yapılandırma dosyası konumları",
"configLocationsDesc": "cmux yapılandırmayı şu konumlarda arar (sırasıyla):",
"createConfig": "Yapılandırma dosyası yoksa oluşturun:",
"appearance": "Görünüm",
"font": "Font",
"colors": "Renkler",
"splitPanes": "Bölünmüş paneller",
"behavior": "Davranış",
"scrollback": "Scrollback",
"workingDirectory": "Çalışma dizini",
"appSettings": "Uygulama ayarları",
"appSettingsDesc": "Uygulama içi ayarlar cmux > Settings ({shortcut}) aracılığıyla kullanılabilir:",
"themeMode": "Tema modu",
"themeSystem": "Sistem: macOS görünümünü takip et",
"themeLight": "Açık: her zaman açık mod",
"themeDark": "Koyu: her zaman koyu mod",
"automationMode": "Otomasyon modu",
"automationModeDesc": "Socket erişim seviyesini kontrol edin:",
"automationOff": "Kapalı: socket kontrolü yok (en güvenli)",
"automationCmux": "Yalnızca cmux süreçleri: yalnızca cmux terminalleri içinde başlatılan süreçlerin bağlanmasına izin ver",
"automationAll": "allowAll: herhangi bir yerel sürecin bağlanmasına izin ver (CMUX_SOCKET_MODE=allowAll, yalnızca ortam değişkeni geçersiz kılma)",
"automationCallout": "Paylaşılan makinelerde \"Kapalı\" veya \"Yalnızca cmux süreçleri\" modunu kullanmayı düşünün.",
"browserLinkBehavior": "Tarayıcı bağlantı davranışı",
"browserLinkDesc": "Ayarlar > Tarayıcı'da cmux, farklı amaçlara sahip iki ana bilgisayar listesi sunar:",
"browserHostsEmbed": "Gömülü Tarayıcıda Açılacak Ana Bilgisayarlar: terminal çıktısından tıklanan bağlantılara uygulanır. Bu listedeki ana bilgisayarlar cmux'ta açılır; diğer ana bilgisayarlar varsayılan tarayıcınızda açılır. Satır başına bir ana bilgisayar veya joker karakter destekler (örneğin: example.com, *.internal.example).",
"browserHostsHttp": "Gömülü Tarayıcıda İzin Verilen HTTP Ana Bilgisayarları: yalnızca HTTP (HTTPS olmayan) URL'lere uygulanır. Bu listedeki ana bilgisayarlar cmux'ta uyarı istemeden açılabilir. Varsayılanlar localhost, 127.0.0.1, ::1, 0.0.0.0 ve *.localtest.me'yi içerir.",
"exampleConfig": "Örnek yapılandırma",
"metaTitle": "Yapılandırma"
},
"keyboardShortcuts": {
"title": "Klavye Kısayolları",
"description": "cmux'ta mevcut tüm klavye kısayolları, kategoriye göre gruplandırılmış.",
"metaDescription": "macOS'ta çalışma alanları, yüzeyler, bölünmüş paneller, tarayıcı, bildirimler, bulma ve pencere yönetimi için tüm cmux klavye kısayolları.",
"searchPlaceholder": "Kısayol ara...",
"searchLabel": "Klavye kısayollarını ara",
"noResults": "Kısayol bulunamadı",
"noResultsHint": "Farklı bir arama terimi deneyin",
"cat": {
"workspaces": "Çalışma Alanları",
"workspacesBlurb": "Çalışma alanları kenar çubuğunda bulunur. Her çalışma alanının kendi panel ve yüzey seti vardır.",
"surfaces": "Yüzeyler",
"surfacesBlurb": "Yüzeyler, bir panel içindeki sekmelerdir.",
"splitPanes": "Bölünmüş Paneller",
"browser": "Tarayıcı",
"notifications": "Bildirimler",
"find": "Bul",
"terminal": "Terminal",
"window": "Pencere"
},
"sc": {
"ws-new": "Yeni çalışma alanı",
"ws-jump-1-8": "18 arası çalışma alanına atla",
"ws-jump-last": "Son çalışma alanına atla",
"ws-close": "Çalışma alanını kapat",
"ws-rename": "Çalışma alanını yeniden adlandır",
"sf-new": "Yeni yüzey",
"sf-prev-1": "Önceki yüzey",
"sf-prev-2": "Önceki yüzey",
"sf-jump-1-8": "18 arası yüzeye atla",
"sf-jump-last": "Son yüzeye atla",
"sf-close": "Yüzeyi kapat",
"sp-right": "Sağa böl",
"sp-down": "Aşağı böl",
"sp-focus": "Yönlü panel odağı",
"sp-browser-right": "Tarayıcıyı sağa böl",
"sp-browser-down": "Tarayıcıyı aşağı böl",
"br-open": "Tarayıcı yüzeyi aç",
"br-addr": "Adres çubuğuna odaklan",
"br-forward": "İleri",
"br-reload": "Sayfayı yenile",
"br-devtools": "Geliştirici Araçlarını aç",
"nt-panel": "Bildirim panelini göster",
"nt-latest": "En son okunmamışa atla",
"nt-flash": "Yanıp sönmeyi tetikle",
"fd-find": "Bul",
"fd-next-prev": "Sonrakini / öncekini bul",
"fd-hide": "Bulma çubuğunu gizle",
"fd-selection": "Seçimi bulmak için kullan",
"tm-clear": "Kaydırma geçmişini temizle",
"tm-copy": "Kopyala (seçimle)",
"tm-paste": "Yapıştır",
"tm-font": "Yazı tipi boyutunu büyüt / küçült",
"tm-reset": "Yazı tipi boyutunu sıfırla",
"wn-new": "Yeni pencere",
"wn-settings": "Ayarlar",
"wn-reload": "Yapılandırmayı yeniden yükle",
"wn-quit": ık"
},
"metaTitle": "Klavye kısayolları"
},
"api": {
"title": "API Referansı",
"metaDescription": "cmux CLI ve Unix socket API referansı. Çalışma alanı yönetimi, bölünmüş paneller, girdi kontrolü, bildirimler, kenar çubuğu meta verileri, ortam değişkenleri ve algılama yöntemleri.",
"intro": "cmux, programatik kontrol için hem bir CLI aracı hem de bir Unix soketi sağlar. Her komut her iki arayüz aracılığıyla kullanılabilir.",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "Yol",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Etiketli debug build",
"socketOverride": "CMUX_SOCKET_PATH ortam değişkeni ile geçersiz kılın. Çağrı başına yeni satırla sonlandırılmış bir JSON isteği gönderin:",
"socketCallout": "JSON socket istekleri method ve params kullanmalıdır. <legacy>'{'\"command\":\"...\"'}'</legacy> gibi eski v1 JSON yükleri desteklenmez.",
"accessModes": "Erişim modları",
"modeHeader": "Mod",
"descriptionHeader": "Açıklama",
"howToEnableHeader": "Nasıl etkinleştirilir",
"offMode": "Socket devre dışı",
"offEnable": "Ayarlar arayüzü veya CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "Yalnızca cmux terminalleri içinde başlatılan süreçler bağlanabilir.",
"cmuxOnlyEnable": "Ayarlar arayüzünde varsayılan mod",
"allowAllMode": "Herhangi bir yerel sürecin bağlanmasına izin ver (köken kontrolü yok).",
"allowAllEnable": "Yalnızca ortam değişkeni geçersiz kılma: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "Paylaşılan makinelerde Kapalı veya Yalnızca cmux süreçleri kullanın.",
"cliOptions": "CLI seçenekleri",
"flagHeader": "Bayrak",
"customSocketPath": "Özel socket yolu",
"outputJson": "JSON formatında çıktı",
"targetWindow": "Belirli bir pencereyi hedefle",
"targetWorkspace": "Belirli bir çalışma alanını hedefle",
"targetSurface": "Belirli bir yüzeyi hedefle",
"idFormat": "JSON çıktısında tanımlayıcı formatını kontrol et",
"workspaceCommands": "Çalışma alanı komutları",
"listWorkspacesDesc": "Tüm açık çalışma alanlarını listele.",
"newWorkspaceDesc": "Yeni bir çalışma alanı oluştur.",
"selectWorkspaceDesc": "Belirli bir çalışma alanına geç.",
"currentWorkspaceDesc": "Şu anda aktif çalışma alanını al.",
"closeWorkspaceDesc": "Bir çalışma alanını kapat.",
"splitCommands": "Bölme komutları",
"newSplitDesc": "Yeni bir bölünmüş panel oluştur. Yönler: left, right, up, down.",
"listSurfacesDesc": "Geçerli çalışma alanındaki tüm yüzeyleri listele.",
"focusSurfaceDesc": "Belirli bir yüzeye odaklan.",
"inputCommands": "Girdi komutları",
"sendDesc": "Odaklanılan terminale metin girdisi gönder.",
"sendKeyDesc": "Bir tuş vuruşu gönder. Tuşlar: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "Belirli bir yüzeye metin gönder.",
"sendKeySurfaceDesc": "Belirli bir yüzeye tuş vuruşu gönder.",
"notificationCommands": "Bildirim komutları",
"notifyDesc": "Bir bildirim gönder.",
"listNotificationsDesc": "Tüm bildirimleri listele.",
"clearNotificationsDesc": "Tüm bildirimleri temizle.",
"sidebarMetadata": "Kenar çubuğu meta veri komutları",
"sidebarMetadataDesc": "Herhangi bir çalışma alanı için kenar çubuğunda durum rozetleri, ilerleme çubukları ve günlük girişleri ayarlayın. Build betikleri, CI entegrasyonları ve durumu bir bakışta göstermek isteyen AI kodlama ajanları için kullanışlıdır.",
"setStatusDesc": "Kenar çubuğu durum rozeti ayarlayın. Farklı araçların kendi girişlerini yönetebilmesi için benzersiz bir anahtar kullanın.",
"clearStatusDesc": "Anahtara göre kenar çubuğu durum girişini kaldırın.",
"listStatusDesc": "Bir çalışma alanı için tüm kenar çubuğu durum girişlerini listeleyin.",
"setProgressDesc": "Kenar çubuğunda bir ilerleme çubuğu ayarlayın (0.0 ile 1.0).",
"clearProgressDesc": "Kenar çubuğu ilerleme çubuğunu temizleyin.",
"logDesc": "Kenar çubuğuna bir günlük girişi ekleyin. Seviyeler: info, progress, success, warning, error.",
"clearLogDesc": "Tüm kenar çubuğu günlük girişlerini temizleyin.",
"listLogDesc": "Kenar çubuğu günlük girişlerini listeleyin.",
"sidebarStateDesc": "Tüm kenar çubuğu meta verilerini dökün (cwd, git dalı, portlar, durum, ilerleme, günlükler).",
"utilityCommands": "Yardımcı komutlar",
"pingDesc": "cmux'un çalışıp çalışmadığını ve yanıt verip vermediğini kontrol edin.",
"capabilitiesDesc": "Mevcut socket yöntemlerini ve geçerli erişim modunu listeleyin.",
"identifyDesc": "Odaklanılan pencere/çalışma alanı/panel/yüzey bağlamını gösterin.",
"envVariables": "Ortam değişkenleri",
"variableHeader": "Değişken",
"socketPathDesc": "CLI ve entegrasyonlar tarafından kullanılan socket yolunu geçersiz kılın",
"socketEnableDesc": "Soketi zorla etkinleştir/devre dışı bırak (1/0, true/false, on/off)",
"socketModeDesc": "Erişim modunu geçersiz kılın (cmuxOnly, allowAll, off). Ayrıca cmux-only/cmux_only ve allow-all/allow_all kabul eder",
"workspaceIdDesc": "Otomatik ayarlı: geçerli çalışma alanı ID",
"surfaceIdDesc": "Otomatik ayarlı: geçerli yüzey ID",
"termProgramDesc": "ghostty olarak ayarlı",
"termDesc": "xterm-ghostty olarak ayarlı",
"envCallout": "Eski CMUX_SOCKET_MODE değerleri full ve notifications uyumluluk için hâlâ kabul edilir.",
"detectingCmux": "cmux'u algılama",
"examples": "Örnekler",
"pythonClient": "Python istemcisi",
"shellScript": "Shell betiği",
"buildScriptNotification": "Bildirimli build betiği",
"metaTitle": "API referansı"
},
"notifications": {
"title": "Bildirimler",
"metaDescription": "cmux'ta AI ajanlarından ve betiklerden masaüstü bildirimleri gönderin. CLI, OSC 99/777 kaçış dizileri ve Claude Code hooks entegrasyonu.",
"intro": "cmux, AI ajanlarının ve betiklerin dikkat istediklerinde sizi uyarmasına olanak tanıyan masaüstü bildirimlerini destekler.",
"lifecycle": "Yaşam döngüsü",
"received": "Alındı: bildirim panelde görünür, masaüstü uyarısı tetiklenir (bastırılmamışsa)",
"unread": "Okunmamış: çalışma alanı sekmesinde rozet gösterilir",
"read": "Okundu: o çalışma alanını görüntülediğinizde temizlenir",
"cleared": "Temizlendi: panelden kaldırıldı",
"suppression": "Bastırma",
"suppressionDesc": "Masaüstü uyarıları şu durumlarda bastırılır:",
"suppressItem1": "cmux penceresi odaklandığında",
"suppressItem2": "Bildirimi gönderen belirli çalışma alanı aktif olduğunda",
"suppressItem3": "Bildirim paneli açık olduğunda",
"notificationPanel": "Bildirim paneli",
"notificationPanelDesc": "Bildirim panelini açmak için <openShortcut>⌘⇧I</openShortcut> tuşuna basın. Bir bildirime tıklayarak o çalışma alanına atlayın. En son okunmamış bildirime sahip çalışma alanına doğrudan atlamak için <jumpShortcut>⌘⇧U</jumpShortcut> tuşuna basın.",
"customCommand": "Özel komut",
"customCommandDesc": "Her bildirim zamanlandığında bir shell komutu çalıştırın. Ayarlar > Uygulama > Bildirim Komutu'nda ayarlayın. Komut şu ortam değişkenleriyle /bin/sh -c aracılığıyla çalışır:",
"customCommandNote": "Komut, sistem ses seçicisinden bağımsız olarak çalışır. Yalnızca özel komutu kullanmak için seçiciyi \"Yok\" olarak ayarlayın veya bir sistem sesi artı özel bir eylem için her ikisini de tutun.",
"sending": "Bildirim gönderme",
"cli": "CLI",
"osc777Title": "OSC 777 (basit)",
"osc777Desc": "RXVT protokolü başlık ve gövde ile sabit bir format kullanır:",
"osc99Title": "OSC 99 (zengin)",
"osc99Desc": "Kitty protokolü alt başlıkları ve bildirim ID'lerini destekler:",
"variableHeader": "Değişken",
"descriptionHeader": "Açıklama",
"envTitle": "Bildirim başlığı (çalışma alanı adı veya uygulama adı)",
"envSubtitle": "Bildirim alt başlığı",
"envBody": "Bildirim gövde metni",
"cmpTitleBody": "Başlık + gövde",
"cmpSubtitle": "Alt başlık",
"cmpNotificationId": "Bildirim ID",
"cmpComplexity": "Karmaşıklık",
"cmpYes": "Evet",
"cmpNo": "Hayır",
"cmpHigher": "Daha yüksek",
"cmpLower": "Daha düşük",
"featureHeader": "Özellik",
"comparisonCallout": "Basit bildirimler için OSC 777 kullanın. Alt başlıklar veya bildirim ID'leri gerektiğinde OSC 99 kullanın. En kolay entegrasyon için CLI (cmux notify) kullanın.",
"claudeCodeHooks": "Claude Code hooks",
"claudeCodeHooksDesc": "cmux, görevler tamamlandığında sizi bilgilendirmek için <link>Claude Code</link> ile hooks aracılığıyla entegre olur.",
"createHookScript": "1. Hook betiğini oluşturun",
"configureClaude": "2. Claude Code'u yapılandırın",
"restartNote": "Hook'ları uygulamak için Claude Code'u yeniden başlatın.",
"integrationExamples": "Entegrasyon örnekleri",
"notifyAfterLong": "Uzun komuttan sonra bildir",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux passthrough",
"tmuxDesc": "cmux içinde tmux kullanıyorsanız, passthrough'u etkinleştirin:",
"metaTitle": "Bildirimler"
},
"browserAutomation": {
"title": "Tarayıcı Otomasyonu",
"metaDescription": "Gezinme, DOM etkileşimi, bekleme, inceleme, JavaScript değerlendirmesi, sekmeler, diyaloglar, çerçeveler, indirmeler ve tarayıcı durumu için cmux browser komut referansı.",
"intro": "cmux browser komut grubu, cmux tarayıcı yüzeylerine karşı tarayıcı otomasyonu sağlar. Gezinmek, DOM öğeleriyle etkileşim kurmak, sayfa durumunu incelemek, JavaScript değerlendirmek ve tarayıcı oturum verilerini yönetmek için kullanın.",
"commandIndex": "Komut İndeksi",
"categoryHeader": "Kategori",
"subcommandsHeader": "Alt komutlar",
"navAndTargeting": "Gezinme ve hedefleme",
"waiting": "Bekleme",
"domInteraction": "DOM etkileşimi",
"inspection": "İnceleme",
"jsAndInjection": "JavaScript ve enjeksiyon",
"framesDialogsDownloads": "Çerçeveler, diyaloglar, indirmeler",
"stateAndSession": "Durum ve oturum verileri",
"tabsAndLogs": "Sekmeler ve günlükler",
"targetingSurface": "Tarayıcı yüzeyini hedefleme",
"targetingDesc": "Çoğu alt komut bir hedef yüzey gerektirir. Konumsal olarak veya --surface ile geçirebilirsiniz.",
"navigation": "Gezinme",
"waitingSection": "Bekleme",
"waitingDesc": "Seçiciler, metin, URL parçaları, yükleme durumu veya bir JavaScript koşulu karşılanana kadar engellemek için wait kullanın.",
"domSection": "DOM Etkileşimi",
"domDesc": "Değiştirici eylemler, betiklerde hızlı doğrulama için --snapshot-after'ı destekler.",
"inspectionSection": "İnceleme",
"inspectionDesc": "Betikler için yapılandırılmış getter'lar ve insan incelemesi için anlık görüntüler/ekran görüntüleri kullanın.",
"jsSection": "JavaScript Değerlendirme ve Enjeksiyon",
"stateSection": "Durum",
"stateDesc": "Oturum verisi komutları çerezleri, yerel/oturum depolamasını ve tam tarayıcı durumu anlık görüntülerini kapsar.",
"tabsSection": "Sekmeler",
"tabsDesc": "Tarayıcı sekmesi işlemleri, aktif tarayıcı sekmesi grubundaki tarayıcı yüzeylerine karşılık gelir.",
"consoleSection": "Konsol ve Hatalar",
"dialogsSection": "Diyaloglar",
"framesSection": "Çerçeveler",
"downloadsSection": "İndirmeler",
"commonPatterns": "Yaygın Kalıplar",
"patternNavigate": "Gezin, bekle, incele",
"patternForm": "Bir formu doldurun ve başarı metnini doğrulayın",
"patternDebug": "Başarısızlıkta debug artefaktlarını yakalayın",
"patternSession": "Tarayıcı oturumunu kaydet ve geri yükle",
"metaTitle": "Tarayıcı otomasyonu"
},
"changelog": {
"title": "Değişiklik Günlüğü",
"metaDescription": "cmux sürüm notları ve sürüm geçmişi. Yerel macOS terminali için yeni özellikler, hata düzeltmeleri ve değişiklikler.",
"metaTitle": "Değişiklik günlüğü"
},
"navItems": {
"gettingStarted": "Başlarken",
"concepts": "Kavramlar",
"configuration": "Yapılandırma",
"keyboardShortcuts": "Klavye Kısayolları",
"apiReference": "API Referansı",
"browserAutomation": "Tarayıcı Otomasyonu",
"notifications": "Bildirimler",
"changelog": "Değişiklik Günlüğü"
}
},
"legal": {
"privacyPolicy": "Gizlilik Politikası",
"termsOfService": "Hizmet Koşulları",
"eula": "EULA"
},
"wallOfLove": {
"title": "Sevgi Duvarı",
"description": "cmux hakkında söylenenler."
},
"testimonials": {
"mitchellh": "Bir gün daha, bir libghostty tabanlı proje daha, bu sefer dikey sekmeli, daha iyi düzenleme/bildirimli, gömülü/betiklenebilir tarayıcılı, özellikle terminal tabanlı ajan iş akışlarını çok kullanan kişilere yönelik bir macOS terminali.",
"schrockn": "Bu tam olarak aradığım ürün. Bu sabah iki saat sonra aşık oldum.",
"egrefen": "Tüm hafta sonu bunu kullandım ve harika.",
"max4c": "son iki haftadır en sevdiğim araç bu oldu",
"asaza": "cmux o kadar iyi görünüyor ki belki de sonunda VSCode'a veda etme zamanı geldi",
"johnthedebs": "Hey, bu gerçekten harika görünüyor. Buradaki fikirleri sevdim, özellikle: programlanabilirlik, katmanlı arayüz, API'li tarayıcı. Denemeyi dört gözle bekliyorum. Ayrıca Mitchell Hashimoto'nun libghostty'yi yaratmasını gerçekten takdir ettiğimi belirtmek isterim; terminal kullanıcısı olmak için heyecan verici bir zaman gibi hissettiriyor.",
"joeriddles": "Terminalimde dikey sekmeler! Daha önce hiç düşünmemiştim. Firefox dikey sekmelerini kullanıyor ve seviyorum.",
"dchu17": "Bunu denedim ve oldukça sezgiseldi. İyi iş!",
"afruth": "Beğendim, son gün içinde her biri birden fazla worktree ile üç paralel projede kullandım. Bunu lazygit ve yazi / nvim ile birlikte kullanmak, birden fazla ghostty / iTerm örneğini kovalamak zorunda kalmadan normalden biraz daha üretken olmamı sağladı. tmux'tan daha doğal hissettiriyor.",
"northprint": "cmux'u iyi göründüğü için denedim — gerçekten iyi",
"indykish": "cmux oldukça iyi.",
"kataring": "cmux.dev'e geçtim",
"scottw": "Bu çok faydalı bir keşif oldu. Yeterince tavsiye edemem.",
"johnblythe": "hafta sonu indirdim ve bayıldım. böyle bir şey bekliyordum.",
"bchris91": "Bu tam olarak istediğim şey. Harika iş, teşekkürler!",
"connorelsea": "Bir haftadır kullanıyorum ve harika. Her devam eden görev için dikey sekme. İçinde bir tarafta Claude'lar, diğer tarafta PR ve kaynaklarla tarayıcı, görevler arasında geçiş yapıp düzenli kalıyorum. Bunu Claude'un CI'ı özyinelemeli izlemesi için skill'lerle birleştirin, vs. aydınlanmış hissediyorum açıkçası",
"tonkotsuboy": "Yılın başında Warp'tan Ghostty'ye geçtim ama şimdi cmux'a geçtim. Dikey sekmeler kullanışlı ve Claude Code görevleri bittiğinde bildirim almayı takdir ediyorum. Ghostty tabanlı olduğu için çok hızlı performans aynen devam ediyor. Ghostty'de ayarladığım dal gösterimi ve tamamlamalar da hâlâ çalışıyor."
},
"languageSwitcher": {
"label": "Dil"
}
}

587
web/messages/zh-CN.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — 专为多任务打造的终端",
"description": "基于 Ghostty 的原生 macOS 终端。支持 Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider 及任何 CLI 工具。垂直标签页、通知环、分割面板和 socket API。",
"ogDescription": "面向 AI 编程 agent 的原生 macOS 终端。支持 Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider 及任何 CLI 工具。"
},
"common": {
"downloadForMac": "下载 Mac 版",
"viewOnGitHub": "在 GitHub 上查看",
"closeMenu": "关闭菜单",
"openMenu": "打开菜单",
"toggleTheme": "切换主题",
"backToBlog": "返回博客",
"readTheDocs": "阅读文档",
"viewChangelog": "查看更新日志"
},
"nav": {
"docs": "文档",
"blog": "博客",
"changelog": "更新日志",
"community": "社区",
"github": "GitHub"
},
"footer": {
"product": "产品",
"resources": "资源",
"legal": "法律",
"social": "社交",
"blog": "博客",
"community": "社区",
"docs": "文档",
"changelog": "更新日志",
"privacy": "隐私政策",
"terms": "服务条款",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "联系我们",
"copyright": "© {year} Manaflow",
"language": "语言"
},
"home": {
"taglinePrefix": "开源终端,专为 ",
"typingCodingAgents": "编程 agent",
"typingMultitasking": "多任务",
"subtitle": "基于 Ghostty 构建的原生 macOS 终端应用。开源免费。支持垂直标签页、agent 需要关注时的通知提醒环、分屏面板,以及用于自动化的 socket API。",
"features": "功能特性",
"faq": "常见问题",
"communitySection": "社区",
"feature": {
"verticalTabs": "垂直标签页",
"verticalTabsDesc": ":侧边栏显示 git 分支、工作目录、端口和通知文本",
"notificationRings": "通知提醒环",
"notificationRingsDesc": ":当 agent 需要关注时,面板会亮起提示",
"inAppBrowser": "内置浏览器",
"inAppBrowserDesc": ":在终端旁边分屏打开浏览器,支持可编程 API",
"splitPanes": "分屏面板",
"splitPanesDesc": ":每个标签页内支持水平和垂直分屏",
"scriptable": "可编程",
"scriptableDesc": "CLI 和 socket API支持自动化和脚本控制",
"gpuAccelerated": "GPU 加速",
"gpuAcceleratedDesc": ":由 libghostty 驱动,渲染流畅",
"lightweight": "轻量级",
"lightweightDesc": ":原生 Swift + AppKit无 Electron",
"keyboardShortcuts": "快捷键",
"keyboardShortcutsDesc": "<link>丰富的快捷键</link>,覆盖工作区、分屏、浏览器等操作"
},
"faqGhosttyQ": "cmux 和 Ghostty 是什么关系?",
"faqGhosttyA": "cmux 不是 Ghostty 的 fork。它使用 <link>libghostty</link> 作为终端渲染库,就像应用使用 WebKit 来渲染网页一样。Ghostty 是一个独立的终端cmux 是基于其渲染引擎构建的不同应用。",
"faqPlatformQ": "支持哪些平台?",
"faqPlatformA": "目前仅支持 macOS。cmux 是原生 Swift + AppKit 应用。",
"faqAgentsQ": "cmux 支持哪些 coding agent",
"faqAgentsA": "全部都支持。cmux 是一个终端,所以任何在终端中运行的 agent 都可以直接使用Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider、Goose、Amp、Cline、Cursor Agent以及任何可以从命令行启动的工具。",
"faqNotificationsQ": "通知是如何工作的?",
"faqNotificationsA": "当进程需要关注时cmux 会在面板周围显示通知提醒环、在侧边栏显示未读标记、弹出通知面板,以及发送 macOS 桌面通知。这些通过标准终端转义序列OSC 9/99/777自动触发你也可以通过 <cliLink>cmux CLI</cliLink> 和 <hooksLink>Claude Code hooks</hooksLink> 手动触发。",
"faqShortcutsQ": "可以自定义快捷键吗?",
"faqShortcutsA": "终端键位绑定从你的 Ghostty 配置文件(<configPath>~/.config/ghostty/config</configPath>中读取。cmux 特有的快捷键(工作区、分屏、浏览器、通知)可以在设置中自定义。完整列表请参阅<link>默认快捷键</link>。",
"faqTmuxQ": "和 tmux 相比如何?",
"faqTmuxA": "tmux 是在任何终端内运行的终端复用器。cmux 是一个带 GUI 的原生 macOS 应用:垂直标签页、分屏面板、内置浏览器和 socket API 全部内置。无需配置文件或前缀键。",
"faqFreeQ": "cmux 免费吗?",
"faqFreeA": "是的cmux 免费使用。源代码在 <link>GitHub</link> 上公开。"
},
"community": {
"title": "社区",
"description": "与其他 cmux 用户和开发团队交流。",
"discord": "Discord",
"discordAction": "加入 Discord",
"discordDesc": "与社区交流、获取帮助、分享反馈",
"githubAction": "在 GitHub 上查看",
"githubDesc": "Star 仓库、报告问题、参与贡献",
"twitter": "Twitter",
"twitterAction": "在 X 上关注",
"twitterDesc": "动态、公告和使用技巧",
"youtube": "YouTube",
"youtubeAction": "订阅",
"youtubeDesc": "演示、教程和使用指南",
"linkedin": "LinkedIn",
"linkedinAction": "关注我们",
"linkedinDesc": "公司动态和工程更新",
"metaTitle": "社区 — cmux",
"metaDescription": "在 Discord、Twitter、GitHub 等平台加入 cmux 社区"
},
"blog": {
"title": "博客",
"layoutTitle": "cmux blog",
"metaTitle": "博客",
"metaDescription": "cmux 团队的新闻和更新",
"description": "来自 cmux 团队的新闻和更新",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Cmd+Shift+U 如何在 cmux 中跨工作区跳转到已完成的 agent。",
"date": "2026年3月4日",
"p1": "我最喜欢的 cmux 功能是 Cmd+Shift+U。我现在开着 17 个工作区,每个都在运行一个 agent。以前我需要逐个点击标签页和通知面板来查看哪些已经完成。用键盘更快。",
"p2": "Cmd+Shift+U 跳转到最新的未读<link>通知</link>。实际上就是最后一个完成的 agent。它会切换到对应的工作区聚焦到确切的面板闪烁提示你查看的位置并标记为已读。如果通知来自另一个窗口那个窗口会自动前置。"
},
"zenOfCmux": {
"title": "cmux 之道",
"summary": "cmux 是基础组件,不是完整方案。它提供可组合的模块,工作流由你决定。",
"date": "2026年2月27日",
"p1": "cmux 不会规定开发者应该如何使用工具。它是一个终端加浏览器,配有 CLI剩下的由你决定。",
"p2": "cmux 是基础组件,不是完整方案。它提供终端、浏览器、通知、工作区、分屏、标签页,以及控制这一切的 CLI。cmux 不会强制你用某种固定方式使用 coding agent。你用这些基础组件构建什么完全取决于你。",
"p3": "最优秀的开发者一直在构建自己的工具。目前还没有人找到与 agent 协作的最佳方式,那些构建封闭产品的团队当然也没有。最接近自己代码库的开发者会最先找到答案。",
"p4": "给一百万开发者可组合的基础组件,他们集体找到最高效工作流的速度会比任何产品团队自上而下设计的都快。"
},
"showHnLaunch": {
"title": "在 Show HN 发布 cmux",
"summary": "cmux 登上 Hacker News 第二名,被 Mitchell Hashimoto 分享,并在日本走红。",
"date": "2026年2月21日",
"intro": "我们于 2 月 19 日在 <link>Show HN</link> 上发布了 cmux",
"blockquote1": "我同时运行大量 Claude Code 和 Codex 会话。之前我用 Ghostty 开了一堆分屏面板,靠 macOS 原生通知来判断哪个 agent 需要我。但 Claude Code 的通知内容永远只有「Claude is waiting for your input」没有上下文标签页多了之后连标题都看不全。",
"blockquote2": "我试过一些 coding 编排工具,但大多是 Electron/Tauri 应用,性能让我不满意。而且我更喜欢终端,因为 GUI 编排工具会把你锁定在它们的工作流里。所以我用 Swift/AppKit 构建了 cmux 作为原生 macOS 应用。它使用 libghostty 进行终端渲染,并读取你现有的 Ghostty 配置来加载主题、字体、颜色等。",
"blockquote3": "主要新增的是侧边栏和通知系统。侧边栏有垂直标签页,显示每个工作区的 git 分支、工作目录、监听端口和最新通知文本。通知系统可以捕获终端序列OSC 9/99/777还有一个 CLIcmux notify可以接入 Claude Code、OpenCode 等的 agent hooks。当 agent 等待时它的面板会显示蓝色提醒环标签页在侧边栏中亮起这样我就能在分屏和标签页之间一眼看出哪个需要我。Cmd+Shift+U 跳转到最近的未读通知。",
"blockquote4": "内置浏览器有一个可编程 API。Agent 可以获取无障碍树的快照、获取元素引用、点击、填写表单、执行 JS 和读取控制台日志。你可以在终端旁边分屏打开浏览器面板,让 Claude Code 直接与你的开发服务器交互。",
"blockquote5": "所有功能都可以通过 CLI 和 socket API 编程控制:创建工作区/标签页、分屏、发送按键、在浏览器中打开 URL。",
"hitNumber2": "峰值时登上了 Hacker News 第二名。Mitchell Hashimoto 分享了它:",
"favoriteComment": "我最喜欢的 <link>HN 帖子</link>评论:",
"viralJapan": "出乎意料的是cmux 在日本走红了:",
"translation": "翻译:「这个看起来不错。一个基于 Ghostty 的终端应用,专为并行运行多个 Claude Code 等 CLI 时不迷失方向而设计。等待输入的面板会显示蓝色边框,还有自己的通知系统。」",
"viralChina": "在中国也引起了一定关注:",
"extensions": "另一件令人兴奋的事是看到大家基于 cmux CLI 进行扩展开发。sasha 构建了一个 pi-cmux 扩展在侧边栏显示模型信息、token 用量和 agent 状态:",
"scriptable": "cmux 中的一切都可以通过 CLI 编程控制创建工作区、发送按键、控制浏览器、读取通知。cmux 的理念之一就是可编程和可组合,让开发者可以自定义与 coding agent 的协作方式。Coding agent 的前沿在快速变化,你不会想被锁定在一个跟不上节奏的僵化 GUI 编排工具里。",
"cta": "如果你在同时运行多个 coding agent<link>试试 cmux</link>。"
},
"introducingCmux": {
"title": "cmux 介绍",
"summary": "一个基于 Ghostty 构建的原生 macOS 终端,专为并行运行多个 AI coding agent 而设计。",
"date": "2026年2月12日",
"p1": "cmux 是一个基于 Ghostty 构建的原生 macOS 终端应用,从底层为同时运行多个 AI coding agent 的开发者而设计。",
"whyTitle": "为什么选择 cmux",
"whyP": "现代开发工作流常常需要同时运行多个 agent。Claude Code、Codex 和其他工具各自在独立的终端中运行。追踪哪些需要关注并在它们之间快速切换,正是 cmux 要解决的问题。",
"featuresTitle": "核心功能",
"getStartedTitle": "开始使用",
"getStartedP": "通过 Homebrew 安装 cmux 或从<link>入门指南</link>下载 DMG。",
"featureVerticalTabsLabel": "垂直标签页",
"featureVerticalTabsDesc": "在侧边栏一览所有终端",
"featureNotificationsLabel": "通知提醒环",
"featureNotificationsDesc": "agent 需要输入时标签页会闪烁提示",
"featureSplitPanesLabel": "分屏面板",
"featureSplitPanesDesc": "每个工作区内支持水平和垂直分屏",
"featureSocketApiLabel": "Socket API",
"featureSocketApiDesc": "可编程控制,用于创建标签页和发送输入",
"featureGpuLabel": "GPU 加速",
"featureGpuDesc": "由 libghostty 驱动,渲染流畅"
}
},
"zenOfCmux": {
"metaTitle": "cmux 之禅",
"metaDescription": "cmux 是原语而非解决方案。它提供可组合的部件,工作流由你决定。"
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "改变你与 cmux 交互方式的新键盘快捷键。"
},
"showHnLaunch": {
"metaTitle": "在 Show HN 上发布 cmux",
"metaDescription": "在 Hacker News 上发布 cmux 的故事。"
},
"introducingCmux": {
"metaTitle": "cmux 介绍",
"metaDescription": "我们为什么要做 cmux一个全新的 macOS 终端。"
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "入门指南",
"metaDescription": "安装 cmux专为 AI coding agent 打造的原生 macOS 终端。支持 Homebrew、DMG 下载、CLI 设置和 Sparkle 自动更新。",
"intro": "cmux 是一个基于 Ghostty 构建的轻量级原生 macOS 终端,用于管理多个 AI coding agent。支持垂直标签页、通知面板和基于 socket 的控制 API。",
"install": "安装",
"dmgRecommended": "DMG推荐",
"dmgDesc": "打开 .dmg 文件,将 cmux 拖到「应用程序」文件夹。cmux 通过 Sparkle 自动更新,只需下载一次。",
"homebrew": "Homebrew",
"updateLater": "后续更新:",
"firstLaunchCallout": "首次启动时macOS 可能会要求确认打开来自已识别开发者的应用。点击<strong>打开</strong>即可继续。",
"verifyTitle": "验证安装",
"verifyDesc": "打开 cmux你应该会看到",
"verifyItem1": "左侧有垂直标签页侧边栏的终端窗口",
"verifyItem2": "一个已打开的初始工作区",
"verifyItem3": "由 Ghostty 驱动的终端已就绪,可以输入",
"cliSetup": "CLI 设置",
"cliDesc": "cmux 包含一个用于自动化的命令行工具。在 cmux 终端内会自动生效。如果要在 cmux 外部使用 CLI请创建符号链接",
"cliThen": "之后你就可以运行以下命令:",
"autoUpdates": "自动更新",
"autoUpdatesDesc": "cmux 通过 Sparkle 自动检查更新。有可用更新时,标题栏会显示更新提示。你也可以通过菜单栏的 cmux > Check for Updates 手动检查。",
"sessionRestore": "会话恢复(当前行为)",
"sessionRestoreDesc": "重新启动后cmux 仅恢复布局和元数据:",
"sessionItem1": "窗口、工作区和面板布局",
"sessionItem2": "工作目录",
"sessionItem3": "终端回滚缓冲区(尽力恢复)",
"sessionItem4": "浏览器 URL 和导航历史",
"sessionCallout": "cmux 暂不支持恢复实时进程状态。活跃的终端应用会话(如 Claude Code、tmux、vim在应用重启后不会恢复。",
"requirements": "系统要求",
"reqItem1": "macOS 14.0 或更高版本",
"reqItem2": "Apple Silicon 或 Intel Mac",
"metaTitle": "快速开始"
},
"concepts": {
"title": "核心概念",
"metaDescription": "cmux 如何组织终端:窗口、工作区、面板和 surface。侧边栏、分屏和 socket API 背后的层级结构。",
"intro": "cmux 以四层层级结构组织你的终端。理解这些层级有助于使用 socket API、CLI 和快捷键。",
"hierarchy": "层级结构",
"windowTitle": "窗口Window",
"windowDesc": "一个 macOS 窗口。使用 {shortcut} 打开多个窗口。每个窗口有独立的侧边栏和独立的工作区。",
"workspaceTitle": "工作区Workspace",
"workspaceDesc": "侧边栏中的一个条目。每个工作区包含一个或多个分屏面板。工作区就是你在左侧侧边栏中看到的条目。",
"workspaceNote": "在 UI 和快捷键中工作区通常被称为「标签页」因为它们的行为类似侧边栏中的标签页。Socket API 和环境变量使用「workspace」这个术语。",
"contextHeader": "上下文",
"termUsedHeader": "使用的术语",
"sidebarUI": "侧边栏 UI",
"tab": "标签页",
"keyboardShortcuts": "快捷键",
"workspaceOrTab": "工作区或标签页",
"socketAPI": "Socket API",
"environmentVariable": "环境变量",
"workspaceShortcuts": "快捷键:{new}(新建)、{jump}(跳转)、{close}(关闭)、{prevNext}(上一个/下一个)",
"paneTitle": "面板Pane",
"paneDesc": "工作区内的一个分屏区域。通过 {right}(向右)或 {down}(向下)创建分屏。使用 {nav} + 方向键在面板间导航。",
"paneNote": "每个面板可以包含多个 surface面板内的标签页。",
"surfaceTitle": "Surface",
"surfaceDesc": "面板内的一个标签页。每个面板有自己的标签栏,可以包含多个 surface。使用 {new} 创建,使用 {prev} / {next} 或 {jump} 导航。",
"surfaceNote": "Surface 是你直接交互的终端或浏览器会话。每个 surface 有自己的 CMUX_SURFACE_ID 环境变量。",
"panelTitle": "Panel",
"panelDesc": "Surface 内部的内容。目前有两种类型:",
"panelTerminal": "终端:一个 Ghostty 终端会话",
"panelBrowser": "浏览器:一个内嵌的 web 视图",
"panelNote": "Panel 主要是内部概念。在 socket API 和 CLI 中,你与 surface 交互,而不是直接与 panel 交互。",
"visualExample": "示例图解",
"visualExampleDesc": "在这个示例中:",
"visualItem1": "窗口包含一个带有三个工作区dev、server、logs的侧边栏",
"visualItem2": "工作区「dev」被选中显示两个并排的面板",
"visualItem3": "面板 1 有两个 surface标签栏中的 [S1] 和 [S2]S1 处于激活状态",
"visualItem4": "面板 2 有一个 surface",
"visualItem5": "每个 surface 包含一个 panel在本例中是终端",
"summary": "总结",
"levelHeader": "层级",
"whatItIsHeader": "描述",
"createdByHeader": "创建方式",
"identifiedByHeader": "标识方式",
"macosWindow": "macOS 窗口",
"sidebarEntry": "侧边栏条目",
"splitRegion": "分屏区域",
"tabWithinPane": "面板内的标签页",
"terminalOrBrowser": "终端或浏览器",
"automatic": "自动",
"paneIdSocket": "Pane IDsocket API",
"panelIdInternal": "Panel ID内部",
"metaTitle": "概念"
},
"configuration": {
"title": "配置",
"metaDescription": "通过 Ghostty 配置文件配置 cmux。字体、主题、颜色、分屏样式、回滚缓冲区和自动化模式的应用设置。",
"intro": "cmux 从 Ghostty 配置文件中读取配置,如果你之前使用 Ghostty这些选项会很熟悉。",
"configLocations": "配置文件位置",
"configLocationsDesc": "cmux 按以下顺序查找配置:",
"createConfig": "如果配置文件不存在,请创建:",
"appearance": "外观",
"font": "字体",
"colors": "颜色",
"splitPanes": "分屏面板",
"behavior": "行为",
"scrollback": "回滚缓冲区",
"workingDirectory": "工作目录",
"appSettings": "应用设置",
"appSettingsDesc": "应用内设置可通过 cmux > Settings{shortcut})打开:",
"themeMode": "主题模式",
"themeSystem": "System跟随 macOS 外观",
"themeLight": "Light始终使用浅色模式",
"themeDark": "Dark始终使用深色模式",
"automationMode": "自动化模式",
"automationModeDesc": "控制 socket 访问级别:",
"automationOff": "Off禁用 socket 控制(最安全)",
"automationCmux": "cmux processes only仅允许在 cmux 终端内启动的进程连接",
"automationAll": "allowAll允许任何本地进程连接CMUX_SOCKET_MODE=allowAll仅通过环境变量覆盖",
"automationCallout": "在共享机器上建议使用「Off」或「cmux processes only」模式。",
"browserLinkBehavior": "浏览器链接行为",
"browserLinkDesc": "在 Settings > Browser 中cmux 提供两个用途不同的主机列表:",
"browserHostsEmbed": "在内嵌浏览器中打开的主机:适用于从终端输出点击的链接。此列表中的主机在 cmux 中打开其他主机在默认浏览器中打开。支持单个主机或通配符每行一个例如example.com、*.internal.example。",
"browserHostsHttp": "内嵌浏览器允许的 HTTP 主机:仅适用于 HTTP非 HTTPSURL。此列表中的主机可以在 cmux 中打开而不显示警告提示。默认包括 localhost、127.0.0.1、::1、0.0.0.0 和 *.localtest.me。",
"exampleConfig": "配置示例",
"metaTitle": "配置"
},
"keyboardShortcuts": {
"title": "快捷键",
"description": "cmux 中所有可用的快捷键,按类别分组。",
"metaDescription": "cmux 的所有 macOS 快捷键涵盖工作区、surface、分屏面板、浏览器、通知、查找和窗口管理。",
"searchPlaceholder": "搜索快捷键...",
"searchLabel": "搜索键盘快捷键",
"noResults": "未找到快捷键",
"noResultsHint": "请尝试其他搜索词",
"cat": {
"workspaces": "工作区",
"workspacesBlurb": "工作区位于侧边栏中。每个工作区有自己的面板和 surface。",
"surfaces": "Surface",
"surfacesBlurb": "Surface 是面板内的标签页。",
"splitPanes": "分屏面板",
"browser": "浏览器",
"notifications": "通知",
"find": "查找",
"terminal": "终端",
"window": "窗口"
},
"sc": {
"ws-new": "新建工作区",
"ws-jump-1-8": "跳转到工作区 18",
"ws-jump-last": "跳转到最后一个工作区",
"ws-close": "关闭工作区",
"ws-rename": "重命名工作区",
"sf-new": "新建 surface",
"sf-prev-1": "上一个 surface",
"sf-prev-2": "上一个 surface",
"sf-jump-1-8": "跳转到 surface 18",
"sf-jump-last": "跳转到最后一个 surface",
"sf-close": "关闭 surface",
"sp-right": "向右分屏",
"sp-down": "向下分屏",
"sp-focus": "按方向聚焦面板",
"sp-browser-right": "向右分屏浏览器",
"sp-browser-down": "向下分屏浏览器",
"br-open": "打开浏览器 surface",
"br-addr": "聚焦地址栏",
"br-forward": "前进",
"br-reload": "刷新页面",
"br-devtools": "打开开发者工具",
"nt-panel": "显示通知面板",
"nt-latest": "跳转到最新未读",
"nt-flash": "触发闪烁",
"fd-find": "查找",
"fd-next-prev": "查找下一个 / 上一个",
"fd-hide": "隐藏查找栏",
"fd-selection": "使用选中内容查找",
"tm-clear": "清除回滚缓冲区",
"tm-copy": "复制(选中内容)",
"tm-paste": "粘贴",
"tm-font": "增大 / 减小字体",
"tm-reset": "重置字体大小",
"wn-new": "新建窗口",
"wn-settings": "设置",
"wn-reload": "重新加载配置",
"wn-quit": "退出"
},
"metaTitle": "键盘快捷键"
},
"api": {
"title": "API 参考",
"metaDescription": "cmux CLI 和 Unix socket API 参考文档。工作区管理、分屏面板、输入控制、通知、侧边栏元数据、环境变量和检测方法。",
"intro": "cmux 提供 CLI 工具和 Unix socket 两种编程控制方式。每个命令都可以通过两种接口使用。",
"socket": "Socket",
"buildHeader": "构建版本",
"pathHeader": "路径",
"release": "Release",
"debug": "Debug",
"taggedDebug": "带标签的 Debug 构建",
"socketOverride": "可通过 CMUX_SOCKET_PATH 环境变量覆盖。每次调用发送一个以换行符结尾的 JSON 请求:",
"socketCallout": "JSON socket 请求必须使用 method 和 params。不支持旧版 v1 JSON 格式(如 <legacy>'{'\"command\":\"...\"'}'</legacy>)。",
"accessModes": "访问模式",
"modeHeader": "模式",
"descriptionHeader": "描述",
"howToEnableHeader": "启用方式",
"offMode": "禁用 Socket",
"offEnable": "Settings UI 或 CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "仅允许在 cmux 终端内启动的进程连接。",
"cmuxOnlyEnable": "Settings UI 中的默认模式",
"allowAllMode": "允许任何本地进程连接(不检查进程来源)。",
"allowAllEnable": "仅通过环境变量覆盖CMUX_SOCKET_MODE=allowAll",
"accessCallout": "在共享机器上,请使用 Off 或 cmux processes only。",
"cliOptions": "CLI 选项",
"flagHeader": "Flag",
"customSocketPath": "自定义 socket 路径",
"outputJson": "以 JSON 格式输出",
"targetWindow": "指定目标窗口",
"targetWorkspace": "指定目标工作区",
"targetSurface": "指定目标 surface",
"idFormat": "控制 JSON 输出中的标识符格式",
"workspaceCommands": "工作区命令",
"listWorkspacesDesc": "列出所有打开的工作区。",
"newWorkspaceDesc": "创建新工作区。",
"selectWorkspaceDesc": "切换到指定工作区。",
"currentWorkspaceDesc": "获取当前活跃的工作区。",
"closeWorkspaceDesc": "关闭工作区。",
"splitCommands": "分屏命令",
"newSplitDesc": "创建新的分屏面板。方向left、right、up、down。",
"listSurfacesDesc": "列出当前工作区中的所有 surface。",
"focusSurfaceDesc": "聚焦到指定 surface。",
"inputCommands": "输入命令",
"sendDesc": "向当前聚焦的终端发送文本输入。",
"sendKeyDesc": "发送按键。可用按键enter、tab、escape、backspace、delete、up、down、left、right。",
"sendSurfaceDesc": "向指定 surface 发送文本。",
"sendKeySurfaceDesc": "向指定 surface 发送按键。",
"notificationCommands": "通知命令",
"notifyDesc": "发送通知。",
"listNotificationsDesc": "列出所有通知。",
"clearNotificationsDesc": "清除所有通知。",
"sidebarMetadata": "侧边栏元数据命令",
"sidebarMetadataDesc": "为任意工作区设置侧边栏中的状态标签、进度条和日志条目。适用于构建脚本、CI 集成和希望快速展示状态的 AI coding agent。",
"setStatusDesc": "设置侧边栏状态标签。使用唯一的 key让不同工具管理各自的条目。",
"clearStatusDesc": "按 key 移除侧边栏状态条目。",
"listStatusDesc": "列出工作区的所有侧边栏状态条目。",
"setProgressDesc": "设置侧边栏进度条0.0 到 1.0)。",
"clearProgressDesc": "清除侧边栏进度条。",
"logDesc": "向侧边栏追加日志条目。级别info、progress、success、warning、error。",
"clearLogDesc": "清除所有侧边栏日志条目。",
"listLogDesc": "列出侧边栏日志条目。",
"sidebarStateDesc": "导出所有侧边栏元数据cwd、git 分支、端口、状态、进度、日志)。",
"utilityCommands": "工具命令",
"pingDesc": "检查 cmux 是否正在运行并响应。",
"capabilitiesDesc": "列出可用的 socket 方法和当前访问模式。",
"identifyDesc": "显示当前聚焦的窗口/工作区/面板/surface 上下文。",
"envVariables": "环境变量",
"variableHeader": "变量",
"socketPathDesc": "覆盖 CLI 和集成使用的 socket 路径",
"socketEnableDesc": "强制启用/禁用 socket1/0、true/false、on/off",
"socketModeDesc": "覆盖访问模式cmuxOnly、allowAll、off。也接受 cmux-only/cmux_only 和 allow-all/allow_all",
"workspaceIdDesc": "自动设置:当前工作区 ID",
"surfaceIdDesc": "自动设置:当前 surface ID",
"termProgramDesc": "设置为 ghostty",
"termDesc": "设置为 xterm-ghostty",
"envCallout": "旧版 CMUX_SOCKET_MODE 值 full 和 notifications 仍然兼容。",
"detectingCmux": "检测 cmux",
"examples": "示例",
"pythonClient": "Python 客户端",
"shellScript": "Shell 脚本",
"buildScriptNotification": "带通知的构建脚本",
"metaTitle": "API 参考"
},
"notifications": {
"title": "通知",
"metaDescription": "在 cmux 中从 AI agent 和脚本发送桌面通知。CLI、OSC 99/777 转义序列和 Claude Code hooks 集成。",
"intro": "cmux 支持桌面通知,让 AI agent 和脚本在需要关注时提醒你。",
"lifecycle": "生命周期",
"received": "已接收:通知出现在面板中,触发桌面提醒(如果未被抑制)",
"unread": "未读:工作区标签页上显示未读标记",
"read": "已读:查看该工作区时清除",
"cleared": "已清除:从面板中移除",
"suppression": "抑制",
"suppressionDesc": "以下情况桌面提醒会被抑制:",
"suppressItem1": "cmux 窗口处于聚焦状态",
"suppressItem2": "发送通知的工作区正处于活跃状态",
"suppressItem3": "通知面板已打开",
"notificationPanel": "通知面板",
"notificationPanelDesc": "按 <openShortcut>⌘⇧I</openShortcut> 打开通知面板。点击通知跳转到对应工作区。按 <jumpShortcut>⌘⇧U</jumpShortcut> 直接跳转到最近有未读通知的工作区。",
"customCommand": "自定义命令",
"customCommandDesc": "每次调度通知时运行一个 shell 命令。在 Settings > App > Notification Command 中设置。命令通过 /bin/sh -c 运行,可使用以下环境变量:",
"customCommandNote": "该命令独立于系统声音选择器运行。将选择器设为「None」可仅使用自定义命令或同时保留两者以获得系统声音加自定义操作。",
"sending": "发送通知",
"cli": "CLI",
"osc777Title": "OSC 777简单",
"osc777Desc": "RXVT 协议使用固定格式,包含标题和正文:",
"osc99Title": "OSC 99丰富",
"osc99Desc": "Kitty 协议支持副标题和通知 ID",
"variableHeader": "变量",
"descriptionHeader": "描述",
"envTitle": "通知标题(工作区名称或应用名称)",
"envSubtitle": "通知副标题",
"envBody": "通知正文内容",
"cmpTitleBody": "标题 + 正文",
"cmpSubtitle": "副标题",
"cmpNotificationId": "通知 ID",
"cmpComplexity": "复杂度",
"cmpYes": "是",
"cmpNo": "否",
"cmpHigher": "较高",
"cmpLower": "较低",
"featureHeader": "功能",
"comparisonCallout": "简单通知用 OSC 777。需要副标题或通知 ID 时用 OSC 99。最简单的集成方式是用 CLIcmux notify。",
"claudeCodeHooks": "Claude Code hooks",
"claudeCodeHooksDesc": "cmux 通过 <link>Claude Code</link> 的 hooks 集成,在任务完成时通知你。",
"createHookScript": "1. 创建 hook 脚本",
"configureClaude": "2. 配置 Claude Code",
"restartNote": "重启 Claude Code 以应用 hooks。",
"integrationExamples": "集成示例",
"notifyAfterLong": "长时间命令后发送通知",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux 透传",
"tmuxDesc": "如果在 cmux 内使用 tmux启用透传",
"metaTitle": "通知"
},
"browserAutomation": {
"title": "浏览器自动化",
"metaDescription": "cmux 浏览器命令参考涵盖导航、DOM 交互、等待、检查、JavaScript 执行、标签页、对话框、框架、下载和浏览器状态。",
"intro": "cmux browser 命令组提供针对 cmux 浏览器 surface 的自动化功能。可用于导航、与 DOM 元素交互、检查页面状态、执行 JavaScript 和管理浏览器会话数据。",
"commandIndex": "命令索引",
"categoryHeader": "类别",
"subcommandsHeader": "子命令",
"navAndTargeting": "导航和目标定位",
"waiting": "等待",
"domInteraction": "DOM 交互",
"inspection": "检查",
"jsAndInjection": "JavaScript 和注入",
"framesDialogsDownloads": "框架、对话框、下载",
"stateAndSession": "状态和会话数据",
"tabsAndLogs": "标签页和日志",
"targetingSurface": "指定浏览器 surface",
"targetingDesc": "大多数子命令需要指定目标 surface。可以通过位置参数或 --surface 传入。",
"navigation": "导航",
"waitingSection": "等待",
"waitingDesc": "使用 wait 命令阻塞等待直到选择器、文本、URL 片段、加载状态或 JavaScript 条件满足。",
"domSection": "DOM 交互",
"domDesc": "变更操作支持 --snapshot-after 用于脚本中的快速验证。",
"inspectionSection": "检查",
"inspectionDesc": "使用结构化 getter 用于脚本,快照/截图用于人工审查。",
"jsSection": "JavaScript 执行和注入",
"stateSection": "状态",
"stateDesc": "会话数据命令涵盖 cookie、local/session storage 和完整的浏览器状态快照。",
"tabsSection": "标签页",
"tabsDesc": "浏览器标签页操作对应活跃浏览器标签组中的浏览器 surface。",
"consoleSection": "控制台和错误",
"dialogsSection": "对话框",
"framesSection": "框架",
"downloadsSection": "下载",
"commonPatterns": "常见模式",
"patternNavigate": "导航、等待、检查",
"patternForm": "填写表单并验证成功文本",
"patternDebug": "失败时捕获调试信息",
"patternSession": "持久化和恢复浏览器会话",
"metaTitle": "浏览器自动化"
},
"changelog": {
"title": "更新日志",
"metaDescription": "cmux 发布说明和版本历史。原生 macOS 终端的新功能、问题修复和变更记录。",
"metaTitle": "更新日志"
},
"navItems": {
"gettingStarted": "入门指南",
"concepts": "核心概念",
"configuration": "配置",
"keyboardShortcuts": "快捷键",
"apiReference": "API 参考",
"browserAutomation": "浏览器自动化",
"notifications": "通知",
"changelog": "更新日志"
}
},
"legal": {
"privacyPolicy": "隐私政策",
"termsOfService": "服务条款",
"eula": "EULA"
},
"wallOfLove": {
"title": "用户好评",
"description": "大家对 cmux 的评价。"
},
"testimonials": {
"mitchellh": "又一个基于 libghostty 的项目,这次是一个带垂直标签页、更好的组织/通知、内置可编程浏览器的 macOS 终端,专门面向大量使用终端 agent 工作流的用户。",
"schrockn": "这正是我一直在找的产品。用了两小时就爱上了。",
"egrefen": "整个周末都在用,太棒了。",
"max4c": "过去两周最喜欢的工具",
"asaza": "cmux 看起来太棒了,也许终于到了告别 VSCode 的时候",
"johnthedebs": "看起来真的很厉害。喜欢这些想法:可编程性、分层 UI、带 API 的浏览器。期待试用。也想说非常感谢 Mitchell Hashimoto 创建了 libghostty作为终端用户感觉现在是个令人兴奋的时代。",
"joeriddles": "终端里的垂直标签页!之前从没想过。我用 Firefox 垂直标签页用得很开心。",
"dchu17": "试了一下,很直观。做得好!",
"afruth": "很喜欢,过去一天在三个并行项目上用了,每个都有多个 worktree。配合 lazygit 和 yazi/nvim比以前高效多了不用在多个 Ghostty/iTerm 实例之间切换。比 tmux 也更自然。",
"northprint": "试了 cmux确实不错",
"indykish": "cmux 挺好用的。",
"kataring": "换到 cmux.dev 了",
"scottw": "非常有用的发现。强烈推荐。",
"johnblythe": "周末用了,很喜欢。一直在等这样的工具。",
"bchris91": "这正是我想要的。做得太好了,谢谢!",
"connorelsea": "用了一周,非常棒。每个进行中的任务一个垂直标签页。里面一边是 Claude另一边是浏览器看 PR 和资料,在任务之间切换保持有序。配合 skill 让 Claude 递归监控 CI 等等。感觉开悟了。",
"tonkotsuboy": "年初从 Warp 换到 Ghostty现在又换到了 cmux。垂直标签页很方便Claude Code 任务完成时收到通知很实用。基于 Ghostty 所以依然飞快。之前在 Ghostty 里设置的分支显示和补全也都能用。"
},
"languageSwitcher": {
"label": "语言"
}
}

587
web/messages/zh-TW.json Normal file
View file

@ -0,0 +1,587 @@
{
"meta": {
"title": "cmux — 專為多工處理打造的終端",
"description": "基於 Ghostty 的原生 macOS 終端。支援 Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider 及任何 CLI 工具。垂直分頁、通知環、分割面板和 socket API。",
"ogDescription": "面向 AI 程式 agent 的原生 macOS 終端。支援 Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider 及任何 CLI 工具。"
},
"common": {
"downloadForMac": "下載 Mac 版",
"viewOnGitHub": "在 GitHub 上查看",
"closeMenu": "關閉選單",
"openMenu": "開啟選單",
"toggleTheme": "切換主題",
"backToBlog": "返回部落格",
"readTheDocs": "閱讀文件",
"viewChangelog": "查看更新日誌"
},
"nav": {
"docs": "文件",
"blog": "部落格",
"changelog": "更新日誌",
"community": "社群",
"github": "GitHub"
},
"footer": {
"product": "產品",
"resources": "資源",
"legal": "法律",
"social": "社群媒體",
"blog": "部落格",
"community": "社群",
"docs": "文件",
"changelog": "更新日誌",
"privacy": "隱私權",
"terms": "服務條款",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "聯絡我們",
"copyright": "© {year} Manaflow",
"language": "語言"
},
"home": {
"taglinePrefix": "開源終端,專為 ",
"typingCodingAgents": "程式 agent",
"typingMultitasking": "多工處理",
"subtitle": "基於 Ghostty 的原生 macOS 終端應用程式。開源免費。垂直分頁、代理需要注意時的通知環、分割窗格,以及用於自動化的 socket API。",
"features": "功能",
"faq": "常見問題",
"communitySection": "社群",
"feature": {
"verticalTabs": "垂直分頁",
"verticalTabsDesc": ":側邊欄顯示 git 分支、工作目錄、連接埠和通知文字",
"notificationRings": "通知環",
"notificationRingsDesc": ":當代理需要注意時,窗格會亮起",
"inAppBrowser": "內建瀏覽器",
"inAppBrowserDesc": ":在終端機旁分割一個瀏覽器,並提供可編寫腳本的 API",
"splitPanes": "分割窗格",
"splitPanesDesc": ":每個分頁內支援水平和垂直分割",
"scriptable": "可編寫腳本",
"scriptableDesc": ":提供 CLI 和 socket API用於自動化和腳本編寫",
"gpuAccelerated": "GPU 加速",
"gpuAcceleratedDesc": ":由 libghostty 驅動,提供流暢的渲染效果",
"lightweight": "輕量化",
"lightweightDesc": ":原生 Swift + AppKit無 Electron",
"keyboardShortcuts": "鍵盤快捷鍵",
"keyboardShortcutsDesc": "<link>豐富的快捷鍵</link>,涵蓋工作區、分割、瀏覽器等功能"
},
"faqGhosttyQ": "cmux 和 Ghostty 有什麼關係?",
"faqGhosttyA": "cmux 不是 Ghostty 的分支。它使用 <link>libghostty</link> 作為終端機渲染的函式庫,就像應用程式使用 WebKit 來顯示網頁一樣。Ghostty 是一個獨立的終端機cmux 是建立在其渲染引擎之上的不同應用程式。",
"faqPlatformQ": "支援哪些平台?",
"faqPlatformA": "目前僅支援 macOS。cmux 是原生的 Swift + AppKit 應用程式。",
"faqAgentsQ": "cmux 支援哪些程式碼代理?",
"faqAgentsA": "全部都支援。cmux 是一個終端機所以任何在終端機中執行的代理都能直接使用Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider、Goose、Amp、Cline、Cursor Agent以及任何你能從命令列啟動的工具。",
"faqNotificationsQ": "通知是如何運作的?",
"faqNotificationsA": "當程序需要注意時cmux 會在窗格周圍顯示通知環、在側邊欄顯示未讀徽章、顯示通知彈出視窗,以及 macOS 桌面通知。這些通知會透過標準終端機跳脫序列OSC 9/99/777自動觸發你也可以透過 <cliLink>cmux CLI</cliLink> 和 <hooksLink>Claude Code hooks</hooksLink> 手動觸發。",
"faqShortcutsQ": "可以自訂鍵盤快捷鍵嗎?",
"faqShortcutsA": "終端機按鍵綁定從你的 Ghostty 設定檔(<configPath>~/.config/ghostty/config</configPath>讀取。cmux 專屬的快捷鍵(工作區、分割、瀏覽器、通知)可以在「設定」中自訂。請參閱<link>預設快捷鍵</link>以獲取完整列表。",
"faqTmuxQ": "和 tmux 相比如何?",
"faqTmuxA": "tmux 是一個在任何終端機內執行的終端機多工器。cmux 是一個帶有圖形介面的原生 macOS 應用程式:垂直分頁、分割窗格、內建瀏覽器和 socket API 全部內建。不需要設定檔或前綴鍵。",
"faqFreeQ": "cmux 是免費的嗎?",
"faqFreeA": "是的cmux 可以免費使用。原始碼可在 <link>GitHub</link> 上取得。"
},
"community": {
"title": "社群",
"description": "與其他 cmux 使用者和團隊交流。",
"discord": "Discord",
"discordAction": "加入我們的 Discord",
"discordDesc": "與社群聊天、獲得協助並分享回饋",
"githubAction": "在 GitHub 上查看",
"githubDesc": "給 repo 加星號、回報問題和貢獻程式碼",
"twitter": "Twitter",
"twitterAction": "在 X 上追蹤",
"twitterDesc": "更新、公告和技巧",
"youtube": "YouTube",
"youtubeAction": "訂閱",
"youtubeDesc": "示範、教學和導覽",
"linkedin": "LinkedIn",
"linkedinAction": "追蹤我們",
"linkedinDesc": "公司新聞和工程更新",
"metaTitle": "社群 — cmux",
"metaDescription": "在 Discord、Twitter、GitHub 等平台加入 cmux 社群"
},
"blog": {
"title": "部落格",
"layoutTitle": "cmux blog",
"metaTitle": "部落格",
"metaDescription": "cmux 團隊的新聞和更新",
"description": "來自 cmux 團隊的新聞和更新",
"posts": {
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "Cmd+Shift+U 如何在 cmux 的工作區之間導覽已完成的代理。",
"date": "2026 年 3 月 4 日",
"p1": "我最喜歡的 cmux 功能是 Cmd+Shift+U。我現在開了 17 個工作區,每個都在執行代理。以前我需要點擊分頁和通知面板來找出哪個完成了。打字更快。",
"p2": "Cmd+Shift+U 會跳到最新的未讀<link>通知</link>。實際上就是最後一個完成的代理。它會切換到正確的工作區、聚焦到確切的窗格、閃爍以提示你看哪裡,然後標記為已讀。如果通知來自另一個視窗,該視窗會移到前面。"
},
"zenOfCmux": {
"title": "cmux 之道",
"summary": "cmux 是一個基本元件,不是一個方案。它提供可組合的零件,你的工作流程由你決定。",
"date": "2026 年 2 月 27 日",
"p1": "cmux 不會規定開發者如何使用工具。它是一個帶有 CLI 的終端機和瀏覽器,其餘的由你決定。",
"p2": "cmux 是一個基本元件,不是一個方案。它提供終端機、瀏覽器、通知、工作區、分割、分頁,以及控制這一切的 CLI。cmux 不會強迫你用特定的方式使用程式碼代理。你用這些基本元件建立的東西是你自己的。",
"p3": "最好的開發者一直都在打造自己的工具。還沒有人找到與代理合作的最佳方式,那些建構封閉產品的團隊也還沒有。最接近自己程式碼庫的開發者會先找到答案。",
"p4": "給一百萬個開發者可組合的基本元件,他們集體找到最高效工作流程的速度會比任何產品團隊由上而下設計的更快。"
},
"showHnLaunch": {
"title": "在 Show HN 上發布 cmux",
"summary": "cmux 登上 Hacker News 第 2 名,被 Mitchell Hashimoto 分享,並在日本爆紅。",
"date": "2026 年 2 月 21 日",
"intro": "我們在 2 月 19 日將 cmux 發布到 <link>Show HN</link>",
"blockquote1": "我同時執行很多 Claude Code 和 Codex 工作階段。我之前用 Ghostty 搭配大量分割窗格,依賴原生 macOS 通知來知道代理何時需要我。但 Claude Code 的通知內容永遠只有「Claude is waiting for your input」而沒有上下文而且分頁開太多時我連標題都看不到了。",
"blockquote2": "我試了幾個程式碼編排工具,但大多數是 Electron/Tauri 應用程式,效能讓我不滿意。我也更喜歡終端機,因為 GUI 編排工具會把你鎖在它們的工作流程裡。所以我用 Swift/AppKit 建立了 cmux 作為原生 macOS 應用程式。它使用 libghostty 進行終端機渲染,並讀取你現有的 Ghostty 設定來套用主題、字型、顏色等。",
"blockquote3": "主要新增的是側邊欄和通知系統。側邊欄有垂直分頁,顯示每個工作區的 git 分支、工作目錄、監聽的連接埠和最新通知文字。通知系統會擷取終端機序列OSC 9/99/777並提供 CLIcmux notify讓你連接到 Claude Code、OpenCode 等代理的 hooks。當代理在等待時其窗格會出現藍色環圈分頁在側邊欄中會亮起這樣我就能在分割和分頁之間看出哪個需要我。Cmd+Shift+U 會跳到最近的未讀通知。",
"blockquote4": "內建瀏覽器有可編寫腳本的 API。代理可以擷取無障礙樹快照、取得元素參考、點擊、填寫表單、執行 JS 和讀取主控台日誌。你可以在終端機旁邊分割一個瀏覽器窗格,讓 Claude Code 直接與你的開發伺服器互動。",
"blockquote5": "一切都可以透過 CLI 和 socket API 編寫腳本:建立工作區/分頁、分割窗格、傳送按鍵、在瀏覽器中開啟 URL。",
"hitNumber2": "最高時登上 Hacker News 第 2 名。Mitchell Hashimoto 分享了它:",
"favoriteComment": "我最喜歡的 <link>HN 討論串</link>留言:",
"viralJapan": "出乎意料地cmux 在日本爆紅:",
"translation": "翻譯:「這看起來不錯。一個基於 Ghostty 的終端機應用程式,設計成讓你在平行執行多個像 Claude Code 這樣的 CLI 時不會迷失。等待輸入的面板會有藍色邊框,而且有自己的通知系統。」",
"viralChina": "也在中國小範圍爆紅:",
"extensions": "另一件令人興奮的事是看到人們在 cmux CLI 之上進行開發。sasha 建立了一個 pi-cmux 擴充功能在側邊欄中顯示模型資訊、token 用量和代理狀態:",
"scriptable": "cmux 中的一切都可以透過 CLI 編寫腳本建立工作區、傳送按鍵、控制瀏覽器、讀取通知。cmux 的理念之一是可程式化和可組合,讓使用者可以自訂與程式碼代理合作的方式。程式碼代理的技術前沿變化很快,你不會想被鎖在一個跟不上的僵化 GUI 編排工具裡。",
"cta": "如果你正在同時執行多個程式碼代理,<link>試試 cmux</link>。"
},
"introducingCmux": {
"title": "介紹 cmux",
"summary": "一個基於 Ghostty 的原生 macOS 終端機,專為並行執行多個 AI 程式碼代理而設計。",
"date": "2026 年 2 月 12 日",
"p1": "cmux 是一個建立在 Ghostty 之上的原生 macOS 終端機應用程式,從頭開始為同時執行多個 AI 程式碼代理的開發者設計。",
"whyTitle": "為什麼選擇 cmux",
"whyP": "現代開發工作流程通常需要同時執行多個代理。Claude Code、Codex 和其他工具各自在自己的終端機中。追蹤哪些需要注意並快速切換,就是 cmux 要解決的問題。",
"featuresTitle": "主要功能",
"getStartedTitle": "開始使用",
"getStartedP": "透過 Homebrew 安裝 cmux或從<link>入門指南</link>下載 DMG。",
"featureVerticalTabsLabel": "垂直分頁",
"featureVerticalTabsDesc": "在側邊欄中一覽所有終端機",
"featureNotificationsLabel": "通知環",
"featureNotificationsDesc": "當代理需要你輸入時,分頁會閃爍",
"featureSplitPanesLabel": "分割窗格",
"featureSplitPanesDesc": "每個工作區內支援水平和垂直分割",
"featureSocketApiLabel": "Socket API",
"featureSocketApiDesc": "透過程式控制建立分頁和傳送輸入",
"featureGpuLabel": "GPU 加速",
"featureGpuDesc": "由 libghostty 驅動,提供流暢的渲染效果"
}
},
"zenOfCmux": {
"metaTitle": "cmux 之禪",
"metaDescription": "cmux 是原語而非解決方案。它提供可組合的部件,工作流由你決定。"
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "改變你與 cmux 互動方式的新鍵盤快捷鍵。"
},
"showHnLaunch": {
"metaTitle": "在 Show HN 上發布 cmux",
"metaDescription": "在 Hacker News 上發布 cmux 的故事。"
},
"introducingCmux": {
"metaTitle": "cmux 介紹",
"metaDescription": "我們為什麼要做 cmux一個全新的 macOS 終端。"
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "入門指南",
"metaDescription": "安裝 cmux專為 AI 程式碼代理打造的原生 macOS 終端機。Homebrew、DMG 下載、CLI 設定,以及透過 Sparkle 自動更新。",
"intro": "cmux 是一個基於 Ghostty 的輕量原生 macOS 終端機,用於管理多個 AI 程式碼代理。它具備垂直分頁、通知面板和基於 socket 的控制 API。",
"install": "安裝",
"dmgRecommended": "DMG推薦",
"dmgDesc": "開啟 .dmg 並將 cmux 拖曳到「應用程式」資料夾。cmux 透過 Sparkle 自動更新,所以你只需要下載一次。",
"homebrew": "Homebrew",
"updateLater": "之後更新:",
"firstLaunchCallout": "首次啟動時macOS 可能會要求你確認開啟來自已識別開發者的應用程式。點擊<strong>打開</strong>以繼續。",
"verifyTitle": "驗證安裝",
"verifyDesc": "開啟 cmux你應該會看到",
"verifyItem1": "一個帶有左側垂直分頁側邊欄的終端機視窗",
"verifyItem2": "一個已開啟的初始工作區",
"verifyItem3": "已準備好接受輸入的 Ghostty 驅動終端機",
"cliSetup": "CLI 設定",
"cliDesc": "cmux 包含一個用於自動化的命令列工具。在 cmux 終端機內會自動運作。若要在 cmux 外部使用 CLI請建立符號連結",
"cliThen": "然後你可以執行以下指令:",
"autoUpdates": "自動更新",
"autoUpdatesDesc": "cmux 透過 Sparkle 自動檢查更新。當有可用更新時,你會在標題列看到一個更新提示。你也可以透過選單列的 cmux > 檢查更新手動檢查。",
"sessionRestore": "工作階段還原(目前行為)",
"sessionRestoreDesc": "重新啟動後cmux 僅還原佈局和中繼資料:",
"sessionItem1": "視窗、工作區和窗格佈局",
"sessionItem2": "工作目錄",
"sessionItem3": "終端機捲動回看(盡力而為)",
"sessionItem4": "瀏覽器 URL 和瀏覽歷史",
"sessionCallout": "cmux 尚不支援還原即時程序狀態。活躍的終端機應用程式工作階段(如 Claude Code、tmux 和 vim在應用程式重啟後不會恢復。",
"requirements": "系統需求",
"reqItem1": "macOS 14.0 或更新版本",
"reqItem2": "Apple Silicon 或 Intel Mac",
"metaTitle": "快速開始"
},
"concepts": {
"title": "概念",
"metaDescription": "cmux 如何組織終端機:視窗、工作區、窗格和 surface。側邊欄、分割和 socket API 背後的層級結構。",
"intro": "cmux 以四層層級結構組織你的終端機。了解這些層級有助於使用 socket API、CLI 和鍵盤快捷鍵。",
"hierarchy": "層級結構",
"windowTitle": "視窗",
"windowDesc": "一個 macOS 視窗。使用 {shortcut} 開啟多個視窗。每個視窗都有自己的側邊欄和獨立的工作區。",
"workspaceTitle": "工作區",
"workspaceDesc": "側邊欄中的項目。每個工作區包含一個或多個分割窗格。工作區就是你在左側側邊欄中看到的列表。",
"workspaceNote": "在 UI 和鍵盤快捷鍵中工作區通常被稱為「分頁」因為它們在側邊欄中的行為類似分頁。Socket API 和環境變數使用「workspace」這個術語。",
"contextHeader": "情境",
"termUsedHeader": "使用的術語",
"sidebarUI": "側邊欄 UI",
"tab": "分頁",
"keyboardShortcuts": "鍵盤快捷鍵",
"workspaceOrTab": "工作區或分頁",
"socketAPI": "Socket API",
"environmentVariable": "環境變數",
"workspaceShortcuts": "快捷鍵:{new}(新增)、{jump}(跳轉)、{close}(關閉)、{prevNext}(上一個/下一個)",
"paneTitle": "窗格",
"paneDesc": "工作區內的分割區域。使用 {right}(右)或 {down}(下)來分割建立。使用 {nav} + 方向鍵在窗格之間導覽。",
"paneNote": "每個窗格可以包含多個 surface窗格內的分頁。",
"surfaceTitle": "Surface",
"surfaceDesc": "窗格內的分頁。每個窗格都有自己的分頁列,可以包含多個 surface。使用 {new} 建立,使用 {prev} / {next} 或 {jump} 導覽。",
"surfaceNote": "Surface 是你互動的個別終端機或瀏覽器工作階段。每個 surface 都有自己的 CMUX_SURFACE_ID 環境變數。",
"panelTitle": "面板",
"panelDesc": "Surface 內的內容。目前有兩種類型:",
"panelTerminal": "終端機Ghostty 終端機工作階段",
"panelBrowser": "瀏覽器:內嵌的網頁檢視",
"panelNote": "面板主要是內部概念。在 socket API 和 CLI 中,你是與 surface 互動,而非直接與面板互動。",
"visualExample": "視覺範例",
"visualExampleDesc": "在此範例中:",
"visualItem1": "視窗包含一個側邊欄有三個工作區dev、server、logs",
"visualItem2": "選擇了「dev」工作區顯示兩個並排的窗格",
"visualItem3": "窗格 1 有兩個 surface分頁列中的 [S1] 和 [S2]S1 為活躍狀態",
"visualItem4": "窗格 2 有一個 surface",
"visualItem5": "每個 surface 包含一個面板(此例中為終端機)",
"summary": "摘要",
"levelHeader": "層級",
"whatItIsHeader": "說明",
"createdByHeader": "建立方式",
"identifiedByHeader": "識別方式",
"macosWindow": "macOS 視窗",
"sidebarEntry": "側邊欄項目",
"splitRegion": "分割區域",
"tabWithinPane": "窗格內的分頁",
"terminalOrBrowser": "終端機或瀏覽器",
"automatic": "自動",
"paneIdSocket": "窗格 IDsocket API",
"panelIdInternal": "面板 ID內部",
"metaTitle": "概念"
},
"configuration": {
"title": "設定",
"metaDescription": "透過 Ghostty 設定檔配置 cmux。字型、主題、顏色、分割窗格樣式、捲動回看和自動化模式的應用程式設定。",
"intro": "cmux 從 Ghostty 設定檔讀取設定,如果你是從 Ghostty 轉過來的,會覺得很熟悉。",
"configLocations": "設定檔位置",
"configLocationsDesc": "cmux 會依序在以下位置尋找設定:",
"createConfig": "如果設定檔不存在,請建立它:",
"appearance": "外觀",
"font": "字型",
"colors": "顏色",
"splitPanes": "分割窗格",
"behavior": "行為",
"scrollback": "捲動回看",
"workingDirectory": "工作目錄",
"appSettings": "應用程式設定",
"appSettingsDesc": "應用程式內設定可透過 cmux > 設定({shortcut})存取:",
"themeMode": "主題模式",
"themeSystem": "系統:跟隨 macOS 外觀",
"themeLight": "淺色:始終使用淺色模式",
"themeDark": "深色:始終使用深色模式",
"automationMode": "自動化模式",
"automationModeDesc": "控制 socket 存取層級:",
"automationOff": "關閉:停用 socket 控制(最安全)",
"automationCmux": "僅限 cmux 程序:只允許在 cmux 終端機內啟動的程序連線",
"automationAll": "allowAll允許任何本機程序連線CMUX_SOCKET_MODE=allowAll僅限環境變數覆寫",
"automationCallout": "在共用機器上,建議使用「關閉」或「僅限 cmux 程序」模式。",
"browserLinkBehavior": "瀏覽器連結行為",
"browserLinkDesc": "在「設定 > 瀏覽器」中cmux 提供兩個不同用途的主機列表:",
"browserHostsEmbed": "在內建瀏覽器中開啟的主機:適用於從終端機輸出點擊的連結。此列表中的主機會在 cmux 中開啟其他主機會在你的預設瀏覽器中開啟。支援每行一個主機或萬用字元例如example.com、*.internal.example。",
"browserHostsHttp": "內建瀏覽器中允許的 HTTP 主機:僅適用於 HTTP非 HTTPSURL。此列表中的主機可以在 cmux 中開啟而不會出現警告提示。預設包含 localhost、127.0.0.1、::1、0.0.0.0 和 *.localtest.me。",
"exampleConfig": "範例設定",
"metaTitle": "設定"
},
"keyboardShortcuts": {
"title": "鍵盤快捷鍵",
"description": "cmux 中所有可用的鍵盤快捷鍵,依類別分組。",
"metaDescription": "cmux 所有鍵盤快捷鍵涵蓋工作區、surface、分割窗格、瀏覽器、通知、搜尋和 macOS 視窗管理。",
"searchPlaceholder": "搜尋快捷鍵...",
"searchLabel": "搜尋鍵盤快捷鍵",
"noResults": "找不到快捷鍵",
"noResultsHint": "請嘗試其他搜尋詞",
"cat": {
"workspaces": "工作區",
"workspacesBlurb": "工作區位於側邊欄中。每個工作區擁有自己的窗格和 surface。",
"surfaces": "Surface",
"surfacesBlurb": "Surface 是窗格內的分頁。",
"splitPanes": "分割窗格",
"browser": "瀏覽器",
"notifications": "通知",
"find": "搜尋",
"terminal": "終端機",
"window": "視窗"
},
"sc": {
"ws-new": "新增工作區",
"ws-jump-1-8": "跳到工作區 18",
"ws-jump-last": "跳到最後一個工作區",
"ws-close": "關閉工作區",
"ws-rename": "重新命名工作區",
"sf-new": "新增 surface",
"sf-prev-1": "上一個 surface",
"sf-prev-2": "上一個 surface",
"sf-jump-1-8": "跳到 surface 18",
"sf-jump-last": "跳到最後一個 surface",
"sf-close": "關閉 surface",
"sp-right": "向右分割",
"sp-down": "向下分割",
"sp-focus": "依方向聚焦窗格",
"sp-browser-right": "向右分割瀏覽器",
"sp-browser-down": "向下分割瀏覽器",
"br-open": "開啟瀏覽器 surface",
"br-addr": "聚焦網址列",
"br-forward": "前進",
"br-reload": "重新載入頁面",
"br-devtools": "開啟開發人員工具",
"nt-panel": "顯示通知面板",
"nt-latest": "跳到最新未讀",
"nt-flash": "觸發閃爍",
"fd-find": "搜尋",
"fd-next-prev": "搜尋下一個 / 上一個",
"fd-hide": "隱藏搜尋列",
"fd-selection": "使用選取範圍搜尋",
"tm-clear": "清除捲動回看",
"tm-copy": "複製(選取範圍)",
"tm-paste": "貼上",
"tm-font": "放大 / 縮小字型",
"tm-reset": "重設字型大小",
"wn-new": "新增視窗",
"wn-settings": "設定",
"wn-reload": "重新載入設定",
"wn-quit": "結束"
},
"metaTitle": "鍵盤快捷鍵"
},
"api": {
"title": "API 參考",
"metaDescription": "cmux CLI 和 Unix socket API 參考。工作區管理、分割窗格、輸入控制、通知、側邊欄中繼資料、環境變數和偵測方法。",
"intro": "cmux 提供 CLI 工具和 Unix socket用於程式化控制。每個指令都可以透過兩種介面使用。",
"socket": "Socket",
"buildHeader": "建構",
"pathHeader": "路徑",
"release": "正式版",
"debug": "除錯版",
"taggedDebug": "標記的除錯版建構",
"socketOverride": "使用 CMUX_SOCKET_PATH 環境變數覆寫。每次呼叫傳送一個以換行符結尾的 JSON 請求:",
"socketCallout": "JSON socket 請求必須使用 method 和 params。不支援舊版 v1 JSON 格式,例如 <legacy>'{'\"command\":\"...\"'}'</legacy>。",
"accessModes": "存取模式",
"modeHeader": "模式",
"descriptionHeader": "說明",
"howToEnableHeader": "如何啟用",
"offMode": "停用 socket",
"offEnable": "設定 UI 或 CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "只有在 cmux 終端機內啟動的程序才能連線。",
"cmuxOnlyEnable": "設定 UI 中的預設模式",
"allowAllMode": "允許任何本機程序連線(不檢查血統關係)。",
"allowAllEnable": "僅限環境變數覆寫CMUX_SOCKET_MODE=allowAll",
"accessCallout": "在共用機器上,請使用「關閉」或「僅限 cmux 程序」模式。",
"cliOptions": "CLI 選項",
"flagHeader": "旗標",
"customSocketPath": "自訂 socket 路徑",
"outputJson": "以 JSON 格式輸出",
"targetWindow": "指定特定視窗",
"targetWorkspace": "指定特定工作區",
"targetSurface": "指定特定 surface",
"idFormat": "控制 JSON 輸出中的識別碼格式",
"workspaceCommands": "工作區指令",
"listWorkspacesDesc": "列出所有開啟的工作區。",
"newWorkspaceDesc": "建立新的工作區。",
"selectWorkspaceDesc": "切換到指定的工作區。",
"currentWorkspaceDesc": "取得目前活躍的工作區。",
"closeWorkspaceDesc": "關閉工作區。",
"splitCommands": "分割指令",
"newSplitDesc": "建立新的分割窗格。方向left、right、up、down。",
"listSurfacesDesc": "列出目前工作區中的所有 surface。",
"focusSurfaceDesc": "聚焦到指定的 surface。",
"inputCommands": "輸入指令",
"sendDesc": "向聚焦的終端機傳送文字輸入。",
"sendKeyDesc": "傳送按鍵。按鍵enter、tab、escape、backspace、delete、up、down、left、right。",
"sendSurfaceDesc": "向指定的 surface 傳送文字。",
"sendKeySurfaceDesc": "向指定的 surface 傳送按鍵。",
"notificationCommands": "通知指令",
"notifyDesc": "傳送通知。",
"listNotificationsDesc": "列出所有通知。",
"clearNotificationsDesc": "清除所有通知。",
"sidebarMetadata": "側邊欄中繼資料指令",
"sidebarMetadataDesc": "為任何工作區設定側邊欄中的狀態標籤、進度條和日誌項目。適用於建構腳本、CI 整合,以及需要一目了然顯示狀態的 AI 程式碼代理。",
"setStatusDesc": "設定側邊欄狀態標籤。使用唯一的 key讓不同的工具可以管理各自的項目。",
"clearStatusDesc": "依 key 移除側邊欄狀態項目。",
"listStatusDesc": "列出工作區的所有側邊欄狀態項目。",
"setProgressDesc": "設定側邊欄中的進度條0.0 到 1.0)。",
"clearProgressDesc": "清除側邊欄進度條。",
"logDesc": "在側邊欄附加日誌項目。級別info、progress、success、warning、error。",
"clearLogDesc": "清除所有側邊欄日誌項目。",
"listLogDesc": "列出側邊欄日誌項目。",
"sidebarStateDesc": "傾印所有側邊欄中繼資料cwd、git 分支、連接埠、狀態、進度、日誌)。",
"utilityCommands": "工具指令",
"pingDesc": "檢查 cmux 是否正在執行且有回應。",
"capabilitiesDesc": "列出可用的 socket 方法和目前的存取模式。",
"identifyDesc": "顯示聚焦中的視窗/工作區/窗格/surface 情境。",
"envVariables": "環境變數",
"variableHeader": "變數",
"socketPathDesc": "覆寫 CLI 和整合所使用的 socket 路徑",
"socketEnableDesc": "強制啟用/停用 socket1/0、true/false、on/off",
"socketModeDesc": "覆寫存取模式cmuxOnly、allowAll、off。也接受 cmux-only/cmux_only 和 allow-all/allow_all",
"workspaceIdDesc": "自動設定:目前工作區 ID",
"surfaceIdDesc": "自動設定:目前 surface ID",
"termProgramDesc": "設定為 ghostty",
"termDesc": "設定為 xterm-ghostty",
"envCallout": "舊版的 CMUX_SOCKET_MODE 值 full 和 notifications 仍然接受以保持相容性。",
"detectingCmux": "偵測 cmux",
"examples": "範例",
"pythonClient": "Python 用戶端",
"shellScript": "Shell 腳本",
"buildScriptNotification": "帶有通知的建構腳本",
"metaTitle": "API 參考"
},
"notifications": {
"title": "通知",
"metaDescription": "從 cmux 中的 AI 代理和腳本傳送桌面通知。CLI、OSC 99/777 跳脫序列,以及 Claude Code hooks 整合。",
"intro": "cmux 支援桌面通知,讓 AI 代理和腳本在需要注意時提醒你。",
"lifecycle": "生命週期",
"received": "已接收:通知出現在面板中,桌面提醒觸發(如果未被抑制)",
"unread": "未讀:在工作區分頁上顯示徽章",
"read": "已讀:當你查看該工作區時清除",
"cleared": "已清除:從面板中移除",
"suppression": "抑制",
"suppressionDesc": "在以下情況下,桌面提醒會被抑制:",
"suppressItem1": "cmux 視窗處於聚焦狀態",
"suppressItem2": "傳送通知的特定工作區處於活躍狀態",
"suppressItem3": "通知面板已開啟",
"notificationPanel": "通知面板",
"notificationPanelDesc": "按 <openShortcut>⌘⇧I</openShortcut> 開啟通知面板。點擊通知以跳轉到該工作區。按 <jumpShortcut>⌘⇧U</jumpShortcut> 直接跳轉到有最新未讀通知的工作區。",
"customCommand": "自訂指令",
"customCommandDesc": "每次排程通知時執行一個 shell 指令。在「設定 > 應用程式 > 通知指令」中設定。指令透過 /bin/sh -c 執行,並提供以下環境變數:",
"customCommandNote": "此指令獨立於系統聲音選擇器執行。將選擇器設為「無」以僅使用自訂指令,或兩者都保留以同時播放系統聲音和自訂動作。",
"sending": "傳送通知",
"cli": "CLI",
"osc777Title": "OSC 777簡單",
"osc777Desc": "RXVT 協定使用固定格式,包含標題和內文:",
"osc99Title": "OSC 99豐富",
"osc99Desc": "Kitty 協定支援副標題和通知 ID",
"variableHeader": "變數",
"descriptionHeader": "說明",
"envTitle": "通知標題(工作區名稱或應用程式名稱)",
"envSubtitle": "通知副標題",
"envBody": "通知內文",
"cmpTitleBody": "標題 + 內文",
"cmpSubtitle": "副標題",
"cmpNotificationId": "通知 ID",
"cmpComplexity": "複雜度",
"cmpYes": "是",
"cmpNo": "否",
"cmpHigher": "較高",
"cmpLower": "較低",
"featureHeader": "功能",
"comparisonCallout": "簡單通知使用 OSC 777。需要副標題或通知 ID 時使用 OSC 99。使用 CLIcmux notify是最簡單的整合方式。",
"claudeCodeHooks": "Claude Code hooks",
"claudeCodeHooksDesc": "cmux 透過 <link>Claude Code</link> 的 hooks 整合,在任務完成時通知你。",
"createHookScript": "1. 建立 hook 腳本",
"configureClaude": "2. 設定 Claude Code",
"restartNote": "重新啟動 Claude Code 以套用 hooks。",
"integrationExamples": "整合範例",
"notifyAfterLong": "長時間指令後通知",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux 透傳",
"tmuxDesc": "如果在 cmux 內使用 tmux請啟用透傳",
"metaTitle": "通知"
},
"browserAutomation": {
"title": "瀏覽器自動化",
"metaDescription": "cmux 瀏覽器指令參考涵蓋導覽、DOM 互動、等待、檢查、JavaScript 執行、分頁、對話框、框架、下載和瀏覽器狀態。",
"intro": "cmux browser 指令群組提供針對 cmux 瀏覽器 surface 的瀏覽器自動化。使用它來導覽、與 DOM 元素互動、檢查頁面狀態、執行 JavaScript 和管理瀏覽器工作階段資料。",
"commandIndex": "指令索引",
"categoryHeader": "類別",
"subcommandsHeader": "子指令",
"navAndTargeting": "導覽和目標定位",
"waiting": "等待",
"domInteraction": "DOM 互動",
"inspection": "檢查",
"jsAndInjection": "JavaScript 和注入",
"framesDialogsDownloads": "框架、對話框、下載",
"stateAndSession": "狀態和工作階段資料",
"tabsAndLogs": "分頁和日誌",
"targetingSurface": "指定瀏覽器 surface",
"targetingDesc": "大多數子指令需要指定目標 surface。你可以用位置參數或 --surface 來傳遞。",
"navigation": "導覽",
"waitingSection": "等待",
"waitingDesc": "使用 wait 來阻塞直到選擇器、文字、URL 片段、載入狀態或 JavaScript 條件滿足。",
"domSection": "DOM 互動",
"domDesc": "變更操作支援 --snapshot-after用於腳本中的快速驗證。",
"inspectionSection": "檢查",
"inspectionDesc": "腳本使用結構化 getter人工審查使用快照/截圖。",
"jsSection": "JavaScript 執行和注入",
"stateSection": "狀態",
"stateDesc": "工作階段資料指令涵蓋 cookie、本機/工作階段儲存空間,以及完整的瀏覽器狀態快照。",
"tabsSection": "分頁",
"tabsDesc": "瀏覽器分頁操作對應到活躍瀏覽器分頁群組中的瀏覽器 surface。",
"consoleSection": "主控台和錯誤",
"dialogsSection": "對話框",
"framesSection": "框架",
"downloadsSection": "下載",
"commonPatterns": "常見模式",
"patternNavigate": "導覽、等待、檢查",
"patternForm": "填寫表單並驗證成功文字",
"patternDebug": "失敗時擷取除錯資訊",
"patternSession": "保存和還原瀏覽器工作階段",
"metaTitle": "瀏覽器自動化"
},
"changelog": {
"title": "更新日誌",
"metaDescription": "cmux 版本說明和版本歷史。原生 macOS 終端機的新功能、錯誤修復和變更。",
"metaTitle": "更新日誌"
},
"navItems": {
"gettingStarted": "入門指南",
"concepts": "概念",
"configuration": "設定",
"keyboardShortcuts": "鍵盤快捷鍵",
"apiReference": "API 參考",
"browserAutomation": "瀏覽器自動化",
"notifications": "通知",
"changelog": "更新日誌"
}
},
"legal": {
"privacyPolicy": "隱私權政策",
"termsOfService": "服務條款",
"eula": "EULA"
},
"wallOfLove": {
"title": "使用者好評",
"description": "大家對 cmux 的評價。"
},
"testimonials": {
"mitchellh": "又一個基於 libghostty 的專案,這次是一個帶垂直分頁、更好的組織/通知、內建可編寫腳本瀏覽器的 macOS 終端機,專門針對大量使用終端機 agent 工作流程的使用者。",
"schrockn": "這正是我一直在找的產品。用了兩小時就愛上了。",
"egrefen": "整個週末都在用,太棒了。",
"max4c": "過去兩週最喜歡的工具",
"asaza": "cmux 看起來太棒了,也許終於到了告別 VSCode 的時候",
"johnthedebs": "看起來真的很厲害。喜歡這些想法:可程式化、分層 UI、帶 API 的瀏覽器。期待試用。也想說非常感謝 Mitchell Hashimoto 創建了 libghostty作為終端機使用者感覺現在是個令人興奮的時代。",
"joeriddles": "終端機裡的垂直分頁!之前從沒想過。我用 Firefox 垂直分頁用得很開心。",
"dchu17": "試了一下,很直覺。做得好!",
"afruth": "很喜歡,過去一天在三個並行專案上用了,每個都有多個 worktree。搭配 lazygit 和 yazi/nvim比以前高效多了不用在多個 Ghostty/iTerm 執行個體之間切換。比 tmux 也更自然。",
"northprint": "試了 cmux確實不錯",
"indykish": "cmux 蠻好用的。",
"kataring": "換到 cmux.dev 了",
"scottw": "非常有用的發現。強烈推薦。",
"johnblythe": "週末用了,很喜歡。一直在等這樣的工具。",
"bchris91": "這正是我想要的。做得太好了,謝謝!",
"connorelsea": "用了一週,非常棒。每個進行中的任務一個垂直分頁。裡面一邊是 Claude另一邊是瀏覽器看 PR 和資料,在任務之間切換保持有序。搭配 skill 讓 Claude 遞迴監控 CI 等等。感覺開悟了。",
"tonkotsuboy": "年初從 Warp 換到 Ghostty現在又換到了 cmux。垂直分頁很方便Claude Code 任務完成時收到通知很實用。基於 Ghostty 所以依然飛快。之前在 Ghostty 裡設定的分支顯示和補全也都能用。"
},
"languageSwitcher": {
"label": "語言"
}
}

8
web/middleware.ts Normal file
View file

@ -0,0 +1,8 @@
import createMiddleware from "next-intl/middleware";
import { routing } from "./i18n/routing";
export default createMiddleware(routing);
export const config = {
matcher: ["/((?!api|_next|_vercel|.*\\..*).*)"],
};

View file

@ -1,5 +1,8 @@
import "./app/env";
import type { NextConfig } from "next";
import createNextIntlPlugin from "next-intl/plugin";
const withNextIntl = createNextIntlPlugin("./i18n/request.ts");
const nextConfig: NextConfig = {
skipTrailingSlashRedirect: true,
@ -26,4 +29,4 @@ const nextConfig: NextConfig = {
},
};
export default nextConfig;
export default withNextIntl(nextConfig);

695
web/package-lock.json generated
View file

@ -12,6 +12,7 @@
"@t3-oss/env-nextjs": "^0.13.10",
"@vercel/firewall": "^1.1.2",
"next": "16.1.6",
"next-intl": "^4.8.3",
"next-themes": "^0.4.6",
"posthog-js": "^1.350.0",
"react": "19.2.3",
@ -463,6 +464,58 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@formatjs/ecma402-abstract": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-3.1.1.tgz",
"integrity": "sha512-jhZbTwda+2tcNrs4kKvxrPLPjx8QsBCLCUgrrJ/S+G9YrGHWLhAyFMMBHJBnBoOwuLHd7L14FgYudviKaxkO2Q==",
"license": "MIT",
"dependencies": {
"@formatjs/fast-memoize": "3.1.0",
"@formatjs/intl-localematcher": "0.8.1",
"decimal.js": "^10.6.0",
"tslib": "^2.8.1"
}
},
"node_modules/@formatjs/fast-memoize": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.0.tgz",
"integrity": "sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.8.1"
}
},
"node_modules/@formatjs/icu-messageformat-parser": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-3.5.1.tgz",
"integrity": "sha512-sSDmSvmmoVQ92XqWb499KrIhv/vLisJU8ITFrx7T7NZHUmMY7EL9xgRowAosaljhqnj/5iufG24QrdzB6X3ItA==",
"license": "MIT",
"dependencies": {
"@formatjs/ecma402-abstract": "3.1.1",
"@formatjs/icu-skeleton-parser": "2.1.1",
"tslib": "^2.8.1"
}
},
"node_modules/@formatjs/icu-skeleton-parser": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-2.1.1.tgz",
"integrity": "sha512-PSFABlcNefjI6yyk8f7nyX1DC7NHmq6WaCHZLySEXBrXuLOB2f935YsnzuPjlz+ibhb9yWTdPeVX1OVcj24w2Q==",
"license": "MIT",
"dependencies": {
"@formatjs/ecma402-abstract": "3.1.1",
"tslib": "^2.8.1"
}
},
"node_modules/@formatjs/intl-localematcher": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.1.tgz",
"integrity": "sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==",
"license": "MIT",
"dependencies": {
"@formatjs/fast-memoize": "3.1.0",
"tslib": "^2.8.1"
}
},
"node_modules/@humanfs/core": {
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
@ -1482,6 +1535,313 @@
"node": ">=14"
}
},
"node_modules/@parcel/watcher": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz",
"integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"detect-libc": "^2.0.3",
"is-glob": "^4.0.3",
"node-addon-api": "^7.0.0",
"picomatch": "^4.0.3"
},
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
"@parcel/watcher-android-arm64": "2.5.6",
"@parcel/watcher-darwin-arm64": "2.5.6",
"@parcel/watcher-darwin-x64": "2.5.6",
"@parcel/watcher-freebsd-x64": "2.5.6",
"@parcel/watcher-linux-arm-glibc": "2.5.6",
"@parcel/watcher-linux-arm-musl": "2.5.6",
"@parcel/watcher-linux-arm64-glibc": "2.5.6",
"@parcel/watcher-linux-arm64-musl": "2.5.6",
"@parcel/watcher-linux-x64-glibc": "2.5.6",
"@parcel/watcher-linux-x64-musl": "2.5.6",
"@parcel/watcher-win32-arm64": "2.5.6",
"@parcel/watcher-win32-ia32": "2.5.6",
"@parcel/watcher-win32-x64": "2.5.6"
}
},
"node_modules/@parcel/watcher-android-arm64": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz",
"integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-darwin-arm64": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz",
"integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-darwin-x64": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz",
"integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-freebsd-x64": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz",
"integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm-glibc": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz",
"integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==",
"cpu": [
"arm"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm-musl": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz",
"integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==",
"cpu": [
"arm"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm64-glibc": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz",
"integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm64-musl": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz",
"integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-x64-glibc": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz",
"integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-x64-musl": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz",
"integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-win32-arm64": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz",
"integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-win32-ia32": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz",
"integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==",
"cpu": [
"ia32"
],
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-win32-x64": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz",
"integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher/node_modules/picomatch": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/@posthog/core": {
"version": "1.23.1",
"resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.23.1.tgz",
@ -1568,6 +1928,12 @@
"dev": true,
"license": "MIT"
},
"node_modules/@schummar/icu-type-parser": {
"version": "1.21.5",
"resolved": "https://registry.npmjs.org/@schummar/icu-type-parser/-/icu-type-parser-1.21.5.tgz",
"integrity": "sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==",
"license": "MIT"
},
"node_modules/@shikijs/core": {
"version": "3.22.0",
"resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.22.0.tgz",
@ -1641,6 +2007,172 @@
"integrity": "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==",
"license": "MIT"
},
"node_modules/@swc/core-darwin-arm64": {
"version": "1.15.18",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.18.tgz",
"integrity": "sha512-+mIv7uBuSaywN3C9LNuWaX1jJJ3SKfiJuE6Lr3bd+/1Iv8oMU7oLBjYMluX1UrEPzwN2qCdY6Io0yVicABoCwQ==",
"cpu": [
"arm64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-darwin-x64": {
"version": "1.15.18",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.18.tgz",
"integrity": "sha512-wZle0eaQhnzxWX5V/2kEOI6Z9vl/lTFEC6V4EWcn+5pDjhemCpQv9e/TDJ0GIoiClX8EDWRvuZwh+Z3dhL1NAg==",
"cpu": [
"x64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-arm-gnueabihf": {
"version": "1.15.18",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.18.tgz",
"integrity": "sha512-ao61HGXVqrJFHAcPtF4/DegmwEkVCo4HApnotLU8ognfmU8x589z7+tcf3hU+qBiU1WOXV5fQX6W9Nzs6hjxDw==",
"cpu": [
"arm"
],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-arm64-gnu": {
"version": "1.15.18",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.18.tgz",
"integrity": "sha512-3xnctOBLIq3kj8PxOCgPrGjBLP/kNOddr6f5gukYt/1IZxsITQaU9TDyjeX6jG+FiCIHjCuWuffsyQDL5Ew1bg==",
"cpu": [
"arm64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-arm64-musl": {
"version": "1.15.18",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.18.tgz",
"integrity": "sha512-0a+Lix+FSSHBSBOA0XznCcHo5/1nA6oLLjcnocvzXeqtdjnPb+SvchItHI+lfeiuj1sClYPDvPMLSLyXFaiIKw==",
"cpu": [
"arm64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-x64-gnu": {
"version": "1.15.18",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.18.tgz",
"integrity": "sha512-wG9J8vReUlpaHz4KOD/5UE1AUgirimU4UFT9oZmupUDEofxJKYb1mTA/DrMj0s78bkBiNI+7Fo2EgPuvOJfuAA==",
"cpu": [
"x64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-x64-musl": {
"version": "1.15.18",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.18.tgz",
"integrity": "sha512-4nwbVvCphKzicwNWRmvD5iBaZj8JYsRGa4xOxJmOyHlMDpsvvJ2OR2cODlvWyGFH6BYL1MfIAK3qph3hp0Az6g==",
"cpu": [
"x64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-win32-arm64-msvc": {
"version": "1.15.18",
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.18.tgz",
"integrity": "sha512-zk0RYO+LjiBCat2RTMHzAWaMky0cra9loH4oRrLKLLNuL+jarxKLFDA8xTZWEkCPLjUTwlRN7d28eDLLMgtUcQ==",
"cpu": [
"arm64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-win32-ia32-msvc": {
"version": "1.15.18",
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.18.tgz",
"integrity": "sha512-yVuTrZ0RccD5+PEkpcLOBAuPbYBXS6rslENvIXfvJGXSdX5QGi1ehC4BjAMl5FkKLiam4kJECUI0l7Hq7T1vwg==",
"cpu": [
"ia32"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-win32-x64-msvc": {
"version": "1.15.18",
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.18.tgz",
"integrity": "sha512-7NRmE4hmUQNCbYU3Hn9Tz57mK9Qq4c97ZS+YlamlK6qG9Fb5g/BB3gPDe0iLlJkns/sYv2VWSkm8c3NmbEGjbg==",
"cpu": [
"x64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/counter": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
"integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
"license": "Apache-2.0"
},
"node_modules/@swc/helpers": {
"version": "0.5.15",
"resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
@ -1650,6 +2182,15 @@
"tslib": "^2.8.0"
}
},
"node_modules/@swc/types": {
"version": "0.1.25",
"resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz",
"integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==",
"license": "Apache-2.0",
"dependencies": {
"@swc/counter": "^0.1.3"
}
},
"node_modules/@t3-oss/env-core": {
"version": "0.13.10",
"resolved": "https://registry.npmjs.org/@t3-oss/env-core/-/env-core-0.13.10.tgz",
@ -3294,6 +3835,12 @@
}
}
},
"node_modules/decimal.js": {
"version": "10.6.0",
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
"integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
"license": "MIT"
},
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@ -3350,7 +3897,6 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
"devOptional": true,
"license": "Apache-2.0",
"engines": {
"node": ">=8"
@ -4568,6 +5114,21 @@
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/icu-minify": {
"version": "4.8.3",
"resolved": "https://registry.npmjs.org/icu-minify/-/icu-minify-4.8.3.tgz",
"integrity": "sha512-65Av7FLosNk7bPbmQx5z5XG2Y3T2GFppcjiXh4z1idHeVgQxlDpAmkGoYI0eFzAvrOnjpWTL5FmPDhsdfRMPEA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/amannn"
}
],
"license": "MIT",
"dependencies": {
"@formatjs/icu-messageformat-parser": "^3.4.0"
}
},
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@ -4620,6 +5181,18 @@
"node": ">= 0.4"
}
},
"node_modules/intl-messageformat": {
"version": "11.1.2",
"resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-11.1.2.tgz",
"integrity": "sha512-ucSrQmZGAxfiBHfBRXW/k7UC8MaGFlEj4Ry1tKiDcmgwQm1y3EDl40u+4VNHYomxJQMJi9NEI3riDRlth96jKg==",
"license": "BSD-3-Clause",
"dependencies": {
"@formatjs/ecma402-abstract": "3.1.1",
"@formatjs/fast-memoize": "3.1.0",
"@formatjs/icu-messageformat-parser": "3.5.1",
"tslib": "^2.8.1"
}
},
"node_modules/is-array-buffer": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
@ -4782,7 +5355,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@ -4828,7 +5400,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
@ -5741,6 +6312,15 @@
"dev": true,
"license": "MIT"
},
"node_modules/negotiator": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
"integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/next": {
"version": "16.1.6",
"resolved": "https://registry.npmjs.org/next/-/next-16.1.6.tgz",
@ -5794,6 +6374,82 @@
}
}
},
"node_modules/next-intl": {
"version": "4.8.3",
"resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.8.3.tgz",
"integrity": "sha512-PvdBDWg+Leh7BR7GJUQbCDVVaBRn37GwDBWc9sv0rVQOJDQ5JU1rVzx9EEGuOGYo0DHAl70++9LQ7HxTawdL7w==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/amannn"
}
],
"license": "MIT",
"dependencies": {
"@formatjs/intl-localematcher": "^0.8.1",
"@parcel/watcher": "^2.4.1",
"@swc/core": "^1.15.2",
"icu-minify": "^4.8.3",
"negotiator": "^1.0.0",
"next-intl-swc-plugin-extractor": "^4.8.3",
"po-parser": "^2.1.1",
"use-intl": "^4.8.3"
},
"peerDependencies": {
"next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0",
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0",
"typescript": "^5.0.0"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/next-intl-swc-plugin-extractor": {
"version": "4.8.3",
"resolved": "https://registry.npmjs.org/next-intl-swc-plugin-extractor/-/next-intl-swc-plugin-extractor-4.8.3.tgz",
"integrity": "sha512-YcaT+R9z69XkGhpDarVFWUprrCMbxgIQYPUaXoE6LGVnLjGdo8hu3gL6bramDVjNKViYY8a/pXPy7Bna0mXORg==",
"license": "MIT"
},
"node_modules/next-intl/node_modules/@swc/core": {
"version": "1.15.18",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.18.tgz",
"integrity": "sha512-z87aF9GphWp//fnkRsqvtY+inMVPgYW3zSlXH1kJFvRT5H/wiAn+G32qW5l3oEk63KSF1x3Ov0BfHCObAmT8RA==",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
"@swc/counter": "^0.1.3",
"@swc/types": "^0.1.25"
},
"engines": {
"node": ">=10"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
"@swc/core-darwin-arm64": "1.15.18",
"@swc/core-darwin-x64": "1.15.18",
"@swc/core-linux-arm-gnueabihf": "1.15.18",
"@swc/core-linux-arm64-gnu": "1.15.18",
"@swc/core-linux-arm64-musl": "1.15.18",
"@swc/core-linux-x64-gnu": "1.15.18",
"@swc/core-linux-x64-musl": "1.15.18",
"@swc/core-win32-arm64-msvc": "1.15.18",
"@swc/core-win32-ia32-msvc": "1.15.18",
"@swc/core-win32-x64-msvc": "1.15.18"
},
"peerDependencies": {
"@swc/helpers": ">=0.5.17"
},
"peerDependenciesMeta": {
"@swc/helpers": {
"optional": true
}
}
},
"node_modules/next-themes": {
"version": "0.4.6",
"resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz",
@ -5832,6 +6488,12 @@
"node": "^10 || ^12 || >=14"
}
},
"node_modules/node-addon-api": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
"integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
"license": "MIT"
},
"node_modules/node-exports-info": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz",
@ -6124,6 +6786,12 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/po-parser": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/po-parser/-/po-parser-2.1.1.tgz",
"integrity": "sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==",
"license": "MIT"
},
"node_modules/possible-typed-array-names": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
@ -7508,6 +8176,27 @@
"punycode": "^2.1.0"
}
},
"node_modules/use-intl": {
"version": "4.8.3",
"resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.8.3.tgz",
"integrity": "sha512-nLxlC/RH+le6g3amA508Itnn/00mE+J22ui21QhOWo5V9hCEC43+WtnRAITbJW0ztVZphev5X9gvOf2/Dk9PLA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/amannn"
}
],
"license": "MIT",
"dependencies": {
"@formatjs/fast-memoize": "^3.1.0",
"@schummar/icu-type-parser": "1.21.5",
"icu-minify": "^4.8.3",
"intl-messageformat": "^11.1.0"
},
"peerDependencies": {
"react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0"
}
},
"node_modules/use-sync-external-store": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",

View file

@ -13,6 +13,7 @@
"@t3-oss/env-nextjs": "^0.13.10",
"@vercel/firewall": "^1.1.2",
"next": "16.1.6",
"next-intl": "^4.8.3",
"next-themes": "^0.4.6",
"posthog-js": "^1.350.0",
"react": "19.2.3",