1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-16 03:23:15 +01:00

Apply review requests from @tupaschoal

This commit is contained in:
Gymnasiast
2023-01-04 19:39:14 +01:00
parent 43988aa50f
commit 784b7d9fcc
3 changed files with 28 additions and 15 deletions

View File

@@ -9,6 +9,7 @@
#include "LanguagePack.h"
#include "../Context.h"
#include "../common.h"
#include "../core/FileStream.h"
#include "../core/Memory.hpp"
@@ -18,6 +19,7 @@
#include "../core/StringReader.h"
#include "Language.h"
#include "Localisation.h"
#include "LocalisationService.h"
#include <algorithm>
#include <memory>
@@ -580,6 +582,12 @@ namespace LanguagePackFactory
return languagePack;
}
std::unique_ptr<ILanguagePack> FromLanguageId(uint16_t id)
{
auto path = OpenRCT2::GetContext()->GetLocalisationService().GetLanguagePath(id);
return LanguagePack::FromFile(id, path.c_str());
}
std::unique_ptr<ILanguagePack> FromText(uint16_t id, const utf8* text)
{
auto languagePack = LanguagePack::FromText(id, text);

View File

@@ -33,5 +33,6 @@ struct ILanguagePack
namespace LanguagePackFactory
{
std::unique_ptr<ILanguagePack> FromFile(uint16_t id, const utf8* path);
std::unique_ptr<ILanguagePack> FromLanguageId(uint16_t id);
std::unique_ptr<ILanguagePack> FromText(uint16_t id, const utf8* text);
} // namespace LanguagePackFactory

View File

@@ -11,6 +11,7 @@
#include "../Context.h"
#include "../PlatformEnvironment.h"
#include "../core/Guard.hpp"
#include "../core/Path.hpp"
#include "../interface/Fonts.h"
#include "../object/ObjectManager.h"
@@ -94,9 +95,7 @@ void LocalisationService::OpenLanguage(int32_t id)
throw std::invalid_argument("id was undefined");
}
std::string filename;
filename = GetLanguagePath(id);
auto preferredLanguage = LanguagePackFactory::FromFile(id, filename.c_str());
auto preferredLanguage = LanguagePackFactory::FromLanguageId(id);
if (preferredLanguage != nullptr)
{
_currentLanguage = id;
@@ -110,31 +109,35 @@ void LocalisationService::OpenLanguage(int32_t id)
}
auto checkLanguage = LanguagesDescriptors[id].fallback;
while (true)
while (checkLanguage != LANGUAGE_UNDEFINED)
{
if (checkLanguage == LANGUAGE_UNDEFINED)
break;
_languageOrder.emplace_back(checkLanguage);
filename = GetLanguagePath(checkLanguage);
_loadedLanguages.emplace_back(LanguagePackFactory::FromFile(checkLanguage, filename.c_str()));
auto fallbackLanguagePack = LanguagePackFactory::FromLanguageId(checkLanguage);
if (fallbackLanguagePack != nullptr)
{
_loadedLanguages.emplace_back(std::move(fallbackLanguagePack));
}
checkLanguage = LanguagesDescriptors[checkLanguage].fallback;
}
if (id != LANGUAGE_ENGLISH_UK)
{
_languageOrder.emplace_back(LANGUAGE_ENGLISH_UK);
filename = GetLanguagePath(LANGUAGE_ENGLISH_UK);
_loadedLanguages.emplace_back(LanguagePackFactory::FromFile(LANGUAGE_ENGLISH_UK, filename.c_str()));
auto englishLanguagePack = LanguagePackFactory::FromLanguageId(LANGUAGE_ENGLISH_UK);
if (englishLanguagePack != nullptr)
{
_loadedLanguages.emplace_back(std::move(englishLanguagePack));
}
else
{
throw std::runtime_error("Unable to open the English language file!");
}
}
}
void LocalisationService::CloseLanguages()
{
for (auto& language : _loadedLanguages)
{
language = nullptr;
}
_languageOrder.clear();
_loadedLanguages.clear();
_currentLanguage = LANGUAGE_UNDEFINED;
@@ -143,6 +146,7 @@ void LocalisationService::CloseLanguages()
std::tuple<StringId, StringId, StringId> LocalisationService::GetLocalisedScenarioStrings(
const std::string& scenarioFilename) const
{
Guard::Assert(!_loadedLanguages.empty());
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);