1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-27 22:49:25 +02:00

Added 'translate missing' command for convenience

This commit is contained in:
Ivan Savenko
2024-10-26 11:50:08 +00:00
parent e5739e49da
commit 565c02d61c
7 changed files with 32 additions and 16 deletions

View File

@@ -22,7 +22,7 @@ VCMI_LIB_NAMESPACE_BEGIN
std::recursive_mutex TextLocalizationContainer::globalTextMutex;
void TextLocalizationContainer::registerStringOverride(const std::string & modContext, const TextIdentifier & UID, const std::string & localized)
void TextLocalizationContainer::registerStringOverride(const std::string & modContext, const TextIdentifier & UID, const std::string & localized, const std::string & language)
{
std::lock_guard globalLock(globalTextMutex);
@@ -42,6 +42,11 @@ void TextLocalizationContainer::registerStringOverride(const std::string & modCo
entry.identifierModContext = modContext;
entry.baseStringModContext = modContext;
}
else
{
if (language == VLC->generaltexth->getPreferredLanguage())
entry.overriden = true;
}
}
else
{
@@ -127,10 +132,10 @@ void TextLocalizationContainer::registerString(const std::string & identifierMod
}
}
void TextLocalizationContainer::loadTranslationOverrides(const std::string & modContext, const JsonNode & config)
void TextLocalizationContainer::loadTranslationOverrides(const std::string & modContext, const std::string & language, const JsonNode & config)
{
for(const auto & node : config.Struct())
registerStringOverride(modContext, node.first, node.second.String());
registerStringOverride(modContext, node.first, node.second.String(), language);
}
bool TextLocalizationContainer::identifierExists(const TextIdentifier & UID) const
@@ -140,15 +145,18 @@ bool TextLocalizationContainer::identifierExists(const TextIdentifier & UID) con
return stringsLocalizations.count(UID.get());
}
void TextLocalizationContainer::exportAllTexts(std::map<std::string, std::map<std::string, std::string>> & storage) const
void TextLocalizationContainer::exportAllTexts(std::map<std::string, std::map<std::string, std::string>> & storage, bool onlyMissing) const
{
std::lock_guard globalLock(globalTextMutex);
for (auto const & subContainer : subContainers)
subContainer->exportAllTexts(storage);
subContainer->exportAllTexts(storage, onlyMissing);
for (auto const & entry : stringsLocalizations)
{
if (onlyMissing && entry.second.overriden)
continue;
std::string textToWrite;
std::string modName = entry.second.baseStringModContext;