We're using react-intl
for internationalization, check official documentation and examples.
Note: if there are no locale data for your new language inreact-intl/locale-data
you will have to manually add locale data
Update src/_zeus/partials/layout/header-menus/Languages.tsx
const languages = [
{
lang: "en",
name: "English",
flag: toAbsoluteUrl("media/flags/united-states.svg")
},
+ {
+ lang: "tr",
+ name: "Turkish",
+ flag: toAbsoluteUrl("media/flags/turkey.svg")
+ },
{
Add src/_zeus/i18n/messages/tr.json
+ {
+ "TRANSLATOR.SELECT": "Dilinizi seçin",
+ "MENU.NEW": "yeni",
+ "MENU.ACTIONS": "Eylemler",
+ "MENU.CREATE_POST": "Yeni Gönderi Oluştur",
Register messages and locale data in `src/_zeus/i18n/I18nProvider.tsx`
```jsx
import * as ja from "react-intl/locale-data/ja";
import * as zh from "react-intl/locale-data/zh";
import "@formatjs/intl-relativetimeformat/locale-data/tr";
import enMessages from "./messages/en.json";
import esMessages from "./messages/es.json";
import trMessages from "./messages/tr.json";
const allMessages = {
en: enMessages,
es: esMessages,
+ , tr: trMessages
};
```
The translator understands flat JSON object as defined insrc/_zeus/i18n/messages/en.json
. This means that you can have a translation that looks like this:
Add translation to src/_zeus/i18n/messages/en.json
:
{"HOME.HELLO": "Hello, {name}!"}
Format it with component:
import { FormattedMessage } from "react-intl";
export default function Hello({ name }) {
return ;
}
Or with hook:
import { useIntl } from "react-intl";
export default function Hello({ name }) {
const intl = useIntl();
return <h3>{intl.formatMessage({ id: "HOME.HELLO" }, { name })}</h3>
}