Ciao Tools
Closed Alpha — Join the waitlist
i18n that lives in
your code, not beside it.

Ship your entire stack in 93 languages. No translation files. Wrap strings in ct() and a single command extracts, translates, and deploys.

ProductPage.tsx
import { useCt, Trans } from "@ciao-tools/react";

function ProductPage() {
  const ct = useCt();

  return (
    <div>
      <h1>{ct("Velkommen til butikken")}</h1>
      <Trans>
        Gennemse vores <b>kuraterede</b> samling
      </Trans>
      <p>{ct("{amount:currency:USD}", { amount: 49.99 })}</p>
    </div>
  );
}

Welcome to our store

Browse our curated collection

$49.99

Works with your stack

TS

Sådan virker det

Tre kommandoer til global rækkevidde

01

Skriv naturligt

Din komponenttekst er sandhedskilden. Ingen nøgler at opfinde, ingen JSON at synkronisere. Bare omslut strenge i ct() eller <Trans> og fortsæt med at bygge.

function Hero() {
  const ct = useCt();
  return <h1>{ct("Velkommen tilbage")}</h1>;
}
02

Udtræk & oversæt

Kør én kommando. Hver oversættelig streng i din kodebase findes, sendes til oversættelsesmotoren og returneres med fuld kontekstbevidsthed. Det samme ord får forskellige oversættelser afhængigt af, hvor det vises.

Terminal
03

Send med det samme

Oversættelser lander på et globalt CDN. Fire lag af cachelagring holder indlæsningstiderne under 50 ms. Opdatér oversættelser uden at røre ved din implementeringspipeline.

// Generated manifest — fully typed
export const ciaoManifest = {
  languages: ["en", "es", "fr", "de"] as const,
  cdnUrls: { es: "https://cdn...", fr: "https://cdn..." },
} as const;

AI-oversættelsesmotor

Udtræk. Oversæt. Evaluér.

Hver streng flyder gennem en tretrins pipeline. Den bedste model for hvert sprogpar vælges automatisk. Du konfigurerer aldrig en udbyder.

01

Udtræk kontekst

Læser dit komponenttræ og forstår, hvad hver streng betyder: en knapetiket, en overskrift, en redningsalarm.

Gemini 3 Flash
Claude Haiku 4.5
02

Oversæt

Den bedste model for hvert sprogpar oversætter dine strenge. Kontekstbevidst, betydning for betydning, ikke ord for ord.

Claude Sonnet 5
Gemini 3 Flash
GPT-5.2
DeepSeek V3
Kimi K2.5
DeepL
03

Evaluer kvalitet

Scorer hver oversættelse og vælger resultatet af højeste kvalitet. Du vælger aldrig en model.

Gemini 3.1 Pro
Kimi K2.5

Kontekst ændrer alt

Det samme ord betyder forskellige ting forskellige steder. AI'en læser omkringliggende strenge for at forstå hensigten. Ingen manuelle konteksttags er nødvendige.

ProductCard.tsx
<div>
  <img src={product.image} />
  <h3>{product.name}</h3>
  <span>${product.price}</span>
  <button onClick={saveToWishlist}>
    ❤️ {ct("Gem")}
  </button>
</div>
ct("Save")"Guardar"(es) — to store, to keep
DuckRescue.tsx
<div>
  <span className="text-4xl">🦆</span>
  <p>{ct("En and drukner!")}</p>
  <p>{ct("Tid tilbage:")} 00:03</p>
  <button onClick={rescue}>
    🛟 {ct("Gem")}
  </button>
</div>
ct("Save")"Rescatar"(es) — to rescue, to save a life

Udvikleroplevelse

Din kode er dit oversættelseskatalog

Slut med at opfinde nøglenavne. Slut med at søge efter t('homepage.hero.cta.button') for at finde ud af, hvilken tekst den er knyttet til. Dine strenge er læseligt engelsk, lige hvor de gengives.

Komponenten <Trans> Komponenten bevarer nested JSX (links, fed, spans, ethvert element) og oversætter teksten omkring dem.

function CheckoutSummary({ user, items }) {
  const ct = useCt();

  return (
    <div>
      <h1>{ct("Velkommen tilbage, {name}!", { name: user.name })}</h1>
      <p>{ct("Du har {count} {count:plural:item:items}", { count: items.length })}</p>
      <p>{ct("Total: {amount:currency:USD}", { amount: 129.99 })}</p>
    </div>
  );
}
Output

