mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-16 11:33:03 +01:00
Change loaded languages to a vector
This commit is contained in:
@@ -40,10 +40,9 @@ LocalisationService::~LocalisationService() = default;
|
||||
|
||||
const char* LocalisationService::GetString(StringId id) const
|
||||
{
|
||||
const char* result = nullptr;
|
||||
if (id == STR_EMPTY)
|
||||
{
|
||||
result = "";
|
||||
return "";
|
||||
}
|
||||
else if (id >= BASE_OBJECT_STRING_ID && id < BASE_OBJECT_STRING_ID + MAX_OBJECT_CACHED_STRINGS)
|
||||
{
|
||||
@@ -53,24 +52,21 @@ const char* LocalisationService::GetString(StringId id) const
|
||||
return _objectStrings[index].c_str();
|
||||
}
|
||||
|
||||
result = "(unallocated string)";
|
||||
return "(unallocated string)";
|
||||
}
|
||||
else if (id != STR_NONE)
|
||||
{
|
||||
if (_languageCurrent != nullptr)
|
||||
for (const auto& language : _loadedLanguages)
|
||||
{
|
||||
result = _languageCurrent->GetString(id);
|
||||
}
|
||||
if (result == nullptr && _languageFallback != nullptr)
|
||||
{
|
||||
result = _languageFallback->GetString(id);
|
||||
}
|
||||
if (result == nullptr)
|
||||
{
|
||||
result = "(undefined string)";
|
||||
const auto result = language->GetString(id);
|
||||
if (result != nullptr)
|
||||
return result;
|
||||
}
|
||||
|
||||
return "(undefined string)";
|
||||
}
|
||||
return result;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::string LocalisationService::GetLanguagePath(uint32_t languageId) const
|
||||
@@ -99,48 +95,52 @@ void LocalisationService::OpenLanguage(int32_t id)
|
||||
}
|
||||
|
||||
std::string filename;
|
||||
if (id != LANGUAGE_ENGLISH_UK)
|
||||
{
|
||||
filename = GetLanguagePath(LANGUAGE_ENGLISH_UK);
|
||||
_languageFallback = LanguagePackFactory::FromFile(LANGUAGE_ENGLISH_UK, filename.c_str());
|
||||
}
|
||||
|
||||
filename = GetLanguagePath(id);
|
||||
_languageCurrent = LanguagePackFactory::FromFile(id, filename.c_str());
|
||||
if (_languageCurrent != nullptr)
|
||||
auto preferredLanguage = LanguagePackFactory::FromFile(id, filename.c_str());
|
||||
if (preferredLanguage != nullptr)
|
||||
{
|
||||
_currentLanguage = id;
|
||||
_loadedLanguages.emplace_back(std::move(preferredLanguage));
|
||||
TryLoadFonts(*this);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw std::runtime_error("Unable to open language " + std::to_string(id));
|
||||
}
|
||||
|
||||
if (id != LANGUAGE_ENGLISH_UK)
|
||||
{
|
||||
filename = GetLanguagePath(LANGUAGE_ENGLISH_UK);
|
||||
_loadedLanguages.emplace_back(LanguagePackFactory::FromFile(LANGUAGE_ENGLISH_UK, filename.c_str()));
|
||||
}
|
||||
}
|
||||
|
||||
void LocalisationService::CloseLanguages()
|
||||
{
|
||||
_languageFallback = nullptr;
|
||||
_languageCurrent = nullptr;
|
||||
for (auto& language : _loadedLanguages)
|
||||
{
|
||||
language = nullptr;
|
||||
}
|
||||
_loadedLanguages.clear();
|
||||
_currentLanguage = LANGUAGE_UNDEFINED;
|
||||
}
|
||||
|
||||
std::tuple<StringId, StringId, StringId> LocalisationService::GetLocalisedScenarioStrings(
|
||||
const std::string& scenarioFilename) const
|
||||
{
|
||||
auto result0 = _languageCurrent->GetScenarioOverrideStringId(scenarioFilename.c_str(), 0);
|
||||
auto result1 = _languageCurrent->GetScenarioOverrideStringId(scenarioFilename.c_str(), 1);
|
||||
auto result2 = _languageCurrent->GetScenarioOverrideStringId(scenarioFilename.c_str(), 2);
|
||||
auto result0 = _loadedLanguages[0]->GetScenarioOverrideStringId(scenarioFilename.c_str(), 0);
|
||||
auto result1 = _loadedLanguages[0]->GetScenarioOverrideStringId(scenarioFilename.c_str(), 1);
|
||||
auto result2 = _loadedLanguages[0]->GetScenarioOverrideStringId(scenarioFilename.c_str(), 2);
|
||||
return std::make_tuple(result0, result1, result2);
|
||||
}
|
||||
|
||||
StringId LocalisationService::GetObjectOverrideStringId(std::string_view legacyIdentifier, uint8_t index) const
|
||||
{
|
||||
if (_languageCurrent == nullptr)
|
||||
if (_loadedLanguages.empty())
|
||||
{
|
||||
return STR_NONE;
|
||||
}
|
||||
return _languageCurrent->GetObjectOverrideStringId(legacyIdentifier, index);
|
||||
return _loadedLanguages[0]->GetObjectOverrideStringId(legacyIdentifier, index);
|
||||
}
|
||||
|
||||
StringId LocalisationService::AllocateObjectString(const std::string& target)
|
||||
|
||||
@@ -34,8 +34,7 @@ namespace OpenRCT2::Localisation
|
||||
const std::shared_ptr<IPlatformEnvironment> _env;
|
||||
int32_t _currentLanguage{};
|
||||
bool _useTrueTypeFont{};
|
||||
std::unique_ptr<ILanguagePack> _languageFallback;
|
||||
std::unique_ptr<ILanguagePack> _languageCurrent;
|
||||
std::vector<std::unique_ptr<ILanguagePack>> _loadedLanguages;
|
||||
std::stack<StringId> _availableObjectStringIds;
|
||||
std::vector<std::string> _objectStrings;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user