wortwerk

Translations that ship with your code

Translation management that speaks git

wortwerk reads your source strings from GitHub or Bitbucket, lets your translators work in a focused editor and sends the result back as a pull request.

wortwerk/translations → main
  locales/de.json
  "checkout": {
-   "title": "Checkout"
+   "title": "Zur Kasse"
+   "items_one": "{{count}} Artikel",
+   "items_other": "{{count}} Artikel"
  }

Works with the stack and files you already have

React
react-i18next
Next.js
next-intl
Svelte
svelte-i18n
Node.js
i18next
Ruby on Rails
rails-i18n
Django
gettext
WordPress
gettext
Python
Babel
JSON
nested · flat · i18next
YAML
Rails
gettext PO
.po · .pot
ICU
MessageFormat

From commit to merged translations

wortwerk sits between your repository and your translators. Nobody uploads or downloads files.

  1. 1
    acme/webshopmain
    acme/appdevelop
    locales/%locale%.json

    Connect

    Connect a repository and point wortwerk at your locale files.

  2. 2
    checkout.titlenew
    cart.itemsnew
    nav.home

    Sync

    Every push updates the source strings. New keys show up right away, removed ones are set aside.

  3. 3
    Checkout→Zur Kasse
    de
    96%
    fr
    81%
    it
    64%

    Translate

    Translators fill the gaps with translation memory, context and optional AI pre-translation.

  4. 4
    Update translations
    wortwerk/translations → main
    +42−3
    Merged

    Merge

    wortwerk opens a pull request with clean, minimal diffs. You review and merge.

Built for GitHub and Bitbucket

Connect once per workspace, then link any repository to a project. wortwerk only ever writes to its own branch.

GitHub

Install the wortwerk GitHub App on the repositories you choose. Access is scoped per repository and can be revoked any time.

  • Fine-grained access through a GitHub App
  • Push webhooks trigger a sync automatically
  • One pull request, refreshed on every export

Bitbucket Cloud

Connect your Bitbucket Cloud account and pick a repository. wortwerk registers a signed webhook for it.

  • OAuth connection, no app passwords
  • Signed webhook per repository
  • Pull requests from a dedicated branch

Something else? Trigger a sync from any CI pipeline with a project token.

Built for developers and translators

Git-native

Source strings come from your repo, translations go back as a pull request on a dedicated branch.

JSON, YAML and PO

i18next, Rails and gettext files keep their key order, nesting and comments.

Plurals done right

ICU MessageFormat under the hood, with the right plural forms for every language.

Full history

Every change is a revision. Review statuses keep quality visible.

Context for translators

Comments, screenshots and translation memory right next to each key.

Machine translation

Pre-translate with AI on the agency plan, placeholders stay intact.

Simple pricing

Free

CHF 0

  • Up to 5,000 keys
  • 1 team member
  • GitHub and Bitbucket
  • JSON, YAML and PO files
Start for free

Agency

CHF 500 / year

  • Up to 500,000 keys
  • Up to 10 team members
  • GitHub and Bitbucket
  • Machine translation included
Start for free

Questions and answers

The short answers to what teams usually ask first.

Do I have to change my translation files?

No. wortwerk reads JSON (nested, flat or i18next style), Rails YAML and gettext PO files as they are, and writes them back with the same key order, nesting and comments.

Will wortwerk push to my main branch?

Never. Translations go to a dedicated branch (wortwerk/translations by default) and reach your main branch only through a pull request you review and merge.

What happens when I delete a key in my code?

The key is marked obsolete and its translations are kept. If the key comes back, everything is restored. Obsolete keys are only purged when you decide to.

Which git hosts are supported?

GitHub (through a GitHub App) and Bitbucket Cloud. For anything else you can upload files manually or trigger syncs from CI with a project token.

Can I trigger a sync from CI?

Yes. Create a project token and call the sync endpoint from your pipeline, for example after a release. You can poll the run until it is done.

How does machine translation work?

On the Agency plan you can pre-translate a whole project or a single key with AI. Placeholders and plural forms are checked, and every machine translation is marked for review.

What counts as a key?

One source string, no matter how many languages it is translated into. A message with plural forms counts as a single key.

Where is my data and who can see it?

Your data is only visible to members of your workspace. We use no tracking or analytics. The privacy statement lists every service provider involved.