> ## Documentation Index
> Fetch the complete documentation index at: https://docs.introw.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Multi-lingual

> Run one partner program in every language your partners speak - portal content, courses, forms, and emails translate automatically and stay on brand.

export const Headless = ({prompts = []}) => {
  const PromptRow = ({prompt}) => {
    const [copied, setCopied] = useState(false);
    const copy = () => {
      try {
        navigator.clipboard?.writeText(prompt);
      } catch {}
      setCopied(true);
      setTimeout(() => setCopied(false), 1600);
    };
    return <div className="group flex items-center justify-between gap-3 px-4 py-3 transition-colors hover:bg-[#FD90FF]/[0.06]">
        <span className="text-sm leading-relaxed text-zinc-700 dark:text-zinc-200">{prompt}</span>
        <button type="button" onClick={copy} aria-label={copied ? "Copied to clipboard" : "Copy prompt"} className={`shrink-0 rounded-md p-1.5 transition-all hover:bg-[#FD90FF]/10 focus:opacity-100 focus:outline-none ${copied ? "text-[#FD90FF] opacity-100" : "text-zinc-400 opacity-0 group-hover:opacity-100 dark:text-zinc-500"}`}>
          {copied ? <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <path d="M20 6L9 17l-5-5" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg> : <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <rect x="9" y="9" width="11" height="11" rx="2" stroke="currentColor" strokeWidth="2" />
              <path d="M5 15V5a2 2 0 0 1 2-2h10" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg>}
        </button>
      </div>;
  };
  return <>
      <p>
        Introw is <strong>headless</strong> by design: run everything here in plain language from Claude, ChatGPT,
        Slack, Teams, or your own CRM through Introw's <a href="/features/developer/mcp">MCP server</a>, with every
        action written straight back to your CRM source of truth. The portal is one surface, never the only one.
      </p>

      {prompts.length > 0 ? <div className="not-prose my-6 overflow-hidden rounded-2xl border border-zinc-200/80 bg-white shadow-sm dark:border-white/10 dark:bg-white/[0.02]">
          <div className="flex items-center gap-2 border-b border-zinc-200/80 bg-gradient-to-r from-[#FD90FF]/10 via-[#FD90FF]/5 to-transparent px-4 py-2.5 dark:border-white/10">
            <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4 text-[#FD90FF]" aria-hidden="true">
              <path d="M12 2.5l2 5.5 5.5 2-5.5 2-2 5.5-2-5.5L4.5 10l5.5-2 2-5.5z" fill="currentColor" />
              <path d="M18.5 14l1 2.6 2.6 1-2.6 1-1 2.6-1-2.6-2.6-1 2.6-1 1-2.6z" fill="currentColor" opacity="0.55" />
            </svg>
            <span className="text-xs font-semibold uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
              Try it from your LLM
            </span>
          </div>

          <div className="flex flex-col divide-y divide-zinc-100 dark:divide-white/[0.06]">
            {prompts.map(prompt => <PromptRow key={prompt} prompt={prompt} />)}
          </div>

          <a href="/headless" className="flex items-center justify-between gap-2 border-t border-zinc-200/80 px-4 py-2.5 text-sm font-medium text-zinc-600 no-underline transition-colors hover:text-[#FD90FF] dark:border-white/10 dark:text-zinc-300">
            <span>See the full headless playbook</span>
            <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <path d="M5 12h14M13 6l6 6-6 6" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
          </a>
        </div> : <Card title="See the headless motion" icon="wand-magic-sparkles" href="/headless">
          The agentic playbook - lifecycle deep dives and a Claude Code skill library that run your partner program
          from Claude, ChatGPT, Slack, and your CRM.
        </Card>}
    </>;
};

> Partners engage when the program speaks their language. Multi-lingual translates your partner-facing content automatically, so every partner reads, learns, and acts in the language they think in, without you running a separate program per region.

## What it does

Multi-lingual lets you add the languages your partners speak and pick a default. Once a language is
active, partner-facing content translates into it automatically: portal experiences and stages,
courses and modules, forms, announcements, certificates, reports, tiers, and the emails partners
receive. Partners choose their language in the portal, or you set it for them, and every surface
follows.

Translations are generated for you and kept consistent with a brand glossary, so product names and
key terms are never mistranslated. You stay in control of which languages exist and how your brand
reads in each one, without copy-pasting content into a translation tool.

## The problem it solves

A single-language program quietly caps adoption everywhere outside your headquarters:

* **Partners disengage when content is not in their language** → Content translates automatically into each partner's language.
* **Translating a growing content library by hand is impossible** → Translations are generated and kept in sync as content changes.
* **Brand and product terms get mistranslated** → A glossary protects terms across every language.
* **Running a separate program per region adds headcount** → One program serves every language without duplicating it.

## From problem to solution

Add a language once and your existing content, and everything you publish after, becomes available in
it. Partners self-serve in their own language across the portal and their inbox, and your team
maintains one program instead of one per region.

```mermaid theme={"theme":{"light":"github-light","dark":"github-dark"}}
flowchart LR
  add["Add a language"] --> translate["Content translated automatically"]
  translate --> serve["Partner self-serves in their language"]
```

## Use cases

<CardGroup cols={2}>
  <Card title="Localize the portal" icon="circle-check">
    Serve partner content in every language.
  </Card>

  <Card title="Train in-language" icon="circle-check">
    Deliver courses partners actually finish.
  </Card>

  <Card title="Protect your brand" icon="circle-check">
    Keep product terms consistent everywhere.
  </Card>

  <Card title="Scale across regions" icon="circle-check">
    Run one program, not one per market.
  </Card>
</CardGroup>

## Impact

* **Partner self-serve** - Partners read and learn without waiting for a localized version.
* **Work where you already are** - Emails partners receive arrive in their language too.

## Who it's for

<CardGroup cols={2}>
  <Card title="Partner Marketing & Enablement" icon="user">
    Localizes content and keeps it on brand.
  </Card>

  <Card title="Partner - Sales & Marketing" icon="user">
    Works in their own language end to end.
  </Card>
</CardGroup>

## Works with

{/* CONNECTS:START - generated content goes here */}

<CardGroup cols={2}>
  <Card title="Experiences" icon="browser" href="/features/portal/experiences">
    Serve the portal in each language.
  </Card>

  <Card title="Course Authoring" icon="graduation-cap" href="/features/courses/authoring">
    Translate course content.
  </Card>
</CardGroup>

## Headless

<Headless
  prompts={[
"Answer this partner's question in Spanish.",
"Set Acme's portal language to German.",
]}
/>

## Going deeper

<CardGroup cols={2}>
  <Card title="How to" icon="screwdriver-wrench" href="./technical">
    Setup, configuration, and all how-to guides.
  </Card>

  <Card title="API reference" icon="code" href="/general/introduction">
    Integration surface and code.
  </Card>
</CardGroup>
