Single localization source for multiple builds
Firefox uses one localization source for all of its build versions.
There’s a number of upsides to this:
Localizers maintain a single source of truth. They can translate Nightly, while updating Beta, Developer Edition or even Release and ESR.
It extends the window of time localizers can work on strings before deadlines.
Uplifting string changes has less of an impact on the localization toolchain, and their impact can be evaluated case by case.
So the problem at hand is to have one localization source and use that to build multiple versions of Firefox. The goal is for that localization to be as complete as possible for each version.
The process to tackle these follows these steps:
Create resource to localize, firefox-l10n-source.
Review updates to that resource in a quarantine.
Expose a known good state of that resource to localizers.
Get content localized in Pontoon.
Write localizations back to firefox-l10n.
Get localizations into the builds.
firefox-l10n-source repository
firefox-l10n-source acts as a unified source string repository for all
shipping Firefox versions (nightly, beta, release, ESR, etc.).
The repository consists of two branches, main
and update
.
The main
branch contains all final en-US
strings. Pontoon syncs from
this branch exposing any new strings committed to this branch to Localizers.
The update
branch acts as a quarantine. Scheduled GitHub actions are used
to regularly extract new messages from the Firefox source code in gecko-dev
and add them to the update
branch. Changes in the update
branch are
merged into main
after the Localization Team review.
Note
The concept behind the quarantine in the process above is to protect localizers from churn on strings that have technical problems. Examples like that could be missing localization notes or copy that should be improved.
firefox-l10n repository
firefox-l10n acts as the source of truth of all localized strings. Once the translation of a string is completed in Pontoon, the content is stored in the associated sub-directory for each locale. These strings are then used during build to create builds and langpacks for all shipping Firefox locales.