A lightweight, extensible internationalization library with hot-reload and multiple data sources for Avalonia and WPF.
- Multi-language — Any number of languages with runtime switching
- Hot Reload — Switch languages without restart
- Pluggable — JSON, YAML, RESX providers; extendable to any data source
- Plugin Support — Dynamic provider register/unregister for plugin architectures
- XAML Friendly — Clean markup extensions for Avalonia and WPF
- DI Integration — Full
Microsoft.Extensions.DependencyInjectionsupport
| Package | Description |
|---|---|
| DynamicLocalization.Core | Core library, platform-independent |
| DynamicLocalization.Avalonia | Avalonia platform (markup extensions) |
| DynamicLocalization.WPF | WPF platform (markup extensions) |
<!-- Avalonia -->
<PackageReference Include="DynamicLocalization.Avalonia" />
<!-- or WPF -->
<PackageReference Include="DynamicLocalization.WPF" />JSON — Localization/en.json (flat or nested format):
{
"App.Title": "My Application",
"App": { "Title": "My Application" } // same result
}YAML — Localization/en.yml:
App.Title: My Application
# or nested:
App:
Title: My ApplicationRESX — Visual Studio resource files (Resources/Strings.resx).
// Choose one or combine multiple providers
services.AddJsonLocalization(o =>
{
o.BasePath = "Localization";
o.UseEmbeddedResources = true;
o.Assembly = typeof(App).Assembly;
});
// services.AddYamlLocalization(o => o.BasePath = "Localization");
// services.AddResxLocalization(o => o.ResourceType = typeof(Resources.Strings));
services.AddCultureService();
var sp = services.BuildServiceProvider().InitializeLocalization();<TextBlock Text="{loc:Localize App.Title}" />
<TextBlock Text="{loc:Localize Greeting, StringFormat='Hello, {0}!'}" />var greeting = cultureService["Greeting"];
cultureService.SetCulture("zh-CN");
cultureService.CultureChanged += (s, e) => Console.WriteLine($"Switched to {e.NewCulture.Name}");- File:
{BasePath}/{culture}.json - String:
provider.LoadJsonString(json, "en") - Supports flat and nested formats
- File:
{BasePath}/{culture}.yml - String:
provider.LoadYamlString(yaml, "en") - Supports flat and nested formats, list values
- Uses Visual Studio
.resxdesigner files - Auto-detects satellite assemblies
See spec/providers.md for all options, formats, and programmatic usage.
See spec/api-reference.md for full API documentation (ICultureService, ILocalizationProvider, LocalizedString, DI extensions).
- Implement
ILocalizationProviderfor custom data sources - Inherit from
JsonLocalizationProvider/YamlLocalizationProviderto override parsing - Register/unregister providers dynamically for plugin scenarios
See spec/extending.md for custom providers, inheritance, and plugin integration.
MIT License