AI-powered i18n translation plugin for all bundlers
Documentation · Roadmap · Discussions · Report an issue
Automatically translate your app with AI. intl-ai hooks into your build pipeline to generate and update translations on every build, with no changes to your runtime code.
Most i18n translation workflows are manual (copy JSON, open a translation tool, paste back) or runtime-heavy (call an AI API on every page load). intl-ai runs at build time so translations are baked in before your app ships.
- Zero runtime overhead. Translations happen during the build, not in the browser or on the server.
- Any bundler. Vite, Rollup, Webpack, esbuild, Rspack, Bun, Nuxt, Next.js (including Turbopack).
- Any AI provider. Vercel AI SDK compatible: OpenAI, Anthropic, Google, any OpenAI-compatible endpoint.
- Lockfile-tracked origins.
intl-ai.lock.jsonrecords whether each translation was written by a human or generated by AI, so you always know what to trust and what to review. - Incremental. Only missing or stale keys are re-translated. Existing human-edited strings are never overwritten unless you pass
--force.
Manual translation requires copy-pasting JSON, running a translation tool, and re-integrating the result. intl-ai replaces this loop with a single intl-ai fill run (or an automatic pass on every build).
Runtime translation calls the AI API on every request. This adds latency and cost, and makes translations non-deterministic across deployments. intl-ai translates once at build time and commits the result, so production strings are stable and auditable.
Vite / Rollup / Webpack / esbuild / Rspack
npm install -D @intl-ai/unpluginNext.js
npm install -D @intl-ai/nextCLI only
npm install -D @intl-ai/cliintl-ai reads intl-ai.config.ts (or .json) at your project root.
{
"$schema": "https://www.schemastore.org/intl-ai.json",
"defaultLocale": "en",
"locales": ["en", "es", "fr"],
"localeDir": "./locales",
"model": "your-provider/your-model",
"apiKey": "${OPENAI_API_KEY}"
}// intl-ai.config.ts
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
const openai = createOpenAICompatible({
name: "openai",
baseURL: "https://api.openai.com/v1",
apiKey: process.env.OPENAI_API_KEY,
});
export default {
model: openai("your-model-name"),
defaultLocale: "en",
locales: ["en", "es", "fr"],
localeDir: "./locales",
};See Configuration for the full schema.
// vite.config.ts
import { defineConfig } from "vite";
import IntlAi from "@intl-ai/unplugin/vite";
export default defineConfig({
plugins: [IntlAi()],
});// next.config.ts
import withIntlAi from "@intl-ai/next";
export default withIntlAi({
// your existing Next.js config
reactStrictMode: true,
});npx intl-ai fill| Package | Description | Registry |
|---|---|---|
@intl-ai/api |
Runtime-agnostic core | npm |
@intl-ai/unplugin |
Universal bundler plugin | npm |
@intl-ai/next |
Next.js integration | npm |
@intl-ai/cli |
intl-ai fill / check |
npm |
