# How to translate WorkAdventure

We use the [typesafe-i18n](https://github.com/ivanhofer/typesafe-i18n) package to handle the translation.

## Add a new language

It is very easy to add a new language!

First, in the `front/src/i18n` folder create a new folder with the language code as name (the language code according to [RFC 5646](https://datatracker.ietf.org/doc/html/rfc5646)).

In the previously created folder, add a file named index.ts with the following content containing your language information (french from France in this example):

```ts
import type { Translation } from "../i18n-types";

const fr_FR: Translation = {
  ...en_US,
  language: "Français",
  country: "France",
};

export default fr_FR;
```

## Add a new key

### Add a simple key

The keys are searched by a path through the properties of the sub-objects and it is therefore advisable to write your translation as a JavaScript object.

Please use kamelcase to name your keys!

Example:

```ts
{
  messages: {
    coffeMachine: {
      start: "Coffe machine has been started!";
    }
  }
}
```

In the code you can translate using `$LL`:

```ts
import LL from "../../i18n/i18n-svelte";

console.log($LL.messages.coffeMachine.start());
```

### Add a key with parameters

You can also use parameters to make the translation dynamic.
Use the tag { [parameter name] } to apply your parameters in the translations

Example:

```ts
{
  messages: {
    coffeMachine: {
      playerStart: "{ playerName } started the coffee machine!";
    }
  }
}
```

In the code you can use it like this:

```ts
$LL.messages.coffeMachine.playerStart.start({
  playerName: "John",
});
```