63 lines
1.8 KiB
Markdown
Raw Normal View History

2017-10-11 17:06:45 +02:00
# Internationalization
See the [internationalization' concepts](../concepts/concepts.md#internationalization) for details.
Because an API may need to send different data based on the language of the user, Strapi provides a built-in strategy to handle the internationalization (i18n).
## Usage
The `i18n` method that will allow you to retrieve the right string based on the language is accessible through the request's context.
2017-10-11 17:06:45 +02:00
There are many strategies to define the language that the server should use to return the correct translation. It can be based on the `locale` query parameter, the `cookie` or the `Accept-Language` header.
- Query: Add the `locale` parameter in the URL `GET /hello/John?locale=en_US`.
- Cookie: Set the `locale` field in the cookie `locale=en\-US;`.
- Header: Set the `Accept-Language` header with the value `en_US`.
> Please refer to the [language configuration](../configurations/configurations.md#language)
#### Example
Let's say we want to say `Hello John` in english and `Bonjour Tom` in french. We need to use the built-in `i18n` feature and replace the string based on the received name.
2017-10-11 17:06:45 +02:00
**Path —** `./api/hello/config/routes.json`.
```json
{
"routes": [
{
"method": "GET",
"path": "/hello/:name",
"handler": "Hello.sayHello"
}
]
}
```
**Path —** `./api/hello/controllers/Hello.js`.
```js
module.exports = {
// GET /hello/:name
2017-10-11 17:06:45 +02:00
sayHello: async (ctx) => {
ctx.send(ctx.i18n.__('Hello %s', ctx.params.name));
}
};
```
You need to define the english and french translation for this key.
**Path —** `./config/locales/en_US.json`.
```json
{
"Hello %s": "Hello %s"
}
```
**Path —** `./config/locales/fr_FR.json`.
```json
{
"Hello %s": "Bonjour %s"
}
```
That's all! The request `GET /hello/John?locale=en_US` will return `Hello John` and `GET /hello/Tom?locale=fr_FR` will return `Bonjour Tom`.