# Docs translation platform

**URL:** <https://discuss.python.org/t/docs-translation-platform/29940>\
**Category:** Documentation\
**Created:** [July 19, 2023, 10:06pm UTC](https://discuss.python.org/t/docs-translation-platform/29940 "2023-07-19T22:06:22Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![maciek](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/maciek/32/596_2.png) [@maciek](https://discuss.python.org/u/maciek)\
**Post date:** [July 19, 2023, 10:06pm UTC](https://discuss.python.org/t/docs-translation-platform/29940/1 "2023-07-19T22:06:22Z")

</div>

A number of language teams translating Python docs have been using [Transifex](https://www.transifex.com/) as the translations platform (7 out of 21 counting roughly). \[1\]

In October 2022 the changes in Transifex (and their policy) made it impossible to use [shared translation memory](https://help.transifex.com/en/articles/6225301-sharing-translation-memory) along with [translation memory fillup](https://help.transifex.com/en/articles/6407662-manage-translation-workflows) that used to propagate the translation memory between projects for different versions of Python (there is a project for documentation of every supported Python version, while the main focus is the latest stable). We would need to opt-in to [Premium plan](https://www.transifex.com/pricing/) to make it work. We are [discussing](https://github.com/rffontenelle/python-docs-tx-translations/issues/30) a workaround while keeping the basic open-source plan, but it loses the authorship info in PO files metadata.

[Weblate](https://weblate.org/en/) project supports memory propagation between projects through [shared translation memory](https://docs.weblate.org/en/latest/admin/projects.html#contribute-to-shared-translation-memory) and [Automatic translation](https://docs.weblate.org/en/latest/admin/addons.html#addon-weblate-autotranslate-autotranslate) add-on. Moreover Weblate supports [automatic suggestions](https://docs.weblate.org/en/latest/user/translating.html#automatic-suggestions) from machine learning translation services which greatly improve translations experience (Transifex lacks this feature). Also Weblate is licensed with [GNU GPL](https://docs.weblate.org/en/latest/contributing/license.html) and [open-sourced](https://github.com/weblateOrg/weblate/).

The Python docs project is too big to use Hosted Weblate’s standard open-source plan ([libre plan](https://weblate.org/en/hosting/#libre) allows 10,000 source strings and Python 3.12 docs have 57,643 of them). Although they [offer discounts](https://github.com/python/python-docs-pl/issues/21#issuecomment-1634968067) for open-source.

There is also an option to self-host the Weblate instance. That would require a maintenance burden though on ours/PSF side.

My personal preference would be to go into the Weblate direction (I’m `pl` contributor and coordinator). Also @rffontenelle (`pt-br` contributor and Transifex projects admin) and @josix (`zh-cn` contributor) expressed interested so far in this switch (we didn’t discuss it in a place as such so far). I don’t have a personal preference between self-hosted or Hosted Weblate, both would be OK for me.

Nevertheless current situation with propagation issue is not optimal, and I think we should act in any way (minimal step being discussion about Transifex Premium plan).

I’d love to hear what the community thinks about it. Also I am open to discuss more alternatives or elaborate in more detail on any aspect of the topic if needed.

Thank you!

* * *

1. Other language teams work with Git-based flow and local PO files editors or are just starting the translation projects.

---

<div class="post-metadata">

**Author:** ![barry](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/barry/32/42_2.png) [@barry](https://discuss.python.org/u/barry)\
**Post date:** [July 19, 2023, 10:34pm UTC](https://discuss.python.org/t/docs-translation-platform/29940/2 "2023-07-19T22:34:27Z")

</div>

GNU Mailman was one of the first internationalized Python projects that I’m aware of. As part of that work, I wrote [the gettext library](https://docs.python.org/3/library/gettext.html), [flufl.i18n](https://flufli18n.readthedocs.io/en/stable/), and [Tools/i18n](https://github.com/python/cpython/tree/main/Tools/i18n) \[1\]. GNU Mailman [uses Weblate](https://docs.mailman3.org/en/latest/translation.html) to manage its translations.

* * *

1. with help from many others along the way

---

<div class="post-metadata">

**Author:** ![fungi](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/fungi/32/5963_2.png) [@fungi](https://discuss.python.org/u/fungi)\
**Post date:** [July 19, 2023, 10:35pm UTC](https://discuss.python.org/t/docs-translation-platform/29940/3 "2023-07-19T22:35:52Z")

</div>

OpenStack also used Transifex once upon a time, but following some  
(much earlier) unfavorable changes in its terms of service we  
migrated to an instance of the then-Red-Hat-maintained Zanata  
software which we ran ourselves on donated virtual machines. Some  
years later RH abandoned development on Zanata, so we’ve been  
limping along with some ugly workarounds to mitigate security  
vulnerabilities in it.

More recently, we’ve begun work on migrating to a hosted instance of  
Weblate, and our string count is similarly too high to qualify for  
the free tier, but as we’re also a community-developed open source  
project they were willing to negotiate a generous discount on the  
normal hosting costs. Time will tell how we get on with the  
platform, but our friends in the Fedora community moved from Zanata  
to Weblate some time ago and seem quite pleased with it.

---

<div class="post-metadata">

**Author:** ![julien](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/julien/32/113_2.png) [@julien](https://discuss.python.org/u/julien)\
**Post date:** [July 20, 2023, 9:22pm UTC](https://discuss.python.org/t/docs-translation-platform/29940/4 "2023-07-20T21:22:52Z")

</div>

Here for the french translation we don’t use web hosted tools (besides gitea/github), so we implemented a command line tool to “copy” translations from one branch to another: [pomerge](https://pypi.org/project/pomerge/).

Typical usage:

```
pomerge --from-files *.po */*.po
git switch another_branch
pomerge --to-files *.po */*.po

```

So I bet you could stick to transifex and use pomerge as a memory?

(Don’t misread me, I’m against using closed-source software like transifex (or github) to do open-source software).

---

<div class="post-metadata">

**Author:** ![maciek](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/maciek/32/596_2.png) [@maciek](https://discuss.python.org/u/maciek)\
**Post date:** [July 21, 2023, 9:32pm UTC](https://discuss.python.org/t/docs-translation-platform/29940/5 "2023-07-21T21:32:48Z")

</div>

> [@julien](#):
>
> So I bet you could stick to transifex and use pomerge as a memory?

Yes, we have an [open issue](https://github.com/rffontenelle/python-docs-tx-translations/issues/30) and a plan to implement and use it this way (through the scripts and CI in [python-docs-tx-translations](https://github.com/rffontenelle/python-docs-tx-translations) repository).

Although: we have translators lists at the top of every PO file. An example looks like this:

> <https://github.com/python/python-docs-pl/blob/3.12/tutorial/classes.po#L6-L9>

Without shared memory download and upload features in Transifex (it’s now limited for open-source projects) we are not able to keep this behavior. Merging the PO files locally (or in CI) and uploading them back to Transifex attributes the translations to the uploader. This makes the proposed approach a not ideal workaround.

By the way, behavior of maintaining the list of translators this way is also supported in Weblate through the [contributors in comment](https://docs.weblate.org/en/weblate-4.18.1/admin/addons.html#contributors-in-comment) add-on.

---

<div class="post-metadata">

**Author:** ![maciek](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/maciek/32/596_2.png) [@maciek](https://discuss.python.org/u/maciek)\
**Post date:** [October 3, 2023, 3:49pm UTC](https://discuss.python.org/t/docs-translation-platform/29940/6 "2023-10-03T15:49:14Z")

</div>

Posting a status update about the Python docs / Weblate integration. Currently I’m working on support of multiple versions of Python through newly-added Weblate categories.

> <https://github.com/m-aciek/python-docs-weblate/issues/16>
>
> \* \[x\] delete some of the Weblate components to unlock capacity od adding new one…s for POC
> \* \[x\] rearrange directories structure for other docs versions
> \* \[\] add 3.11 translations and sources
> \* blocked by Weblate 3.1 through https://github.com/WeblateOrg/weblate/pull/10088 which is preventing from adding a 3.11 component with the same slug as in 3.12
> \* \[\] setup Weblate components and autodiscovery for 3.11
> \* \[\] (test translation memory propagation)

---

<div class="post-metadata">

**Author:** ![kushaldas](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/kushaldas/32/75_2.png) [@kushaldas](https://discuss.python.org/u/kushaldas)\
**Post date:** [May 25, 2025, 6:20am UTC](https://discuss.python.org/t/docs-translation-platform/29940/7 "2025-05-25T06:20:53Z")

</div>

Wondering about any update on weblate?

---

<div class="post-metadata">

**Author:** ![maciek](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/maciek/32/596_2.png) [@maciek](https://discuss.python.org/u/maciek)\
**Post date:** [May 25, 2025, 7:28pm UTC](https://discuss.python.org/t/docs-translation-platform/29940/8 "2025-05-25T19:28:25Z")

</div>

Unfortunately I got a bit stuck, lately I’m very short with my volunteer time. I started [a branch in Weblate](https://github.com/m-aciek/weblate/tree/multiple-repositories) to add [a feature of per-language Git repositories](https://github.com/WeblateOrg/weblate/issues/7271), but it still needs significant work.

Without it we would need an extra “Weblate backend” Git repository for all languages, from which we would sync the translations to all opted in repositories. It’s less optimal (less elegant), but easier to achieve.

For both solutions we are blocked with funding as we are not fitting into free tier for open-source in Hosted Weblate (we have too many strings). I’ve send a message to PSF representatives and Julien, but didn’t receive a positive answer yet.

---

<div class="post-metadata">

**Author:** ![encukou](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/encukou/32/2461_2.png) [@encukou](https://discuss.python.org/u/encukou)\
**Post date:** [August 20, 2025, 11:40am UTC](https://discuss.python.org/t/docs-translation-platform/29940/9 "2025-08-20T11:40:35Z")

</div>

> [@maciek](#):
>
> here is also an option to self-host the Weblate instance.

I’ll note that Weblate offers [commercial support](https://weblate.org/en/support/) for self-hosted installations (€600-1200/yr support; one-time €480 for installation).
