Galaxy: Use regex for language detection in --galaxy-install

Some builds use different language codes.
It looks like all of them are in format Language-Country/Region.
Added these new codes to regex in GlobalConstants::LANGUAGES.
Use regular expression to detect the language instead of language code.
This commit is contained in:
Sude 2018-05-29 09:56:38 +03:00
parent 463a9c386e
commit dd5714690c
2 changed files with 27 additions and 25 deletions

View File

@ -46,29 +46,29 @@ namespace GlobalConstants
const std::vector<optionsStruct> LANGUAGES = const std::vector<optionsStruct> LANGUAGES =
{ {
{ LANGUAGE_EN, "en", "English" , "en|eng|english" }, { LANGUAGE_EN, "en", "English", "en|eng|english|en[_-]US" },
{ LANGUAGE_DE, "de", "German" , "de|deu|ger|german" }, { LANGUAGE_DE, "de", "German", "de|deu|ger|german|de[_-]DE" },
{ LANGUAGE_FR, "fr", "French" , "fr|fra|fre|french" }, { LANGUAGE_FR, "fr", "French", "fr|fra|fre|french|fr[_-]FR" },
{ LANGUAGE_PL, "pl", "Polish" , "pl|pol|polish" }, { LANGUAGE_PL, "pl", "Polish", "pl|pol|polish|pl[_-]PL" },
{ LANGUAGE_RU, "ru", "Russian" , "ru|rus|russian" }, { LANGUAGE_RU, "ru", "Russian", "ru|rus|russian|ru[_-]RU" },
{ LANGUAGE_CN, "cn", "Chinese" , "cn|zh|zho|chi|chinese" }, { LANGUAGE_CN, "cn", "Chinese", "cn|zh|zho|chi|chinese|zh[_-]CN" },
{ LANGUAGE_CZ, "cz", "Czech" , "cz|cs|ces|cze|czech" }, { LANGUAGE_CZ, "cz", "Czech", "cz|cs|ces|cze|czech|cs[_-]CZ" },
{ LANGUAGE_ES, "es", "Spanish" , "es|spa|spanish" }, { LANGUAGE_ES, "es", "Spanish", "es|spa|spanish|es[_-]ES" },
{ LANGUAGE_HU, "hu", "Hungarian" , "hu|hun|hungarian" }, { LANGUAGE_HU, "hu", "Hungarian", "hu|hun|hungarian|hu[_-]HU" },
{ LANGUAGE_IT, "it", "Italian" , "it|ita|italian" }, { LANGUAGE_IT, "it", "Italian", "it|ita|italian|it[_-]IT" },
{ LANGUAGE_JP, "jp", "Japanese" , "jp|ja|jpn|japanese" }, { LANGUAGE_JP, "jp", "Japanese", "jp|ja|jpn|japanese|ja[_-]JP" },
{ LANGUAGE_TR, "tr", "Turkish" , "tr|tur|turkish" }, { LANGUAGE_TR, "tr", "Turkish", "tr|tur|turkish|tr[_-]TR" },
{ LANGUAGE_PT, "pt", "Portuguese", "pt|por|portuguese" }, { LANGUAGE_PT, "pt", "Portuguese", "pt|por|portuguese|pt[_-]PT" },
{ LANGUAGE_KO, "ko", "Korean" , "ko|kor|korean" }, { LANGUAGE_KO, "ko", "Korean", "ko|kor|korean|ko[_-]KR" },
{ LANGUAGE_NL, "nl", "Dutch" , "nl|nld|dut|dutch" }, { LANGUAGE_NL, "nl", "Dutch", "nl|nld|dut|dutch|nl[_-]NL" },
{ LANGUAGE_SV, "sv", "Swedish" , "sv|swe|swedish" }, { LANGUAGE_SV, "sv", "Swedish", "sv|swe|swedish|sv[_-]SE" },
{ LANGUAGE_NO, "no", "Norwegian" , "no|nor|norwegian" }, { LANGUAGE_NO, "no", "Norwegian", "no|nor|norwegian|nb[_-]no|nn[_-]NO" },
{ LANGUAGE_DA, "da", "Danish" , "da|dan|danish" }, { LANGUAGE_DA, "da", "Danish", "da|dan|danish|da[_-]DK" },
{ LANGUAGE_FI, "fi", "Finnish" , "fi|fin|finnish" }, { LANGUAGE_FI, "fi", "Finnish", "fi|fin|finnish|fi[_-]FI" },
{ LANGUAGE_PT_BR, "br", "Brazilian Portuguese", "br|pt_br|pt-br|ptbr|brazilian_portuguese" }, { LANGUAGE_PT_BR, "br", "Brazilian Portuguese", "br|pt_br|pt-br|ptbr|brazilian_portuguese" },
{ LANGUAGE_SK, "sk", "Slovak" , "sk|slk|slo|slovak" }, { LANGUAGE_SK, "sk", "Slovak", "sk|slk|slo|slovak|sk[_-]SK" },
{ LANGUAGE_BL, "bl", "Bulgarian" , "bl|bg|bul|bulgarian" }, { LANGUAGE_BL, "bl", "Bulgarian", "bl|bg|bul|bulgarian|bg[_-]BG" },
{ LANGUAGE_UK, "uk", "Ukrainian" , "uk|ukr|ukrainian" }, { LANGUAGE_UK, "uk", "Ukrainian", "uk|ukr|ukrainian|uk[_-]UA" },
{ LANGUAGE_ES_419, "es_mx", "Spanish (Latin American)", "es_mx|es-mx|esmx|es-419|spanish_latin_american" } { LANGUAGE_ES_419, "es_mx", "Spanish (Latin American)", "es_mx|es-mx|esmx|es-419|spanish_latin_american" }
}; };

View File

@ -3282,13 +3282,13 @@ void Downloader::galaxyInstallGame(const std::string& product_id, int build_inde
else else
sPlatform = "windows"; sPlatform = "windows";
std::string sLanguage = "en"; std::string sLanguageRegex = "en|eng|english|en[_-]US";
unsigned int iLanguage = Globals::globalConfig.dlConf.iGalaxyLanguage; unsigned int iLanguage = Globals::globalConfig.dlConf.iGalaxyLanguage;
for (unsigned int i = 0; i < GlobalConstants::LANGUAGES.size(); ++i) for (unsigned int i = 0; i < GlobalConstants::LANGUAGES.size(); ++i)
{ {
if (GlobalConstants::LANGUAGES[i].id == iLanguage) if (GlobalConstants::LANGUAGES[i].id == iLanguage)
{ {
sLanguage = GlobalConstants::LANGUAGES[i].code; sLanguageRegex = GlobalConstants::LANGUAGES[i].regexp;
break; break;
} }
} }
@ -3340,10 +3340,12 @@ void Downloader::galaxyInstallGame(const std::string& product_id, int build_inde
{ {
bool bSelectedLanguage = false; bool bSelectedLanguage = false;
bool bSelectedArch = false; bool bSelectedArch = false;
boost::regex language_re("^(" + sLanguageRegex + ")$", boost::regex::perl | boost::regex::icase);
boost::match_results<std::string::const_iterator> what;
for (unsigned int j = 0; j < json["depots"][i]["languages"].size(); ++j) for (unsigned int j = 0; j < json["depots"][i]["languages"].size(); ++j)
{ {
std::string language = json["depots"][i]["languages"][j].asString(); std::string language = json["depots"][i]["languages"][j].asString();
if (language == "*" || language == sLanguage) if (language == "*" || boost::regex_search(language, what, language_re))
bSelectedLanguage = true; bSelectedLanguage = true;
} }