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:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user