From 258a6d029fbc7b1ac3271a98986fa793434dbe5d Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Sun, 28 Jan 2024 16:43:07 +0400 Subject: [PATCH] Changed the format of skin/languages.js ... so that extra info about the count of translated strings can be added. Note that due to increased size skin/languages.js lost its too-small-to-be-worth-compressing status. --- static/generate_i18n_resources_list.py | 6 +- static/skin/i18n.js | 6 +- static/skin/languages.js | 102 ++++++++++++++-------- test/server.cpp | 116 ++++++++++++++++--------- 4 files changed, 150 insertions(+), 80 deletions(-) diff --git a/static/generate_i18n_resources_list.py b/static/generate_i18n_resources_list.py index 037ab77a..8145cf11 100755 --- a/static/generate_i18n_resources_list.py +++ b/static/generate_i18n_resources_list.py @@ -47,7 +47,11 @@ with open(resource_file, 'w', encoding="utf-8") as f: print(f"Warning: missing 'name' in {i18n_file.name}") f.write(str(i18n_file.relative_to(script_path.parent)) + '\n') -language_list = [{name: code} for code, name in sorted(language_list)] +def make_language_entry(lang_info_tuple): + iso_code, self_name = lang_info_tuple + return dict(iso_code=iso_code, self_name=self_name) + +language_list = [make_language_entry(x) for x in sorted(language_list)] language_list_jsobj_str = json.dumps(language_list, indent=2, ensure_ascii=False) diff --git a/static/skin/i18n.js b/static/skin/i18n.js index 2a44cc50..e937eda3 100644 --- a/static/skin/i18n.js +++ b/static/skin/i18n.js @@ -164,10 +164,8 @@ function initUILanguageSelector(activeLanguage, languageChangeCallback) { } const languageSelector = document.getElementById("ui_language"); for (const lang of uiLanguages ) { - const lang_name = Object.getOwnPropertyNames(lang)[0]; - const lang_code = lang[lang_name]; - const is_selected = lang_code == activeLanguage; - languageSelector.appendChild(new Option(lang_name, lang_code, is_selected, is_selected)); + const is_selected = lang.iso_code == activeLanguage; + languageSelector.appendChild(new Option(lang.self_name, lang.iso_code, is_selected, is_selected)); } languageSelector.onchange = languageChangeCallback; } diff --git a/static/skin/languages.js b/static/skin/languages.js index df90303a..ead06ef1 100644 --- a/static/skin/languages.js +++ b/static/skin/languages.js @@ -1,104 +1,138 @@ const uiLanguages = [ { - "الإنجليزية": "ar" + "iso_code": "ar", + "self_name": "الإنجليزية" }, { - "বাংলা": "bn" + "iso_code": "bn", + "self_name": "বাংলা" }, { - "Čeština": "cs" + "iso_code": "cs", + "self_name": "Čeština" }, { - "Deutsch": "de" + "iso_code": "de", + "self_name": "Deutsch" }, { - "English": "en" + "iso_code": "en", + "self_name": "English" }, { - "español": "es" + "iso_code": "es", + "self_name": "español" }, { - "suomi": "fi" + "iso_code": "fi", + "self_name": "suomi" }, { - "Français": "fr" + "iso_code": "fr", + "self_name": "Français" }, { - "עברית": "he" + "iso_code": "he", + "self_name": "עברית" }, { - "हिन्दी": "hi" + "iso_code": "hi", + "self_name": "हिन्दी" }, { - "Հայերեն": "hy" + "iso_code": "hy", + "self_name": "Հայերեն" }, { - "interlingua": "ia" + "iso_code": "ia", + "self_name": "interlingua" }, { - "italiano": "it" + "iso_code": "it", + "self_name": "italiano" }, { - "日本語": "ja" + "iso_code": "ja", + "self_name": "日本語" }, { - "한국어": "ko" + "iso_code": "ko", + "self_name": "한국어" }, { - "kurdî": "ku-latn" + "iso_code": "ku-latn", + "self_name": "kurdî" }, { - "Lëtzebuergesch": "lb" + "iso_code": "lb", + "self_name": "Lëtzebuergesch" }, { - "македонски": "mk" + "iso_code": "mk", + "self_name": "македонски" }, { - "Bahasa Melayu": "ms" + "iso_code": "ms", + "self_name": "Bahasa Melayu" }, { - "Nederlands": "nl" + "iso_code": "nl", + "self_name": "Nederlands" }, { - "ߒߞߏ": "nqo" + "iso_code": "nqo", + "self_name": "ߒߞߏ" }, { - "ଓଡ଼ିଆ": "or" + "iso_code": "or", + "self_name": "ଓଡ଼ିଆ" }, { - "Polski": "pl" + "iso_code": "pl", + "self_name": "Polski" }, { - "русский": "ru" + "iso_code": "ru", + "self_name": "русский" }, { - "Sardu": "sc" + "iso_code": "sc", + "self_name": "Sardu" }, { - "slovenčina": "sk" + "iso_code": "sk", + "self_name": "slovenčina" }, { - "سرائیکی": "skr-arab" + "iso_code": "skr-arab", + "self_name": "سرائیکی" }, { - "slovenščina": "sl" + "iso_code": "sl", + "self_name": "slovenščina" }, { - "Shqip": "sq" + "iso_code": "sq", + "self_name": "Shqip" }, { - "Svenska": "sv" + "iso_code": "sv", + "self_name": "Svenska" }, { - "ఇంగ్లీషు": "te" + "iso_code": "te", + "self_name": "ఇంగ్లీషు" }, { - "Türkçe": "tr" + "iso_code": "tr", + "self_name": "Türkçe" }, { - "英语": "zh-hans" + "iso_code": "zh-hans", + "self_name": "英语" }, { - "繁體中文": "zh-hant" + "iso_code": "zh-hant", + "self_name": "繁體中文" } ] \ No newline at end of file diff --git a/test/server.cpp b/test/server.cpp index f47e0614..1cd17ad8 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -59,7 +59,7 @@ const ResourceCollection resources200Compressible{ { DYNAMIC_CONTENT, "/ROOT%23%3F/skin/autoComplete/css/autoComplete.css" }, { STATIC_CONTENT, "/ROOT%23%3F/skin/autoComplete/css/autoComplete.css?cacheid=ef30cd42" }, { DYNAMIC_CONTENT, "/ROOT%23%3F/skin/i18n.js" }, - { STATIC_CONTENT, "/ROOT%23%3F/skin/i18n.js?cacheid=4ab55b42" }, + { STATIC_CONTENT, "/ROOT%23%3F/skin/i18n.js?cacheid=0b99e7a9" }, { DYNAMIC_CONTENT, "/ROOT%23%3F/skin/index.css" }, { STATIC_CONTENT, "/ROOT%23%3F/skin/index.css?cacheid=1e78e7cf" }, { DYNAMIC_CONTENT, "/ROOT%23%3F/skin/index.js" }, @@ -83,6 +83,8 @@ const ResourceCollection resources200Compressible{ { DYNAMIC_CONTENT, "/ROOT%23%3F/skin/i18n/test.json" }, // TODO: implement cache management of i18n resources //{ STATIC_CONTENT, "/ROOT%23%3F/skin/i18n/test.json?cacheid=unknown" }, + { DYNAMIC_CONTENT, "/ROOT%23%3F/skin/languages.js" }, + { STATIC_CONTENT, "/ROOT%23%3F/skin/languages.js?cacheid=792fee65" }, { DYNAMIC_CONTENT, "/ROOT%23%3F/catalog/search" }, @@ -148,8 +150,6 @@ const ResourceCollection resources200Uncompressible{ { STATIC_CONTENT, "/ROOT%23%3F/skin/search-icon.svg?cacheid=b10ae7ed" }, { DYNAMIC_CONTENT, "/ROOT%23%3F/skin/search_results.css" }, { STATIC_CONTENT, "/ROOT%23%3F/skin/search_results.css?cacheid=76d39c84" }, - { DYNAMIC_CONTENT, "/ROOT%23%3F/skin/languages.js" }, - { STATIC_CONTENT, "/ROOT%23%3F/skin/languages.js?cacheid=96f2cf73" }, { ZIM_CONTENT, "/ROOT%23%3F/raw/zimfile/meta/Title" }, { ZIM_CONTENT, "/ROOT%23%3F/raw/zimfile/meta/Description" }, @@ -285,8 +285,8 @@ R"EXPECTEDRESULT( href="/ROOT%23%3F/skin/kiwix.css?cacheid=2158fad9" - - + + @@ -318,8 +318,8 @@ R"EXPECTEDRESULT( - - + + const blankPageUrl = root + "/skin/blank.html?cacheid=6b1fa032"; @@ -1126,106 +1126,140 @@ TEST_F(ServerTest, UserLanguageList) EXPECT_EQ(r->body, R"EXPECTEDRESPONSE(const uiLanguages = [ { - "الإنجليزية": "ar" + "iso_code": "ar", + "self_name": "الإنجليزية" }, { - "বাংলা": "bn" + "iso_code": "bn", + "self_name": "বাংলা" }, { - "Čeština": "cs" + "iso_code": "cs", + "self_name": "Čeština" }, { - "Deutsch": "de" + "iso_code": "de", + "self_name": "Deutsch" }, { - "English": "en" + "iso_code": "en", + "self_name": "English" }, { - "español": "es" + "iso_code": "es", + "self_name": "español" }, { - "suomi": "fi" + "iso_code": "fi", + "self_name": "suomi" }, { - "Français": "fr" + "iso_code": "fr", + "self_name": "Français" }, { - "עברית": "he" + "iso_code": "he", + "self_name": "עברית" }, { - "हिन्दी": "hi" + "iso_code": "hi", + "self_name": "हिन्दी" }, { - "Հայերեն": "hy" + "iso_code": "hy", + "self_name": "Հայերեն" }, { - "interlingua": "ia" + "iso_code": "ia", + "self_name": "interlingua" }, { - "italiano": "it" + "iso_code": "it", + "self_name": "italiano" }, { - "日本語": "ja" + "iso_code": "ja", + "self_name": "日本語" }, { - "한국어": "ko" + "iso_code": "ko", + "self_name": "한국어" }, { - "kurdî": "ku-latn" + "iso_code": "ku-latn", + "self_name": "kurdî" }, { - "Lëtzebuergesch": "lb" + "iso_code": "lb", + "self_name": "Lëtzebuergesch" }, { - "македонски": "mk" + "iso_code": "mk", + "self_name": "македонски" }, { - "Bahasa Melayu": "ms" + "iso_code": "ms", + "self_name": "Bahasa Melayu" }, { - "Nederlands": "nl" + "iso_code": "nl", + "self_name": "Nederlands" }, { - "ߒߞߏ": "nqo" + "iso_code": "nqo", + "self_name": "ߒߞߏ" }, { - "ଓଡ଼ିଆ": "or" + "iso_code": "or", + "self_name": "ଓଡ଼ିଆ" }, { - "Polski": "pl" + "iso_code": "pl", + "self_name": "Polski" }, { - "русский": "ru" + "iso_code": "ru", + "self_name": "русский" }, { - "Sardu": "sc" + "iso_code": "sc", + "self_name": "Sardu" }, { - "slovenčina": "sk" + "iso_code": "sk", + "self_name": "slovenčina" }, { - "سرائیکی": "skr-arab" + "iso_code": "skr-arab", + "self_name": "سرائیکی" }, { - "slovenščina": "sl" + "iso_code": "sl", + "self_name": "slovenščina" }, { - "Shqip": "sq" + "iso_code": "sq", + "self_name": "Shqip" }, { - "Svenska": "sv" + "iso_code": "sv", + "self_name": "Svenska" }, { - "ఇంగ్లీషు": "te" + "iso_code": "te", + "self_name": "ఇంగ్లీషు" }, { - "Türkçe": "tr" + "iso_code": "tr", + "self_name": "Türkçe" }, { - "英语": "zh-hans" + "iso_code": "zh-hans", + "self_name": "英语" }, { - "繁體中文": "zh-hant" + "iso_code": "zh-hant", + "self_name": "繁體中文" } ])EXPECTEDRESPONSE"); }