A minimalist, single-page companion app for developers working with i18n locale JSON files. Upload a source and target locale, translate values in a clean side-by-side UI, and export the updated file — all without ever touching JSON syntax.
100% client-side. Your files never leave your browser. No data is sent to any server, logged, or stored.
After translating my site I needed a simple UI for my translator to use. Just a clean, minimal focused UI with the ability to export the finished .json file.
# Install dependencies
pnpm install
# Start development server
pnpm dev
# Build for production
pnpm build
# Lint & format
pnpm lint
pnpm format
# Create a bump file for a change (part of your PR)
pnpm bumpy add
# Release (on main — bumps version, updates changelog, creates git tag)
pnpm releasei18n-lang-diff is open source under the MIT License.
Contributions are welcome. Fork and create a PR. Keep things focused — one change per PR is easiest to review.
This project uses Bumpy for version management. Every PR that changes functionality should include a bump file — it tells Bumpy what version bump is needed and what to put in the changelog.
pnpm bumpy addThis launches an interactive prompt (or you can pass it inline):
pnpm bumpy add --packages "i18n-lang-diff:patch" --message "Fixed the thing" --name "descriptive-slug"It creates a file like .bumpy/descriptive-slug.md with the bump level (patch, minor, or major) and a changelog description.
Commit that file alongside your changes — it's part of the PR. If you're unsure what level to use, reviewers will check it.
| Level | When to use |
|---|---|
patch |
Bug fixes, docs, dependency updates, refactors |
minor |
New features, UI changes, new functionality |
major |
Breaking changes (rare for this project) |
When CI is configured, every PR gets a comment from Bumpy showing what packages will be released. Merged bump files accumulate on main until a release is cut — either manually via pnpm release or automatically through CI.
No worries — maintainers can add one for you before or after merging. It won't block anything.