From 1f44465d09a5c017815d5ffdd1edc9b217230085 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Sun, 28 Jan 2024 17:03:33 +0400 Subject: [PATCH] Added translation counts to skin/languages.js Note that static/skin/languages.js must be generated/updated manually by running the static/generate_i18n_resources_list.py script. Previously it had to be done only when new languages were added. Now the translation counts will also need to be updated when new entries are added to static/skin/i18n/en.json or upon merging a few translatewiki PRs. --- static/generate_i18n_resources_list.py | 15 ++-- static/skin/languages.js | 102 +++++++++++++++-------- test/server.cpp | 108 ++++++++++++++++--------- 3 files changed, 146 insertions(+), 79 deletions(-) diff --git a/static/generate_i18n_resources_list.py b/static/generate_i18n_resources_list.py index 8145cf119..0fc1d0682 100755 --- a/static/generate_i18n_resources_list.py +++ b/static/generate_i18n_resources_list.py @@ -30,7 +30,10 @@ def get_translation_info(filepath): with open(filepath, 'r', encoding="utf-8") as f: content = json.load(f) lang_name = content.get("name") - return lang_code, lang_name + translation_count = len(content) + return dict(iso_code=lang_code, + self_name=lang_name, + translation_count=translation_count) language_list = [] json_files = translation_dir.glob("*.json") @@ -40,18 +43,14 @@ with open(resource_file, 'w', encoding="utf-8") as f: continue print("Processing", i18n_file.name) if i18n_file.name != "test.json": - lang_code, lang_name = get_translation_info(i18n_file) + translation_info = get_translation_info(i18n_file) + lang_name = translation_info["self_name"] if lang_name: - language_list.append((lang_code, lang_name)) + language_list.append(translation_info) else: print(f"Warning: missing 'name' in {i18n_file.name}") f.write(str(i18n_file.relative_to(script_path.parent)) + '\n') -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/languages.js b/static/skin/languages.js index ead06ef11..bcddf8114 100644 --- a/static/skin/languages.js +++ b/static/skin/languages.js @@ -1,138 +1,172 @@ const uiLanguages = [ { "iso_code": "ar", - "self_name": "الإنجليزية" + "self_name": "الإنجليزية", + "translation_count": 25 }, { "iso_code": "bn", - "self_name": "বাংলা" + "self_name": "বাংলা", + "translation_count": 12 }, { "iso_code": "cs", - "self_name": "Čeština" + "self_name": "Čeština", + "translation_count": 25 }, { "iso_code": "de", - "self_name": "Deutsch" + "self_name": "Deutsch", + "translation_count": 49 }, { "iso_code": "en", - "self_name": "English" + "self_name": "English", + "translation_count": 53 }, { "iso_code": "es", - "self_name": "español" + "self_name": "español", + "translation_count": 48 }, { "iso_code": "fi", - "self_name": "suomi" + "self_name": "suomi", + "translation_count": 22 }, { "iso_code": "fr", - "self_name": "Français" + "self_name": "Français", + "translation_count": 52 }, { "iso_code": "he", - "self_name": "עברית" + "self_name": "עברית", + "translation_count": 52 }, { "iso_code": "hi", - "self_name": "हिन्दी" + "self_name": "हिन्दी", + "translation_count": 49 }, { "iso_code": "hy", - "self_name": "Հայերեն" + "self_name": "Հայերեն", + "translation_count": 15 }, { "iso_code": "ia", - "self_name": "interlingua" + "self_name": "interlingua", + "translation_count": 49 }, { "iso_code": "it", - "self_name": "italiano" + "self_name": "italiano", + "translation_count": 29 }, { "iso_code": "ja", - "self_name": "日本語" + "self_name": "日本語", + "translation_count": 26 }, { "iso_code": "ko", - "self_name": "한국어" + "self_name": "한국어", + "translation_count": 13 }, { "iso_code": "ku-latn", - "self_name": "kurdî" + "self_name": "kurdî", + "translation_count": 26 }, { "iso_code": "lb", - "self_name": "Lëtzebuergesch" + "self_name": "Lëtzebuergesch", + "translation_count": 22 }, { "iso_code": "mk", - "self_name": "македонски" + "self_name": "македонски", + "translation_count": 52 }, { "iso_code": "ms", - "self_name": "Bahasa Melayu" + "self_name": "Bahasa Melayu", + "translation_count": 14 }, { "iso_code": "nl", - "self_name": "Nederlands" + "self_name": "Nederlands", + "translation_count": 49 }, { "iso_code": "nqo", - "self_name": "ߒߞߏ" + "self_name": "ߒߞߏ", + "translation_count": 43 }, { "iso_code": "or", - "self_name": "ଓଡ଼ିଆ" + "self_name": "ଓଡ଼ିଆ", + "translation_count": 49 }, { "iso_code": "pl", - "self_name": "Polski" + "self_name": "Polski", + "translation_count": 24 }, { "iso_code": "ru", - "self_name": "русский" + "self_name": "русский", + "translation_count": 45 }, { "iso_code": "sc", - "self_name": "Sardu" + "self_name": "Sardu", + "translation_count": 49 }, { "iso_code": "sk", - "self_name": "slovenčina" + "self_name": "slovenčina", + "translation_count": 25 }, { "iso_code": "skr-arab", - "self_name": "سرائیکی" + "self_name": "سرائیکی", + "translation_count": 20 }, { "iso_code": "sl", - "self_name": "slovenščina" + "self_name": "slovenščina", + "translation_count": 52 }, { "iso_code": "sq", - "self_name": "Shqip" + "self_name": "Shqip", + "translation_count": 49 }, { "iso_code": "sv", - "self_name": "Svenska" + "self_name": "Svenska", + "translation_count": 52 }, { "iso_code": "te", - "self_name": "ఇంగ్లీషు" + "self_name": "ఇంగ్లీషు", + "translation_count": 49 }, { "iso_code": "tr", - "self_name": "Türkçe" + "self_name": "Türkçe", + "translation_count": 25 }, { "iso_code": "zh-hans", - "self_name": "英语" + "self_name": "英语", + "translation_count": 16 }, { "iso_code": "zh-hant", - "self_name": "繁體中文" + "self_name": "繁體中文", + "translation_count": 52 } ] \ No newline at end of file diff --git a/test/server.cpp b/test/server.cpp index 1cd17ad89..c22bffe88 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -84,7 +84,7 @@ const ResourceCollection resources200Compressible{ // 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" }, + { STATIC_CONTENT, "/ROOT%23%3F/skin/languages.js?cacheid=c41aae47" }, { DYNAMIC_CONTENT, "/ROOT%23%3F/catalog/search" }, @@ -286,7 +286,7 @@ R"EXPECTEDRESULT( href="/ROOT%23%3F/skin/kiwix.css?cacheid=2158fad9" - + @@ -319,7 +319,7 @@ R"EXPECTEDRESULT( - + const blankPageUrl = root + "/skin/blank.html?cacheid=6b1fa032"; @@ -1127,139 +1127,173 @@ TEST_F(ServerTest, UserLanguageList) R"EXPECTEDRESPONSE(const uiLanguages = [ { "iso_code": "ar", - "self_name": "الإنجليزية" + "self_name": "الإنجليزية", + "translation_count": 25 }, { "iso_code": "bn", - "self_name": "বাংলা" + "self_name": "বাংলা", + "translation_count": 12 }, { "iso_code": "cs", - "self_name": "Čeština" + "self_name": "Čeština", + "translation_count": 25 }, { "iso_code": "de", - "self_name": "Deutsch" + "self_name": "Deutsch", + "translation_count": 49 }, { "iso_code": "en", - "self_name": "English" + "self_name": "English", + "translation_count": 53 }, { "iso_code": "es", - "self_name": "español" + "self_name": "español", + "translation_count": 48 }, { "iso_code": "fi", - "self_name": "suomi" + "self_name": "suomi", + "translation_count": 22 }, { "iso_code": "fr", - "self_name": "Français" + "self_name": "Français", + "translation_count": 52 }, { "iso_code": "he", - "self_name": "עברית" + "self_name": "עברית", + "translation_count": 52 }, { "iso_code": "hi", - "self_name": "हिन्दी" + "self_name": "हिन्दी", + "translation_count": 49 }, { "iso_code": "hy", - "self_name": "Հայերեն" + "self_name": "Հայերեն", + "translation_count": 15 }, { "iso_code": "ia", - "self_name": "interlingua" + "self_name": "interlingua", + "translation_count": 49 }, { "iso_code": "it", - "self_name": "italiano" + "self_name": "italiano", + "translation_count": 29 }, { "iso_code": "ja", - "self_name": "日本語" + "self_name": "日本語", + "translation_count": 26 }, { "iso_code": "ko", - "self_name": "한국어" + "self_name": "한국어", + "translation_count": 13 }, { "iso_code": "ku-latn", - "self_name": "kurdî" + "self_name": "kurdî", + "translation_count": 26 }, { "iso_code": "lb", - "self_name": "Lëtzebuergesch" + "self_name": "Lëtzebuergesch", + "translation_count": 22 }, { "iso_code": "mk", - "self_name": "македонски" + "self_name": "македонски", + "translation_count": 52 }, { "iso_code": "ms", - "self_name": "Bahasa Melayu" + "self_name": "Bahasa Melayu", + "translation_count": 14 }, { "iso_code": "nl", - "self_name": "Nederlands" + "self_name": "Nederlands", + "translation_count": 49 }, { "iso_code": "nqo", - "self_name": "ߒߞߏ" + "self_name": "ߒߞߏ", + "translation_count": 43 }, { "iso_code": "or", - "self_name": "ଓଡ଼ିଆ" + "self_name": "ଓଡ଼ିଆ", + "translation_count": 49 }, { "iso_code": "pl", - "self_name": "Polski" + "self_name": "Polski", + "translation_count": 24 }, { "iso_code": "ru", - "self_name": "русский" + "self_name": "русский", + "translation_count": 45 }, { "iso_code": "sc", - "self_name": "Sardu" + "self_name": "Sardu", + "translation_count": 49 }, { "iso_code": "sk", - "self_name": "slovenčina" + "self_name": "slovenčina", + "translation_count": 25 }, { "iso_code": "skr-arab", - "self_name": "سرائیکی" + "self_name": "سرائیکی", + "translation_count": 20 }, { "iso_code": "sl", - "self_name": "slovenščina" + "self_name": "slovenščina", + "translation_count": 52 }, { "iso_code": "sq", - "self_name": "Shqip" + "self_name": "Shqip", + "translation_count": 49 }, { "iso_code": "sv", - "self_name": "Svenska" + "self_name": "Svenska", + "translation_count": 52 }, { "iso_code": "te", - "self_name": "ఇంగ్లీషు" + "self_name": "ఇంగ్లీషు", + "translation_count": 49 }, { "iso_code": "tr", - "self_name": "Türkçe" + "self_name": "Türkçe", + "translation_count": 25 }, { "iso_code": "zh-hans", - "self_name": "英语" + "self_name": "英语", + "translation_count": 16 }, { "iso_code": "zh-hant", - "self_name": "繁體中文" + "self_name": "繁體中文", + "translation_count": 52 } ])EXPECTEDRESPONSE"); }