diff --git a/Source/Editor/Content/Create/SettingsCreateEntry.cs b/Source/Editor/Content/Create/SettingsCreateEntry.cs
index 0cbda246b..974de76cc 100644
--- a/Source/Editor/Content/Create/SettingsCreateEntry.cs
+++ b/Source/Editor/Content/Create/SettingsCreateEntry.cs
@@ -53,6 +53,11 @@ namespace FlaxEditor.Content.Create
///
NavigationSettings,
+ ///
+ /// The localization settings.
+ ///
+ LocalizationSettings,
+
///
/// The build settings.
///
@@ -108,6 +113,7 @@ namespace FlaxEditor.Content.Create
typeof(PhysicsSettings),
typeof(GraphicsSettings),
typeof(NavigationSettings),
+ typeof(LocalizationSettings),
typeof(BuildSettings),
typeof(InputSettings),
typeof(WindowsPlatformSettings),
diff --git a/Source/Editor/Modules/ContentDatabaseModule.cs b/Source/Editor/Modules/ContentDatabaseModule.cs
index e55501e4b..ed1f69726 100644
--- a/Source/Editor/Modules/ContentDatabaseModule.cs
+++ b/Source/Editor/Modules/ContentDatabaseModule.cs
@@ -934,6 +934,7 @@ namespace FlaxEditor.Modules
Proxy.Add(new SettingsProxy(typeof(PhysicsSettings)));
Proxy.Add(new SettingsProxy(typeof(GraphicsSettings)));
Proxy.Add(new SettingsProxy(typeof(NavigationSettings)));
+ Proxy.Add(new SettingsProxy(typeof(LocalizationSettings)));
Proxy.Add(new SettingsProxy(typeof(BuildSettings)));
Proxy.Add(new SettingsProxy(typeof(InputSettings)));
Proxy.Add(new SettingsProxy(typeof(WindowsPlatformSettings)));
diff --git a/Source/Editor/Modules/ContentFindingModule.cs b/Source/Editor/Modules/ContentFindingModule.cs
index 9be15e0d1..45748f7f4 100644
--- a/Source/Editor/Modules/ContentFindingModule.cs
+++ b/Source/Editor/Modules/ContentFindingModule.cs
@@ -309,6 +309,7 @@ namespace FlaxEditor.Modules
{ "FlaxEditor.Content.Settings.InputSettings", "Settings" },
{ "FlaxEditor.Content.Settings.LayersAndTagsSettings", "Settings" },
{ "FlaxEditor.Content.Settings.NavigationSettings", "Settings" },
+ { "FlaxEditor.Content.Settings.LocalizationSettings", "Settings" },
{ "FlaxEditor.Content.Settings.PhysicsSettings", "Settings" },
{ "FlaxEditor.Content.Settings.TimeSettings", "Settings" },
{ "FlaxEditor.Content.Settings.UWPPlatformSettings", "Settings" },
diff --git a/Source/Engine/Core/Config/GameSettings.cpp b/Source/Engine/Core/Config/GameSettings.cpp
index e2789c0e2..5b333b227 100644
--- a/Source/Engine/Core/Config/GameSettings.cpp
+++ b/Source/Engine/Core/Config/GameSettings.cpp
@@ -13,6 +13,7 @@
#include "Engine/Input/InputSettings.h"
#include "Engine/Audio/AudioSettings.h"
#include "Engine/Navigation/NavigationSettings.h"
+#include "Engine/Localization/LocalizationSettings.h"
#include "Engine/Content/Content.h"
#include "Engine/Content/JsonAsset.h"
#include "Engine/Content/AssetReference.h"
@@ -127,6 +128,7 @@ bool GameSettings::Load()
PRELOAD_SETTINGS(Input);
PRELOAD_SETTINGS(Graphics);
PRELOAD_SETTINGS(Navigation);
+ PRELOAD_SETTINGS(Localization);
PRELOAD_SETTINGS(GameCooking);
#undef PRELOAD_SETTINGS
@@ -158,6 +160,7 @@ void GameSettings::Apply()
APPLY_SETTINGS(InputSettings);
APPLY_SETTINGS(GraphicsSettings);
APPLY_SETTINGS(NavigationSettings);
+ APPLY_SETTINGS(LocalizationSettings);
APPLY_SETTINGS(BuildSettings);
APPLY_SETTINGS(PlatformSettings);
#undef APPLY_SETTINGS
@@ -197,6 +200,7 @@ void GameSettings::Deserialize(DeserializeStream& stream, ISerializeModifier* mo
DESERIALIZE(Input);
DESERIALIZE(Graphics);
DESERIALIZE(Navigation);
+ DESERIALIZE(Localization);
DESERIALIZE(GameCooking);
// Per-platform settings containers
diff --git a/Source/Engine/Core/Config/GameSettings.cs b/Source/Engine/Core/Config/GameSettings.cs
index 0767d795a..ed96ef4e6 100644
--- a/Source/Engine/Core/Config/GameSettings.cs
+++ b/Source/Engine/Core/Config/GameSettings.cs
@@ -79,6 +79,12 @@ namespace FlaxEditor.Content.Settings
[EditorOrder(1045), EditorDisplay("Other Settings"), AssetReference(typeof(NavigationSettings), true), Tooltip("Reference to Navigation Settings asset")]
public JsonAsset Navigation;
+ ///
+ /// Reference to asset.
+ ///
+ [EditorOrder(1046), EditorDisplay("Other Settings"), AssetReference(typeof(LocalizationSettings), true), Tooltip("Reference to Localization Settings asset")]
+ public JsonAsset Localization;
+
///
/// Reference to asset.
///
@@ -219,6 +225,8 @@ namespace FlaxEditor.Content.Settings
return LoadAsset(gameSettings.Graphics) as T;
if (type == typeof(NavigationSettings))
return LoadAsset(gameSettings.Navigation) as T;
+ if (type == typeof(LocalizationSettings))
+ return LoadAsset(gameSettings.Localization) as T;
if (type == typeof(BuildSettings))
return LoadAsset(gameSettings.GameCooking) as T;
if (type == typeof(InputSettings))
@@ -321,6 +329,8 @@ namespace FlaxEditor.Content.Settings
return SaveAsset(gameSettings, ref gameSettings.Graphics, obj);
if (type == typeof(NavigationSettings))
return SaveAsset(gameSettings, ref gameSettings.Navigation, obj);
+ if (type == typeof(LocalizationSettings))
+ return SaveAsset(gameSettings, ref gameSettings.Localization, obj);
if (type == typeof(BuildSettings))
return SaveAsset(gameSettings, ref gameSettings.GameCooking, obj);
if (type == typeof(InputSettings))
diff --git a/Source/Engine/Core/Config/GameSettings.h b/Source/Engine/Core/Config/GameSettings.h
index 63745d9d8..8016bdbe4 100644
--- a/Source/Engine/Core/Config/GameSettings.h
+++ b/Source/Engine/Core/Config/GameSettings.h
@@ -68,6 +68,7 @@ public:
Guid Input;
Guid Graphics;
Guid Navigation;
+ Guid Localization;
Guid GameCooking;
// Per-platform settings containers
diff --git a/Source/Engine/Localization/Localization.cpp b/Source/Engine/Localization/Localization.cpp
index e486d29d7..0ba2b06ca 100644
--- a/Source/Engine/Localization/Localization.cpp
+++ b/Source/Engine/Localization/Localization.cpp
@@ -2,8 +2,12 @@
#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
{
@@ -21,6 +25,18 @@ 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()
diff --git a/Source/Engine/Localization/LocalizationSettings.h b/Source/Engine/Localization/LocalizationSettings.h
new file mode 100644
index 000000000..26ba06c96
--- /dev/null
+++ b/Source/Engine/Localization/LocalizationSettings.h
@@ -0,0 +1,31 @@
+// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
+
+#pragma once
+
+#include "Engine/Core/Config/Settings.h"
+#include "Engine/Content/AssetReference.h"
+#include "LocalizedStringTable.h"
+
+///
+/// Game localization and internalization settings container.
+///
+API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings") class FLAXENGINE_API LocalizationSettings : public SettingsBase
+{
+DECLARE_SCRIPTING_TYPE_MINIMAL(LocalizationSettings);
+public:
+ ///
+ /// The list of the string localization tables used by the game.
+ ///
+ API_FIELD()
+ Array> LocalizedStringTables;
+
+public:
+ ///
+ /// Gets the instance of the settings asset (default value if missing). Object returned by this method is always loaded with valid data to use.
+ ///
+ static LocalizationSettings* Get();
+
+ // [SettingsBase]
+ void Apply() override;
+ void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override;
+};