Skip to content

Localization Process

Donal Meehan edited this page May 13, 2024 · 44 revisions

Overview

For documentation on how to add strings in the repo, please look into this wiki page.

The following document gives a step by step guide for the string localization process, meaning the import and the export of strings and their translations in our project. We also added a section to provide more clarity for our strings freeze process.

Github action import process

The string import refers to the import of strings from the l10n repository to the Firefox for iOS repository. The string export refers to the reverse action, which is to export strings from the Firefox for iOS repository to the l10n repository. Both of those actions are handled by Github actions. The import action lives in Firefox for iOS, while the export action lives in the l10n repository. The Firefox for iOS team is responsible for reviewing the import PRs opened towards main and releases, and ensuring the strings added in the repo are following the l10n rules. See documentation on how to add strings for this.

Import

String import from the firefoxios-l10n repository happens once a week and points to the main branch. The Github action opens a PR, which then needs to be reviewed and merged by the developer team. Importing strings can also be done by pointing to a certain branch. For example, on hard freeze a string import can be triggered by running the import strings workflow, and writing down the targeted version of the branch as shown in following picture:

Screen Shot 2022-09-12 at 1 36 19 PM

Export

String export happens by adding new strings into the Firefox for iOS strings file. Any developer adding new strings to the project should be familiar with the principles described in l10n documentation.

See documentation on how to add strings for the detailed steps.

Strings Freeze Process

On the team, we have a string freeze day for each release. This string freeze occurs about a week prior to the Soft Code Freeze, which can be confirmed by checking the team's calendar. We do an early string freeze to allow time for volunteers to provide translations for our strings prior to our release. More about soft freeze and hard freeze workflow is discussed in the release checklist.

There will be a string freeze ticket that will get assigned to a developer on the team that will be in charge of this process for the release. A week before the string freeze day, the developer assigned to the ticket should remind all iOS developers about the upcoming deadline.

To ensure a smooth and efficient process during this critical phase, please kindly announce to the team about the upcoming string freeze day and include the following in the ios dev channel:

  • Version Information: The current string freeze applies to [Specify the version number]. Please make sure to check your work against this version before the deadline.
  • Pull Requests for Strings: If you have string-related changes to submit, please remember to create separate pull requests specifically for these tickets and follow the guidelines in this wiki to add, modify or remove strings.

After strings are all in for the release (approx. 1 - 2 days after the announcement), message the Mobile Localization Program Manager. The program manager will run a script, that will extract the strings and upload them for translation. If there are any issues, the program manager may come back to you requesting changes such as to update one of the new strings or to add a version upgrade to an old string. You will need to communicate this back to the respective engineers, who updated the strings, and they will need to create a new PR to address the changes requested.

Once changes are made, confirm with the program manager that strings look good for the release and this process should be completed prior to the string freeze deadline.

⚠️ Shouldn't be done anymore, use Github actions instead to import and export. This documentation located here is in case it would be needed to debug the string import/export process only. ⚠️

Clone this wiki locally