Configure Lokalise local development with file sync and hot reload.
Use when setting up a development environment, configuring translation sync,
or establishing a fast iteration cycle with Lokalise.
Trigger with phrases like "lokalise dev setup", "lokalise local development",
"lokalise dev environment", "develop with lokalise", "lokalise sync".
Configure Lokalise local development with file sync and hot reload.
Use when setting up a development environment, configuring translation sync,
or establishing a fast iteration cycle with Lokalise.
Trigger with phrases like "lokalise dev setup", "lokalise local development",
"lokalise dev environment", "develop with lokalise", "lokalise sync".
Designed for Claude Code, also compatible with Codex and OpenClaw
Lokalise Local Dev Loop
Overview
Set up a complete local development workflow with Lokalise: project structure for i18n files, CLI push/pull commands, file watching for auto-upload, mock translations for offline development, framework integration (React i18next, Vue i18n), and a pre-commit hook to keep translations synced.
Prerequisites
Lokalise API token exported as LOKALISE_API_TOKEN
Lokalise project ID exported as LOKALISE_PROJECT_ID
Node.js 18+ with npm or pnpm
lokalise2 CLI installed
Git (for pre-commit hook)
Instructions
Set up the project directory structure for i18n files, compatible with Lokalise's bundle_structure and most i18n frameworks.
Barrel export with type safety (src/locales/index.ts):
import en from"./en.json";
// Type derived from base language — all other locales must match this shapeexporttypeTranslationKeys = typeof en;
exportconst defaultLocale = "en"asconst;
exportconst supportedLocales = ["en", "fr", "de", "es"] asconst;
export = ( supportedLocales)[];
(): <> {
mod = ();
mod.;
}
type
Locale
typeof
number
export
async
function
loadLocale
locale: Locale
Promise
TranslationKeys
const
await
import
`./${locale}.json`
return
default
Create CLI push/pull scripts for the upload-translate-download cycle.
#!/usr/bin/env bashset -euo pipefail
# Download all translations from Lokalise
lokalise2 --token "$LOKALISE_API_TOKEN" file download \
--project-id "$LOKALISE_PROJECT_ID" \
--format json \
--original-filenames=false \
--bundle-structure "%LANG_ISO%.json" \
--export-empty-as base \
--export-sort a_z \
--replace-breaks=false \
--placeholder-format icu \
--unzip-to ./src/locales
echo"Translations pulled to ./src/locales/"# Show what changed
git diff --stat src/locales/ || true
Package.json scripts:
{"scripts":{"i18n:push":"bash scripts/i18n-push.sh","i18n:pull":"bash scripts/i18n-pull.sh","i18n:sync":"npm run i18n:push && npm run i18n:pull"}}
Typical workflow:
# Edit source strings locally
vim src/locales/en.json
# Push changes to Lokalise
npm run i18n:push
# ... translators work in Lokalise UI ...# Pull completed translations
npm run i18n:pull
# Full round-trip
npm run i18n:sync
Set up watch mode to auto-upload source strings when en.json changes during development.