Translate your app without breaking it.
Babel Fishers translates your localization files with the provider you choose. It protects placeholders and other parts that must never change. You pay your provider directly, and only for what you use.
Full documentation, including guides for every feature, lives at gycks.github.io/babelfishers.
Install
pip install babelfishers
Requires Python 3.11 or newer.
Quickstart
babelfishers init
babelfishers translate --dry-run
babelfishers translate
init asks for your source locale, your target locales and a translation provider, then writes babelfishers.toml. Add the files to translate under [resources.<format>], set your provider's API key as an environment variable, and run translate.
See the Quickstart for the full walkthrough.
[locale]
source = "en"
targets = ["fr", "de", "es"]
[engine]
provider = "deepl"
[resources.json]
paths = ["locales/[source]/*.json"]
What you get
- Ten file formats. JSON, HTML, YAML, Java properties, Android strings, gettext, Apple strings, Flutter ARB, XLIFF, and .NET resx. Each parser follows its own format's rules.
- Nine translation providers. DeepL, Azure, Google Cloud Translation, LibreTranslate, OpenAI, Anthropic, Google Gemini, Mistral, and DeepSeek. Pick one as your default, or set a different provider per group of files.
- Placeholders stay intact. Variables such as
%sand{name}, and plural rules, are protected before translation and checked afterward. - Glossaries. Keep terms untranslated, fix their translation per language, or pass extra context to the provider.
- A local translation memory. Text that was translated once is never sent to a provider twice.
- A dry run.
translate --dry-runshows what would happen without calling a provider or writing a file. - Continuous integration.
babelfishers ciruns a translation in your pipeline and opens or updates a pull request with the result, for GitHub Actions and GitLab CI/CD.
How it works
Babel Fishers reads your project from one TOML file. It parses each source file once, protects placeholders and glossary terms, sends only the translatable text to your chosen provider, and writes the result back in the same format as the source.
You run Babel Fishers yourself, on your own files, with your own account at the provider you choose. No file has to leave your machine unless you pick a cloud provider. With a self-hosted LibreTranslate server, none does.
See How it works for the full picture.
Documentation
- Getting started
- Configuration
- Translation providers
- Continuous integration
- Supported formats
- CLI reference
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
Licensed under the Apache License, Version 2.0.
Release files for babelfishers 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| babelfishers-0.1.1.tar.gz | 63.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| babelfishers-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 166.5 kB
Release files / babelfishers-0.1.1.tar.gz
| Download URL | babelfishers-0.1.1.tar.gz |
|---|---|
| Size | 63.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d323623eb1c5af8074a71e82d2a09ad3c9eca43a6e2789919d3b646bf6fe7707
|
|
BLAKE2b-256 checksum How to use checksums |
1df003247e5ffd274e71abdb81e09323256373e1b03f4ed6aab12925a05c9098
|
| 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 Sep 24, 2026.
Transparency logRelease files / babelfishers-0.1.1-py3-none-any.whl
| Download URL | babelfishers-0.1.1-py3-none-any.whl |
|---|---|
| Size | 103.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8bc08302ce9db86c8450163b8d7da4e8a21b7cf6318ee895c6b2ac132bcf40b7
|
|
BLAKE2b-256 checksum How to use checksums |
cc1c0cd657411b5168bb339c8ea175c5ed2a7d81378f45a4aaa21d319e2d81aa
|
| 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 Sep 24, 2026.
Transparency log