// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
#pragma once
#include "Engine/Content/JsonAsset.h"
#include "Engine/Core/Collections/Array.h"
#include "Engine/Core/Collections/Dictionary.h"
#include "Engine/Scripting/SoftObjectReference.h"
///
/// Contains localized strings table for a given culture.
///
///
API_CLASS(NoSpawn) class FLAXENGINE_API LocalizedStringTable : public JsonAssetBase
{
DECLARE_ASSET_HEADER(LocalizedStringTable);
public:
///
/// The locale of the localized string table (eg. pl-PL).
///
API_FIELD() String Locale;
///
/// The fallback language table to use for missing keys. Eg. table for 'en-GB' can point to 'en' as a fallback to prevent problem of missing localized strings.
///
API_FIELD() SoftObjectReference FallbackTable;
///
/// The string table. Maps the message id into the localized text. For plural messages the list contains separate items for value numbers.
///
API_FIELD() Dictionary> Entries;
public:
///
/// Adds the localized string to the table.
///
/// The message id. Used for lookups.
/// The localized text.
API_FUNCTION() void AddString(const StringView& id, const StringView& value);
///
/// Adds the localized plural string to the table.
///
/// The message id. Used for lookups.
/// The localized text.
/// The plural value (0, 1, 2..).
API_FUNCTION() void AddPluralString(const StringView& id, const StringView& value, int32 n);
///
/// Gets the localized string by using string id lookup. Uses fallback table if text is not included in this table.
///
/// The message identifier.
/// The localized text.
API_FUNCTION() String GetString(const String& id) const;
///
/// Gets the localized plural string by using string id lookup. Uses fallback table if text is not included in this table.
///
/// The message identifier.
/// The value count for plural message selection.
/// The localized text.
API_FUNCTION() String GetPluralString(const String& id, int32 n) const;
protected:
// [JsonAssetBase]
LoadResult loadAsset() override;
void unload(bool isReloading) override;
void OnGetData(rapidjson_flax::StringBuffer& buffer) const override;
};