@fluent/web

Drop-in localization framework for HTML documents

Usage no npm install needed!

<script type="module">
  import fluentWeb from 'https://cdn.skypack.dev/@fluent/web';
</script>

README

@fluent/web

@fluent/web is a runtime polyfill that binds Fluent and FluentDOM into a vanilla Web platform (HTML, DOM, JS).

Installation

@fluent/web provides a glue code that is executed at runtime to construct DOMLocalization, bind it to document.l10n, perform initial document translation and set the event listeners and MutationObserver.

The result fluent-web.js file should be included in the HTML file and any code executing after it will have access to the FluentWeb API.

Quick start

Clone and run the projectfluent/fluent-web repository to see the examples:

git clone https://github.com/projectfluent/fluent-web
cd fluent-web
npm install
npm start
open http://127.0.0.1:8080/examples/simple.html

How to use

The primary access point is the document.l10n object of class DOMLocalization. It is already constructed based on the resources linked from the document and localized into languages negotiated based on the available languages from the <meta> tag and languages requested via navigator.languages.

<html>
  <head>
    <meta name="defaultLanguage" content="en-US">
    <meta name="availableLanguages" content="en-US, fr">
    <link rel="localization" href="locales/{locale}/main.ftl">
    <link rel="localization" href="locales/{locale}/head.ftl">
    <script defer src="./src/fluent-web.js"></script>
  </head>
  <body>
    <h1 data-l10n-id="hello-world"/>
  </body>
</html>

function showMessage() {
  let msg = await document.l10n.formatValue('confirm-msg')
  alert(msg);
}

let h1 = document.querySelector('h1');
document.l10n.setAttributes(h1, 'welcome', { user: 'Anna' });

Learn more

Find out more about Project Fluent at projectfluent.org, including documentation of the Fluent file format (FTL), links to other packages and implementations, and information about how to get involved.