For one developer, POEditor's job is a table of source strings and their translations in a dozen file formats: import a file, translate or machine-translate the gaps, run a few checks, export the file back in the same format. An agent builds that in one sitting on SQLite with DeepL or a language model, as long as it tests each format round trip, because Android plurals, Apple .strings and gettext all have quirks. What stays behind is the people side: translators and proofreaders working in a browser, the Git and Figma integrations, and years of history. If outside translators are in the loop, self-hosting Weblate or Tolgee is the shorter road.
Before you buildPOEditor Free covers 1,000 strings with unlimited projects. If your app has fewer strings than that and you translate alone, you may not need to pay.
Build me a local string manager to replace POEditor for my app's translations. Requirements:
- Node.js 22 + TypeScript: a Fastify server, a React UI built with Vite and a CLI.
`npm start` serves http://localhost:4710; `npx strings <command>` runs the same code.
- Storage: better-sqlite3 in ./data/strings.db for projects, terms (key, context, comment, tags,
plural flag), translations per language (text, status empty/fuzzy/approved, updated_at) and a
history table that keeps every earlier value.
- Formats, import and export: i18next JSON, Android strings.xml (plurals and string-arrays), Apple
.strings, gettext .po (`gettext-parser`) and XLIFF 1.2. Each format gets a round-trip test:
import, export, and the result must equal the original file after normalizing whitespace.
- Editor: a table with the term, the source text and one column per language. Filter by tag,
status and text; select terms in bulk to tag, delete or mark fuzzy; a side panel shows context,
comment and the history of the selected cell.
- Machine translation: fill empty cells with DeepL (`deepl-node`) when DEEPL_API_KEY is set,
otherwise an OpenAI-compatible endpoint from .env. Swap placeholders ({name}, %1$s, %@) for
tokens before the call and back after, and reject results that lose one.
- QA: placeholders match the source, the number of plural forms matches the language
(`Intl.PluralRules`), no doubled spaces, translation under 150% of the source length. Show
failures per language.
- Stats: a progress bar per language with counts of empty, fuzzy and approved strings.
- Export endpoint: `GET /api/export?lang=de&format=android` protected by a token from .env, so a
build script can fetch files.
- Single user. No accounts, no telemetry, local-first: only machine translation calls leave the
machine, and the README must say what is sent.
- Out of scope: translator logins, proofreading roles, Git host integrations, screenshots, in-context editing.
- README: the .env keys, how to run the round-trip tests and how to back up ./data.Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own POEditor.
Add guest translator links to the string manager in this folder. Requirements: - From the UI, create a link for one language: a random 32-byte token stored hashed in SQLite, with an expiry date and a revoke button. - The link opens the editor limited to that language, without settings, export or machine translation buttons. Each guest edit is saved as a fuzzy suggestion I approve. - Guest routes listen on a second port (GUEST_PORT in .env) so I can expose only that through a tunnel. - Rate-limit guest requests per token and log every edit with the token id. - Update the README with how to expose the guest port.
Add a code scan to the string manager in this folder. Requirements:
- A command `strings scan <path>` that finds `t("key")`, `i18n.t('key')` and `$t("key")` calls in
.ts, .tsx, .js, .vue and .svelte files with a regular expression, and reports keys used in
code but missing from the project, and keys in the project that no file uses.
- Print file and line for each missing key; never change the database unless `--apply` is given,
which adds missing keys as empty terms tagged `from-scan` and tags unused ones `unused`.
- Skip node_modules and build folders.
- Update the README.Add translation memory to the string manager in this folder. Requirements: - Store every approved source and target pair per language pair in SQLite. - When a cell is empty, show exact matches and fuzzy matches of 75% or more (normalized Levenshtein) before calling any machine translation API. - A setting to auto-fill exact matches as fuzzy. - Import and export the memory as TMX 1.4. - Update the README.
A small team pays $20 to stop passing spreadsheets around: translators get a link, comments and screenshots, and developers pull finished files from the API or the repo. The limit is strings, not seats, so a solo developer with a few thousand strings fits on Start.
Estimate · Runs on your machine. Machine translation is the only running cost: DeepL's free API tier or a few cents of language model tokens per thousand strings. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0 | $0 | 1,000 strings, unlimited projects, up to 5 contributors. |
| Start | $20 | $17 | 3,000 strings, unlimited projects, unlimited contributors. |
| Plus | $60 | $51 | 10,000 strings, unlimited projects and contributors. |
| Premium | $160 | $136 | 30,000 strings, unlimited projects and contributors. |
| Enterprise | $260 | $221 | 100,000 strings, scheduled ZIP backups to a storage service; more strings on request. |
Free covers 1,000 strings, unlimited projects and up to 5 contributors, with no card; paid features are open for a 10-day trial.
Yes. An AI coding agent such as Claude Code, Codex or Cursor can build a usable personal version in one session with the prompt on this page, running on your own machine.
About $20 a month on the Start plan, $240 a year (checked 2026-10-19).
A browser editor where outside translators can work, with comments and proofreading; Git hosting integrations and a Figma plugin that send and receive strings; A WordPress plugin and the official MCP server; Screenshots and context attached to terms for translators; Scheduled backups to a storage service and an audit log. If any of those matter to you, keep paying.
Yes: Weblate (open source), Tolgee (open source), Pontoon (open source).