From 1c958d9079b6a564a2f2e55520526b7bb5922bd7 Mon Sep 17 00:00:00 2001
From: Pierre Jarriges <pierre.jarriges@tutanota.com>
Date: Fri, 17 Jun 2022 13:57:07 +0200
Subject: [PATCH] handle static article pages change language

---
 .../src/article-vew-components/game-article.js  |  2 --
 .../article-vew-components/software-article.js  |  2 --
 website/src/homepage.js                         |  2 --
 website/src/lib/web-page.js                     |  3 +++
 .../pages/education/components/edu-articles.js  |  2 --
 website/src/pages/education/education.js        |  2 --
 .../src/pages/games/components/game-articles.js |  1 -
 website/src/pages/games/games.js                |  2 --
 .../components/software-articles.js             |  1 -
 .../software-development.js                     |  2 --
 website/src/template/components/navbar.js       | 17 ++++++++++-------
 website/src/template/template.js                |  6 ++----
 12 files changed, 15 insertions(+), 27 deletions(-)

diff --git a/website/src/article-vew-components/game-article.js b/website/src/article-vew-components/game-article.js
index ac0e379..94cf298 100644
--- a/website/src/article-vew-components/game-article.js
+++ b/website/src/article-vew-components/game-article.js
@@ -4,9 +4,7 @@ const ImageCarousel = require("../generic-components/image-carousel");
 const { getArticleBody } = require("../lib/article-utils");
 const { fetch_json_or_error_text } = require("../lib/fetch");
 const { MentaloEngine } = require("mentalo-engine");
-const translator = require("ks-cheap-translator");
 const { images_url, data_url } = require("../../constants");
