-
Notifications
You must be signed in to change notification settings - Fork 45
Home
Fluent is a family of localization specifications, implementations and good practices developed by Mozilla. We’re inviting translation tool authors to try it out. Please use GitHub issues or visit the Fluent Discourse to provide feedback.
The formal definition of the grammar can be found in the spec/ directory, together with documents outlining good practices, validation rules, and the compatibility strategy for future releases.
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.
The design of Fluent is centered around the following five concepts: Control and Isolation, Simplicity, Tolerance, Modularity and composability, and The Principle of Least Power. See the Design Principles document for more details.
The intended outcome of Project Fluent is a syntax for describing translation resources and a low-level API for formatting translations into strings.
- Syntax specification with a reference parser implementation
- Requirements and good practices for API implementations
- Implementation in JavaScript
- Implementation in Python
- Implementation in Rust