Progressive 1 . 0: a localization program for natural-sounding translations

Fluent is a group of localization specifications, implementations and great practices developed by Mozilla. It is presently used in Firefox. With Fluent, translators can create expressive translations that audio great in their language. Today we’ re announcing version 1 . zero of the Fluent file format specification. We’ re inviting translation tool writers to try it out and provide comments.

The Problem Fluent Resolves

With almost one hundred supported languages, Firefox faces a lot of localization challenges. Using traditional localization solutions, these are difficult to overcome. Software program localization has been dominated by a good outdated paradigm: translations that chart one-to-one to the source language. The particular grammar of the source language, which usually at Mozilla is English, imposes limits on the expressiveness of the interpretation.

Consider the following information which appears in Firefox once the user tries to close a screen with more than one tab.

  tabs-close-warning-multiple =
You happen to be about to close $count tabs.
Are you currently sure you want to continue?

The message is only shown when the tab count is two or more. In English, the word tab will usually appear as plural tabs . An English-speaking programmer may be content with this message. This might sound great for all possible values associated with $count .

In English, a single variant from the message is enough for all values associated with $count .

Many translators, however , will quickly explain that the word tabs will take different types depending on the exact value of the $count adjustable.

In traditional localization solutions, the onus of repairing this message is on designers. They need to account for the fact that other dialects distinguish between more than one plural form, even though English doesn’ t. As the variety of languages supported in the application increases, this problem scales up quickly— instead of well.

  • In certain languages, nouns have genders which usually require different forms of adjectives plus past participles. In French, connecté , connecté e , connecté s plus connecté es all mean connected .
  • Design guides may require that different conditions be used depending on the platform the software operates on. In English Firefox, all of us use Settings on Windows and Preferences upon other systems, to match the wording from the user’ s operating system. In Western, the difference is starker: some computer-related terms are spelled with a various writing system depending on the user’ s i9000 OS.
  • The framework and the target audience of the application may need adjustments to the copy. In British, software used in accounting may file format numbers differently than a social media internet site. Yet in other languages such a variation may not be necessary.

There are many grammatical and stylistic variants that don’ t map one-to-one between languages. Supporting all of them making use of traditional localization solutions isn’ capital t straightforward. Some language features need trade-offs in order to support them, or even aren’ t possible at all.

Asymmetric Localization

Fluent turns the localization scenery on its head. Rather than need developers to predict all feasible permutations of complexity in all backed languages, Fluent keeps the source vocabulary as simple as it can be.

We all make it possible to cater to the sentence structure and style of other languages, individually of the source language. All of this occurs in isolation; the fact that one vocabulary benefits from more advanced logic doesn’ big t require any other localization to apply this. Each localization is in control of exactly how complex the translation becomes.

Consider the Czech translation from the “ tab close” message talked about above. The word cell (tab) must get one of two plural forms: panely for matters of 2, 3, and four, and panelů for all other numbers.

  tabs-close-warning-multiple sama dengan $count ->
     [few]  Chystáte se zavřít  $count  panely. Opravdu chcete pokračovat?
   * [other]  Chystáte se zavřít  $count  panelů. Opravdu chcete pokračovat?


Progressive empowers translators to create grammatically right translations and leverage the significant power of their language. With Progressive, the Czech translation can now take advantage of correct plural forms for all feasible values of the $count variable.

In Czech, $count values of 2, 3, plus 4 require a special plural type of the noun.

At the same time, simply no changes are required to the source code neither the source copy. In fact , the reasoning added by the Czech translator towards the Czech translation doesn’ t influence any other language. The same message within French is a simple sentence, like the English one:

  tabs-close-warning-multiple =
Vous ê tes sur le point sobre fermer $count onglets.
Voulez-vous franchement continuer?

The idea of asymmetric localization is the key innovation of Progressive, built upon 20 years of Mozilla’ s history of successfully shipping local software. Many key ideas within Fluent have also been inspired by XLIFF and ICU’ s MessageFormat .

At first glance, Fluent looks just like other localization solutions that enable translations to use plurals and grammatical genders. What sets Fluent aside is the holistic approach to localization. Progressive takes these ideas further simply by defining the syntax for the entire textual content file in which multiple translations could be stored, and by allowing messages in order to reference other messages.

Terms and References

A Fluent file may include many messages, each translated to the translator’ s language. Messages may refer to other messages in the exact same file, or even to messages from all other files. In the runtime, Fluent includes files into lots , and references are solved in the scope of the current pack.

Referencing messages is really a powerful tool for ensuring regularity. Once defined, a translation could be reused in other translations. Fluent also has a special kind of message, known as a term , which is best suited for reuse. Phrase identifiers always start with a splash.

  -sync-brand-name = Firefox Account

