From ebcd9b3838416d5c8c97cde1df0fcc3e7f003017 Mon Sep 17 00:00:00 2001 From: romulo bordezani Date: Thu, 6 Jun 2019 18:57:19 -0300 Subject: [PATCH 1/4] i18n - Documentation --- docs/latest/SUMMARY.md | 1 + .../img/ohif-i18n-extending-files-tree.png | Bin 0 -> 22000 bytes docs/latest/essentials/translating.md | 152 ++++++++++++++++++ 3 files changed, 153 insertions(+) create mode 100644 docs/latest/assets/img/ohif-i18n-extending-files-tree.png create mode 100644 docs/latest/essentials/translating.md diff --git a/docs/latest/SUMMARY.md b/docs/latest/SUMMARY.md index 7534de5f6..f9c2bb5e5 100644 --- a/docs/latest/SUMMARY.md +++ b/docs/latest/SUMMARY.md @@ -6,6 +6,7 @@ - [Data Source](essentials/data-source.md) - [Configuration](essentials/configuration.md) - [Themeing](essentials/themeing.md) + - [Translating](essentials/translating.md) - [Troubleshooting](essentials/troubleshooting.md) - [Scope of Project](essentials/scope-of-project.md) diff --git a/docs/latest/assets/img/ohif-i18n-extending-files-tree.png b/docs/latest/assets/img/ohif-i18n-extending-files-tree.png new file mode 100644 index 0000000000000000000000000000000000000000..8bf3ff1759b5885fb05d1e96d18401d7a949db43 GIT binary patch literal 22000 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 literal 0 HcmV?d00001 diff --git a/docs/latest/essentials/translating.md b/docs/latest/essentials/translating.md new file mode 100644 index 000000000..34d1b4432 --- /dev/null +++ b/docs/latest/essentials/translating.md @@ -0,0 +1,152 @@ +# 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 +
my translated text
+```` +After: +````html +
{t('my translated text')}
+```` + +If the translation.json file contains a key that matches the HTML content e.g. `my translated text`, it will be replaced automatically by the [t](https://www.i18next.com/overview/api#t) function. + +--- +#### With React +This section will introduce you to [react-i18next](https://react.i18next.com/) basics and show how to implement the [t](https://www.i18next.com/overview/api#t) function easily. + +##### Using HOCs +In most cases we used [High Order Components](https://react.i18next.com/latest/withtranslation-hoc) to get the `t` tool between OHIF's components. + +E.g. + +```js +import React from 'react'; +import { withTranslation } from 'ohif-i18n'; + +function MyComponent({ t, i18n }) { + return

{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'; + + + + +``` +After setting `I18nextProvider` in your React App, all translations from `ohif-i18n` should be available following [With React](#with-react) usage. + +---- + +#### Without React +When needed, you can also use available translations *without React*. + +E.g. + +```js +import { t } from 'ohif-i18n'; +console.log( t('my translated text') ); +``` + +--- + +# Main Concepts While Translating + +### - Namespaces +Namespaces are being used to organize translations in smaller portions, combined semantically or by use. +Each `.json` file inside `ohif-i18n` npm package becomes a new namespace automatically. + + +- Buttons: All buttons translations +- CineDialog: Translations for the toll tips inside the Cine Player Dialog +- common: all common jargons that can be reused like `t('$t(common:image)')` +- Header: translations related to OHIF's Header Top Bar + +### - Extending Languages in ohif-i18n +Sometimes, even in the same language, some nouns or jargons can change in different countries, states or even from Hospital to Hospital, in this cases, we can extend languages. + +To extend a language, create a new folder inside a language with two characters as name, like the `UK` in the following file tree: + +Files Tree for Extending Purpouses + +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 +{ + "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 +``` + +### Contributing with new languages +This project follows the +[all-contributors](https://github.com/all-contributors/all-contributors) +specification. Contributions of any kind are welcome! + From eca7d9be6a74b2e73b86fbed80927d905afb1fc5 Mon Sep 17 00:00:00 2001 From: romulo bordezani Date: Thu, 6 Jun 2019 18:57:45 -0300 Subject: [PATCH 2/4] i18n - Adding Provider to non Admins --- src/App.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/App.js b/src/App.js index 6b2f899e5..f38947e60 100644 --- a/src/App.js +++ b/src/App.js @@ -127,11 +127,13 @@ class App extends Component { return ( - - - - - + + + + + + + ); } From 6e295ba7c6ee84d0d97d3ec10f9bbff4ef9f340c Mon Sep 17 00:00:00 2001 From: romulo bordezani Date: Thu, 6 Jun 2019 19:13:16 -0300 Subject: [PATCH 3/4] i18n - Documentation for i18n --- docs/latest/essentials/translating.md | 4 ++++ .../ohif-i18n/src/locales/en/CineDialog.json | 2 +- .../ohif-i18n/src/locales/en/common.json | 4 +--- .../ohif-i18n/src/locales/es/common.json | 20 +------------------ 4 files changed, 7 insertions(+), 23 deletions(-) diff --git a/docs/latest/essentials/translating.md b/docs/latest/essentials/translating.md index 34d1b4432..45bfd4b5f 100644 --- a/docs/latest/essentials/translating.md +++ b/docs/latest/essentials/translating.md @@ -145,6 +145,10 @@ extendLanguage(myJsonFileWithLanguage); // TODO - This example is a working in progress ``` + +#Debugging translations +#TODO - WIP + ### Contributing with new languages This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) diff --git a/extensions/ohif-i18n/src/locales/en/CineDialog.json b/extensions/ohif-i18n/src/locales/en/CineDialog.json index ebd909e73..14877a857 100644 --- a/extensions/ohif-i18n/src/locales/en/CineDialog.json +++ b/extensions/ohif-i18n/src/locales/en/CineDialog.json @@ -1,5 +1,5 @@ { - "fps": "ingles fps", + "fps": "fps", "Skip to first image": "Skip to first image", "Previous image": "Previous, image", "Play / Stop": "Play, / Stop", diff --git a/extensions/ohif-i18n/src/locales/en/common.json b/extensions/ohif-i18n/src/locales/en/common.json index 18a5b4ea3..5fdbf7431 100755 --- a/extensions/ohif-i18n/src/locales/en/common.json +++ b/extensions/ohif-i18n/src/locales/en/common.json @@ -1,5 +1,3 @@ { - "Welcome to React": "Welcome to React and react-i18next", - "welcomeMsg": "welcome", - "test": "Lunch time" + "Welcome to React": "Welcome to React and react-i18next" } diff --git a/extensions/ohif-i18n/src/locales/es/common.json b/extensions/ohif-i18n/src/locales/es/common.json index 3cbc9da4b..ea3a56575 100755 --- a/extensions/ohif-i18n/src/locales/es/common.json +++ b/extensions/ohif-i18n/src/locales/es/common.json @@ -1,21 +1,3 @@ { - "Themes": "Temas", - "Previous": "Anterior", - "Next": "Próximo", - "Play": "Play", - "Stop": "Stop", - "Layout": "Esquema", - "More": "Más", - "Crosshairs": "Cruces", - "Magnify": "Lupa", - "ROI Window": "Ventana ROI", - "Probe": "Probar", - "Ellipse": "Elipse", - "Rectangle": "Rectángulo", - "Invert": "Invertido", - "Rotate Right": "Rotar ->", - "Flip H": "Espejo Hor.", - "Flip V": "Espejo Ver.", - "Clear": "Limpiar", - "Brush": "Escoba" + "Welcome to React": "Bienvenido a React" } From 065204a87e22cc78311bc5840a57e83f7ff72292 Mon Sep 17 00:00:00 2001 From: romulo bordezani Date: Thu, 6 Jun 2019 19:26:08 -0300 Subject: [PATCH 4/4] i18n - Documentation for i18n --- docs/latest/essentials/translating.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/latest/essentials/translating.md b/docs/latest/essentials/translating.md index 45bfd4b5f..f14e2353c 100644 --- a/docs/latest/essentials/translating.md +++ b/docs/latest/essentials/translating.md @@ -150,7 +150,5 @@ extendLanguage(myJsonFileWithLanguage); #TODO - WIP ### Contributing with new languages -This project follows the -[all-contributors](https://github.com/all-contributors/all-contributors) -specification. Contributions of any kind are welcome! +Contributions of any kind are welcome! Please check the [instructions](https://docs.ohif.org/contributing.html).