Introduction
Avalanche.Localization is .NET localization class library with pluralization features, [git], [www].
Localization in short. Add package reference to nupkg.
<PropertyGroup>
<RestoreAdditionalProjectSources>https://avalanche.fi/Avalanche.Core/nupkg/index.json</RestoreAdditionalProjectSources>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Avalanche.Localization"/>
<PackageReference Include="Avalanche.Localization.Cldr"/>
</ItemGroup>
Localization files can be dropped into "Resources/<Key>" and "Resources/<Culture>/<Key>" either as embedded resource or as output copied resource.
Example: Resources/Namespace.l.yaml. Root file can supply texts for multiple languages. Pluralization rules are language specific. [Demo]
TemplateFormat: Brace
PluralRules: Unicode.CLDR41
Invariant:
- Culture: ""
Items:
- Key: Namespace.Apples
Cases:
- Text: "You've got an apple."
Plurals: "0:cardinal:one:en"
- Text: "You've got {0} apples."
Plurals: "0:cardinal:other:en"
- Key: Namespace.Today
Text: "Today is {0}."
Finnish:
- Culture: fi
Items:
- Key: Namespace.Apples
Cases:
- Text: "Sinulla on yksi omena."
Plurals: "0:cardinal:one"
- Text: "Sinulla on {0} omenaa."
Plurals: "0:cardinal:other"
- Key: Namespace.Today
Text: "Tänään on {0}."
The following example Resources/sv/Namespace.l.yaml is loaded when 'sv' culture is requested.
TemplateFormat: Brace
PluralRules: Unicode.CLDR41
Swedish:
- Culture: sv
Items:
- Key: Namespace.Apples
Cases:
- Text: "Du har ett äpple."
Plurals: "0:cardinal:one"
- Text: "Du har {0} äpplen."
Plurals: "0:cardinal:other"
- Key: Namespace.Today
Text: "Idag är det {0}."
Localization.Default.LocalizableTextCached provides texts that can localize and pluralize to culture argument.
// Create text
ILocalizedText text = Localization.Default.LocalizableTextCached["Namespace.Apples"];
// Get culture
IFormatProvider culture = CultureInfo.GetCultureInfo("sv");
// Create arguments
object[] arguments = { 2 };
// Print
WriteLine(text.Print(culture, arguments)); // "Du har 2 äpplen."
Localization.Default.LocalizingTextCached provides localizing texts that localize and pluralize to the active culture.
// Get active culture provider
ICultureProvider cultureProvider = CultureProvider.CurrentCulture.Instance;
// Get localizing text
ILocalizingText text = Localization.Default.LocalizingTextCached[(cultureProvider, "Namespace.Apples")];
// Assign language
CultureInfo.CurrentUICulture = CultureInfo.GetCultureInfo("sv");
// Assign format provider
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("sv");
// Print to active culture
WriteLine(text.Print(new object[] { 2 })); // "Du har 2 äpplen."
The following GlobalUsings.cs can be used to include all extension methods.
global using Avalanche.Localization;
global using Avalanche.Template;
global using Avalanche.Utilities;
global using Avalanche.Utilities.Provider;
Interoperability:
- .NET 7.0 and upwards.
Class libraries:
- Avalanche.Localization.dll
- Avalanche.Localization.Abstractions.dll
- Avalanche.Localization.Extensions.dll
- Avalanche.Localization.Cldr.dll
- Avalanche.Localization.Asp.dll
Dependency libraries, direct and indirect:
- Avalanche.Template.dll
- Avalanche.Template.Abstractions.dll
- Avalanche.Tokenizer.dll
- Avalanche.Tokenizer.Abstractions.dll
- Avalanche.Utilities.dll
- Avalanche.Utilities.Abstractions.dll
- YamlDotNet
Tangential libraries:
- Avalanche.Message.Localization.dll