--- title: I18n subtitle: Howto do internationalization displayToc: false --- SCM-Manager uses [react-i18next](https://react.i18next.com) for internationalization. The keys for the translation are stored in json files called `plugins.json` at `src/main/resources/locales/`, followed by a folder for each language (e.g.: en for English, de for German). The keys should be prefixed with the name of the plugin to avoid collisions e.g.: `.../locales/en/plugins.json`: ```json { "scm-sample-plugin": { "title": "Sample Title" } } ``` `.../locales/de/plugins.json`: ```json { "scm-sample-plugin": { "title": "Beispiel Titel" } } ``` The translations keys can now be used with in the frontend. **Function Component**: ```tsx import React from "react"; // import hook from react-i18next library import { useTranslation } from "react-i18next"; const Title = () => { // use hook to obtain translate function for the namespace plugins const { t } = useTranslation("plugins"); // use translate function to translate key scm-sample-plugin.title return

{t("scm-sample-plugin.title")}

; }; export default Title; ``` **Class Component**: ```tsx import React from "react"; // import higher order component and types for out Props import { WithTranslation, withTranslation } from "react-i18next"; // extend our props with WithTranslation type Props = WithTranslation & {}; class Title extends React.Component { render() { // get translate function from props const { t } = this.props; // use translate function to translate key scm-sample-plugin.title return

{t("scm-sample-plugin.title")}

; } }; // wrap our component with withTranslation for the namespace plugins export default withTranslation("plugins")(Title); ``` If it is required to replace values in the content the `Trans` component can be used. To achieve this goal we have to add placeholders to our translations e.g.: `.../locales/en/plugins.json`: ```json { "scm-sample-plugin": { "title": "Sample Title", "greetings": "<0/> at <1/>" } } ``` `.../locales/de/plugins.json`: ```json { "scm-sample-plugin": { "title": "Beispiel Titel", "greetings": "<0/> um <1/>" } } ``` Now we can use the `Trans` component, not we have to specified the namespace with in the key: ```tsx ``` We can also replace the placeholders with react components: ```tsx import {DateFromNow} from "@scm-manager/ui-components"; ... "Bob"

, ]} /> ```