Skip to content
Staś Małolepszy edited this page Feb 14, 2017 · 7 revisions

Fluent is a localization paradigm designed to unleash the expressive power of natural language translations.

Background

Software localization has been dominated by an outdated paradigm: the translation is just a dictionary of strings which map one-to-one to the English (en-US) copy. This paradigm is unfair and limiting to languages with grammars more complex than English. For any grammatical feature not supported by English, a special case must be added to the source code, leaking logic into all translations. Furthermore, creating good UIs which depend on multiple external arguments is hard and requires the developer to understand the grammar of the languages the product targets.

Goals

  • Design a DSL for creating expressive translations which can depend on many internal and external arguments.
  • Design a low-level API for parsing and formatting translations which keeps localizations isolated from each other.
  • Create a reference implementation which can be used to build localization frameworks.

Non-Goals

  • Create a new localization framework.
  • Solve IO for all platforms.

Design Philosophy

Localization is an essential part of the user's experience. The localizers should have control over the translation and be able to adapt it easily to the circumstances and external arguments.

Simple things are simple and complex things are 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. The syntax is designed for reading first, editing second, writing from scratch last. A localizer not familiar with it should be able to write their own translation by looking at other translations in the file and copying-and-pasting. The syntax should allow good error recovery: an error in one message should not break the whole file and should resume normal parsing as soon as possible and with as few losses as possible.

Each language is isolated and the localization logic of one language doesn't leak into other other languages nor into the source code.

Translations are objects with values and additional data which can be mapped to attributes of UI widgets and components.

The project builds on top of established resources like Unicode, ICU and CLDR.

Project Pillars

The intended outcome of Project Fluent is a syntax for describing translation resources and a low-level API for formatting translations into strings.