From 55a63d9c8809cb8053e1217abbd349a46c287a4c Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 27 Dec 2020 11:23:59 +0100 Subject: [PATCH] Multi Language part 1 --- Projects/ProjectsSchema.json | 5 ++ .../Schemas/Docs-Concepts/vaina.json | 6 +- .../docs-languages-001-docs-in-english.json | 20 ++++++ .../docs-languages-002-docs-in-spanish.json | 16 +++++ .../docs-languages-003-docs-in-russian.json | 12 ++++ .../UI/Spaces/Docs-Space/DocsSpace.js | 72 +++++++++++++++---- Projects/Superalgos/UI/Utilities/Languages.js | 26 +++++++ 7 files changed, 140 insertions(+), 17 deletions(-) create mode 100644 Projects/Superalgos/Schemas/Docs-Topics/docs-languages-001-docs-in-english.json create mode 100644 Projects/Superalgos/Schemas/Docs-Topics/docs-languages-002-docs-in-spanish.json create mode 100644 Projects/Superalgos/Schemas/Docs-Topics/docs-languages-003-docs-in-russian.json create mode 100644 Projects/Superalgos/UI/Utilities/Languages.js diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index 79a6ee466..b6b61e22f 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -202,6 +202,11 @@ "name": "Strings", "propertyName": "strings", "functionName": "newSuperalgosUtilitiesStrings" + }, + { + "name": "Languages", + "propertyName": "languages", + "functionName": "newSuperalgosUtilitiesLanguages" } ], "spaces": [ diff --git a/Projects/Superalgos/Schemas/Docs-Concepts/vaina.json b/Projects/Superalgos/Schemas/Docs-Concepts/vaina.json index 91bfe4d8d..5f1f2de8c 100644 --- a/Projects/Superalgos/Schemas/Docs-Concepts/vaina.json +++ b/Projects/Superalgos/Schemas/Docs-Concepts/vaina.json @@ -10,10 +10,6 @@ "style": "Text", "text": "Vaina 1" }, - { - "style": "Youtube", - "text": "fO-CHEEVneI" - }, { "style": "Link", "text": "Google->google.com" @@ -24,7 +20,7 @@ }, { "style": "Hierarchy", - "text": "Superalgos->Task->5" + "text": "Superalgos->Task->2" }, { "style": "Note", diff --git a/Projects/Superalgos/Schemas/Docs-Topics/docs-languages-001-docs-in-english.json b/Projects/Superalgos/Schemas/Docs-Topics/docs-languages-001-docs-in-english.json new file mode 100644 index 000000000..58ed50286 --- /dev/null +++ b/Projects/Superalgos/Schemas/Docs-Topics/docs-languages-001-docs-in-english.json @@ -0,0 +1,20 @@ +{ + "topic": "Docs Languages", + "pageNumber": "1", + "type": "Docs In English", + "definition": "The Docs articles are fully written in English. The system allow users to search / browse articles in other languages as well, as long as other users contribute translations.", + "paragraphs": [ + { + "style": "Text", + "text": "Superalgos and any other integrated project are written in English, since English is considered the default language. Node types, variable names, etc., all is originally in English language. " + }, + { + "style": "Text", + "text": "The Docs content can be translated by anyone willing to contribute some time doing so. That helps users to read the contents of the Docs in their native language. " + }, + { + "style": "Success", + "text": "Users can switch between languages using the links provided at the footer of every page at the Docs." + } + ] +} \ No newline at end of file diff --git a/Projects/Superalgos/Schemas/Docs-Topics/docs-languages-002-docs-in-spanish.json b/Projects/Superalgos/Schemas/Docs-Topics/docs-languages-002-docs-in-spanish.json new file mode 100644 index 000000000..57da02afd --- /dev/null +++ b/Projects/Superalgos/Schemas/Docs-Topics/docs-languages-002-docs-in-spanish.json @@ -0,0 +1,16 @@ +{ + "topic": "Docs Languages", + "pageNumber": "2", + "type": "Docs In Spanish", + "definition": "Si bien la documentación esta originalmente escrita en Inglés, el sistema permite a cualquier usuario buscar contenido en su idioma nativo, siempre y cuando otros usuarios hayan contribuído traducciones de los artículos existentes escritos en el idioma por defecto que es el idioma Inglés. ", + "paragraphs": [ + { + "style": "Text", + "text": "Es importante notar que por mas que uno seleccione un idioma, el contenido se mostrará en ingles en cada sitio donde todavía no ha sido traducido. El sistema permite a cualquier usuario contribuir traducciones con una granularidad a nivel de párrafos. Esto significa que si una página cualquiera pudiera tener todos, algunos o nigún párrafo traducido. Esto solo depende de cuales hayan sido traducidos previamente por miembros de la comunidad." + }, + { + "style": "Success", + "text": "Para cambiar de un idioma a otro se debe usar los links en el pie de cada página." + } + ] +} \ No newline at end of file diff --git a/Projects/Superalgos/Schemas/Docs-Topics/docs-languages-003-docs-in-russian.json b/Projects/Superalgos/Schemas/Docs-Topics/docs-languages-003-docs-in-russian.json new file mode 100644 index 000000000..cf69c1d25 --- /dev/null +++ b/Projects/Superalgos/Schemas/Docs-Topics/docs-languages-003-docs-in-russian.json @@ -0,0 +1,12 @@ +{ + "topic": "Docs Languages", + "pageNumber": "3", + "type": "Docs In Russian", + "definition": "Write here a summary for this topic page.", + "paragraphs": [ + { + "style": "Text", + "text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode." + } + ] +} \ No newline at end of file diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js index 8300f76e8..40b7cffbc 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js @@ -1,6 +1,7 @@ function newSuperalgosDocSpace() { const MODULE_NAME = 'Doc Space' let thisObject = { + changeLanguage: changeLanguage, isVisible: undefined, sidePanelTab: undefined, container: undefined, @@ -16,6 +17,7 @@ function newSuperalgosDocSpace() { } let isInitialized = false + const DEFAULT_LANGUAGE = 'EN' const DOCS_SPACE_WIDTH = 900 const newParagraphText = "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode." @@ -44,6 +46,7 @@ function newSuperalgosDocSpace() { let menuLabelsMap = new Map() let command let docsIndex = [] + let language return thisObject @@ -59,6 +62,16 @@ function newSuperalgosDocSpace() { setUpContextMenu() setUpMenuItemsMap() + /* + Getting the used preferred languague + */ + if (window.localStorage.getItem('Docs Language') !== null && window.localStorage.getItem('Docs Language') !== undefined && window.localStorage.getItem('Docs Language') !== 'undefined') { + language = window.localStorage.getItem('Docs Language') + } else { + window.localStorage.setItem('Docs Language', DEFAULT_LANGUAGE) + language = DEFAULT_LANGUAGE + } + isInitialized = true function setUpContextMenu() { @@ -368,6 +381,13 @@ function newSuperalgosDocSpace() { intialize() } + function changeLanguage(pLanguage) { + window.localStorage.setItem('Docs Language', language) + language = pLanguage + let languageLabel = UI.projects.superalgos.utilities.languages.getLaguageLabel(language) + navigateTo('Superalgos', 'Topic', 'Docs In ' + languageLabel) + } + function cleanTextForSearch(text) { let result = replaceSpecialCharactersForSpaces(text) result = result.replaceAll(' ', '') @@ -2824,7 +2844,8 @@ function newSuperalgosDocSpace() { prefix = '' role = '' key = key + '-text' - innerHTML = addBold(paragraph.text) + innerHTML = getTextBasedOnLanguage(paragraph) + innerHTML = addBold(innerHTML) innerHTML = addCodeToCamelCase(innerHTML) innerHTML = addItalics(innerHTML) innerHTML = addToolTips(innerHTML) @@ -2835,7 +2856,7 @@ function newSuperalgosDocSpace() { prefix = '' role = '' key = key + '-title' - innerHTML = paragraph.text + innerHTML = getTextBasedOnLanguage(paragraph) break } case 'Subtitle': { @@ -2843,7 +2864,7 @@ function newSuperalgosDocSpace() { prefix = '' role = '' key = key + '-subtitle' - innerHTML = paragraph.text + innerHTML = getTextBasedOnLanguage(paragraph) break } case 'Note': { @@ -2851,7 +2872,8 @@ function newSuperalgosDocSpace() { prefix = ' Note:' role = 'role="alert"' key = key + '-note' - innerHTML = addItalics(paragraph.text) + innerHTML = getTextBasedOnLanguage(paragraph) + innerHTML = addItalics(innerHTML) innerHTML = addToolTips(innerHTML) break } @@ -2860,7 +2882,8 @@ function newSuperalgosDocSpace() { prefix = ' Tip:' role = 'role="alert"' key = key + '-success' - innerHTML = addItalics(paragraph.text) + innerHTML = getTextBasedOnLanguage(paragraph) + innerHTML = addItalics(innerHTML) innerHTML = addToolTips(innerHTML) break } @@ -2869,7 +2892,8 @@ function newSuperalgosDocSpace() { prefix = ' Important:' role = 'role="alert"' key = key + '-important' - innerHTML = addItalics(paragraph.text) + innerHTML = getTextBasedOnLanguage(paragraph) + innerHTML = addItalics(innerHTML) innerHTML = addToolTips(innerHTML) break } @@ -2878,7 +2902,8 @@ function newSuperalgosDocSpace() { prefix = ' Warning:' role = 'role="alert"' key = key + '-warning' - innerHTML = addItalics(paragraph.text) + innerHTML = getTextBasedOnLanguage(paragraph) + innerHTML = addItalics(innerHTML) innerHTML = addToolTips(innerHTML) break } @@ -2887,7 +2912,7 @@ function newSuperalgosDocSpace() { prefix = ' Error:' role = 'role="alert"' key = key + '-error' - innerHTML = paragraph.text + innerHTML = getTextBasedOnLanguage(paragraph) break } case 'Callout': { @@ -2895,7 +2920,8 @@ function newSuperalgosDocSpace() { prefix = '' role = '' key = key + '-callout' - innerHTML = addItalics(paragraph.text) + innerHTML = getTextBasedOnLanguage(paragraph) + innerHTML = addItalics(innerHTML) innerHTML = addToolTips(innerHTML) break } @@ -2904,7 +2930,8 @@ function newSuperalgosDocSpace() { prefix = 'Summary:' role = '' key = key + '-summary' - innerHTML = addItalics(paragraph.text) + innerHTML = getTextBasedOnLanguage(paragraph) + innerHTML = addItalics(innerHTML) innerHTML = addToolTips(innerHTML) break } @@ -2914,7 +2941,8 @@ function newSuperalgosDocSpace() { sufix = '' role = '' key = key + '-list' - innerHTML = addBold(paragraph.text) + innerHTML = getTextBasedOnLanguage(paragraph) + innerHTML = addBold(innerHTML) innerHTML = addCodeToCamelCase(innerHTML) innerHTML = addItalics(innerHTML) innerHTML = addToolTips(innerHTML) @@ -2926,7 +2954,8 @@ function newSuperalgosDocSpace() { sufix = '' role = '' key = key + '-table' - innerHTML = parseTable(paragraph.text) + innerHTML = getTextBasedOnLanguage(paragraph) + innerHTML = parseTable(innerHTML) innerHTML = addItalics(innerHTML) innerHTML = addToolTips(innerHTML) break @@ -3024,6 +3053,15 @@ function newSuperalgosDocSpace() { HTML = HTML + '

' + prefix + ' ' + innerHTML + sufix + '

' paragraphMap.set(key, paragraph) + function getTextBasedOnLanguage(paragraph) { + if (paragraph.translations === undefined) { return paragraph.text } + if (paragraph.translations.length === 0) { return paragraph.text } + for (let i = 0; i < paragraph.translations.length; i++) { + let translation = paragraph.translations[i] + if (translation.language === language) { return translation.text } + } + return paragraph.text + } } function hightlightEmbeddedCode() { @@ -3239,6 +3277,8 @@ function newSuperalgosDocSpace() { } function addFooter() { + let languageLabel = UI.projects.superalgos.utilities.languages.getLaguageLabel(language) + let HTML = '' HTML = HTML + '