ILocalizationLines
ILocalizationLines contains table for localization line settings and providers.
/// <summary>Record of line query settings and providers</summary>
public interface ILocalizationLines
{
/// <summary>The provider that converts <see cref="ILocalizationFile"/> into lines.</summary>
IProvider<ILocalizationFile, IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>>> FileReader { get; set; }
/// <summary>The provider that converts <see cref="ILocalizationFile"/> into lines and caches.</summary>
IProvider<ILocalizationFile, IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>>> FileReaderCached { get; set; }
/// <summary>Queriers that return files that contain localization lines (Have format that implements <see cref="ILocalizationLineFileFormat"/>). Typically <see cref="ILocalizationFiles.Query"/></summary>
IList<IProvider<(string? culture, string? @namespace), IEnumerable<ILocalizationFile>>> FileProviders { get; set; }
/// <summary>Queriers that return files that contain localization lines (Have format that implements <see cref="ILocalizationLineFileFormat"/>). Typically <see cref="ILocalizationFiles.QueryCached"/></summary>
IList<IProvider<(string? culture, string? @namespace), IEnumerable<ILocalizationFile>>> FileProvidersCached { get; set; }
/// <summary>Explictly added lines</summary>
IList<IEnumerable<KeyValuePair<string, MarkedText>>> Lines { get; set; }
/// <summary>Line query providers.</summary>
IList<IProvider<(string? culture, string? key), IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>>>> LineProviders { get; set; }
/// <summary>Line query providers.</summary>
IList<IProvider<(string? culture, string? key), IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>>>> LineProvidersCached { get; set; }
/// <summary>Line query provider. Culture and Key are constraints, if null then less is filtered and more is passed.</summary>
IProvider<(string? culture, string? key), IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>>> Query { get; set; }
/// <summary>Line query provider. Culture and Key are constraints, if null then less is filtered and more is passed.</summary>
IProvider<(string? culture, string? key), IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>>> QueryCached { get; set; }
}
ILocalizationLines is a property of ILocalization.
ILocalization localization = new Localization();
ILocalizationLines localizationLines = localization.Lines;
Lines is a list where explicit lines are managed.
ILocalization localization = new Localization();
var line = new Dictionary<string, MarkedText> { { "TemplateFormat", "BraceNumeric" }, { "Culture", "" }, { "Key", "Namespace.Apples" }, { "Text", "You've got {0} apple(s)." } };
localization.Lines.AddLine(line);
.AddLine(culture, key, templateFormat, text, pluralRules?, plurals?) adds a line explicitly.
ILocalization localization = new Localization();
localization.Lines.AddLine(culture: "", key: "Namespace.Apples", templateFormat: "BraceNumeric", text: "You've got {0} apple(s).");
LineProviders and LineProvidersCached are lists where queryable line providers are managed. A cached and non-cached version of line provider must be added to both lists.
// Create localization
ILocalization localization = new Localization();
// Create provider
IProvider<(string? culture, string? key), IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>>> provider =
new ResourceManagerLineProvider(docs.Resources.Resource1.ResourceManager);
// Add provider (both are required)
localization.Lines.LineProviders.Add(provider);
localization.Lines.LineProvidersCached.Add(provider.ValueResultCaptured().Cached().ValueResultOpened());
// Get text
ILocalizedText? text = localization.LocalizableTextCached["docs.Resources.Resource1.Apples"];
// Print text
WriteLine(text.Print(CultureInfo.InvariantCulture, new object[] { 1 }));
Query is concatenation of all the providers in the LineProviders property. This provider caches nothing and reads everything fresh from sources.
ILocalization localization = Localization.Default;
IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>> lines = localization.Lines.Query[("fi", "Namespace.Apples")];
QueryCached is concatenation of all the providers in the LineProvidersCache property. This provider caches the results and the source files.
ILocalization localization = Localization.Default;
IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>> lines = localization.Lines.QueryCached[("fi", "Namespace.Apples")];
Full Example
Full example
using System.Globalization;
using Avalanche.Localization;
using Avalanche.Utilities;
using Avalanche.Utilities.Provider;
using static System.Console;
class localizationlines
{
public static void Run()
{
{
// <01>
ILocalization localization = new Localization();
ILocalizationLines localizationLines = localization.Lines;
// </01>
}
{
// <02>
ILocalization localization = new Localization();
var line = new Dictionary<string, MarkedText> { { "TemplateFormat", "BraceNumeric" }, { "Culture", "" }, { "Key", "Namespace.Apples" }, { "Text", "You've got {0} apple(s)." } };
localization.Lines.AddLine(line);
// </02>
}
{
// <03>
ILocalization localization = new Localization();
localization.Lines.AddLine(culture: "", key: "Namespace.Apples", templateFormat: "BraceNumeric", text: "You've got {0} apple(s).");
// </03>
}
{
// <04>
// Create localization
ILocalization localization = new Localization();
// Create provider
IProvider<(string? culture, string? key), IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>>> provider =
new ResourceManagerLineProvider(docs.Resources.Resource1.ResourceManager);
// Add provider (both are required)
localization.Lines.LineProviders.Add(provider);
localization.Lines.LineProvidersCached.Add(provider.ValueResultCaptured().Cached().ValueResultOpened());
// Get text
ILocalizedText? text = localization.LocalizableTextCached["docs.Resources.Resource1.Apples"];
// Print text
WriteLine(text.Print(CultureInfo.InvariantCulture, new object[] { 1 }));
// </04>
}
{
// <05>
ILocalization localization = Localization.Default;
IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>> lines = localization.Lines.Query[("fi", "Namespace.Apples")];
// </05>
}
{
// <06>
ILocalization localization = Localization.Default;
IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>> lines = localization.Lines.QueryCached[("fi", "Namespace.Apples")];
// </06>
}
}
}