mirror of
https://github.com/vcmi/vcmi.git
synced 2025-04-13 11:40:38 +02:00
Code review fixes
This commit is contained in:
parent
65e63bdf69
commit
10eb19758a
@ -144,28 +144,59 @@ ui8 CMapHeader::levels() const
|
||||
|
||||
void CMapHeader::registerMapStrings()
|
||||
{
|
||||
auto language = CGeneralTextHandler::getPreferredLanguage();
|
||||
JsonNode data;
|
||||
|
||||
if(translations[language].isNull())
|
||||
//get supported languages. Assuming that translation containing most strings is the base language
|
||||
std::set<std::string> mapLanguages, mapBaseLanguages;
|
||||
int maxStrings = 0;
|
||||
for(auto & translation : translations.Struct())
|
||||
{
|
||||
//english is preferrable
|
||||
language = Languages::getLanguageOptions(Languages::ELanguages::ENGLISH).identifier;
|
||||
std::list<Languages::Options> languages{Languages::getLanguageList().begin(), Languages::getLanguageList().end()};
|
||||
while(translations[language].isNull() && !languages.empty())
|
||||
{
|
||||
language = languages.front().identifier;
|
||||
languages.pop_front();
|
||||
}
|
||||
if(translation.first.empty() || !translation.second.isStruct() || translation.second.Struct().empty())
|
||||
continue;
|
||||
|
||||
if(!translations[language].isNull())
|
||||
{
|
||||
logGlobal->info("Map %s doesn't have any translation", name.toString());
|
||||
return;
|
||||
}
|
||||
if(translation.second.Struct().size() > maxStrings)
|
||||
maxStrings = translation.second.Struct().size();
|
||||
mapLanguages.insert(translation.first);
|
||||
}
|
||||
|
||||
if(maxStrings == 0 || mapBaseLanguages.empty())
|
||||
{
|
||||
logGlobal->info("Map %s doesn't have any supported translation", name.toString());
|
||||
return;
|
||||
}
|
||||
|
||||
//identifying base languages
|
||||
for(auto & translation : translations.Struct())
|
||||
{
|
||||
if(translation.second.isStruct() && translation.second.Struct().size() == maxStrings)
|
||||
mapBaseLanguages.insert(translation.first);
|
||||
}
|
||||
|
||||
std::string baseLanguage, language;
|
||||
//english is preferrable as base language
|
||||
if(mapBaseLanguages.count(Languages::getLanguageOptions(Languages::ELanguages::ENGLISH).identifier))
|
||||
baseLanguage = Languages::getLanguageOptions(Languages::ELanguages::ENGLISH).identifier;
|
||||
else
|
||||
baseLanguage = *mapBaseLanguages.begin();
|
||||
|
||||
for(auto & s : translations[language].Struct())
|
||||
if(mapBaseLanguages.count(CGeneralTextHandler::getPreferredLanguage()))
|
||||
{
|
||||
language = CGeneralTextHandler::getPreferredLanguage(); //preferred language is base language - use it
|
||||
baseLanguage = language;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(mapLanguages.count(CGeneralTextHandler::getPreferredLanguage()))
|
||||
language = CGeneralTextHandler::getPreferredLanguage();
|
||||
else
|
||||
language = baseLanguage; //preferred language is not supported, use base language
|
||||
}
|
||||
|
||||
assert(!language.empty());
|
||||
|
||||
JsonNode data = translations[baseLanguage];
|
||||
if(language != baseLanguage)
|
||||
JsonUtils::mergeCopy(data, translations[language]);
|
||||
|
||||
for(auto & s : data.Struct())
|
||||
registerString("map", TextIdentifier(s.first), s.second.String(), language);
|
||||
}
|
||||
|
||||
|
@ -49,7 +49,7 @@ public:
|
||||
void saveInit(const ResourcePath & file);
|
||||
void campaignInit();
|
||||
void countPlayers();
|
||||
// TODO: Those must be on client-side
|
||||
|
||||
std::string getNameTranslated() const;
|
||||
std::string getNameForList() const;
|
||||
std::string getDescriptionTranslated() const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user