Supported frameworks
globalize.now works with React-based web apps. Current first-class support:
| Framework | Status |
|---|---|
| Next.js (App Router) | ✅ Fully supported |
| Next.js (Pages Router) | ✅ Fully supported |
| React + Vite | ✅ Fully supported |
| React + Create React App | ✅ Supported |
| TanStack Router / Start | ✅ Supported |
Note on Lovable: Lovable projects now use TanStack Router by default. This is fully supported.
What's not in scope yet
| Project type | Status |
|---|---|
| Blog and long-form content | ❌ Not supported — use a CMS or translate separately |
| Chrome extensions | ❌ Not supported |
| Vue / Svelte / Angular | ❌ Not supported yet |
| Android / iOS native apps | ❌ Not supported |
| WordPress / HubSpot CMS | ❌ Out of scope |
| MCP server code | ❌ Not applicable |
| Non-UI backend files | ❌ Skipped automatically |
Blog content: globalize.now extracts UI strings from your app — buttons, labels, headings, form fields. It doesn't translate blog posts, documentation, or long-form content. If your project has both a web app and a blog, the tool handles the app and skips the blog.
If your project includes components outside the supported scope, the agent focuses on the React web app and skips unsupported parts. It won't fail — it just won't touch those files.
Corporate VPN and enterprise environments
globalize.now does not work on corporate VPN or in enterprise environments that restrict external connections. The npx skills install step and the GitHub connection both require external network access.
Workaround: Use a personal machine or a personal GitHub account.
Monorepos
globalize.now works on monorepos. The agent focuses on the React/Next.js parts and ignores non-web code. To scope the conversion:
Convert only the /apps/web directory
Partially internationalized codebases (L1 state)
If your app already has an i18n library wired up — next-intl, react-i18next, i18next, or @lingui/* — globalize.now detects that on first run and skips the setup scaffold. No language switcher gets injected. Your existing locale file structure is preserved. The agent moves straight to sync mode.
What we detect
On first run, the agent reads your repo for any of:
package.jsondependencies:next-intl,react-i18next,i18next,@lingui/core,@lingui/react,@lingui/macro, or anyi18next-*plugin.- Locale folders:
messages/orlocales/at the repo root, orsrc/i18n/with locale subfolders. - Existing locale files:
en.json,en.po,en.yml,en.yaml, or whichever default-locale file your library expects. - Framework config:
i18n.config.ts, next-intl middleware,lingui.config.js, or equivalents.
If at least two of these are present, the project is treated as L1.
What we skip in L1 mode
- No string-extraction pass across your components
- No new translation keys or restructuring of your existing key tree
- No locale files scaffolded for languages you haven't already set up
- No language-switcher component injected into your UI
- No changes to your routing, middleware, or framework config
What we do
L1 mode is sync-only. Connect your GitHub repo, the agent reads your existing locale files to learn your key structure and source language, and on every push to main we diff the source-language file against the other locales. Missing translations get translated. A PR lands with the updated locale files. You review and merge.
Mixed L1 (some keys, some hardcoded strings)
Some apps are halfway through their i18n migration — t() calls on the new components, hardcoded strings on the old ones. The agent detects what's already wrapped and only extracts what isn't. Existing keys are preserved.
Non-English source languages
globalize.now uses whatever language your app is currently written in as the source. The agent auto-detects it.
Detection edge case: If your site contains mixed-language content, the agent may occasionally mis-detect the primary source language. Correct it in your globalize.now project settings before translating.
File formats
globalize.now generates locale files in the format your i18n library expects:
| Library | Output format |
|---|---|
| next-intl | JSON under /messages/ |
| i18next | JSON under /public/locales/ |
| LinguiJS | .po or JSON via Lingui CLI |
You don't need to choose — the agent detects your library and generates the right format.