Git-native localization for product teams
Ship your product in every language
without breaking your repo.
AI drafts every translation. Your team reviews it in context: on the real screen, beside the real email. Finished strings come back as one pull request per language, and the diff is your translations. Nothing else. Read it in one pass.
30 minutes. We run the round trip on live catalogs.
your repo
L10n Studio
AI drafts · humans review in context
pull request
Out as source text, back as every language. Drift on return: 0 bytes
The agency's PR touches 40 files and reorders every key. You scroll
2,000 lines of Polish YAML you can't read, approve it on faith, and a
{count} placeholder ships broken.
There is a better loop: connect the repo, review in context, merge a PR that touches nothing else.
How it works
The round trip, in four steps.
Leadership wants three new languages this quarter. Here is the whole trip.
01
Connect
Install the GitHub App and pick your repos. Catalogs flow out on their own; nothing moves by hand.
02
AI drafts
Every string, every language, drafted with context and glossary in view, then quality-gated. Anything doubtful is flagged, never silently written.
03
Review in context
Your team enters here: approve on the real screen, beside screenshots and rendered emails.
04
Return as a PR
One pull request per language. The diff is translations. Nothing else. Merge when ready.
Every string's state is always known. Nothing new ships unreviewed.
Still have hardcoded strings? So did we: start here.
In-context review
See every translation where it ships.
Your reviewers never guess from a bare text field: the screen, the screenshot, and the rendered email sit beside every string.
Dzień dobry, Anna
Twoja kolejna lekcja: wtorek, 18:00
Zarezerwuj kort booking.cta · pl in context English source Book a court Polish Zarezerwuj kort Placeholders & length OK Approve Flag CommentEdit in place. Click any string on your own app and fix the translation where it renders.
Screenshot & email context. Every string shows where it lives: UI capture or fully rendered mail.
Email and SMS templates are in the round trip. Reviewed as your recipients will get them, with real content in place. Per language, not an afterthought.
What you stop worrying about
AI made drafts nearly free.
The bottleneck moved to trust.
Never start from blank
AI drafts every string with the screen and glossary in view. Reviewers check drafts. They don't translate.
See it on the real screen
Screenshots and rendered emails sit beside each string, so you catch the broken German button before your customers do.
Nothing broken reaches production
Glossary, placeholders, tags, and length re-validated on every edit. Errors block, not warn: a failing string is refused rather than written.
Plurals that just work
Every CLDR form, per language. Polish gets its four, Japanese its one. “1 court” and “5 courts” never share a translation by accident.
Answer “who approved this?” in one click
Every edit and approval versioned and attributed. Re-imports never overwrite reviewed text.
A PR you can merge without reading every line
One pull request per language, on its own l10n/* branch. Your branches are never touched.
For developers
Connect the repo. Get a PR back.
Install the GitHub App, pick your repos. Translations come back as pull requests your CI can verify.
-
One place that's always rightPostgreSQL is the source of truth; catalog files are generated projections. Imports never overwrite reviewed text.
-
Your files come back exactly as your framework expectsOne wire format, three adapters. A strict XLIFF 2.0 contract, byte-compatible across Python, JS, and PHP.
-
It never touches your branchesTranslations arrive on
l10n/*branches as ordinary pull requests. Review, merge, or close them like any other. -
The guarantee is a failing check, not a promiseEvery write-back is drift-verified. A single byte of difference turns the PR check red.
Questions
Good questions, straight answers.
What access do you need to our repos?
You install the GitHub App on the repos you choose. It reads your catalog files to extract, and opens pull requests on its own l10n/* branches. It never pushes to your branches, and you can uninstall it at any time.
We already have translations. Will you overwrite them?
Never. Imports never overwrite reviewed text. A conflict is reported to a human, not resolved silently.
Our strings are still hardcoded. Can you even take us?
Yes. Making code localizable is where we start. We've just done this conversion on our own pilot: its frontend moved to stable keys with a codemod verified string-by-string, so no user-facing text changed. Its languages are live in production. Translation starts on whatever is in catalogs while the conversion runs in parallel. Tell us where your codebase is.
What formats do you support today?
Flat JSON, YAML, or your stack's own format, over XLIFF 2.0 underneath. On a different stack? Tell us. Connectors are how this grows.
Is this just one LLM call with a nicer UI?
No. Every draft is quality-gated: placeholders, glossary, tags, length. Anything that fails is refused, not written. A human reviews what is new, in context, before it can return as a PR.
What does a pilot look like?
Bounded. We show the zero-drift round trip first, then agree scope, timeline, and terms before anything else happens.
Get started
Your next language is
a pull request away.
Tell us which language is blocking you; we'll show the zero-drift round trip.
Built by a founder with 10+ years in localization and 10+ in software engineering and automation. We convert hardcoded codebases, then run the verified round trip that keeps every language honest.
Questions? Write to us directly: info@pingzone.ie