We need the `Formatter` and `Translations` class and the `parseLocale()` function to handle translations.  
In the context of the DOM we can also use the `getLocaleOfDocument()` method.

```
import {Translations} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/i18n/translations.js';
import {Formatter} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/text/formatter.js';
import {parseLocale} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/i18n/locale.js';
import {getLocaleOfDocument} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/dom/locale.js';
```

Let's start with the function `parseLocale()`. This function can create a `Locale` object from a string. 

So we can create the corresponding `Locale` object from the string `en_GB`.


```
const locale = parseLocale('en_GB')
// ↦ Locale {}
```

If we move in the browser, so we can also use the function `getLocaleOfDocument()`.  
This function returns a locale object as a result.

This function looks if the HTML tag `<html lang="en">` has a lang attribute.  
If no locale is defined, the default value is assumed to be `en`.

We now need an object with the translations. For this we use the `Translations` class. 

We can either define the translations ourselves or load them via an API.

```
// define translations
const translation = new Translations(parseLocale('en-GB'));
translation.assignTranslations({
           text1: 'hello world!',
           text2: {
             'one': 'click once',
             'other': 'click ${n | tostring} times' // this is where the pipe comes in
           }
        });

// fetch from API
const translation = new Fetch('https://example.com/${language}.json').getTranslation('en-GB');
// ↦ https://example.com/en.json 
``` 

If we now have a translation, we can now read the desired strings. For this  
we use the method `Translation.getText()` or the method `Translation.getPluralRuleText()`  
for texts with more than one number.

```
const message = translation.getText('text1');
// -> hello world
``` 

To translate texts with number references, enter the desired number.

```
let n=1;
const message1 = translation.getPluralRuleText('text2', n);
// -> click once

n=2
const message2 = translation.getPluralRuleText('text2', n);
// -> click ${n} times
``` 

To replace the placeholder now, the formatter is used.

```
const text = new Formatter({n}).format(message2); 
console.log(text)
// ↦ click 2 times
```

Finally, let's take a look at the formatter class from the i18n module.

```
import {Formatter} from 
    'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/i18n/formatter.js';
```

A tranlate object can be passed directly to this class.  

There is also the possibility to pass values in the format string.


```
// define translation
const translations = new Translations('en')
    .assignTranslations({
        // text with placeholder
        message: "${animal} has eaten the ${food}!"
    });

// without marker and inline values
new Formatter({}, translations).format("message::animal=dog::food=cake")
// ↦ dog has eaten the cake!     
```


Voila!