Skip to main content
Babel Fishers. Localization on your terms.

PyPI Python versions License

Translate your app's localization files with your own provider key, without breaking them.

Babel Fishers is a command-line tool. It sends only the translatable text to the provider you choose, keeps placeholders and plural forms intact, checks every string that comes back, and writes the file in its original format. In CI, it opens the pull request for you.

Babel Fishers Demo

Quickstart

pip install babelfishers    # Python 3.11+
babelfishers init           # writes babelfishers.toml
[locale]
source = "en"
targets = ["fr", "de"]

[engine]
provider = "deepl"

[resources.json]
paths = ["locales/[source]/*.json"]

See what would be translated. This needs no API key and writes nothing:

$ babelfishers translate --dry-run

  File                 Locale  Status  Units  Cached  To translate  Chars  Engine
  locales/en/app.json  de      new         2       0             2     79  deepl
  locales/en/app.json  fr      new         2       0             2     79  deepl

Then set your provider's key as an environment variable and run it for real:

babelfishers translate

How it works

A provider that sees {name} may hand back {nom}, and your app shows a raw token. Babel Fishers never gives it the chance:

source    Hello, {name}! You have %d new messages.
written   Bonjour, {name} ! Vous avez %d nouveaux messages.
  • Nothing is written broken. Every placeholder is checked after translation. A string that doesn't match is retried, then tried with a fallback provider if you set one. If it still doesn't match, it keeps the source text and you get a warning.
  • You never pay twice. A translation memory kept in your repo means a string translated once is reused everywhere, CI included.
  • Pull requests from CI. babelfishers ci translates what changed and opens or updates a pull request on GitHub Actions or GitLab CI/CD.
  • Your key, your provider. DeepL, Azure, Google Cloud, LibreTranslate, or one of five AI models. With a self-hosted LibreTranslate server, your strings never leave your network.
  • Twelve formats, 133 locales. From JSON and gettext to Android and String Catalogs, with regional variants such as pt-BR, es-419 and zh-Hant.

See How it works for the full picture.

When to use something else

Babel Fishers currently has no web editor, translator accounts or approval workflow. Review happens in your pull requests. If translators or other non-developers need to work on the strings, a platform such as Crowdin or Tolgee is a better fit.

Documentation

Feedback

Questions and ideas go to Discussions, bugs to issues.

Contributing

This project is still young and worked on when time allows. If you find a bug or have an idea, open an issue and I will take a look.

License

Apache License 2.0

Metadata

Release files for babelfishers 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for babelfishers 0.1.3
File Size Uploaded
babelfishers-0.1.3.tar.gz 80.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for babelfishers 0.1.3
File Interpreter ABI Platform
babelfishers-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 204.7 kB

Release files / babelfishers-0.1.3.tar.gz

Download URL babelfishers-0.1.3.tar.gz
Size 80.8 kB
Tags Source
SHA-256 checksum
How to use checksums
3bec61258fe917ca4e3b49c77d19f53e08e3872b216741a2ab39835d2eff3368
BLAKE2b-256 checksum
How to use checksums
151311dd6f7a5ec245e86263a3d2686de83bbb61f5f89569791c711a904d571e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / babelfishers-0.1.3-py3-none-any.whl

Download URL babelfishers-0.1.3-py3-none-any.whl
Size 123.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
08549f3bdef9631dbf4531502664b2f158ebb8d96a1754622ebf2f97126e9d1f
BLAKE2b-256 checksum
How to use checksums
dc442a59028155cff99dc5ef2663d498be220d1b90efafca08c82376fc677baf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page