-const t = translator.trad.bind(translator);
 
 
 class GameArticle {
diff --git a/website/src/article-vew-components/software-article.js b/website/src/article-vew-components/software-article.js
index dab32ac..0170cba 100644
--- a/website/src/article-vew-components/software-article.js
+++ b/website/src/article-vew-components/software-article.js
@@ -1,10 +1,8 @@
 "use strict";
 
 const ImageCarousel = require("../generic-components/image-carousel");
-const translator = require("ks-cheap-translator");
 const { images_url } = require("../../constants");
 const { getArticleBody } = require("../lib/article-utils");
-const t = translator.trad.bind(translator);
 
 
 class SoftwareArticle {
diff --git a/website/src/homepage.js b/website/src/homepage.js
index fc03455..3aff680 100644
--- a/website/src/homepage.js
+++ b/website/src/homepage.js
@@ -3,8 +3,6 @@
 const { images_url } = require("../constants");
 const ThemeCard = require("./home-page-components/theme-card");
 const WebPage = require("./lib/web-page");
-const translator = require("ks-cheap-translator");
-const t = translator.trad.bind(translator);
 
 class HomePage extends WebPage {
     constructor() {
diff --git a/website/src/lib/web-page.js b/website/src/lib/web-page.js
index 5324d20..b497126 100644
--- a/website/src/lib/web-page.js
+++ b/website/src/lib/web-page.js
@@ -12,6 +12,9 @@ class WebPage {
 
         this.translations_ready = false;
 
+        window.t = translator.trad.bind(translator);
+        window.translator = translator;
+
         translator.init({
             translations_url,
             supported_languages: ["fr", "en"],
diff --git a/website/src/pages/education/components/edu-articles.js b/website/src/pages/education/components/edu-articles.js
index c3b41b3..fcf9092 100644
--- a/website/src/pages/education/components/edu-articles.js
+++ b/website/src/pages/education/components/edu-articles.js
@@ -1,7 +1,5 @@
 "use strict";
 const { loadArticles, sortArticles, renderPlaceholders } = require("../../../lib/article-utils");
-const translator = require("ks-cheap-translator");
-const t = translator.trad.bind(translator);
 const EduArticle = require("./edu-article");
 
 class EduArticles {
diff --git a/website/src/pages/education/education.js b/website/src/pages/education/education.js
index ea04c92..2f9f80a 100644
--- a/website/src/pages/education/education.js
+++ b/website/src/pages/education/education.js
@@ -2,9 +2,7 @@
 
 const { images_url } = require("../../../constants");
 const WebPage = require("../../lib/web-page");
-const translator = require("ks-cheap-translator");
 const EduArticles = require("./components/edu-articles");
-const t = translator.trad.bind(translator);
 
 const EDU_THEMES = [
     {
diff --git a/website/src/pages/games/components/game-articles.js b/website/src/pages/games/components/game-articles.js
index 4f4ced6..fa26733 100644
--- a/website/src/pages/games/components/game-articles.js
+++ b/website/src/pages/games/components/game-articles.js
@@ -6,7 +6,6 @@ const {
     renderPlaceholders
 } = require("../../../lib/article-utils");
 const GameThumb = require("./game-thumb");
-const translator = require("ks-cheap-translator");
 
 class GameArticles {
     constructor(props) {
diff --git a/website/src/pages/games/games.js b/website/src/pages/games/games.js
index ed627df..0efb4d5 100644
--- a/website/src/pages/games/games.js
+++ b/website/src/pages/games/games.js
@@ -3,8 +3,6 @@
 const { images_url } = require("../../../constants");
 const WebPage = require("../../lib/web-page");
 const GameArticles = require("./components/game-articles");
-const translator = require("ks-cheap-translator");
-const t = translator.trad.bind(translator);
 
 class GamesPage extends WebPage {
     render() {
diff --git a/website/src/pages/software-development/components/software-articles.js b/website/src/pages/software-development/components/software-articles.js
index 36a5a04..43219c0 100644
--- a/website/src/pages/software-development/components/software-articles.js
+++ b/website/src/pages/software-development/components/software-articles.js
@@ -2,7 +2,6 @@
 
 const { loadArticles, sortArticles, renderPlaceholders } = require("../../../lib/article-utils");
 const SoftwareThumb = require("./software-thumb");
-const translator = require("ks-cheap-translator");
 
 class SoftwareArticles {
     constructor(props) {
diff --git a/website/src/pages/software-development/software-development.js b/website/src/pages/software-development/software-development.js
index a74945d..f41a096 100644
--- a/website/src/pages/software-development/software-development.js
+++ b/website/src/pages/software-development/software-development.js
@@ -3,8 +3,6 @@
 const { images_url } = require("../../../constants");
 const WebPage = require("../../lib/web-page");
 const SoftwareArticles = require("./components/software-articles");
-const translator = require("ks-cheap-translator");
-const t = translator.trad.bind(translator);
 
 class SoftwareDevelopment extends WebPage {
     render() {
diff --git a/website/src/template/components/navbar.js b/website/src/template/components/navbar.js
index 74c88f1..2f3bf62 100644
--- a/website/src/template/components/navbar.js
+++ b/website/src/template/components/navbar.js
@@ -1,8 +1,6 @@
 "use strict";
 
 const { images_url } = require("../../../constants");
-const translator = require("ks-cheap-translator");
-const t = translator.trad.bind(translator);
 
 const NAV_MENU_ITEMS = [
     { url: "/games/", text: "Jeux" },
@@ -34,10 +32,15 @@ class NavBar {
         });
     }
 
-    handle_chang_lang(lang) {
-        translator.update_translations(lang).then(() => {
-            obj2htm.renderCycle();
-        }).catch(err => console.log(err));
+    handle_change_lang(lang) {
+        const url_path_chunks = location.pathname.split("/");
+        const location_contains_locale = translator.supported_languages.find(locale => url_path_chunks.includes(locale));
+        const callback = location_contains_locale
+            ? function () {
+                location.pathname = url_path_chunks.map(chunk => chunk === location_contains_locale ? lang : chunk).join("/");
+            }
+            : obj2htm.renderCycle.bind(obj2htm);
+        translator.update_translations(lang).then(callback).catch(err => console.log(err));
     }
 
     renderHome() {
@@ -92,7 +95,7 @@ class NavBar {
                     return {
                         tag: "img", src: `${images_url}/flag-${lang}.svg`,
                         class: translator.locale === lang ? "selected" : "",
-                        onclick: this.handle_chang_lang.bind(this, lang)
+                        onclick: this.handle_change_lang.bind(this, lang)
                     }
                 })
             }),
diff --git a/website/src/template/template.js b/website/src/template/template.js
index e1cee3c..cf3fbc1 100644
--- a/website/src/template/template.js
+++ b/website/src/template/template.js
@@ -3,8 +3,6 @@
 const { in_construction } = require("../../config");
 const { images_url } = require("../../constants");
 const NavBar = require("./components/navbar");
-const translator = require("ks-cheap-translator");
-const t = translator.trad.bind(translator)
 
 class Template {
     constructor(props) {
@@ -79,7 +77,7 @@ class Template {
                                 },
                                 {
                                     tag: "a",
-                                    href: "https://www.linkedin.com/company/kuadrado-software",
+                                    href: "https://linkedin.com/company/kuadrado-software",
                                     target: "_blank",
                                     contents: "in",
                                     title: "Linkedin",
@@ -105,7 +103,7 @@ class Template {
                                 {
                                     tag: "a", target: "_blank",
                                     style_rules: { fontWeight: "bold" },
-                                    href: "https://gitlab.com/kuadrado-software/kuadrado-website/-/blob/master/README.md",
+                                    href: "https://lab.frogg.it/kuadrado-software/kuadrado-website/-/blob/master/README.md",
                                     contents: "OPEN SOURCE"
                                 }
                             ]
-- 
GitLab