90 lines
2.1 KiB
C++
90 lines
2.1 KiB
C++
// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
|
|
|
|
#include "Localization.h"
|
|
#include "CultureInfo.h"
|
|
#include "LocalizationSettings.h"
|
|
#include "Engine/Core/Log.h"
|
|
#include "Engine/Core/Config/GameSettings.h"
|
|
#include "Engine/Engine/EngineService.h"
|
|
#include "Engine/Content/Content.h"
|
|
#include "Engine/Serialization/Serialization.h"
|
|
|
|
class LocalizationService : public EngineService
|
|
{
|
|
public:
|
|
LocalizationService()
|
|
: EngineService(TEXT("Localization"), -950)
|
|
{
|
|
}
|
|
|
|
bool Init() override;
|
|
};
|
|
|
|
namespace
|
|
{
|
|
CultureInfo CurrentCulture(0);
|
|
CultureInfo CurrentLanguage(0);
|
|
LocalizationService LocalizationServiceInstance;
|
|
|
|
IMPLEMENT_SETTINGS_GETTER(LocalizationSettings, Localization);
|
|
|
|
void LocalizationSettings::Apply()
|
|
{
|
|
}
|
|
|
|
void LocalizationSettings::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier)
|
|
{
|
|
DESERIALIZE(LocalizedStringTables);
|
|
}
|
|
|
|
}
|
|
|
|
bool LocalizationService::Init()
|
|
{
|
|
CurrentLanguage = CurrentCulture = CultureInfo(Platform::GetUserLocaleName());
|
|
return false;
|
|
}
|
|
|
|
Delegate<> Localization::LocalizationChanged;
|
|
|
|
const CultureInfo& Localization::GetCurrentCulture()
|
|
{
|
|
return CurrentCulture;
|
|
}
|
|
|
|
void Localization::SetCurrentCulture(const CultureInfo& value)
|
|
{
|
|
if (CurrentCulture == value)
|
|
return;
|
|
|
|
LOG(Info, "Changing current culture to: {0} ({1})", value.GetName(), value.GetLCID());
|
|
CurrentCulture = value;
|
|
LocalizationChanged();
|
|
}
|
|
|
|
const CultureInfo& Localization::GetCurrentLanguage()
|
|
{
|
|
return CurrentLanguage;
|
|
}
|
|
|
|
void Localization::SetCurrentLanguage(const CultureInfo& value)
|
|
{
|
|
if (CurrentLanguage == value)
|
|
return;
|
|
|
|
LOG(Info, "Changing current language to: {0} ({1})", value.GetName(), value.GetLCID());
|
|
CurrentLanguage = value;
|
|
LocalizationChanged();
|
|
}
|
|
|
|
void Localization::SetCurrentLanguageCulture(const CultureInfo& value)
|
|
{
|
|
if (CurrentCulture == value && CurrentLanguage == value)
|
|
return;
|
|
|
|
LOG(Info, "Changing current language and culture to: {0} ({1})", value.GetName(), value.GetLCID());
|
|
CurrentCulture = value;
|
|
CurrentLanguage = value;
|
|
LocalizationChanged();
|
|
}
|