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.

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.

app.acme.io · review overlay

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 Comment
studio · context panel
Checkout#182
Mobile nav#177

Edit 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.

AI drafts, with context and your voice

  • Context with every string. Key, screen, placeholders, and up to four neighboring strings ride along, so the engine translates a UI, not a word list.
  • Adjustable style per language. Your tone & register note (polite です/ます, formal “Państwo”, Traditional-only zh-Hant) is injected into every draft.
  • Terminology enforced. Preferred, non-translatable, and forbidden terms are applied, then re-checked after drafting.
  • Never ships broken. A failing string gets one repair pass, then is refused rather than written.

See it on the real screen

  • Screenshots with hotspots. Captures mark exactly where the string renders, so length and tone fit the design.
  • Rendered email previews. Transactional mail is previewed fully composed, per language.
  • The string's identity. Key, surface, placeholders, and plural form always sit beside the text.

Nothing broken reaches production

  • Structural safety. Placeholders, tag pairs, links, and escapes must survive intact; errors block, not warn.
  • Language-aware checks. Punctuation, spacing, and numbers, with CJK full-width forms folded so Japanese 。 never false-positives.
  • Zero-cost audits. The same checks re-run over stored rows on demand, no API spend.

Plurals that just work

  • Every category, per language. All six CLDR forms, in exactly the set each language needs.
  • Reviewed per form. “1 court” and “5 courts” never share a translation by accident.
  • Round-trips intact. ICU plural syntax is preserved end to end.

Answer “who approved this?” in one click

  • Every change, attributed. Text, status, and author: human, AI engine, or memory.
  • Import-proof. Re-importing catalogs never overwrites reviewed text.
  • Audit-ready. “who approved this, and what did it say before?”, for any string, any time.

A PR you can merge without reading every line

  • One PR per language, per repo. A clean, scoped diff your reviewers and CI already understand.
  • Your trees stay untouched. Write-back runs only in fresh clones; nothing pushes without a flag.
  • Drift you can gate on. A --check mode turns any disagreement into a failing build.

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