See the internationalization' concepts 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).


The i18n method that will allow you to retrieve the right string based on the language is accessible through the request's context.

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


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.

Path — ./api/hello/config/routes.json.

  "routes": [
      "method": "GET",
      "path": "/hello/:name",
      "handler": "Hello.sayHello"

Path — ./api/hello/controllers/Hello.js.

module.exports = {
  // GET /hello/:name
  sayHello: async (ctx) => {
    ctx.send(ctx.i18n.__('Hello %s',;

You need to define the english and french translation for this key.

Path — ./config/locales/en_US.json.

    "Hello %s": "Hello %s"

Path — ./config/locales/fr_FR.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.

results matching ""

    No results matching ""