Once defined, the -sync-brand-name expression can be referenced from other messages, but it will surely always resolve to the same worth. Terms help enforce style recommendations; they can also be swapped in and out to change the branding in unofficial creates and on beta release channels.

  sync-dialog-title sama dengan -sync-brand-name
sync-headline-title =
-sync-brand-name: The simplest way to bring
 your data always with you
sync-signedout-account-title =
 Connect with your -sync-brand-name

Using terms verbatim in the middle of a sentence may cause difficulty for inflected languages or meant for languages with different capitalization rules compared to English. Terms can define several facets of their value, suitable for use within different contexts. Consider the following associated with the -sync-brand-name term in Italian.

  -sync-brand-name sama dengan $capitalization ->
   * [uppercase]  Account Firefox
     [lowercase]  account Firefox


Due to asymmetric nature of Fluent, the particular Italian translator is free to determine two facets of the brand name. The particular default one (uppercase) is suitable with regard to standalone appearances as well as for use at the start of sentences. The lowercase version could be explicitly requested by passing the particular capitalization parameter, when the brand name is utilized inside a larger sentence.

  sync-dialog-title = -sync-brand-name
sync-headline-title =
-sync-brand-name: il método migliore
 per avere i tuoi dati sempre con te

# Explicitly request the lowercase version of the brand name.
sync-signedout-account-title =
 Connetti il tuo -sync-brand-name(capitalization: "lowercase")

Defining multiple term versions is a versatile technique which allows the particular localization to cater to the grammatical needs of many languages. In the subsequent example, the Polish translation may use declensions to construct a grammatically appropriate sentence in the sync-signedout-account-title message.

  -sync-brand-name = $case ->
   * [nominative]  Konto Firefox
     [genitive]  Konta Firefox
     [accusative]  Kontem Firefox

sync-signedout-account-title =
 Zaloguj do -sync-brand-name(case: "genitive")

Fluent assists you to express linguistic complexities when essential. At the same time, simple translations remain basic. Fluent doesn’ t impose difficulty unless it’ s required to make a correct translation.

  sync-signedout-caption = Take Your Internet With You
sync-signedout-caption = Il tuo Web, sempre con te
sync-signedout-caption = Zabierz swoją sieć se sobą
sync-signedout-caption = So besitzen Sie das Web ü berall dabei.

Progressive Syntax

Today, we’ re announcing the first stable launch of the Fluent Syntax. It’ ersus a formal specification of the extendable for storing translations, accompanied by beta releases of parser implementations within JavaScript, Python, and Rust.

You’ ve already noticed a taste of Fluent Format in the examples above. It has been built with non-technical people in mind, and to associated with task of reviewing and modifying translations easy and error-proof. Error recuperation is a strong focus: it’ h impossible for a single broken interpretation to break the entire file, or even the snel adjacent to it. Comments may be used to connect contextual information about the purpose of a message or even a group of messages. Translations can period multiple lines, which helps whenever using longer text or markup.

Fluent files can be opened up and edited in any text publisher, lowering the barrier to access for developers and localizers as well. The file format is also nicely supported by Pontoon , Mozilla’ s open-source translation management system.

Progressive Playground is an on the internet sandbox for trying out Fluent reside inside the browser.

You can learn read more about the syntax by reading the particular Fluent Syntax Guide . The formal definition can be found in the particular Fluent Syntax specification . And if you just want to quickly see it for, try the Fluent Play ground — an online editor along with shareable Fluent snippets.

Request for Feedback

Opera has been the main driver behind the introduction of Fluent so far. Today, there are more than 3000 Fluent messages within Firefox . The migration through legacy localization formats started earlier last year and is now in full golf swing. Fluent has proven to be a stable plus flexible solution for building complicated interfaces, such as the UI of Opera Preferences. It is also used in a number of Mozilla websites, such as Firefox Deliver and Typical Voice .

Good Fluent is a great choice for apps that value simplicity and a trim runtime, and at the same time require that will elements of the interface depend on several variables. In particular, Fluent can help make natural-sounding translations in size-constrained UIs of mobile apps; in information-rich layouts of social media platforms; and games, to communicate gameplay data and mechanics to the player.

We’ d love to listen to from projects and localization suppliers outside of Mozilla. Because we’ lso are developing Fluent with a future regular in mind, we invite you to give it a try and let us know if it addresses your own challenges. With your help, we can sum up and improve Fluent to address the requirements of many platforms, use cases, plus industries.

We’ lso are open to your constructive feedback. Find out more about Fluent on the project’ t website and make sure you get in touch on Fluent’ ersus Discourse .

As a Localization Engineer at Mozilla, I generate solutions which help make Firefox offered globally and relevant locally.

A lot more articles by Staś Mał olepszy…

If you liked Progressive 1 . 0: a localization program for natural-sounding translations by Staś Małolepszy Then you'll love Web Design Agency Miami

Add a Comment

Your email address will not be published. Required fields are marked *