CLDR as source of key internationalization data in Firefox: milestones achieved and next steps

In case you’re not familiar with the acronym, CLDR stands for Common Locale Data Repository: it’s a repository of locale data maintained by the Unicode Consortium, and used in several libraries that power internationalization (i18n) features in products developed by Mozilla, Apple, IBM, Microsoft, and many other companies. Firefox uses the data provided by CLDR mostly through the ICU library.

You can find an exhaustive list of the type of data provided in the CLDR home page. Within Firefox, these are currently the main focus areas:

  • Date and time formatting, calendar preferences.
  • Plural cases.
  • Translation of language and region names.

Date and time formatting, calendar preferences

Firefox 57 shipped with a native datetime picker that can be used in HTML forms. Here’s how it looks in Italian:

The localization data used to generate this dialog comes from CLDR:

  • Date formatting for the placeholder.
  • Month and day names.
  • First day of the week (e.g. Sunday for en-US, Monday for it).

The same data is also available to Firefox developers to properly internationalize other parts of the user interface. It’s provided via an API called ‘mozIntl’, which extends the standard JavaScript Internalization library (ECMA402).

Firefox 61 will also ship with a relative time format API (“in 5 seconds”, “5 seconds ago”), finally allowing front-end developers to use a more natural language in the interface.

Plural cases

Currently, there are 3 completely different sources of truth for plurals:

  • Fluent uses CLDR to determine the number of plural forms for each language, and CLDR categories (zero, one, two, few, other, many).
  • Pontoon stores its own internal rules, using CLDR categories.
  • Gecko stores an internal plural rule, in form of a localizable key with an integer value. Each rule maps to a different number of plural forms, and doesn’t have any relation with CLDR.

It suffices to say that this fragmentation generated a lot of inconsistencies over the years.

Given the renewed focus on Fluent, last December I started analyzing all Gecko plural forms, to identify inconsistencies between our settings and CLDR. This led to correcting the plural form for 10 languages by aligning with the CLDR values. In a couple of cases, I also reported issues back to CLDR: for Macedonian our ticket was accepted and the changes included, for Latvian it was rejected.

A significant amount of time was also invested in correcting errors in Gecko before starting migrating strings to Fluent: several locales had a wrong number of plural forms, but weren’t aware of the issue, given the hacky nature of plural support in .properties. Starting from January, dashboards are reporting this type of errors, allowing localizers to quickly correct them. Soon, these errors will be reported directly in Pontoon when submitting a new translation.

Work is still underway to fix plurals in other projects in Pontoon, and minimize the impact on localizers: for example, if a string moves from 2 plural forms to 6, you need to invalidate existing translations, and possibly copy over one of the existing values to reduce the need for copy and paste.

Translation of language and region names

Localized names for languages and regions are used in Firefox preferences and other parts of the UI. They’re defined as localizable strings in toolkit, and currently consist of 203 language names and 272 region names.

Since CLDR provides this data as well, the plan is to start using it to localize Firefox UI. This poses a few challenges:

  • Can we replace the current list of country names from GENC with region names from CLDR? This proposal already received a green light.
  • What data is missing from CLDR? We ship languages that are missing from CLDR, we’ll need to file tickets to get those language names added.
  • Since we already have localized names, can we compare them with data from CLDR and see how big the difference is? Strictly related: can the CLDR data be used directly?

Right now, the work is mostly focused on the last point, and tracked in this bug. I started analyzing the difference for a couple of languages, including my own (Italian):

  • 53 language names (26.11%) were translated differently between Mozilla and CLDR. After comparing the two translations for each name to identify the best one, in most cases conflicts were resolved by using the CLDR data. Only seven differences remain after this work (3.45%), with five improvements that need to be reported back to CLDR using their Survey Tool. Two more differences are expected, since they are caused by differences in the English source (Frysian vs Western Frysian, Rundi vs Kirundi).
  • 51 region names were translated differently (18.75%). After, only 11 differences remain (4.04%).
  • Language names are not usable directly: in Mozilla they’re uppercase, since they’re only used as stand-alone labels. In CLDR they’re all lowercase, since the language name is always lowercase when used in the middle of a sentence in Italian.

Analysis is now moving to other languages, with higher percentage of differences. The average difference for language names is 45.49%, while for region names is 30.80%, but we have locales with up to 96% of differences, and we need to figure out why that happens.

The full statistical analysis is available in this spreadsheet. If you’re interested in getting a list of the actual differences for your language, feel free to reach out. One thing to keep in mind is that there are differences for English itself, e.g. “Acoli” vs “Acholi”, or “Caribbean Netherlands” vs “Bonaire, Sint Eustatius, and Saba”, and this inevitably affects the data.

Next steps for 2018

Fluent represents the future of localization for Mozilla products, and it relies heavily on CLDR data. But that’s not the only reason to invest resources in improving the CLDR integration within Firefox:

  • Using CLDR means unifying our approach to internationalization data with the one used in products like Windows, macOS, Android, Twitter, Wikipedia, etc. It also means offering a consistent and more familiar experience to our users.
  • It lowers the burden on our localizers. What’s the point of translating hundreds of strings, if there is an established, high-quality dataset that could be safely reused? This data is a live archive, collected and maintained by a large body of linguistic experts cooperating on CLDR, and exposed on a daily basis to millions of users.
  • We can help extending CLDR support to minority languages that are not relevant for commercial software companies. For example, Firefox Nightly currently ships in 101 languages. While Microsoft covers about the same number of languages through Windows language packs, other browsers support half that number (or less).

