Productization patches

Productization is the process of determining a users choice of default search engines, content and protocol handlers, bookmarks, and links to recommended sites on the in-product pages as it relates to their locale. It is one of the most customizable and localizable parts of the product L10n process, as it goes beyond string translation.

It's super important that you learn how to productize your products. The current wiki doc on this topic will instruct you on the guidelines for productizing your locale's products, but this doc will walk you through how to implement those guidelines. This process is split up into a few different phases: research & prep, patchify, review, commit, & land.

Research & prep

  1. File a bug under Mozilla Localizations>[your_locale] to request a productization preferences. If this is your first localization, the L10n drivers will file this bug once your hg Aurora repo has been created and you are close to completing your string translation.
  2. The L10n drivers review your request with you by performing market research and evaluating site quality and standards compliance.
    • Note that the bug will be resolved as WONTFIX if the suggestion doesn't work out meet the above criteria.
  3. If there's no existing collaboration with the site provider and Mozilla, ask for permission from both parties to include it.
  4. Verify the parameters to use, in particular for search.


  1. Create a patch of the implementation containing your productization preferences.
    1. Search plugins are found in browser/searchplugins. Each plugin is stored as an XML file, with list.txt containing the names of each plugin. Here is an example search plugin file using French Wikipedia:
<!-- This Source Code Form is subject to the terms of the Mozilla Public
   - License, v. 2.0. If a copy of the MPL was not distributed with this
   - file, You can obtain one at -->

<SearchPlugin xmlns="">
<ShortName>Wikipédia (fr)</ShortName>
<Description>Recherche intégrée Wikipédia</Description>
<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAACXBIWXMAAAsTAAALEwEAmpwYAAADGGlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjaY2BgnuDo4uTKJMDAUFBUUuQe5BgZERmlwH6egY2BmYGBgYGBITG5uMAxIMCHgYGBIS8/L5UBFTAyMHy7xsDIwMDAcFnX0cXJlYE0wJpcUFTCwMBwgIGBwSgltTiZgYHhCwMDQ3p5SUEJAwNjDAMDg0hSdkEJAwNjAQMDg0h2SJAzAwNjCwMDE09JakUJAwMDg3N+QWVRZnpGiYKhpaWlgmNKflKqQnBlcUlqbrGCZ15yflFBflFiSWoKAwMD1A4GBgYGXpf8EgX3xMw8BSMDVQYqg4jIKAUICxE+CDEESC4tKoMHJQODAIMCgwGDA0MAQyJDPcMChqMMbxjFGV0YSxlXMN5jEmMKYprAdIFZmDmSeSHzGxZLlg6WW6x6rK2s99gs2aaxfWMPZ9/NocTRxfGFM5HzApcj1xZuTe4FPFI8U3mFeCfxCfNN45fhXyygI7BD0FXwilCq0A/hXhEVkb2i4aJfxCaJG4lfkaiQlJM8JpUvLS19QqZMVl32llyfvIv8H4WtioVKekpvldeqFKiaqP5UO6jepRGqqaT5QeuA9iSdVF0rPUG9V/pHDBYY1hrFGNuayJsym740u2C+02KJ5QSrOutcmzjbQDtXe2sHY0cdJzVnJRcFV3k3BXdlD3VPXS8Tbxsfd99gvwT//ID6wIlBS4N3hVwMfRnOFCEXaRUVEV0RMzN2T9yDBLZE3aSw5IaUNak30zkyLDIzs+ZmX8xlz7PPryjYVPiuWLskq3RV2ZsK/cqSql01jLVedVPrHzbqNdU0n22VaytsP9op3VXUfbpXta+x/+5Em0mzJ/+dGj/t8AyNmf2zvs9JmHt6vvmCpYtEFrcu+bYsc/m9lSGrTq9xWbtvveWGbZtMNm/ZarJt+w6rnft3u+45uy9s/4ODOYd+Hmk/Jn58xUnrU+fOJJ/9dX7SRe1LR68kXv13fc5Nm1t379TfU75/4mHeY7En+59lvhB5efB1/lv5dxc+NH0y/fzq64Lv4T8Ffp360/rP8f9/AA0ADzT6lvFdAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAHqSURBVHjapJUxb9NQFIW/JAip2xNS1/J+goeqUqeajdGVmFgwI1OcmYEgITFG7EgJQ+b2HzgbElJF+QU2iBl7YAFRnQ5+fnFcB0J8Jp/r53vPu+f6vYEA4JBTTjhkN/zkio9kAAihpyr1v/ijN7ovEHqiffFeDHTAdx6wL46HnPX4HM6HHNEHR0NGvRKMhvRE7wT3ACYssBggpyThIRMCAFaEzHhOiQWumfGFBQGQY0kB9EKSCsVCyKpQxUMhdOEMj4Vi91wIGX2uyNJtwTDHAgbjOUBJ/T50ETDAzCn0CiRpLkSd2VW1rqZR6uOpzHoWl40EkmkIlTIhNJc0bUSlSNNtCaZCKGtpyDZimXB92uhBhTEAHzx/BuQ8Isb62Dti16c7PahrNnbovFhXLGQaau4oqDSULDx/BcCl55cEDTUdCqqagWcXbjpqWD8ZWxRUGq5ZOTYhAXLHV0DU/qCtQLJCkZuM0PHQGThvL152JJh5M61SP2CpMpmmgdsTFDJCiaaubq0haQ7Q3xLUZq4NqzS0DNzWxNq8ksgbFmGgwf95oFgijJuB6v9L3Fx2HSg3XeExZxv1xuSEXQt/o8fqg9cDHfB15zuxjRuOETrfu/5b9bhcf+mlRmLgr/cTgp1vqR9c8YlvALcDAPr5jIx+4LKcAAAAAElFTkSuQmCC</Image>
<Url type="application/x-suggestions+json" method="GET" template="">
  <Param name="action" value="opensearch"/>
  <Param name="search" value="{searchTerms}"/>
