From c882e472a5d4885fe62134e19101ea23a78e82c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ladislav=20Slez=C3=A1k?= Date: Wed, 20 Nov 2024 19:34:19 +0100 Subject: [PATCH] Support localized data dump --- web/src/api/http.ts | 22 +++++++++++++++++++--- web/webpack.config.js | 1 + 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/web/src/api/http.ts b/web/src/api/http.ts index 01e06b481d..f675d6bf8d 100644 --- a/web/src/api/http.ts +++ b/web/src/api/http.ts @@ -31,6 +31,15 @@ const http = axios.create({ responseType: "json", }); +// FIXME: share with web/src/context/installerL10n.tsx +function agamaLanguage(): string | undefined { + // language from cookie, empty string if not set (regexp taken from Cockpit) + // https://github.com/cockpit-project/cockpit/blob/98a2e093c42ea8cd2431cf15c7ca0e44bb4ce3f1/pkg/shell/shell-modals.jsx#L91 + return decodeURIComponent( + document.cookie.replace(/(?:(?:^|.*;\s*)agamaLang\s*=\s*([^;]*).*$)|^.*$/, "$1"), + ); +} + function mock_response(method: string, url: string) { console.info("Demo mode, ignoring request", method, url); @@ -53,10 +62,17 @@ function mock_response(method: string, url: string) { */ const get = (url: string) => { if (process.env.AGAMA_DEMO) { - if (!(url in demo_data)) { - console.error("Missing demo data for REST API path", url); + const lang = agamaLanguage() || "en-US"; + + // try translated demo data first + if (demo_data[lang] && url in demo_data[lang]) { + return Promise.resolve(demo_data[lang][url]); + } else if (url in demo_data) { + return Promise.resolve(demo_data[url]); + } else { + console.error(`Missing demo data for REST API path ${url} (lang: ${lang})`); + return {}; } - return Promise.resolve(demo_data[url]); } else { return http.get(url).then(({ data }) => data); } diff --git a/web/webpack.config.js b/web/webpack.config.js index d36b9c7da1..82e6686df1 100644 --- a/web/webpack.config.js +++ b/web/webpack.config.js @@ -40,6 +40,7 @@ const copy_files = [ "./src/index.html", // TODO: consider using something more complete like https://github.com/jantimon/favicons-webpack-plugin "./src/assets/favicon.svg", + "./src/languages.json", { from: "./src/assets/products/*.svg", to: "assets/logos/[name][ext]" }, ];