Translations: a working round trip between this repository and its Weblate project on translate.tiagoagueda.com #8

Closed
opened 2026-10-01 10:14:18 +00:00 by tiagoagueda · 1 comment
Owner

Requested by the maintainer on 2026-10-01, for every repository: integration and a fully working workflow of string translation with the corresponding translation project hosted on translate.tiagoagueda.com (Weblate). The shared decisions (how a translation comes back, the draft flag, who may translate) are made in postulo/postulo#349; this issue is this repository's share.

Where it stands

As set up on 2026-09-16 (to be checked against the server): this repository is the component plugin-apprise of the Weblate project postulo, mask src/postulo_apprise/locale/*/LC_MESSAGES/django.po, gettext PO. It is read-only: Weblate pulls from Forgejo and nothing it holds comes back; a translation made there has to be exported and committed by hand.

What "fully working" means

The same four things in every repository:

  1. Out: a string added or changed here appears in Weblate without anybody doing anything (Weblate is told of each push, or pulls on a schedule).
  2. In: a translation saved in Weblate arrives here without anybody exporting a file: Weblate commits and proposes the change, and this repository's CI runs on it before it reaches main.
  3. Accepted: what Weblate writes passes this repository's own catalogue checks unchanged, and what this repository's tooling writes does not show up in Weblate as a change.
  4. Explained: the README (and the core's docs/TRANSLATING.md) tell a speaker where to go and what happens to what they type.

Here

  • The component follows this repository's main and hears of each push.
  • Translations come back the way postulo/postulo#349 decides (a pull request from Weblate, judged by this repository's CI).
  • uv run postulo-messages extract --check and tests/test_catalogues.py pass on what Weblate writes; the draft flag survives the round trip as the core decides.
  • The component shows every language the core scaffolds (postulo/postulo#347), because the catalogues here are written by the core's tool.
  • The release gate (#7) reads the catalogues, not Weblate: a release is held to what has been merged.
  • The README says where to translate this plugin.

Done when

  • A string added here appears in Weblate with no manual step, and a translation saved there arrives as a change this repository's CI passes.
  • No catalogue in this repository is ever edited by exporting a file from Weblate by hand.
Requested by the maintainer on 2026-10-01, for every repository: **integration and a fully working workflow of string translation with the corresponding translation project hosted on translate.tiagoagueda.com (Weblate).** The shared decisions (how a translation comes back, the `draft` flag, who may translate) are made in postulo/postulo#349; this issue is this repository's share. ## Where it stands As set up on 2026-09-16 (to be checked against the server): this repository is the component `plugin-apprise` of the Weblate project `postulo`, mask `src/postulo_apprise/locale/*/LC_MESSAGES/django.po`, gettext PO. **It is read-only:** Weblate pulls from Forgejo and nothing it holds comes back; a translation made there has to be exported and committed by hand. ## What "fully working" means The same four things in every repository: 1. **Out:** a string added or changed here appears in Weblate without anybody doing anything (Weblate is told of each push, or pulls on a schedule). 2. **In:** a translation saved in Weblate arrives here without anybody exporting a file: Weblate commits and proposes the change, and this repository's CI runs on it before it reaches `main`. 3. **Accepted:** what Weblate writes passes this repository's own catalogue checks unchanged, and what this repository's tooling writes does not show up in Weblate as a change. 4. **Explained:** the README (and the core's `docs/TRANSLATING.md`) tell a speaker where to go and what happens to what they type. ## Here - The component follows this repository's `main` and hears of each push. - Translations come back the way postulo/postulo#349 decides (a pull request from Weblate, judged by this repository's CI). - `uv run postulo-messages extract --check` and `tests/test_catalogues.py` pass on what Weblate writes; the `draft` flag survives the round trip as the core decides. - The component shows every language the core scaffolds (postulo/postulo#347), because the catalogues here are written by the core's tool. - The release gate (#7) reads the catalogues, not Weblate: a release is held to what has been merged. - The README says where to translate this plugin. ## Done when - A string added here appears in Weblate with no manual step, and a translation saved there arrives as a change this repository's CI passes. - No catalogue in this repository is ever edited by exporting a file from Weblate by hand.
tiagoagueda added this to the 0.5.0 milestone 2026-10-01 10:14:18 +00:00
Author
Owner

Done, as postulo/postulo#349 decided: this repository is a component in Weblate (translate.tiagoagueda.com) that follows main through a Forgejo webhook, drafts new strings by machine, and sends translations back as a pull request from the weblate branch; CI refuses a translation written outside Weblate. See this repository's commit referencing this issue, and postulo/postulo#829 for the first round trip, merged green.

Done, as postulo/postulo#349 decided: this repository is a component in Weblate (translate.tiagoagueda.com) that follows main through a Forgejo webhook, drafts new strings by machine, and sends translations back as a pull request from the `weblate` branch; CI refuses a translation written outside Weblate. See this repository's commit referencing this issue, and postulo/postulo#829 for the first round trip, merged green.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Postulo/postulo-apprise#8
No description provided.