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");
}