Easy to use localization libraries for C# & WPF.
Loosely based on CodingSeb.Localization.
This is still pre-1.0 and breaking changes should be expected.
| Nuget | Version |
|---|---|
| radj307.Localization | |
| radj307.Localization.WPF | |
| radj307.Localization.Json | |
| radj307.Localization.Yaml | |
| radj307.Localization.Xml |
The library's functionality is divided between packages, allowing you to only install what you need.
- radj307.Localization
Contains the core library, theLocclass, and the translation functionality. - radj307.Localization.WPF
Contains theTrmarkup extension and some binding converters.
The provided markup extension allows you to swap languages at runtime without any additional code. - radj307.Localization.Json
Contains the default serializer/deserializer for JSON translation config files. - radj307.Localization.Yaml
Contains the default serializer/deserializer for YAML translation config files. - radj307.Localization.Xml
Contains the default serializer/deserializer for XML translation config files.
using Localization;
Loc.Instance.CurrentLanguageName = "English";
Loc.Instance.Translate("MainWindow.Text"); //< "Hello World!"
Loc.Instance.CurrentLanguageName = "French";
Loc.Instance.Translate("MainWindow.Text"); //< "Salut tout le monde!"
// Loc.Tr is equivalent to Loc.Instance.Translate
Loc.Tr("This.Key.Does.Not.Exist", defaultText: "Default Text!"); //< "Default Text!"No xmlns declaration is required, the Tr markup extension is available globally.
<!-- The text will update automatically when you change the current language. -->
<TextBlock Text="{Tr 'MainWindow.Text'}" />
<TextBlock Text="{Tr 'MainWindow.Text', DefaultText='(Translation Not Provided)'}" />
<TextBlock Text="{Tr {Binding MyProperty},
FormatString='[1]: {0} {2}',
FormatArgs={MakeArray {Binding Header},
'\\'}}" />Translation configs store the translated strings for your application. You can use any file
format or syntax you wish by writing an ITranslationLoader implementation for it. Default
loader implementations are provided for JSON & YAML documents.
While it is recommended to keep languages separate for maintainability, there is nothing stopping you from saving multiple languages in the same file.
Syntax used by the JsonTranslationLoader class:
{
"MainWindow": {
"Text": {
"English": "Hello World!",
"French": "Salut tout le monde!"
}
}
}Alternative syntax used by the JsonSingleTranslationLoader class:
{
"$LanguageName": "English",
"MainWindow": {
"Text": "Hello World!"
}
}JsonSingleTranslationLoader only supports 1 language per file, but the syntax is much easier to write.
Syntax used by the YamlTranslationLoader class:
MainWindow:
Text:
English: "Hello World!"
French: "Salut tout le monde!"