Changes

Jump to: navigation, search

Fluent

758 bytes added, 16:29, 5 January 2017
no edit summary
Project Fluent is a localization paradigm designed to unleash the entire expressive power of natural language translations. Project Fluent keeps simple things simple and makes complex things possible. The syntax used for describing translations is easy to read and understand. At the same time it allows, when necessary, to represent complex concepts from natural languages like gender, plurals, conjugations, and others. ==Why are we doing this?==Project Fluent is a spin-off from [[L20n]], a localization framework developed by Mozilla. It only consists of the low-level internals of L20n. By releasing the foundation of L20n as a separate project we hope to enable more organizations to use it. L20n (and L20n.js specifically) is a bundled deal. If you buy into it, there are many things that change: the localization happens on the client side and is async, it is bound to DOM and uses a new file format; the way you make your app localizable is different too. If you’re developing a web application, you likely already have some way of working with the DOM and you’re using an opinionated framework to stay sane. L20n adds a layer on top with its own opinions and paradigms. By decoupling Project Fluentfrom the rest of L20n’s bundled deal, it will become easier for external parties to adopt it. And we don’t even have to actively try to convince them. We’ve already seen interest from Java, C# and Rust developers. We also know that ICU is interested in revising MessageFormat. With FTL, we can tap into this interest without bringing the entire DOM and async API baggage along. ;Goals:Design a low-level API which can be used to build localization frameworks.:Create documentation for implementing it in other projects and languages. ;Non-Goals:Create a new localization framework. ==Design Philosophy==
Project Fluent is encapsulates a localization paradigm designed to unleash the entire expressive power lot of natural language translations. Project Fluent keeps simple things simple and makes complex things possible. The syntax used for describing translations is easy to read and understand. At the same time it allows, when necessary, to represent complex concepts from natural languages like gender, plurals, conjugations, and othersmain design axes of L20n.
==Goal==* Separation of concerns* Translations-as-an-object (great for UI widgets and components)* More control for the localizers* Better and more-natural sounding translations* Integration with Intl/ICU
''Design an Project Fluent implementations aim to be: atomic low-level API which can be used to build localization frameworks, synchronous and pure (no IO).''
==DeliverablesProject Pillars==
The intended outcome of Project Fluent is a syntax for describing translation resources and a low-level API for formatting translations into strings.
* Implementation in Python.
* Implementation in Rust.
 
==Rationale==
 
Project Fluent is a spin-off from [[L20n]], a localization framework developed by Mozilla. L20n is designed as a combination of three layers of APIs stacked on top of each other. This modularization allows L20n to support many different environments and platforms.
 
# The low-level API providing single-purpose building blocks for L20n.
# ''Localization'' - The main L20n class responsible for language negotiation, resource loading and the fallback strategy.
# ''LocalizationObserver'' - The manager class used to bind to the host environment.
 
Project Fluent is based on the first layer and intends to replace it in L20n. It encapsulates a lot of main design axes of L20n: separation of concerns, translations-as-an-object (great for UI widgets and components), more control for the localizers, better and more-natural sounding translations, integration with Intl/ICU.
==Status==
The FTL syntax used in L20n.js as of January 1st, 2017, will be tagged as version 0.1.
Canmove, confirm
1,448
edits

Navigation menu