Search packages, repositories and app categories

Package detailsv2.0.4

fluent

Fluent is a Dart implementation of Project Fluent, a localization framework designed to unleash the expressive power of the natural language.

AndroidiOSWebmacOSWindowsLinux
30-day downloads
2.3K
Likes
26
Pub points
130

Install package

flutter pub add fluent

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

Fluent is a Dart implementation of Project Fluent, a modern localization framework that enables expressive, context-aware translations. It supports complex sentence structures, pluralization, and gender handling through a powerful syntax. Designed for internationalization, Fluent allows developers to write localization files in a human-readable format, improving collaboration between developers and translators. It works across all major platforms including Android, iOS, Web, macOS, Windows, and Linux, making it ideal for cross-platform apps requiring rich, dynamic content.

Use cases

  • Multilingual app localization
  • Dynamic content with context-aware translations
  • Collaborative translation workflows
  • Support for complex grammar rules
  • Cross-platform internationalization

Key features

  • Natural language expression in translations
  • Pluralization and gender support
  • Context-sensitive message formatting
  • Human-readable .ftl files
  • Seamless integration with Flutter

Suitable for

  • Apps targeting global audiences
  • Teams with non-technical translators
  • Projects needing advanced localization logic
  • Flutter apps on multiple platforms
  • Developers prioritizing maintainable i18n

Considerations

  • Requires learning Fluent's syntax
  • Limited tooling compared to legacy frameworks
  • May need custom build steps for large projects
  • Not suitable for simple key-value translations
  • Initial setup overhead for new projects

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

Fluent

This is a Dart runtime implementation of Project Fluent, a localization framework 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.

Getting Started

Learn the FTL syntax

FTL is a localization file format used for describing translation resources. FTL stands for Fluent Translation List.

FTL is designed to be simple to read, but at the same time allows to represent complex concepts from natural languages like gender, plurals, conjugations, and others.

hello-user = Hello, { $username }!

In order to use fluent.runtime, you will need to create FTL files. Read the Fluent Syntax Guide <http://projectfluent.org/fluent/guide/>_ in order to learn more about the syntax.

Using FluentBundle

Once you have some FTL files, you can generate translations using the fluent package. You start with the FluentBundle class:

import 'package:fluent/fluent.dart';

You pass a locale to the constructor:

final bundle = FluentBundle('en-GB');

You must then add messages. These would normally come from a .ftl file stored on disk, here we will just add them directly:

bundle.addMessages('''
welcome = Welcome to this great app!
greet-by-name = Hello, { $name }!
''');

To generate translations, use the format method, passing a message ID and an optional dictionary of substitution parameters. If the the message ID is not found, null is returned. Otherwise, as per the Fluent philosophy, the implementation tries hard to recover from any formatting errors and generate the most human readable representation of the value.

List<Error> errors = [];
translated = bundle.format('welcome', errors: errors)
translated = bundle.format('greet-by-name', args: {'name': 'Jane'}, errors: errors)

Custom functions

Besides the built-in NUMBER and DATETIME functions, you can register your own functions for use in translations, e.g. a PLATFORM() function used to pick a variant based on the current OS:

FluentValue platform() => FluentString('macos');
final bundle = FluentBundle('en-GB', functions: {'PLATFORM': platform});

bundle.addMessages('''
settings-menu-label = { PLATFORM() ->
    [macos] Preferences
   *[other] Settings
}
''');

A custom function receives its FTL positional and named arguments as plain Dart values (already unwrapped from FluentValue, e.g. String/num/ DateTime), and must return a FluentValue (e.g. FluentString, FluentNumber). Custom functions may also override the built-in NUMBER and DATETIME functions by registering under those names.

Known limitations and bugs

  • We do not yet support NUMBER(..., currencyDisplay="...", minimumSignificantDigits="...", maximumSignificantDigits=".. ")

  • Most options to DATETIME are not yet supported.

Help with the above would be welcome!

Categories

Dependencies

Dependency list 1 items

  • intl>=0.19.0 <0.21.0

Source repository

Projects using this package