Internationalization (i18n) is crucial for global applications, but managing translation files can be a pain. Editing .po (Gettext) files manually is error-prone and not very user-friendly.
Even if you have a full translation platform, there’s still a common gap: quick edits during development (copy tweaks, missing keys, last-minute wording changes) shouldn’t require a whole separate workflow.
vite-plugin-lingo is a Vite plugin designed to solve this problem by providing a visual editor for your translation files, right within your development environment.
GitHub repo: https://github.com/Michael-Obele/vite-plugin-lingo
npm package: https://www.npmjs.com/package/vite-plugin-lingo
Website: https://lingo.svelte-apps.me/
Transforming the i18n Workflow
Traditionally, developers or translators have to work with raw text files or external platforms. vite-plugin-lingo integrates deeply with Vite to offer a smoother experience.
The goal is to make translations feel like a normal part of local development: run the dev server, open a route, edit text, refresh.
Features
-
Visual Editor: A GUI for your
.pofiles. No more worrying about breaking the file format. - Seamless Integration: Works perfectly with solutions like wuchale and other i18n libraries.
- Developer Experience: Managing translations becomes just another part of your standard Vite workflow.
Why this is different (and why it’s more than “just a UI”)
From the start, vite-plugin-lingo is designed to be:
- .po-native: it works directly with standard Gettext catalogs instead of introducing a new file format.
- Framework-agnostic: if it runs on Vite, it can work (Svelte, React, Vue, Solid, etc.).
- wuchale-friendly: it complements compile-time i18n workflows by making the “human review + polish” step fast.
- Self-hostable: teams can keep translations private and in their existing repo.
The goal isn’t to replace your i18n system — it’s to remove the friction around editing, reviewing, and shipping translations.
A quick note on safety
Because this exposes an editor UI over a route, it’s best treated as a dev-time tool. If you ever enable it outside local development, put it behind authentication or restrict access.
That’s also why some of the “team workflow” functionality is planned around proper auth, roles, and review gates.
Why Use It?
If you are using Gettext for your translations, vite-plugin-lingo removes the friction of context switching. You can see, edit, and manage your translations without leaving your project's context. It's especially useful for teams where developers want to make quick text updates without navigating complex external TMS (Translation Management Systems).
It also helps avoid subtle .po formatting mistakes (missing headers, broken quoting, etc.) that can be hard to spot in code review.
What’s coming next (the paid plan, without the fluff)
The free plugin experience focuses on giving you a solid editor UI and a clean workflow in development.
The paid plan is where vite-plugin-lingo becomes a full translation workflow tool for teams, with features aimed at reliability, collaboration, and scale:
-
AI translation assistance: suggest translations per string and batch translate, while keeping output compatible with
.poformatting and escaping. - Collaboration: multiple users with roles (translator/reviewer/admin), plus an activity log.
- Production mode: enable the editor safely outside dev with authentication.
-
Approval workflow: queue changes for review before writing back to
.pofiles. - Translation memory: reuse prior translations and suggest close matches.
- Quality checks: placeholder validation, consistency checks, and warnings for risky edits.
- Glossary and terminology: keep wording consistent across the product.
- Import/export: move data between common formats and workflows when needed.
The guiding principle is: make it easy to move fast, without letting translation quality drift.
Backend vision (for teams)
To support the paid plan features, there’s a planned standalone backend that handles:
- Authentication (so translators don’t need repo access)
- API keys for plugin-to-backend calls
- Usage tracking (useful for auditing and operational visibility)
- AI translation endpoint (so the plugin can request high-quality suggestions)
- A dashboard for managing access, keys, and workspace settings
The idea is to keep the plugin lightweight and local-first, while enabling team features when you need them.
Conclusion
Simplifying the i18n workflow means you are more likely to keep your app’s multi-language support up to date. Give vite-plugin-lingo a try and see how it can streamline your localization process.
Quick start
Install:
bun add -d vite-plugin-lingo
# or
npm install --save-dev vite-plugin-lingo
Add the plugin to your Vite config:
// vite.config.ts
import { defineConfig } from "vite";
import lingo from "vite-plugin-lingo";
export default defineConfig({
plugins: [
lingo({
route: "/_translations",
localesDir: "./locales",
}),
],
});
Then start your dev server and open:
http://localhost:5173/_translations
Workflow idea (teams)
- Keep
.pofiles in version control. - Let developers make small UI copy tweaks during feature work.
- For bigger changes, translators can still use their preferred tooling, but everyone benefits from a low-friction “fix it now” path.
If this helped, consider starring the repo and sharing the post.
Top comments (0)