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; +};