As already seen, some parts of UI already use CLDR data: if a locale is not available in the CLDR repository, it won’t have a localized datetime picker, or properly localized dates, and it won’t pick the right plural form when using Fluent strings.

In the coming months we’re going to invest resources on building a pathway for locales to be included as seed locales in CLDR: it will likely be a stand-alone project in Pontoon, with Fluent as storage format, used to collect information that will be converted and used to bootstrap locale data in CLDR. Kekoa, who will be back as a intern in the summer, will contribute to this project (among other things).

We also plan to extend mozIntl API to provide localized language and region names. The current idea is to generate a local data source from CLDR, and integrate it with our own data for locales that are not yet available in the CLDR repository. In order to do that, we need to keep investigating the differences between our current translations and CLDR, and identify potential issues before fully switching to CLDR as source for this data.

Improving consistency of translations and other novelties in Pontoon

Over the last couple of months several improvements landed in Pontoon. Let’s have a look at some of them!

Translate across projects

Pontoon now allows you to translate strings across all projects in a single translation interface. Select All Projects from the project menu and all the strings being translated to your language will show up in the sidebar.

Select All Projects from the project menu

Select All Projects from the project menu

Many users have expressed interest in such feature, which helps you work on all untranslated strings in one go, or review all pending suggestions submitted by your team contributors. It’s particularly handy when working on consistency: you can now easily search for inconsistencies in your Firefox Desktop and Firefox for Android translations for example.

Search word by word

We’re changing the default search behaviour to search for each word separately and show results that contain all of them. That’s closer to the default behaviour of search engines.

Example: beta firefox
Finds strings that contain Firefox Beta.

