Quickstart
Onboard a project to Shipeasy Translations in 10 minutes — scan, codemod, translate, publish.
This walks through the full onboarding for a fresh frontend project. We'll discover translatable strings, push them to a source profile, generate French translations with AI, and publish.
If you'd rather have an AI agent do this for you, see the LLM Guide — it's the same flow, written for Claude Code / Cursor / Windsurf.
The 10-minute path
install · scan · translate · publishInstall the loader
Codemod & push keys
AI draft, review, ship
Prerequisites
- A frontend project with English copy you want to translate. Next.js, Vite, Remix, etc.
- The CLI installed and logged in:
shipeasy loginInstall the loader script
The loader is a tiny <script> that fetches your published label bundle at runtime. It has zero JS dependencies and benefits from infinite CDN caching.
shipeasy i18n install-loader --profile enThe CLI auto-detects your framework and patches the right file:
| Framework | Patches |
|---|---|
| Next.js App Router | src/app/layout.tsx (inside <head>) |
| Next.js Pages | pages/_document.tsx |
| Vite + React | index.html |
| Remix | app/root.tsx |
| Astro | src/layouts/*.astro |
| Anything else | Prints the tag, you paste it |
The command also creates a client SDK key scoped to the project, hard-coded into the script tag. The key only allows reads of published label bundles, nothing else.
Create the source profile
A profile is a locale pair. Create the one matching the language already in your code:
shipeasy i18n profiles create --name en --locale enFor non-English source, use the right BCP-47 code (fr, de, ja, …).
Scan & codemod
Discover strings in your source files. For JSX/TSX we can rewrite them automatically — codemod:
shipeasy i18n scan ./src --rewrite --profile enThe codemod replaces:
<h1>Welcome back</h1>with:
<h1>{t("welcome_back", "Welcome back")}</h1>and adds the import. For non-JSX languages (Vue, Svelte, plain HTML, server templates), the scan reports candidates and you wrap them by hand.
A i18n-codemod-review.json report is written at the project root listing strings the codemod skipped (dynamic interpolations, rich HTML, etc.).
Push keys
shipeasy i18n push --profile en --source codemodPushes every discovered key to the dashboard. Verify in Shipeasy Translations → Label keys.
Add target locales
Say you want French and German:
shipeasy i18n profiles create --name fr --locale fr
shipeasy i18n profiles create --name de --locale deGenerate AI translations
shipeasy i18n translate --profile fr --ai
shipeasy i18n translate --profile de --aiEach command creates a draft in the dashboard with proposed translations for every key missing from the target profile. The AI uses the source value, the project tone, the glossary, and any descriptions you've added on each key.
Review
Open Shipeasy Translations → Drafts → fr. You see every key, the source value, and the proposed translation, side by side. Edit any value inline. When you're satisfied, click Merge draft.
Merging promotes the values to the profile. It does not publish — that's a separate, deliberate step.
Publish
shipeasy i18n publish --profile fr
shipeasy i18n publish --profile deEach publish writes the chunked label bundle to KV and purges the relevant CDN URLs. New copy is live worldwide in seconds.
Switch locale at runtime
The loader reads the active locale from your URL or a cookie. Most frameworks already provide this; the SDK exposes a helper:
import { i18n } from "@shipeasy/sdk/client";
i18n.setLocale("fr");The loader fetches the new bundle, swaps the strings, and re-renders.
Validate before deploy
In CI, fail the build if any code reference is missing from the source profile:
shipeasy i18n validate --profile en ./srcAdd this to your pre-merge checks and you'll never ship an "untranslated string" bug.
The keys flow above is for static UI strings extracted at build time. For UGC (chat messages,
reviews, support tickets), use the runtime /translate endpoint with the streaming SDK.
What you just got
Profiles→
Each locale pair is its own publishable manifest. Roll back any time.
Keys→
Stable hashes for every string. Re-scans don't shuffle ordering.
AI translations→
Claude reads your brand voice on every call. Use our key or yours.
Drafts→
Translations land as drafts. Reviewable by anyone with edit access.
Hand it to an AI agent.
The same flow, but driven by Claude Code or Cursor through the MCP server. You answer one auth prompt, the agent does the rest.