Welcome back, Sarah!

You have 3 items

Total: $129.99

The difference

Your workflow, simplified

Traditional i18n

Write code
Create keys
Map strings
Send to translators
Wait
Receive files
Wire up
Deploy

Ciao Tools

Write code
Build
Ship

Never think about translations again.

Gradvis indførelse

Har du allerede oversættelser? Start hvor du er.

Ciao Tools kræver ikke en omskrivning. Medbring dine eksisterende oversættelser, indfør gradvist, og migrér i dit eget tempo.

Inline translations
import { CiaoProvider } from "@ciao-tools/react";

// Already have translations? Pass them directly
const translations = {
  es: { "Hej": "Hola", "Tilmeld dig": "Registrarse" },
  fr: { "Hej": "Bonjour", "Tilmeld dig": "S'inscrire" },
};

<CiaoProvider translations={translations}>
  <App />
</CiaoProvider>
Side-by-side migration
// Migrate one component at a time
function OldPage() {
  return <h1>{t("pages.old.title")}</h1>; // keep this
}

function NewPage() {
  const ct = useCt();
  return <h1>{ct("Velkommen til den nye side")}</h1>; // start here
}
1

Behold eksisterende oversættelser

Send dine nuværende oversættelseskort direkte til CiaoProvider. Ingen migrering er nødvendig.

2

Migrer komponent for komponent

Gamle sider bruger dit eksisterende bibliotek. Ny kode bruger ct() og <Trans>. Begge kører side om side.

3

Fjern det gamle system, når du er klar

Når alt bruger Ciao Tools, så drop dit gamle setup. Dine oversættelsesnøgler er nu almindeligt engelsk.

Features

The complete translation platform

From string extraction to CDN delivery and live updates.

Automatic extraction

OXC and Babel plugins scan your codebase and find every ct() call and <Trans> component. Your source code is the catalog.

Context-aware translation

AI translates with full component context. "Save" in a button vs. "Save" as rescue — it gets the difference.

Global CDN hosting

Translations are hosted on a global edge network and served from the nearest node. You never manage translation files.

Live hot updates

Fix a translation and it's live in seconds. No redeploy, no cache bust, no waiting for a release cycle.

Glossary & consistency

Define key terms once and enforce them across every language. Brand names and domain vocabulary stay consistent.

Full-stack, every framework

ct() works in React, React Native, Next.js server components, and Express. One API from mobile to server.

Prompt translation

ctPrompt() translates LLM system prompts while preserving template variables, JSON schemas, code blocks, and regex. Your AI agents speak every language.

Translation memory

Every translation is cached server-side. Re-syncs only translate new or changed strings, saving time and cost.

Multilingual SEO

Hreflang links, canonical URLs, og:locale tags, and XML sitemaps. CiaoHead handles it at runtime, or generate a sitemap from the CLI.

App store translations

Translate App Store and Play Store metadata with character limit validation. Names, descriptions, keywords, and release notes.

ICU MessageFormat

Plurals, ordinals, currency, dates, numbers, and percentages. Full locale-aware formatting via the ICU standard.

Fallback chains

es-MX falls back to es, then to en. Four caching layers ensure translations are always available, even offline.

Ydeevne

Hurtig som standard, ikke tilfældigt

< 50ms
Indlæs fra cache
93
Sprog
0
JSON-nøglefiler
~5 min
Opsætningstid
L1
Zustand + localStorage
L2
IndexedDB
L3
In-memory LRU
L4
CDN edge

Live demo

One codebase, every language

Click a language. Text, prices, dates, and plurals all update, formatted correctly for each locale.

Handcrafted Ceramic Mug

$34.99

Artisan-made with natural glazes. Perfect for your morning ritual.

In stock · February 3, 2026
3 items

Tidlig adgang

Vær først i køen

Vi åbner Ciao Tools for en lille gruppe af tidlige brugere. Bliv skrevet op, og vi kontakter dig, når din plads er klar.

Denne side er beskyttet af reCAPTCHA og Googles Privatlivspolitik og Servicevilkår gælder.