Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94ec414089 |
@@ -36,6 +36,10 @@ organization grants that token read-only cross-repository access to
|
|||||||
|
|
||||||
## Translation workflow
|
## Translation workflow
|
||||||
|
|
||||||
|
The complete Weblate architecture, translator procedure, promotion process,
|
||||||
|
deployment instructions, troubleshooting, and recovery checklist are in
|
||||||
|
[`dominican-translation-infrastructure.md`](dominican-translation-infrastructure.md).
|
||||||
|
|
||||||
The Tryton server owns `es_DO` as a standalone language; its database record
|
The Tryton server owns `es_DO` as a standalone language; its database record
|
||||||
does not declare `es_419` (or any other locale) as parent. Complete Dominican
|
does not declare `es_419` (or any other locale) as parent. Complete Dominican
|
||||||
translations live beside each package in its regular `locale/es_DO.po`
|
translations live beside each package in its regular `locale/es_DO.po`
|
||||||
|
|||||||
@@ -0,0 +1,222 @@
|
|||||||
|
# Dominican Spanish translation infrastructure
|
||||||
|
|
||||||
|
This document describes the production workflow for maintaining Spanish for
|
||||||
|
the Dominican Republic (`es_DO`) in the customized Tryton repository. It is
|
||||||
|
both an operating manual and a recovery reference.
|
||||||
|
|
||||||
|
## Design goals
|
||||||
|
|
||||||
|
- `es_DO` is a standalone Tryton language. It does not inherit from `es_419`.
|
||||||
|
- Every maintained series has its own catalogs and translation branch.
|
||||||
|
- Weblate never writes directly to a release branch.
|
||||||
|
- Translation changes are reviewed and validated before promotion.
|
||||||
|
- No password, personal access token, or API key is stored in Git.
|
||||||
|
|
||||||
|
## Components and ownership
|
||||||
|
|
||||||
|
| System | Responsibility |
|
||||||
|
| --- | --- |
|
||||||
|
| Official Tryton repository | Upstream source of Tryton changes. |
|
||||||
|
| `tryton-do/tryton-mirror` | Read-only private mirror of upstream history. |
|
||||||
|
| `tryton-do/tryton` | Customized source, Dominican catalogs, CI, and documentation. |
|
||||||
|
| Gitea Actions | Validates catalogs, Python code, packages, and relevant tests. |
|
||||||
|
| Weblate | Browser translation editor, checks, glossary, and translation memory. |
|
||||||
|
| Gitea webhook | Tells Weblate that the source repository changed. |
|
||||||
|
|
||||||
|
The data flow is:
|
||||||
|
|
||||||
|
```text
|
||||||
|
official upstream
|
||||||
|
|
|
||||||
|
v
|
||||||
|
tryton-mirror ---- scheduled proposal ----> integration/8.0 ---- review ----> 8.0
|
||||||
|
^
|
||||||
|
|
|
||||||
|
Weblate <---- webhook ---- tryton repository |
|
||||||
|
| |
|
||||||
|
+---- translation/weblate-8.0 ---- PR ------+
|
||||||
|
```
|
||||||
|
|
||||||
|
The same isolated Weblate branch model is used for all maintained series. The
|
||||||
|
8.0 production series adds the two-stage `integration/8.0` promotion gate.
|
||||||
|
|
||||||
|
## Version mapping
|
||||||
|
|
||||||
|
| Tryton series | Weblate project | Weblate Git branch | Promotion target |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 6.0 | `tryton-6-0-es-do` | `translation/weblate-6.0` | `6.0` |
|
||||||
|
| 7.0 | `tryton-7-0-es-do` | `translation/weblate-7.0` | `7.0` |
|
||||||
|
| 8.0 | `tryton-8-0-es-do` | `translation/weblate-8.0` | `integration/8.0`, then `8.0` |
|
||||||
|
| 8.2 | `tryton-8-2-es-do` | `translation/weblate-8.2` | `8.2` |
|
||||||
|
|
||||||
|
Project pages are available below:
|
||||||
|
|
||||||
|
- <https://translate.tryton.org.do/projects/tryton-6-0-es-do/>
|
||||||
|
- <https://translate.tryton.org.do/projects/tryton-7-0-es-do/>
|
||||||
|
- <https://translate.tryton.org.do/projects/tryton-8-0-es-do/>
|
||||||
|
- <https://translate.tryton.org.do/projects/tryton-8-2-es-do/>
|
||||||
|
|
||||||
|
Each project contains independent components for the server core, server
|
||||||
|
resources, SAO, and every Tryton module present in that series. Component
|
||||||
|
discovery on the server-core component detects module catalogs matching:
|
||||||
|
|
||||||
|
```text
|
||||||
|
modules/<module>/locale/es_DO.po
|
||||||
|
```
|
||||||
|
|
||||||
|
The manually managed catalogs are:
|
||||||
|
|
||||||
|
```text
|
||||||
|
trytond/trytond/ir/locale/es_DO.po
|
||||||
|
trytond/trytond/res/locale/es_DO.po
|
||||||
|
sao/locale/es_DO.po
|
||||||
|
```
|
||||||
|
|
||||||
|
Only `es_DO` is exposed by the component language filter. Weblate can reuse
|
||||||
|
good translations between versions through shared translation memory, but it
|
||||||
|
commits each version to its own branch and catalog.
|
||||||
|
|
||||||
|
## Translator workflow
|
||||||
|
|
||||||
|
1. Sign in to Weblate and open the project for the required Tryton series.
|
||||||
|
2. Select Spanish (Dominican Republic) and the relevant component.
|
||||||
|
3. Translate or improve a string. Preserve placeholders, XML/HTML markup,
|
||||||
|
keyboard accelerators, and plural forms exactly as Weblate indicates.
|
||||||
|
4. Prefer Dominican accounting, tax, commercial, and administrative terms.
|
||||||
|
Use the project glossary for terminology that must be consistent.
|
||||||
|
5. Resolve Weblate checks before marking work complete. Do not suppress a
|
||||||
|
failing check merely to increase the completion percentage.
|
||||||
|
6. Use suggestions when the translator is uncertain; a reviewer can accept or
|
||||||
|
replace them without losing the discussion.
|
||||||
|
|
||||||
|
Weblate groups pending edits and commits them after the configured delay. It
|
||||||
|
then pushes to `translation/weblate-X.Y`. A translation is not released merely
|
||||||
|
because it appears in Weblate; it must pass the Git review flow below.
|
||||||
|
|
||||||
|
## Maintainer promotion workflow
|
||||||
|
|
||||||
|
1. Confirm that the Weblate component has no repository error or lock.
|
||||||
|
2. In Weblate, commit pending changes and push the repository when an immediate
|
||||||
|
release is required. Otherwise allow the automatic commit interval to run.
|
||||||
|
3. Inspect the version's `translation/weblate-X.Y` branch in Gitea.
|
||||||
|
4. Open a pull request to the promotion target from the version mapping table.
|
||||||
|
5. Review terminology and confirm that the diff only contains expected PO
|
||||||
|
catalogs. Reject unrelated generated or source changes.
|
||||||
|
6. Require the PO validation and relevant package tests to pass.
|
||||||
|
7. Merge the pull request. For 8.0, open and review the second pull request from
|
||||||
|
`integration/8.0` to `8.0`.
|
||||||
|
8. Allow the Gitea push webhook to refresh Weblate. If necessary, run
|
||||||
|
**Manage > Repository maintenance > Update** for the affected component.
|
||||||
|
|
||||||
|
Never rebase or force-push a protected release or integration branch. If a
|
||||||
|
Weblate branch must be repaired, first commit or discard pending Weblate work,
|
||||||
|
then fast-forward the branch from its promotion target.
|
||||||
|
|
||||||
|
## Deploying catalog changes
|
||||||
|
|
||||||
|
Build or install the Tryton packages from the reviewed release branch. On each
|
||||||
|
database, activate Spanish (Dominican Republic) as a translatable language and
|
||||||
|
run:
|
||||||
|
|
||||||
|
```console
|
||||||
|
trytond-admin -d DATABASE --all --activate-dependencies
|
||||||
|
```
|
||||||
|
|
||||||
|
Restart the Tryton services after updating the installed package or container.
|
||||||
|
Users can then select Spanish (Dominican Republic) in their preferences.
|
||||||
|
`es_419` does not need to be active and is not a runtime dependency.
|
||||||
|
|
||||||
|
For container deployments, update the image tag or immutable digest only after
|
||||||
|
the new package build succeeds. Back up the database before a production
|
||||||
|
module update and keep the previous image available for rollback.
|
||||||
|
|
||||||
|
## Adding a Tryton series
|
||||||
|
|
||||||
|
1. Create the release branch and `translation/weblate-X.Y` branch from the
|
||||||
|
same reviewed commit.
|
||||||
|
2. Add `es_DO` to the core language data and add an `es_DO.po` catalog beside
|
||||||
|
every maintained core, resource, module, and SAO catalog.
|
||||||
|
3. Create a Weblate project with hooks and shared translation memory enabled.
|
||||||
|
4. Add the server-core and server-resources PO components.
|
||||||
|
5. Add the SAO PO component.
|
||||||
|
6. Add component discovery to server core with this regular expression:
|
||||||
|
|
||||||
|
```text
|
||||||
|
^modules/(?P<component>[^/]+)/locale/(?P<language>es_DO)\.po$
|
||||||
|
```
|
||||||
|
|
||||||
|
7. Restrict languages to `^es_DO$`, disable creation of arbitrary languages,
|
||||||
|
enable push-on-commit, and point push to the dedicated translation branch.
|
||||||
|
8. Verify that the component count equals modules plus core, resources, SAO,
|
||||||
|
and the automatically created glossary.
|
||||||
|
9. Add CI and branch protection before accepting the first translation PR.
|
||||||
|
|
||||||
|
## Webhook and credential model
|
||||||
|
|
||||||
|
The Gitea repository has one active push webhook targeting:
|
||||||
|
|
||||||
|
```text
|
||||||
|
https://translate.tryton.org.do/hooks/gitea/
|
||||||
|
```
|
||||||
|
|
||||||
|
One repository-level webhook covers all translation branches. Weblate uses its
|
||||||
|
own repository credential to fetch and push; Gitea Actions uses the short-lived
|
||||||
|
repository-scoped `GITEA_TOKEN`. Personal passwords and Weblate API tokens must
|
||||||
|
remain in the respective secret stores, never in workflow YAML, URLs, logs, or
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
Rotate a credential immediately if it is exposed. After rotation, test a fetch
|
||||||
|
and a push on a translation branch, then confirm that the webhook still causes
|
||||||
|
Weblate to update.
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Weblate shows an outdated source
|
||||||
|
|
||||||
|
Confirm the Gitea webhook delivery, then update the repository from Weblate.
|
||||||
|
Check that the component branch matches the version mapping and that there are
|
||||||
|
no pending changes blocking a pull.
|
||||||
|
|
||||||
|
### Weblate cannot push
|
||||||
|
|
||||||
|
Check the component repository error, repository write permission, and branch
|
||||||
|
name. Weblate must push to `translation/weblate-X.Y`, not to a protected release
|
||||||
|
branch. Do not weaken release-branch protection to work around this error.
|
||||||
|
|
||||||
|
### A component is locked
|
||||||
|
|
||||||
|
Read the recorded repository error first. Correct authentication, connectivity,
|
||||||
|
or a Git conflict, update the repository, and only then unlock it. Repeatedly
|
||||||
|
unlocking without correcting the cause can lose or duplicate work.
|
||||||
|
|
||||||
|
### A new module is missing
|
||||||
|
|
||||||
|
Verify that `modules/<module>/locale/es_DO.po` exists on the translation branch,
|
||||||
|
then run component discovery from the server-core component. A missing catalog
|
||||||
|
must be added in Git before Weblate can discover it.
|
||||||
|
|
||||||
|
### A PO check fails in CI
|
||||||
|
|
||||||
|
Run the repository validator locally:
|
||||||
|
|
||||||
|
```console
|
||||||
|
python -m pip install polib
|
||||||
|
python ci/validate_po.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Fix duplicate messages, invalid syntax, plural forms, or malformed placeholders
|
||||||
|
in Weblate or on the translation branch. Do not bypass the validator.
|
||||||
|
|
||||||
|
## Recovery and audit checklist
|
||||||
|
|
||||||
|
- Export or back up the Weblate database and application data with the normal
|
||||||
|
infrastructure backup process; Git alone does not retain suggestions,
|
||||||
|
comments, permissions, or translation memory.
|
||||||
|
- Verify Weblate backups by restoring them in an isolated environment.
|
||||||
|
- Keep the Gitea repository as the source of truth for released PO files.
|
||||||
|
- Audit Weblate project access and repository credentials periodically.
|
||||||
|
- Check that all four translation branches still exist and are not ahead with
|
||||||
|
unreviewed changes.
|
||||||
|
- Confirm webhook delivery and one repository refresh after maintenance.
|
||||||
|
- Record the pull request and deployed image/package version for every release.
|
||||||
|
|
||||||
Reference in New Issue
Block a user