<Url type="text/html" method="GET" template="">
  <Param name="search" value="{searchTerms}"/>
  <Param name="sourceid" value="Mozilla-search"/>

  1. Create XML files for each search plugin preference following the above example. Each XML file should start with a license header, and use UNIX line endings. For reference on how each tag functions, visit the OpenSearch wiki page and the MozSearch wiki page. The pages are old (I mean, Firefox 2???), but still accurate.
  2. In list.txt, add the search plugin's XML filename on a new line and save.
  3. Create a patch of the searchplugins directory by entering the following command in your command-line tool, where OUT_FILE is where you give your patch a name.
$ hg diff -p -U 8 mozilla/browser/searchplugins/ > OUT_FILE
  1. Run hg add if needed, but make sure to only catch the right files.technical review.png
  2. Attach your patch file to the bug by clicking the "Add an attachment" link. Once attached and labeled as a patch, open the attachment details.
  3. In the attachment details, select the ? from the dropdown menu next to the review flag (see image). This will display a text box to assign the review to someone.
  4. Enter :flod or :Pike as the Requestee.



Review, commit, & land

  1. Address any review comments made by the reviewees and update the patch until it receives an r+ rating.
  2. If the r+ is "with nits" (i.e., that's short for nit-picky requests), fix those before committing. Also, no new patch attachment will be needed.
  3. Commit the patch to your Aurora repo.
    1. Only commit the changes you had reviewed.
    2. Use a commit message that mentions the bug number, describes the change, and mentions the reviewer. For example:
hg ci -m "bug 654321, copied the comment from the doc without reading, r=nobody" path-to-changed-files
  1.  Close the bug, with copying the url to your change in the closing comment. Write up something like this for your comment:
Landed this on aurora,, marking FIXED.
  1. Update your sign-offs on the L10n dashboard to include the change into the next release.

If you can't close the bug (you don't have the required priviledges in bugzilla), poke on #l10n; there are folks that can fix that up.

And that's it! It can be considered a bit complicated at first, but after you do it the first time, it gets easier and easier after that :-)

Document Tags and Contributors

 Contributors to this page: Flod, jbeatty
 Last updated by: Flod,