Merge pull request #1629 from thecodingmachine/translator
Translator: i18n
This commit is contained in:
commit
2312d2e129
83 changed files with 1438 additions and 307 deletions
76
docs/dev/how-to-translate.md
Normal file
76
docs/dev/how-to-translate.md
Normal file
|
@ -0,0 +1,76 @@
|
|||
# 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",
|
||||
});
|
||||
```
|
|
@ -36,6 +36,23 @@ WA.onInit().then(() => {
|
|||
})
|
||||
```
|
||||
|
||||
### Get the player language
|
||||
|
||||
```
|
||||
WA.player.language: string;
|
||||
```
|
||||
|
||||
The current language of player is available from the `WA.player.language` property.
|
||||
|
||||
{.alert.alert-info}
|
||||
You need to wait for the end of the initialization before accessing `WA.player.language`
|
||||
|
||||
```typescript
|
||||
WA.onInit().then(() => {
|
||||
console.log('Player language: ', WA.player.language);
|
||||
})
|
||||
```
|
||||
|
||||
### Get the tags of the player
|
||||
|
||||
```
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue