Add mappings for languages not given by libicu

Adds a std::map<std::string, std::string> with display names for language codes not given by libicu
Fault language codes are taken from library.kiwix.org
This commit is contained in:
Nikhil Tanwar 2022-02-14 15:18:05 +05:30 committed by Emmanuel Engelhart
parent cfab560d74
commit 34b50ba30e
No known key found for this signature in database
GPG Key ID: 120B30D020B553D3
2 changed files with 56 additions and 7 deletions

View File

@ -126,13 +126,62 @@ BooksData getBooksData(const Library* library, const std::vector<std::string>& b
return booksData;
}
std::map<std::string, std::string> iso639_3 = {
{"atj","atikamekw"},
{"azb","آذربایجان دیلی"},
{"bcl","central bikol"},
{"bgs","tagabawa"},
{"bxr","буряад хэлэн"},
{"cbk","chavacano"},
{"cdo","閩東語"},
{"diq","dimli"},
{"dty","डोटेली"},
{"eml","emiliân-rumagnōl"},
{"fbs","српскохрватски"},
{"kbp","kabɩ"},
{"kld","Gamilaraay"},
{"lbe","лакку маз"},
{"lbj","ལ་དྭགས་སྐད་"},
{"map","Austronesian"},
{"mhr","марий йылме"},
{"mnw","ဘာသာမန်"},
{"myn","mayan"},
{"nah","nahuatl"},
{"nai","north American Indian"},
{"nds","plattdütsch"},
{"nrm","bhasa narom"},
{"olo","livvi"},
{"pih","Pitcairn-Norfolk"},
{"pnb","Western Panjabi"},
{"rmr","Caló"},
{"rmy","romani shib"},
{"roa","romance languages"},
{"twi","twi"},
{"ido","ido"}
};
std::once_flag fillLanguagesFlag;
void fillLanguagesMap()
{
for (auto icuLangPtr = icu::Locale::getISOLanguages(); *icuLangPtr != NULL; ++icuLangPtr) {
auto lang = *icuLangPtr;
const icu::Locale locale(lang);
icu::UnicodeString ustring;
locale.getDisplayLanguage(locale, ustring);
std::string displayLanguage;
ustring.toUTF8String(displayLanguage);
std::string iso3LangCode = locale.getISO3Language();
iso639_3.insert({iso3LangCode, displayLanguage});
}
}
std::string getLanguageSelfName(const std::string& lang) {
const icu::Locale locale(lang.c_str());
icu::UnicodeString ustring;
locale.getDisplayLanguage(locale, ustring);
std::string result;
ustring.toUTF8String(result);
return result;
const auto itr = iso639_3.find(lang);
if (itr != iso639_3.end()) {
return itr->second;
}
return lang;
};
} // unnamed namespace
@ -210,6 +259,7 @@ std::string OPDSDumper::languagesOPDSFeed() const
{
const auto now = gen_date_str();
kainjow::mustache::list languageData;
std::call_once(fillLanguagesFlag, fillLanguagesMap);
for ( const auto& langAndBookCount : library->getBooksLanguagesWithCounts() ) {
const std::string languageCode = langAndBookCount.first;
const int bookCount = langAndBookCount.second;

View File

@ -146,7 +146,6 @@ bool InternalServer::start() {
if (m_verbose.load())
flags |= MHD_USE_DEBUG;
struct sockaddr_in sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr));
sockAddr.sin_family = AF_INET;