CultureProvider
ICultureProvider provides active or assigned culture and format.
/// <summary>Culture and format provider.</summary>
public interface ICultureProvider
{
/// <summary>Culture (ISO 649-1)[-(ISO 3166-2)], e.g. "en" or "en-UK". "" for invariant culture. If null, then unassigned or resource is assigned to multiple cultures.</summary>
string Culture { get; set; }
/// <summary>Format provider</summary>
IFormatProvider Format { get; set; }
}
CultureProvider is (initially) re-assignable.
// Create provider
CultureProvider cultureProvider = new CultureProvider("en");
// Re-assign culture
cultureProvider.Culture = "fi";
cultureProvider.Format = CultureInfo.GetCultureInfo("fi");
.SetReadOnly() assigns CultureProvider into read-only state.
ICultureProvider cultureProvider = new CultureProvider("en").SetReadOnly();
CultureProvider.En.Instance returns always english culture "en".
ICultureProvider cultureProvider = CultureProvider.En.Instance;
CultureProvider.InvariantCulture.Instance returns the invariant culture "".
ICultureProvider cultureProvider = CultureProvider.InvariantCulture.Instance;
CultureProvider.CurrentCulture.Instance returns CultureInfo.CurrentUICulture as culture and CultureInfo.CurrentCulture as format provider. These represent application's culture assignment.
// Get culture provider
ICultureProvider cultureProvider = CultureProvider.CurrentCulture.Instance;
// Assign language
CultureInfo.CurrentUICulture = CultureInfo.GetCultureInfo("fi");
// Assign format
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("fi");
// Get active (language, format)
(string language, IFormatProvider format) = cultureProvider.Set();
CultureProvider.Default is property that represents the default culture provider. It is shortcut and returns the same CultureProvider.CurrentCulture.Instance as above.
// Get default culture provider (same as CultureInfo.CurrentCulture)
ICultureProvider cultureProvider = CultureProvider.Default;
// Assign application's current language
cultureProvider.Culture = "fi";
// Assign application's current format
cultureProvider.Format = CultureInfo.GetCultureInfo("fi");
// Get active (language, format)
(string language, IFormatProvider format) = cultureProvider.Set();
CultureProvider.CurrentThread.Instance returns Thread.CurrentThread.CurrentUICulture as culture and Thread.CurrentThread.CurrentCulture as format provider. New threads copy culture value from CultureInfo.CurrentUICulture and CultureInfo.CurrentCulture.
// Get culture provider
ICultureProvider cultureProvider = CultureProvider.CurrentThread.Instance;
// Assign language
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fi");
// Assign format
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("fi");
// Get active (language, format)
(string language, IFormatProvider format) = cultureProvider.Set();
CultureProvider.DefaultThread returns CultureInfo.DefaultThreadCurrentUICulture and CultureInfo.DefaultThreadCurrentCulture. These represent culture settings of the application's main thread, which are assigned the initial culture settings.
// Get culture provider
ICultureProvider cultureProvider = CultureProvider.DefaultThread.Instance;
CultureProvider.Func(func) adapts function into culture provider.
ICultureProvider cultureProvider = new CultureProvider.Func(() => (CultureInfo.CurrentUICulture.Name, CultureInfo.CurrentCulture));
Culture provider is used for ILocalization.LocalizingTextCached[(cultureProvider, key)] to construct localizing text or file.
ICultureProvider cultureProvider = new CultureProvider("en");
ILocalizedText text = Localization.Default.LocalizingTextCached[(cultureProvider, "Namespace.Apples")];
WriteLine(text.Print(new object[] { 2 })); // "You've got 2 apples."
cultureProvider.Culture = "fi";
WriteLine(text.Print(new object[] { 2 })); // "Sinulla on 2 omenaa."
Culture provider is used for decorating templateText .Localize(localization, key, cultureProvider).
ICultureProvider cultureProvider = new CultureProvider("en");
ITemplateText text = new TemplateText("You've got {0} apple(s).");
text = Localization.Default.Localize(text, "Namespace.Apples", cultureProvider);
WriteLine(text.Print(null, new object[] { 2 })); // "You've got 2 apples."
cultureProvider.Culture = "fi";
WriteLine(text.Print(null, new object[] { 2 })); // "Sinulla on 2 omenaa."
Full Example
Full example
using System.Globalization;
using Avalanche.Localization;
using Avalanche.Template;
using Avalanche.Utilities;
using static System.Console;
class cultureprovider
{
public static void Run()
{
{
// <01>
// Create provider
CultureProvider cultureProvider = new CultureProvider("en");
// Re-assign culture
cultureProvider.Culture = "fi";
cultureProvider.Format = CultureInfo.GetCultureInfo("fi");
// </01>
}
{
// <02>
ICultureProvider cultureProvider = new CultureProvider("en").SetReadOnly();
// </02>
}
{
// <03>
ICultureProvider cultureProvider = CultureProvider.En.Instance;
// </03>
}
{
// <04>
ICultureProvider cultureProvider = CultureProvider.InvariantCulture.Instance;
// </04>
}
{
// <05>
// Get culture provider
ICultureProvider cultureProvider = CultureProvider.CurrentCulture.Instance;
// Assign language
CultureInfo.CurrentUICulture = CultureInfo.GetCultureInfo("fi");
// Assign format
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("fi");
// Get active (language, format)
(string language, IFormatProvider format) = cultureProvider.Set();
// </05>
}
{
// <05B>
// Get default culture provider (same as CultureInfo.CurrentCulture)
ICultureProvider cultureProvider = CultureProvider.Default;
// Assign application's current language
cultureProvider.Culture = "fi";
// Assign application's current format
cultureProvider.Format = CultureInfo.GetCultureInfo("fi");
// Get active (language, format)
(string language, IFormatProvider format) = cultureProvider.Set();
// </05B>
}
{
// <06>
// Get culture provider
ICultureProvider cultureProvider = CultureProvider.CurrentThread.Instance;
// Assign language
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fi");
// Assign format
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("fi");
// Get active (language, format)
(string language, IFormatProvider format) = cultureProvider.Set();
// </06>
}
{
// <07>
// Get culture provider
ICultureProvider cultureProvider = CultureProvider.DefaultThread.Instance;
// </07>
// Get default thread culture (language, format)
(string language, IFormatProvider format) = cultureProvider.Set();
}
{
// <08>
ICultureProvider cultureProvider = new CultureProvider.Func(() => (CultureInfo.CurrentUICulture.Name, CultureInfo.CurrentCulture));
// </08>
}
{
// <09>
ICultureProvider cultureProvider = new CultureProvider("en");
ILocalizedText text = Localization.Default.LocalizingTextCached[(cultureProvider, "Namespace.Apples")];
WriteLine(text.Print(new object[] { 2 })); // "You've got 2 apples."
cultureProvider.Culture = "fi";
WriteLine(text.Print(new object[] { 2 })); // "Sinulla on 2 omenaa."
// </09>
}
{
// <10>
ICultureProvider cultureProvider = new CultureProvider("en");
ITemplateText text = new TemplateText("You've got {0} apple(s).");
text = Localization.Default.Localize(text, "Namespace.Apples", cultureProvider);
WriteLine(text.Print(null, new object[] { 2 })); // "You've got 2 apples."
cultureProvider.Culture = "fi";
WriteLine(text.Print(null, new object[] { 2 })); // "Sinulla on 2 omenaa."
// </10>
}
}
}