# Translating OHIF supports internationalization using [i18next](https://www.i18next.com/) through the npm package [@ohif/i18n](https://www.npmjs.com/package/@ohif/i18n), where is the main instance of i18n containing several languages and tools. ### Installing ```bash yarn add @ohif/i18n # OR npm install --save @ohif/i18n ``` ### How it works After installing `@ohif/i18n` npm package, the translation function [t](https://www.i18next.com/overview/api#t) can be used [with](#with-react) or [without](#without-react) React. A translation will occur every time a text match happens in a [t](https://www.i18next.com/overview/api#t) function. The [t](https://www.i18next.com/overview/api#t) function is responsible for getting translations using all the power of i18next. E.g. Before: ```html
{t('my translated text')}
; } export default withTranslation('MyNameSpace')(MyComponent); ``` > Important: if you are using React outside the OHIF Viewer, check the > [I18nextProvider](#using-outside-of-ohif-viewer) section, `withTranslation` > HOC doesnt works without a I18nextProvider ##### Using Hooks Also, it's possible to get the `t` tool using [React Hooks](https://react.i18next.com/latest/usetranslation-hook), but it requires at least React > 16.8. #### Using outside of OHIF viewer OHIF Viewer already sets a main [I18nextProvider](https://react.i18next.com/latest/i18nextprovider) connected to the shared i18n instance from `@ohif/i18n`, all extensions inside the Viewer will share this same provider at the end, you don't need a provider when developing a react Extension if you use `@ohif/i18n`; But, if you need to use it completely outside of OHIF viewer, you can set the I18nextProvider this way: ```js import i18n, { I18nextProvider } from '@ohif/i18n'; import App from './App';
All properties inside a Namespace (.json file) will be replaced in the new sub
language, e.g en-US, en-UK, es-AR, es-MX, etc.
#### - Extending languages dynamically
Once you have access to the i18n instance, you can use the
[addResourceBundle](https://www.i18next.com/how-to/add-or-load-translations#add-after-init)
method to add and change language resources.
E.g.
```js
import { i18n } from '@ohif/i18n';
i18next.addResourceBundle('pt-BR', 'Buttons', {
Angle: 'Ângulo',
});
```
---
### How to set a whole new language
To set a brand new language you can do it in two different ways:
- Opening a pull request for `@ohif/i18n` and sharing the translation with the
community. Please see [Contributing](#contributing-with-new-languages) section
for further information
- Setting it only in your project or extension
To set it apart of `@ohif/i18n`, follow this snippet:
File: myJsonFileWithLanguage.json // TODO - This example is a working in
progress
```json
{
"en": {
"ns": {
"prop1": "value1",
"prop2": "value2",
"prop3": "value3",
"prop4": "value4"
}
}
}
```
```js
import { extendLanguage } from '@ohif/i18n';
import myJsonFileWithLanguage from './myJsonFileWithLanguage.json';
extendLanguage(myJsonFileWithLanguage);
// TODO - This example is a working in progress
```
## Debugging translations
There are two environment variables responsible for debugging the translations:
`REACT_APP_I18N_DEBUG` and `REACT_APP_LANG`.
For debugging, you can run the project as following:
```bash
yarn; REACT_APP_I18N_DEBUG=true REACT_APP_LANG=es-MX yarn run dev
```
### Contributing with new languages
Contributions of any kind are welcome! Please check the
[instructions](https://docs.ohif.org/contributing.html).