Internationalization (i18n)
Overview
We're using react-intl
for internationalization, check
official
documentation and
examples.
How to add a new language
Note: if there are no locale data for your new language in
react-intl/locale-data
you will have to manually add
locale data
This is example how to add Turkish language:
-
Update
src/_metronic/layout/components/extras/dropdowns/LanguageSelectorDropdown.js
const languages = [ { lang: "en", name: "English", flag: toAbsoluteUrl("/media/svg/flags/226-united-states.svg") }, + { + lang: "tr", + name: "Turkish", + flag: toAbsoluteUrl("/media/svg/flags/006-turkey.svg") + }, {
-
Add
src/_metronic/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/_metronic/i18n/I18nProvider.js
import * as ja from "react-intl/locale-data/ja"; import * as zh from "react-intl/locale-data/zh"; + import "@formatjs/intl-relativetimeformat/dist/locale-data/tr"; import deMessages from "./messages/de"; import enMessages from "./messages/en"; import esMessages from "./messages/es"; import frMessages from "./messages/fr"; import jaMessages from "./messages/ja"; import zhMessages from "./messages/zh"; + import trMessages from "./messages/tr"; const allMessages = { de: deMessages, en: enMessages, es: esMessages, fr: frMessages, ja: jaMessages, zh: zhMessages + tr: trMessages }; export default function I18nProvider({ children }) {
How to use
In the sample React app demo, the core parts like
left sided menu
, topbar horizontal menu
,
etc. are already implemented with the translation.
The translator understands flat JSON object as defined in
src/_metronic/i18n/messages/en.json
. This means that you
can have a translation that looks like this:
Add translation to
src/app/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> }
Or with HOC (Higher order component):
import { injectIntl } from "react-intl"; function Hello({ name, intl /* Prop injected with `injectIntl` */ }) { return <h3>{intl.formatMessage({ id: "HOME.HELLO" }, { name })}</h3> } export default injectIntl(Hello);