From d678a617dc9f2c662a02df2a9445b9fd827d9481 Mon Sep 17 00:00:00 2001 From: romulo bordezani Date: Mon, 3 Jun 2019 19:56:59 -0300 Subject: [PATCH] i18n - extension extraction --- src/components/Header/Header.js | 2 +- src/i18n.js | 61 +++++++++++------------ src/locales/en-UK/common.json | 6 --- src/locales/en/CineDialog.json | 3 ++ src/locales/{en-UK => en/UK}/Header.json | 0 src/locales/en/UK/common.json | 4 ++ src/locales/{en-US => en/US}/Header.json | 0 src/locales/{en-US => en/US}/Toolbar.json | 0 src/locales/{en-US => en/US}/common.json | 0 src/locales/es/CineDialog.json | 3 ++ src/locales/{en-ES => es}/Header.json | 0 src/locales/es/MX/CineDialog.json | 3 ++ src/locales/es/MX/Header.json | 7 +++ src/locales/{en-ES => es/MX}/Toolbar.json | 0 src/locales/{en-ES => es/MX}/common.json | 0 src/locales/es/common.json | 5 ++ yarn.lock | 8 +-- 17 files changed, 58 insertions(+), 44 deletions(-) delete mode 100755 src/locales/en-UK/common.json create mode 100644 src/locales/en/CineDialog.json rename src/locales/{en-UK => en/UK}/Header.json (100%) create mode 100755 src/locales/en/UK/common.json rename src/locales/{en-US => en/US}/Header.json (100%) rename src/locales/{en-US => en/US}/Toolbar.json (100%) rename src/locales/{en-US => en/US}/common.json (100%) create mode 100644 src/locales/es/CineDialog.json rename src/locales/{en-ES => es}/Header.json (100%) create mode 100644 src/locales/es/MX/CineDialog.json create mode 100644 src/locales/es/MX/Header.json rename src/locales/{en-ES => es/MX}/Toolbar.json (100%) rename src/locales/{en-ES => es/MX}/common.json (100%) create mode 100755 src/locales/es/common.json diff --git a/src/components/Header/Header.js b/src/components/Header/Header.js index 71a661c63..92c588727 100644 --- a/src/components/Header/Header.js +++ b/src/components/Header/Header.js @@ -93,7 +93,7 @@ class Header extends Component { diff --git a/src/i18n.js b/src/i18n.js index b2fa0104e..cca942b8c 100755 --- a/src/i18n.js +++ b/src/i18n.js @@ -1,59 +1,51 @@ import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; -const currentLanguage = process.env.APP_LANG || 'en-US'; +const currentLanguage = process.env.APP_LANG || 'es-MX'; function getDefaultLanguage() { const mainLanguage = currentLanguage.match(/(.*.)(-)/); return mainLanguage !== null ? mainLanguage[1] : null; } -function getCleanKeyForNameSpaces(key) { - const regexKeyCleaner = new RegExp( - `^(\\.\\/${currentLanguage}\\/)(.*.)(\\.json)$` - ); - const cleanedKey = key.match(regexKeyCleaner); - return cleanedKey !== null ? cleanedKey[2] : null; +function getNameSpaceString(key) { + const nameSpaceMatcher = key.match(/[^/]+$/g); + let finalNameSpace; + + if (nameSpaceMatcher !== null) { + finalNameSpace = nameSpaceMatcher[0].replace('.json', ''); + } + + return finalNameSpace; } -function getCleanKeyForDefaults(key) { - const regexKeyCleaner = new RegExp( - `^(\\.\\/${getDefaultLanguage()}\\/)(.*.)(\\.json)$` - ); - const cleanedKey = key.match(regexKeyCleaner); - return cleanedKey !== null ? cleanedKey[2] : null; +function getCleanKeyForNameSpaces(key) { + const cleanedKey = key.match(/[/\\].+(?=[/\\])/); + let finalKey; + + if (cleanedKey !== null) { + finalKey = cleanedKey[0].replace(/[/\\]/, ''); + finalKey = finalKey.replace(/[/\\]/, '-'); + } + + return finalKey; } function getLocales() { - const currentLangList = {}; - const defaultLangList = {}; - const locales = {}; const context = require.context(`./locales`, true, /\.json$/); + const locales = {}; context.keys().forEach(key => { - const isTheSameOfCurrentLang = key.indexOf(currentLanguage) >= 0; - const isADefaultLang = key.indexOf(`${getDefaultLanguage()}/`) >= 0; - - if (isTheSameOfCurrentLang) { - currentLangList[getCleanKeyForNameSpaces(key)] = context(key); - } - - if (isADefaultLang) { - defaultLangList[getCleanKeyForDefaults(key)] = context(key); - } + locales[getCleanKeyForNameSpaces(key)] = { + ...locales[getCleanKeyForNameSpaces(key)], + [getNameSpaceString(key)]: context(key), + }; }); - locales[currentLanguage] = { ...currentLangList }; - locales[getDefaultLanguage()] = { ...defaultLangList }; return locales; } -console.log(getLocales(), ' > ', getDefaultLanguage()); - -// console.log(getLocales(), currentLanguage, getDefaultLanguage()); - i18n.use(initReactI18next).init({ - // resources: getLocales(), resources: getLocales(), fallbackLng: getDefaultLanguage(), lng: currentLanguage, @@ -65,6 +57,9 @@ i18n.use(initReactI18next).init({ escapeValue: false, }, + fallbackNS: ['common'], + defaultNS: 'common', + react: { wait: true, }, diff --git a/src/locales/en-UK/common.json b/src/locales/en-UK/common.json deleted file mode 100755 index f47a451d8..000000000 --- a/src/locales/en-UK/common.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "common": { - "Welcome to React": "Welcome to React and react-i18next", - "welcomeMsg": "welcome" - } -} diff --git a/src/locales/en/CineDialog.json b/src/locales/en/CineDialog.json new file mode 100644 index 000000000..9e9a7e759 --- /dev/null +++ b/src/locales/en/CineDialog.json @@ -0,0 +1,3 @@ +{ + "fps": "ingles fps" +} diff --git a/src/locales/en-UK/Header.json b/src/locales/en/UK/Header.json similarity index 100% rename from src/locales/en-UK/Header.json rename to src/locales/en/UK/Header.json diff --git a/src/locales/en/UK/common.json b/src/locales/en/UK/common.json new file mode 100755 index 000000000..3135ef203 --- /dev/null +++ b/src/locales/en/UK/common.json @@ -0,0 +1,4 @@ +{ + "Welcome to React": "Welcome to React and react-i18next", + "welcomeMsg": "welcome" +} diff --git a/src/locales/en-US/Header.json b/src/locales/en/US/Header.json similarity index 100% rename from src/locales/en-US/Header.json rename to src/locales/en/US/Header.json diff --git a/src/locales/en-US/Toolbar.json b/src/locales/en/US/Toolbar.json similarity index 100% rename from src/locales/en-US/Toolbar.json rename to src/locales/en/US/Toolbar.json diff --git a/src/locales/en-US/common.json b/src/locales/en/US/common.json similarity index 100% rename from src/locales/en-US/common.json rename to src/locales/en/US/common.json diff --git a/src/locales/es/CineDialog.json b/src/locales/es/CineDialog.json new file mode 100644 index 000000000..2cff386d4 --- /dev/null +++ b/src/locales/es/CineDialog.json @@ -0,0 +1,3 @@ +{ + "fps": "ES RAIZ cps" +} diff --git a/src/locales/en-ES/Header.json b/src/locales/es/Header.json similarity index 100% rename from src/locales/en-ES/Header.json rename to src/locales/es/Header.json diff --git a/src/locales/es/MX/CineDialog.json b/src/locales/es/MX/CineDialog.json new file mode 100644 index 000000000..f8b56b10a --- /dev/null +++ b/src/locales/es/MX/CineDialog.json @@ -0,0 +1,3 @@ +{ + "fps": "MX cps" +} diff --git a/src/locales/es/MX/Header.json b/src/locales/es/MX/Header.json new file mode 100644 index 000000000..6a3f997c4 --- /dev/null +++ b/src/locales/es/MX/Header.json @@ -0,0 +1,7 @@ +{ + "header_research_use": "SOLO USO DE INVESTIGACIÓN", + "header_options": "Opciones", + "header_about": "Sobre", + "header_preferences": "Preferencias", + "header_study_list": "Lista de estudio" +} diff --git a/src/locales/en-ES/Toolbar.json b/src/locales/es/MX/Toolbar.json similarity index 100% rename from src/locales/en-ES/Toolbar.json rename to src/locales/es/MX/Toolbar.json diff --git a/src/locales/en-ES/common.json b/src/locales/es/MX/common.json similarity index 100% rename from src/locales/en-ES/common.json rename to src/locales/es/MX/common.json diff --git a/src/locales/es/common.json b/src/locales/es/common.json new file mode 100755 index 000000000..18a5b4ea3 --- /dev/null +++ b/src/locales/es/common.json @@ -0,0 +1,5 @@ +{ + "Welcome to React": "Welcome to React and react-i18next", + "welcomeMsg": "welcome", + "test": "Lunch time" +} diff --git a/yarn.lock b/yarn.lock index b5373f36e..f37f32229 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11782,13 +11782,12 @@ react-transition-group@^2.0.0, react-transition-group@^2.2.0: prop-types "^15.6.2" react-lifecycles-compat "^3.0.4" -react-viewerbase@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/react-viewerbase/-/react-viewerbase-0.4.2.tgz#a890db450c0f6d1ec495dc2ceb85dbe38fcb7fda" - integrity sha512-1rqdXZ3gQIuRtuxOTKwg9D4EJ1NJ8ug9mQWOAFxx+7PSFhfbjXn55O4Fko92qXrlKqd+Rba1jqBvzTXPr0h0fQ== +"react-viewerbase@file:.yalc/react-viewerbase": + version "0.2.17-1a8178ff" dependencies: "@babel/runtime" "7.2.0" classnames "2.2.6" + i18next "^15.1.3" lodash.isequal "4.5.0" moment "2.24.0" prop-types "15.6.2" @@ -11796,6 +11795,7 @@ react-viewerbase@0.4.2: react-dates "18.4.1" react-dnd "7.0.2" react-dnd-html5-backend "7.0.2" + react-i18next "^10.11.0" react-with-direction "1.3.0" react-vtkjs-viewport@^0.0.7: