Only contains translation updates at the time of this writing.
Description
Details
| Title | Reference | Author | Source Branch | Dest Branch | |
|---|---|---|---|---|---|
| update translations submodule for 2026-03-03 deploy | repos/phabricator/deployment!98 | brennen | work/2026-03-03-deploy | wmf/stable |
Related Objects
- Mentioned In
- rPHDEPa883b6d25bbb: update translations submodule for 2026-03-03 deploy
- Mentioned Here
- T412421: Export source strings with PLURAL where appropriate
T413529: Properly preserve `%d` across a generate-and-export
T413531: Add a linter to the Phabricator translations repo
T413532: Test that the mangling of strings in export and generate is reversible.
Event Timeline
brennen opened https://gitlab.wikimedia.org/repos/phabricator/deployment/-/merge_requests/98
update translations submodule for 2026-03-03 deploy
What's the point of deploying this, then?
(It doesn't really contain translation updates, only updates to the JSON files that Phabricator won't read until I run a script to update PHP files derived from them)
(Edit later: this is wrong - it does include at least https://gerrit.wikimedia.org/r/c/phabricator/translations/+/1217845 which directly has an impact when deployed)
brennen merged https://gitlab.wikimedia.org/repos/phabricator/deployment/-/merge_requests/98
update translations submodule for 2026-03-03 deploy
Icinga downtime and Alertmanager silence (ID=efc84c28-0407-41e2-bb5e-4615e2133bf1) set by jelto@cumin1003 for 0:30:00 on 1 host(s) and their services with reason: Phabricator deploy
phab2002.codfw.wmnet
Icinga downtime and Alertmanager silence (ID=03f74407-6bbd-4fff-bfe1-5af3e8b4557c) set by jelto@cumin1003 for 0:30:00 on 1 host(s) and their services with reason: Phabricator deploy
phab1004.eqiad.wmnet
Mentioned in SAL (#wikimedia-operations) [2026-03-03T16:04:48Z] <brennen@deploy2002> Started deploy [phabricator/deployment@a883b6d]: deploy phab2002 for T418872
Mentioned in SAL (#wikimedia-operations) [2026-03-03T16:05:20Z] <brennen@deploy2002> Finished deploy [phabricator/deployment@a883b6d]: deploy phab2002 for T418872 (duration: 00m 32s)
Mentioned in SAL (#wikimedia-operations) [2026-03-03T16:05:56Z] <brennen@deploy2002> Started deploy [phabricator/deployment@a883b6d]: deploy phab1004 for T418872
(It doesn't really contain translation updates, only updates to the JSON files that Phabricator won't read until I run a script to update PHP files derived from them)
Deploying in order to keep deploy repo up to date with merged state. Since this does contain PHP file changes, I was assuming that meant it contained a run of the script, but clearly I don't actually understand the translation process here.
Mentioned in SAL (#wikimedia-operations) [2026-03-03T16:07:04Z] <brennen@deploy2002> Finished deploy [phabricator/deployment@a883b6d]: deploy phab1004 for T418872 (duration: 01m 07s)
I've been doing a lot of internal reworking of the scripts used to generate translation files, most of which doesn't have a direct impact on any translations themselves. I haven't actually run the scripts themselves since https://gerrit.wikimedia.org/r/c/phabricator/translations/+/1222809 on January 6
Technically https://gerrit.wikimedia.org/r/c/phabricator/translations/+/1217845 probably did have a direct effect in some edge cases, the rest don't.
My (likely wrong) naïve understanding had been that your recent merged changes to the PHP code which handles extracting and generating translatable strings need to end up on the server at some point. :) But I also must say that I would not be able to explain the full translation workflow (e.g. interaction with translatewiki.net) which predates me poking Phabricator code. You know much better than I do. (Again, thanks for all that work! Very appreciated.)
- Merged changes over the last seven days, all written by Pppery:
- T412421: Export source strings with PLURAL where appropriate: https://gerrit.wikimedia.org/r/plugins/gitiles/phabricator/translations/+/b2164b5375cd81184a7f83b08a110fe459ab6598
- T413529: Properly preserve `%d` across a generate-and-export: https://gerrit.wikimedia.org/r/plugins/gitiles/phabricator/translations/+/ef4432ddf691c66aa2abdf6dc32ee773ee8813b2
- T413532: Test that the mangling of strings in export and generate is reversible.: https://gerrit.wikimedia.org/r/plugins/gitiles/phabricator/translations/+/61d80a922f405ba3a08980943a86dd549b40f2e3
- T413531: Add a linter to the Phabricator translations repo: https://gerrit.wikimedia.org/r/plugins/gitiles/phabricator/translations/+/5d00481cbb31b605a772a06ebb72eca1a8af604f
- https://gerrit.wikimedia.org/r/plugins/gitiles/phabricator/translations/+/d9870d14f568f764a8c2f9c4dec521493c65d614
Only changes that change the src/locales or src/translation directories need to be on the server. The files in src/management don't need to be on the server because they are only used to produce patches changing those directories. In normal times when I'm not poking at things (like from June 2024 to December 2025), here's how the process has been working.
- Wikimedia pulls in the latest upstream from Phorge,.
- I pull those changes from GitLab and run ./export.sh on my own computer (or, usually, a VM running on my computer), which is a thin wrapper around src/management/TranslateWikiManagementExportWorkflow.php
- This delegates to bin/i18n extract in the upstream Phorge repo.
- This produces a src/.cache/i18n_strings.json file in the directory where Phorge (and arcanist, and other WMF extensions) are installed. This file is in .gitignore, so isn't committed.
- src/management/TranslateWikiManagementExportWorkflow.php then parses that i18n_strings.json file and writes the relevant source strings to projects/*/en.json (and projects/*/en_x_raw.json and projects/*/qqq.json).
- I take these changes to the projects directory, and submit them as a patch for review in Gerrit usually with a commit message like "update source strings" (example: https://gerrit.wikimedia.org/r/c/phabricator/translations/+/1206983)
- Someone (usually you) merges that patch.
- Translatewiki.net then reads the en.json and qqq.json files from the Gerrit repo, and uses them to update its own internal database of strings to translate, producing edits like https://translatewiki.net/w/i.php?title=Special%3AContributions&target=FuzzyBot&namespace=1274&tagfilter=&start=&end=&limit=50
- Some translator on translatewiki.net writes a translation to a wiki page in the translatewiki.net db
- Translatewiki.net exports those changes to projects/*/<langcode>.json in Gerrit, and self-merges that patch (usually - occasionally TWN staff have to merge it manually)
- I pull those change from Gerrit and run ./generate.php on my own computer. This takes those JSON files that translatewiki.net wrote, cross-references them with the source strings in en-x-raw.json, and writes PHP files in src/translations
- Sometimes I also manually write locale files in src/locales
- I submit a patch with those changes to Gerrit for review (Example patch: https://gerrit.wikimedia.org/r/c/phabricator/translations/+/1222809)
(Note that up until this point nothing whatsoever has involved the Phabricator server, only the translatewiki.net server, Gerrit/GitLab, and scripts than can be run against any local deploy. Hence, it doesn't matter whether any of the patches above actually get deployed there ...)
- You merge that patch and deploy it to the Phabricator server
- Phabricator reads the PHP files in src/translations and src/locales and uses them to display translation settings and translated strings to the server)
The comment above is a really valuable comment. Let's copy it over to Wikitech somewhere, what do you think?
Uhm, thanks. I knew some manual work is required but I had no idea it's that manual.
That comment feels like material for https://wikitech.wikimedia.org/wiki/Phabricator#Integrations (though "Integration" feels like a euphemism in this case)
I think it sounds more manual than it is when I write it up in such excruciating detail.