To search for exact matches of multiple words, you need to wrap them in double quotes ("). If you wrap the entire string, the search behaviour is the same as in the past.

Example: Open "New Window"
Finds string Open in a New Window.

If you want to search for strings that contain double quotes, you can escape them with a backslash (\).

Example: <a href="%(url)s">
Searches for <a, href=, %(url)s and >.

Example: <a href="\"%(url)s\"">
Searches for <a and href="%(url)s">.

Thanks to Vishal Sharma for contributing this and many other features over the last few months! One of them is also the ability to see the size of a project when requesting it.

Number of strings for requested projects

Number of strings for requested projects

Language-independent links to translate view

Pontoon now has the ability to link to the translate view without specifying the locale. It means that you might encounter links like in project announcements, which will redirect you to the translate view for the “right” locale – guessed from your user and browser settings.

Thanks to Mai Truong for contributing the patch!

Changing your email address

Finally, Pontoon allows you to change your email address! Simply go to your settings page, type in your new email address and log in with a new one.

Thanks to karabellyj for contributing the patch!

What’s coming up next?

We have a few other interesting bits in the oven:

  • Tags (AKA string tiers) will help with organizing strings by priority.
  • Unreviewed suggestions will be made accessible from dashboards.
  • Compare locales checks known from will be integrated into the translate process. Afterwards, errors and warnings will be displayed on dashboards. Thumbs up to Jarek for turning this long awaited feature into a reality!

Stay tuned for more updates and feel welcome to join the Pontoon community!

Fluent in Gecko, new Pontoon UI, centralized terminology resources, and community workshops in 2018

In 2017, teams across Mozilla began using the OKR (Objective, Key Result) goal setting framework, including the l10n team. At the beginning of last year, we wrote a post about the OKR goals for l10n, particularly focusing on the impact of Firefox Quantum on l10n work during the year. Being very focused on supporting the Firefox Quantum release at the end of last year, our planning for this year began much later. While we may not have a Quantum-level release this year, we have a lot of reasons to be excited about l10n and many diverse opportunities for community to be involved!

Fluent migration in Firefox

We’ve talked about it for nearly a decade, but we’ve never been in a better position to migrate Firefox to the Fluent l10n system than we’re in right now. If you’re not yet familiar with Fluent, it is a run-time l10n system by Mozilla. Fluent enables us to do a lot of cool things, for example:

  • Localizers can provide dynamic and more natural translations for UI strings,
  • Fluent can substitute missing translations in a user’s language for a translation in another preferred non-English language (i.e., language fallback),
  • Localization updates can be sent to users outside of the official release cycle (i.e., less time for bug fixes to ship).

Beginning with Preferences, Firefox will be migrated to Fluent. This is a dependency of a few other Firefox engineering projects and we’re excited to have the support of the Firefox team to accomplish this. With Fluent in place, we’ll also be able to add cool features like on-the-fly language switching to the browser (aka, multilingual Firefox). Expect to see the browser transform into a linguistically more dynamic product, more capable of meeting the needs of a multilingual global user base.

New Pontoon features

Pontoon’s translate view will receive its first full refresh in five years! Included in that refresh will be a localizeable UI, a rich editor for Fluent strings, workflows for a review/translate feedback loop, and (potentially) themes.

Additionally, Pontoon will see a better string organization system for Firefox. Using the string tiers concept from last year, we have classified strings as being high or low priority based on user visibility and target audience. With this in place, localizers will be able to make more consistent decisions about what to localize and what not to localize for Firefox and how to best spend their limited available time.

Finally, concerning l10n quality, Pontoon will incorporate compare-locales checks, allowing it to do QA checks on translations on-the-fly rather than waiting until they hit the repository. We will also add terminology management and suggestion features.

Centralized language resources

Last year, we made a lot of good progress on centralizing localization style guides and creating a basic terminology database (i.e., termbase). This year, we’re enlisting the help of the SUMO, MDN, and UX teams to create a process for identifying and defining new terms for the termbase and merging all language-specific style guides from all areas of Mozilla into one, central location. We’re also working with the Legal, Creative, and Product Management teams to define an updated policy for translating Mozilla brand and product names, storing data about this policy within the centralized termbase.

Continuous localization for more Mozilla projects

With the success of cross-channel for Firefox desktop and Fennec, we’re looking to expand continuous localization to more projects. The idea behind continuous localization is to unblock the string supply chain. In other words, source strings are made available to localize as quickly as possible, and target strings are used in projects as quickly as possible, creating a continuous “green light” status for source and target strings.

To do this, we need to centralize our localization infrastructure into one place. This means eliminating multiple, redundant dashboards as well as expanding compare-locales to run QA on all project types. This foundation will enable us to perform more automated tasks within the string supply chain and QA processes in the future.

Standardize l10n community roles

With the help of the Open Innovation team, we’re exploring how to standardize l10n community roles. Over the years, the lack of clarity in l10n community roles has led to a number of conflicts and problems, among them:

  • Localizers placed in roles they didn’t ask to be in (e.g., leadership roles),
  • Unclear or un-navigable project ownership or role advancement processes,
  • Misaligned expectations between localizers and l10n-drivers about role-specific responsibilities,
  • Unclear responsibility for feedback and mentorship of new contributors,
  • Community Participation Guideline violations brought on by the stress of the problems listed above (e.g., arbitrary gatekeeping, hostile behavior, etc.).

We’ve initiated a pilot project to co-create l10n community roles with the community, starting with a subset of locales and expanding to larger sets over time. It’s critical to us to have the community’s buy-in, so we plan to involve localizers along the way.

Community workshops

Last, but not least, community workshops.

From 2014-2017, the l10n-drivers assumed responsibility for organizing localization sprints, hackathons, and workshops. We went from hyper-local meetups to large-scale meetups (in Berlin’s workshop last year we had 50+ localizers present). Feedback from the community last year taught us that the format of these workshops had grown stale and localizers desired to have more opportunities to self-organize their own meetups.

With that in mind, we’ve decided to remove ourselves from organizing these meetups this year while preserving the annual budget for these workshops. We’re working with the Mozilla Reps to define a unique process for core localizers to organize their own community meetups. The l10n budget would fund these meetups and the Mozilla Reps process would be used to moderate requests (moderated by l10n-drivers, not Mozilla Reps), make financial transactions, and ensure accountability for money spent. We do not yet have the process defined, but will publish that process in the coming weeks.

We also intend to organize some small, focused l10n meetups. These meetups will be organized around accomplishing a specific task with a small group of localizers. For example, one such meetup that we’re hoping to plan is to test prototypes of the new translate view UI in Pontoon. These meetups will be on an as-needed basis, meaning that we won’t be able to anticipate how many, when, or where these meetups will take place throughout the year. We will, however, make sure the wider community is aware of them as early as possible.

This is a big year for l10n as we work to centralize and automate more of the localization process. We’re very much looking forward to this year being the fulfillment of promises from years past. Thank you to all our community for your help. We’re looking forward to seeing what we can accomplish together as passionate, dedicated Mozillians.

compare-locales 3.0 – GSOC

There’s something magic about compare-locales 3.0. It comes with Python 3 support.

It took me quite a while to get to it, but the writing is on the wall that I had to add support for Python 3. That’s just been out for 10 years, too. Well, more like 9ish.

We’re testing against Python 2.7, 3.5, and 3.6 now.

Thanks to Emin Mastizada for the reviews of this patch.

Slightly related, we’re having two l10n-tooling related proposals out for this year’s Google Summer of Code. Check out Google’s student guide for how to pick a project. Adrian is mentoring a project to improve the experience of first-time users of Pontoon. I’m mentoring a project to support Android’s localization platform as a first-class citizen. You’d write translation quality checks for compare-locales and add support for the XML dialect to Pontoon.

L10n Report: March Edition

Please note some of the information provided in this report may be subject to change as we are sometimes sharing information about projects that are still in early stages and are not final yet.


New localizers:

Are you a locale leader and want us to include new members in our upcoming reports? Contact us!

New community/locales added

We enabled several new locales on Pontoon in the past weeks, get in touch if you speak the language and want to contribute:

New content and projects

What’s new or coming up in Firefox desktop

Firefox 59 closed down for localization on February 28, while 60 will remain open until April 25. Firefox 60 is an ESR release, so it’s particularly important to catch up with localization and ensure a good quality in the shipping build.

From a localization point of view, the focus remains on migrating existing Preferences strings to Fluent. We have recently passed the 100 messages milestone, with the migration of the XUL portion of the General pane, and started introducing some of the cool features available in the new localization system.

use-current-pages =
.label =
    { $tabCount ->
        [1] Use Current Page
       *[other] Use Current Pages
.accesskey = C

For more details about this migration, see the announcement on dev-l10n. Also make sure to familiarize yourself with both Pontoon’s UI and Fluent syntax.

More migrations are planned for the 61 Nightly cycle, starting on March 12.

Activity Stream (New Tab) is also planning to integrate its settings in Firefox main preferences for 60: new strings have already landed in the Activity Stream project, a few more will land in mozilla-central.

What’s new or coming up in mobile

There’s a lot going on around mobile this month, so hang on tight!

First of all, Firefox for iOS is soon launching it’s v11. L10n deadline for this is Tuesday, March 13th. This release includes many cool new features and improvements, such as:

  • Improved tracking protection
  • iPad specific improvements in navigation, drag and drop
  • Keyboard support
  • Performance telemetry

On the Firefox for Android front, merge day is like for Desktop, so March 12th. The official release is the next day. Locales supported by the Play Store should expect to get an updated string for the What’s New Beta 60 this week. Please remember to check your appstores folder on Pontoon for anything new! 🙂

Firefox for Fire TV v2 is also right around the corner, and the l10n deadline for completion is Mon March 12. Firefox for Fire TV currently supports 8 languages but have no fear – an in-app locale switcher is in the works for future versions. This means we will be able to provide as many languages as we want (well… almost! 😉 ).

Focus for Android is regaining a bit of activity this month, with a few new strings exposed. Something important to note is that the mobile team stopped using Buddybuilds for testing on device. The APKs are on TaskCluster, which will be where you will be heading in order to test your l10n work on (you may need to uninstall your current Buddybuild first though). A v4.1 is expected at the end of the month – more details to come soon.

Focus for iOS continues to be on pause for now. Expect spot releases here and there. As always, stay tuned on the dev-l10n mailing list for any udpates!

On a more or less related topic – Mozilla is participating in the Google Summer of Code project, and we’re looking to mentor students to work on some really cool projects… come check them out (especially the ones related to Pontoon, wink wink)!

What’s new or coming up in web projects

The Common Voice project is Mozilla’s initiative to help teach machines how real people speak. The first time the team that came to speak to the localization communities was the Berlin L10n Workshop last September. The discussion generated a lot of interests and shed some light on the technical challenges as well. There are two parts that made up the project: the web page and the recordings.

Fast forward, the web part of the project is now open to localization. The team has been overwhelmed with enthusiasm and responses. The website is being localized in 17 languages. The project has attracted quite a following. There are new languages added and new contributors introduced to established communities. Thanks to all who helped with onboarding of the new contributors and to our new contributors who join the Mozillian community.

To the locale managers, please review new suggestions and provide constructive feedback to the new localizers in a timely manner. Share glossary and style guide if they are available. Suggest them sign up to web project mailing lists for future updates, and create an account!

A few words on where the project stands:

  • The website on production is in English for now. Localized websites are on staging only.
  • The sync between Pontoon and GitHub is every 40 minutes.
  • Recording is in English only. However, all speakers, native and non-native, are welcome to create a profile and contribute to the recordings.
  • The first non-English recordings will be in Macedonian.
  • Additional questions, visit the FAQ page.

What’s new or coming up in Foundation projects

Not a whole lot happening this month on localization on the Foundation side, mostly focusing on collecting feedback from our donors to improve our campaigns and running different campaigns in the U.S.
But the Advocacy team is still prepping up a Copyright push before the JURI vote, which has been delayed once again. And they are also exploring campaign ideas around connected toys that could be launched in certain European markets, but the toys themselves are still being investigated. More to come soon!

What’s new or coming up in Pontoon

In February, a team of Pontoon contributors met in Munich to drill into Translate.Next, our effort at rewriting the translate view of Pontoon and building the foundations of the future of Pontoon as a whole. One of the topics we discussed was how to involve the community in the development of Pontoon more closely. As the first step we created a Pontoon category on Discourse, where we’re hoping to get feedback on proposed developments as well as ideation and problem reports.

Additional way to review localized emails

Reviewing Mozilla localized emails can be challenging, especially when you can’t easily display all the strings at once, strip the HTML code and read it in a format close to what will be sent to subscribers.

Sometimes, inconsistencies or typos are hard to notice before receiving an actual test send proof. While it’s still possible to fix them at this point, it’s much more error prone and requires further edits. And usually, only major issues can be fixed.

This new review mode aims to provide a quick preview of localized emails, even if it can’t replicate everything from the final email template, and does not intent to replace a final review and approval of the test send.

Once you’re done with a first translation, you can proofread the email in its entirety, and adjust your translation if necessary. Translations are pulled automatically from Git every 15 minutes.

If you want to quickly check the source of a string, just hover your cursor over the translation, the English string will appear in a tooltip.

How do I access the review mode?

Simply open this page (also linked in the Engagement project info on Pontoon), find the file you just translated then click the REVIEW button. You can use the top menu to jump to your locale.

We hope you will find it handy! And if not, let us know how we can improve it.

Newly published localizer facing documentation

This was mentioned last month, but it’s always good to have a reminder. Come check out what Kekoa (our l10n intern from last summer) wrote out to help l10n communities (yes, that’s YOU!) write simple – but thorough – style guides.

Make sure to start out by reading the Mozilla General Style Guide first, since it provides the basic guidelines for translating Mozilla products. This guide should be used in coordination with a locale-specific style guide for your language.

Then look at some general guidelines that will help you create your own locale style guide.

We encourage communities to participate actively and create or modify their existing style guides here. Everything is explained in the documentation above, so don’t be shy and give it a try! (or ask anyone from l10n-drivers to help out if you’re not sure how to proceed).

Now, are you interested in learning more about Fluent from a localizer perspective? Then this is just what you need!

Friends of the Lion

Image by Elio Qoshi

Know someone in your l10n community who’s been doing a great job and should appear here? Contact on of the l10n-drivers and we’ll make sure they get a shout-out (see list at the bottom)!

Useful Links

Questions? Want to get involved?

Did you enjoy reading this report? Let us know how we can improve by reaching out to any one of the l10n-drivers listed above.

Firefox Nightlies

We’ve run into a problem with localized Firefox Nightlies in some languages today. We’d like to apologize for that, and also help you getting unstuck.

The Nightly builds of Firefox from February 28 in some localizations listed below start with an XML parsing error, the infamous YSOD – the yellow screen of death. To fix your local installation, either go to the Nightly Download Page and reinstall Firefox Nightly, or run the following in your Firefox install location:

firefox.exe -chrome chrome://browser/content/aboutDialog.xul

The latter should just launch the about window, and download an update for Firefox Nightly. You might need to adjust the executable name, depending on your platform. The example above is for Windows.

The affected localizations are: as, bn-BD, bn-IN, en-GB, en-ZA, es-ES, gn, gu-IN, hi-IN, ia, ja, kn, ko, mai, mr, my, ne-NP, or, pa-IN, si, te, zh-CN, and zh-TW.

Please don’t blame the localizers for this, whether a localization was affected or not depended on technical details.

Check out bug 1442145 for those technical details and more, and bug 1442181 on how we intend to avoid this problem in the future.

Leadership shared agreements and localization

Cross-posted from Discourse. If you have comments, please join the discussion there.

A few days ago the Open Innovation team wrote two posts about the general direction of Mission Driven Mozillians and the Revised Leadership Principles – now titled “Shared Agreements”.

The number one biggest question we hear anytime we talk about the shared agreements is “But what will implementing these agreements actually look like? How are we going to do this?!”.

Understanding how these ideas start can positively shape and influence the way Mozilla communities function is primary goal of this work in 2018. By partnering with specific teams and communities to run pilots the Open Innovation team will create processes and support systems that will ultimately make it possible for every Mission Driven Mozillian to make these ideals a reality.

To start (in this first quarter) Open Innovation will be working with the L10n-drivers Team piloting an experiment on how we can implement these agreements into the functioning of specific L10N communities by finding implementations that advance community health with respect for the uniqueness of each.

The goals of this pilot are:

  • To develop a process for supporting communities as they figure out how to implement each agreement in a way that suits local needs and cultural contexts (that can then be shared with other communities in L10N and beyond).
  • To measure and understand ways we can improve the health of pilot communities.
  • To understand how implementation of agreements can drive meaningful change in communities.

The staff supporting this pilot: Jeff (@jbeatty), Delphine (@Delphine), Peiying (@pmo), Emma (@emma_irwin), Flod (@flod), Theo (@theo) and Ruben (@nukeador).

Don’t Wait! While we start working with pilot communities in Q1 we hope that all Mozillians start having conversations about the agreements including what changes might be required to make to roles and structures in make your community healthier and more inclusive. This is something that the #reps program has already started doing.

L10N Report: February Edition


New localizers

  • Kumar has recently joined us to localize in Angika. Welcome Kumar!
  • Francesca has joined Pontoon to localize Firefox in Friulan. Do you speak the language? Join her!

Are you a locale leader and want us to include new members in our upcoming reports? Contact us!

New community/locales added

  • Mixteco Yucuhiti (“meh”) locale was recently added to our l10n repositories and will soon have single-locale builds to test Firefox Android on!
  • Angika (“anp”) locale was added to Pontoon and will soon start to localize Focus for Android. Welcome!
  • Friulan (“fur”) has been enabled in Pontoon to localize Firefox, starting from old translations recovered from Pootle.

New content and projects

What’s new or coming up in Firefox desktop

Migration to FTL (Fluent)

In the past releases we reached a few small but important milestones for the Fluent project:

  • Firefox 58 was released on January 23 with the first ever Fluent string.
  • Firefox 59, which will be released on March 13, has 4 more Fluent strings. For this milestone we focused on the migration tools we created to seamlessly port translations from the old format (.properties, .DTD) to Fluent.

For Firefox 60, currently in Nightly, we aim to migrate as many strings as possible to Fluent for Firefox Preferences. The process for these migrations is detailed in this email to dev-l10n, and there are currently 2 patches almost ready to land, while a larger one for the General pane is in progress.

While Pontoon’s documentation already had a section dedicated to Fluent, constantly updated as the interface evolves, our documentation now has a section dedicated to Fluent for localizers, explaining the basic syntax and some of the specific features available in Gecko.

Plural forms

We already talked about plurals in the December report. The good news is that strings using the wrong number of plural forms are now reported on the l10n dashboard (example). Here’s a summary of all you need to know about plurals.

How plurals work in .properties files
Plural forms in Firefox and Firefox for Android are obtained using a hack on top of .properties files (plural forms are separated by a semicolon). For example:

#1 tab has arrived from #2;#1 tabs have arrived from #2

English has 2 plural forms, one for singular, and one for all other numbers. The situation is much more complex for other languages, reaching up to 5 or 6 plural forms. In Russian the same string has 3 forms, each one separated from the other by a semicolon:

С #2 получена #1 вкладка;С #2 получено #1 вкладки;С #2 получено #1 вкладок

The semicolon is a separator, not a standard punctuation element:

  • You should evaluate and translate each sentence separately. Some locales start the second sentence lowercase because of the semicolon, or with a leading space. Both are errors.
  • You shouldn’t replace the semicolon with a character from your script, or another punctuation sign (commas, periods). Again, that’s not a punctuation sign, it’s a separator.

Edge cases
Sometimes English only has one form, because the string is used for cases where the number is always bigger than 1.

;Close #1 tabs

Note that this string has still two plural forms, the first form (used for case ‘1’, or singular in English) is empty. That’s why the string starts with a semicolon. If your locale only has 1 form, you should drop the leading semicolon.

In other cases, the variable is indicated only in the second form:

Close one tab;Close #1 tabs

If your locale only has 1 form, or use the first case for more than ‘1’, use the second sentence as reference for your translation.

There are also cases of “poor” plural forms, where the plural is actually used as a replacement for logic, like “1 vs many”. These are bugs, and should be fixed. For example, this string was fixed in Firefox 59 (bug 658191).

Known limitations
Plurals form in Gecko are supported only in .properties files, and JavaScript code (not C++).

What about devtools?
If your locale has more plural forms than English, and you’re copying and pasting English into DevTools strings, the l10n dashboard will show warnings.

You can ignore them, as there’s no way to exclude locales from DevTools, or fix them by creating the expected number of plural forms by copying the English text as many times as needed.

Future of plurals
With Fluent, plurals become much more flexible, allowing locales to create special cases beyond the number of forms expected for their language.

What’s new or coming up in mobile

You might have noticed that Focus (iOS/Android) has been on a hiatus since mid-December 2017. That’s because the small mobile team is focusing on Firefox for Amazon Fire TV development at the moment!

We should be kicking things off again some time in mid-February. A firm date is not confirmed yet, but stay tuned on our dev-l10n mailing list for an upcoming announcement!

In the meantime, this means we are not shipping new locales on Focus, and we won’t be generating screenshots until the schedule resumes.

For Firefox on Fire TV – we are still figuring out which locales are officially supported by Amazon, and going to set up the l10n repositories to open it up to Mozilla localizations. There should also a language switcher in the works very soon, too.

Concerning the Firefox for iOS schedule, it’s almost time to kick-off l10n work for v11! Specific dates will be announced shortly – but expect strings to arrive towards the end of the month. March 29 will be the expected release date.

On the Firefox for Android front, we’ve now released v58. With this new version we bring you two new locales: Nepali (ne-NP) and Bengali from Bangladesh (bn-BD)!

We’re also in the process of adding Tagalog (tl), Khmer (km) and Mixteco Yucuhiti (meh) locales to all-locales to start Fennec single-locale builds.

What’s new or coming up in web projects

  • Marketing:
    • Firefox email: The team in charge of the monthly project targeting 6 locales will start following the standard l10n process by email team using bugzilla to communicate the initial requests, Pontoon to host the content, and l10n-driver sending the request through mailing list. Testing emails for verification purpose will be sent to those who worked on the project for the month. The process change has been communicated to the impacted communities. Thanks for responding so well to the change.
    • Regional single language request will also follow the standard process, moving localization tasks from Google docs to Pontoon. If you are pinged by marketing people for these requests through email or bugzilla, please let the l10n-drivers know. We want to make Pontoon the source of truth, the tool for community collaboration, for future localization references, consistency of terminology usage, for tracking contribution activity.
    • has a slow start this year. Most updates have been cleanups and minor fixes. There have been discussions on redesigning the site so the entire site has a unified and modern look from one page to another. This challenges the current way of content delivery, which is at page level. More to share in the upcoming monthly reports.
  • AMO-Linter, a new project is enabled on Pontoon. This features target add-ons developers. As soon as the information on the feature, the release cycle, the staging server is available, the AMO documentation and Pontoon will be updated accordingly. In the meantime, report bugs by filing an issue.
  • Firefox Marketplace will be officially shut down on March 30th. Email communication was sent in English. However, a banner with the announcement was placed on the product in top 5 languages.

What’s new or coming up in Foundation projects

Our 2017 fundraising campaign just finished, but we’re already kicking off this year’s campaign.
One area we want to improve is our communication with donors, so starting in February we will send a monthly donor newsletter. This will help us better communicate how donations are put to use, and build a trust relationship with our supporters.
We will also start raising money much earlier. Our first fundraising email will be a fun one for Valentine’s Day.

A quick update on other localized campaigns:

  • The *Privacy not included website is being redesigned to remove the holiday references, and some product reviews might be added soon.
  • We expect to have some actions this spring around GDPR in Europe, but there is no concrete plan yet.
  • We’ve got some news on the Copyright reform — the JURI Committee will be tentatively voting on March 27th, so we will do some promotion of our call tool over the next few weeks.

The final countdown has started for the Internet Health Report! The second edition is on its way and should be published in March, this time again in English, German, French and Spanish.

What’s new or coming up in Pontoon

  • On February 3, Pontoon passed 3,000 registered users. Congratulations to Balazs Zubak for becoming the 3,000th registered user of Pontoon!
  • We’re privileged to have VishalCR7, karabellyj and maiquynhtruong join the Pontoon community of contributors recently. Stay tuned for more details about the work they are doing coming up soon in a blog post!

Friends of the Lion

Image by Elio Qoshi

Shout out to Adrien G, aka Alpha, for his continuous dedication to French localization on Pontoon and his great progress! He is now an official team member, and we’re happy to have him take on more responsibilities. Congrats!

Know someone in your l10n community who’s been doing a great job and should appear here? Contact on of the l10n-drivers and we’ll make sure they get a shout-out (see list at the bottom)!

Useful Links

Questions? Want to get involved?

Did you enjoy reading this report? Let us know how we can improve by reaching out to any one of the l10n-drivers listed above.

L10N Report: December Edition

Please note some of the information provided in this report may be subject to change as we are sometimes sharing information about projects that are still in early stages and are not final yet.


New localizers

  • Amadou Sileymane Guèye has joined the Fulah localization team and has worked relentlessly in helping projects stay up to date in Pontoon. Fun fact: he is known for his high proficiency in the language and also for solving extremely difficult crossword puzzles in Fulah! Welcome!

New community/locales added

Sicilian (scn), Luxembourgish (lb), and Shuar (jiv) started translating Firefox on Pontoon. If you speak any of those languages, get in touch to help!

While Amharic (am) is not a brand new locale, it has recently known a period of revival. They are going to ship their first localized Mozilla product next week, which is Focus for Android. Congrats!

New content and projects

What’s new or coming up in Firefox desktop

Wondering why there weren’t new strings to translate for Firefox in the past few weeks? We hit a bit of a roadblock with cross-channel and merge day. Axel is working hard on finding a solution, we’re going to resume exposing new strings as soon as possible.

The current queue consists of about 130 strings, most of them belong to the new about:devtools page. This is the first step in decoupling Firefox Developer Tools from the main application, moving them into an add-on that can be disabled on release and beta channels.

We have also uncovered a couple of wide-spread (and long standing) l10n bugs.

PKCS #11 (security) has a peculiar set of limitations for a few strings: once encoded to UTF-8, they need to fit a 32 or 64 bytes buffer. Turns out we had 264 errors in our localizations, accumulated over 15 years!

A bug has been filed for each of the 71 affected languages, and within 24 hours we were already under 180 errors. Thanks for the quick response!

Incorrect number of plural forms

Plural forms in Firefox and Firefox for Android are obtained using a hack on top of .properties files (plural forms are separated by a semicolon). For example:

#1 tab has arrived from #2;#1 tabs have arrived from #2

English has 2 plural forms, one for singular, and one for all other numbers. The situation is much more complex for other languages, reaching up to 5 or 6 plural forms.

In Russian the same string has 3 forms, each one separated from the other by a semicolon:

С #2 получена #1 вкладка;С #2 получено #1 вкладки;С #2 получено #1 вкладок

It looks like several languages have an incorrect number of plural forms, or a completely wrong plural rule. You should have seen bugs if your locale is affected, or fixes directly in Pontoon if the mistake was easy to identify (e.g. a closing extra semicolon).

What’s new or coming up in mobile

Did you notice that Firefox iOS v10 came out, with many more languages added? Come check it out here if you haven’t! Languages added are: Afrikaans (af), Bosnian (bs), Spanish Argentina (es-AR), Galician (gl), Armenian (hy-AM), Interlingua (ia), Khmer (km), Kannada (kn), Malayalam (ml), Odia (or), Punjabi (pa-IN) and Sinhala (si).

If you see that your language is incomplete you can get involved and help! Just reach out to Delphine.

Focus iOS and Android should get a new release some time next week! V4 is right around the corner, and will offer a ton of cool new features. If you don’t have Focus yet, you can find the iOS version here and the Android one here. While usually on a two week release schedule, Focus will take some end of year vacations and come back in January. This means Focus localizers will also have some time off too 🙂

What’s new or coming up in web projects project is finally taking a break! This is after a few weeks of mad rush leading up to the Firefox Quantum launch to add a few more new pages and revisions. Thanks to all of you who have been part of this journey, keeping the site to date despite the tight schedule! site has gone through quite a transformation since the release of the new branding guideline. The logos, color schemes and palettes, layout, and navigation menu all went through major changes. Content style and tone had a major shift to correspond to the visual update. Since June, you have localized and reviewed about 10,000 words, in 20+ new, replacement, and updated pages.

During the “quiet” period, there will be some cleanups in the backend, so obsolete pages will be permanently removed from the dashboards. There might be small updates here and there as a result of the cleanup. Keep an eye on the dashboard for these non-urgent changes.

If you are still catching up with the updates, use the webdashboard for pending projects in your locale.

What’s new or coming up in Foundation projects

On the campaigns side, the Foundation is currently focused on the fundraising and the *Privacy Not Included campaigns.

For fundraising, we should be sending 2 or 3 more emails in December, you should see them appear on the webdashboard. Thanks a lot for all the work you’ve already done for fundraising so far, you’ve helped us a lot! We would be in a far worse position without your help.

This week we’ve worked with the snippets and product teams to launch an improved version of the snippets in Firefox Quantum, making them a bit more prominent and adding back the donate form. Hopefully more people will notice your work and donate eventually!

We are also doing some video testing in English and German, kudos to Michael for his quick help.

Newly published localizer facing documentation

A new document is available with basic instructions on how to use Bugzilla for localizers.


  • We held a Localization Workshop in Kolkata on November 18-19. Here are a few blog posts about this event from Drashti, Bala and Selva.
  • Want to showcase an event coming up that your community is participating in? Reach out to any l10n-driver and we’ll include that (see links to emails at the bottom of this report)

Localization impact by the numbers

  • [Snippets]: Since Quantum launch on Nov 14, and not counting the default onboarding messages all users see when they start 57, so impressions and clicks that have been made possible by L10N are much higher than the numbers below reflect:
    • As of Dec 2nd, non-EN snippets generated 355,676,300 impressions (WOW!)
    • Over 40,000 clicks.
    • Contributors have helped Mozilla raise over $50,000 fundraising dollars, and we expect this number to be much higher by the end of year. Fundraising snippets were mostly turned off between Quantum release and Giving Tuesday.
  • [Firefox Rocket]: Launched in Indonesia since Nov 7, the install number between in the four-week period was 100,930.

Friends of the Lion

Image by Elio Qoshi

  • Huge congratulations to Rodrigo Guerra, Carmelo Serraino, and the other members of the Interlingua team for doing an outstanding job in localizing Firefox. Target for Firefox desktop release is 59. The site is already live on production!
  • Latgalian is also moving to Beta and Release with Firefox 59. Thanks to Dainis for taking over translation ownership, and Raivis from the Latvian team for helping to kick-start it.
  • Vietnamese is moving to Beta and Release on Firefox Android and riding the 59 train as well. Congratulations to the team who worked hard on testing and making sure the app is in impeccable shape!
  • Bengali (from Bangladesh) and Nepali will be in the Firefox Android 58 release coming up next Jan. Congratulations on this achievement!
  • Wolof shipped with Firefox Android 57. Congrats to this small team that does an incredible effort each time!
  • Thanks to Hari Om Panchal, from the Gujarati team, for doing a great job, translating almost 2 thousand strings in a short period of time.
  • Thanks to the whole Malayalam team for reviving their localization effort after a long hiatus.
  • Kudos to all the teams that started cleaning up their bugs in the Mozilla Localization product, without forgetting all those that were already keeping a close eye on their queue.
  • Thanks to Stoyan of the Bulgarian community for identifying issues in AMO and pushing for product changes to make it more localizer friendly. The AMO developers will start this discussion at the All Hands.

Know someone in your l10n community who’s been doing a great job and should appear here? Contact on of the l10n-drivers and we’ll make sure they get a shout-out (see list at the bottom)!

Useful Links

Questions? Want to get involved?

Did you enjoy reading this report? Let us know how we can improve by reaching out to any one of the l10n-drivers listed above.

Please note that there will be no January l10n report as this is going to be a quiet month (for once) at Mozilla. Happy end of year holidays to those of you that celebrate it!

In Memoriam: Mamadou Niang, Fulah localizer

Guest post from Mozilla Fulah community leader, Ibrahima Saar. UPDATE: Added pictures and a PayPal link for donations to the Mamadou’s family.

It is with deep pain that we announce that our friend, teammate Mamadou Niang died in an accident while traveling from rural town Matam to Dakar to attend a workshop at his organization’s headquarters. We had just had a meeting the day before to sprint to our 31st October deadline for Firefox localization. His last words, the morning before he traveled: “Don’t worry, I will be available to work on Pontoon while away.” Mamadou Niang has been working as a Fulah specialist and rural development project coordinator for the organization Tostan (Humanitarian and Literacy). He was the co-organizer of our 2014 workshop in Dakar while also very busy moving around villages on his motorbike. Also Niang was almost the person who took care of many families as he was the only one earning a salary among a large family. He was my friend and mentee and I am so sad.

After the online meeting we had, he told me that he would leave for the town of Thiès the next morning. The city of Thiès is about 500 kilometers from where he worked. Actually Mamadou is from a small village called Aram, on the river Senegal in the far north of the country. Aram is a well-known village because a very famous Fulah singer who invented a new musical genre called “Pekaan” is from there. it is a fisherman’s village where everyone has fishing as a traditional occupation and that occupation is a very important cultural aspect because it consists not only of fishing but all the cultural practices that go with fishing.

That community of villages across the north of Senegal and the south of Mauritania is well known for their knowledge of water and the spirits of the river. If some of you you remember, you might have heard about many Firefox terms derived from the practice of fishing. Terms like “aspect ratio” and “Time Out” are directly derived from that community’s fishing tools and practices. Mamadou and I are both from that community and are also a specialist of the language. That, plus the fact he was working in the field in rural areas, made Mamadou Niang a valuable asset for the Fulah localization team.

On Wednesday, October 25th Mamadou was on a trip to the headquarters of his organization for a workshop. He frequently traveled there on public transport to attend meeting, submit reports, and the like. Last year, he posted on Facebook a photo warning people that the trip from Matam to Dakar was extremely difficult and dangerous and people should be very careful. He also called on the government to repair roads and make them more secure. Sadly, he died in a public transport accident on the same type of vehicle that he posted it on Facebook.

When he left in the morning I told him that we would chat after he’d arrive. He also assured me that he would be available for working on Pontoon while away. The day before we struggled to get him migrate his account from Pootle to Pontoon, since I could not see him on the team list to change his permissions. He had an extremely slow connection and we only succeeded late in the afternoon. Actually, I proposed he translate one string so that I can see him on the list of contributors, which he did. I added him to the Fulah team finally.

I have been mentoring Mamadou Niang for a few years now and I was so happy to see him contribute so much especially on Firefox OS back in 2014. Then he was also very active spreading the word about Firefox because he had first-hand contact with people learning local languages as part of his work for the organization Tostan. In 2014 he was very active helping me recruit people who would participate in the workshop we organized in Dakar, the capital of Senegal from the 3rd to the 6th of March. He was very very valuable to me because most of the people who subsequently participated in the workshop did not know me and there was no way I could get in touch with them. Most of them indeed are working in rural areas where literacy work is the most needed it was the first time to meet him and to meet many of the people who participated in the workshop. Since, we have become very very good friends and we chatted on Facebook or spoke on the phone virtually every day.

Although he was using a very busy traveling across the countryside on his motorbike, he helped a lot with translation work on Pootle. Since we migrated translations to Pontoon, it was his first time to come to the new platform to set up his account and start working. Unfortunately that lasted less than 24 hours.

We will miss Mamadou very much because he was so kind, so helpful to all and always joking. He was also very active in his Village to help with projects on human development as well as literacy. He was a husband and a young father who took care of many families. Therefore he left his family with sorrow and also concerned for the future. May his soul rest in peace.

A fund is being raised for Mamadou Niang’s family. If you are interested in contributing, please visit PayPal.