License | |
Builds | |
.NET Core | |
Avalonia | |
Core | |
Prism | |
Reactive |
Prism | ReactiveUi |
---|---|
- Recommended tool to manage resx files is ResXResourceManager
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterInstance<ILocalizer>(new Localizer(Properties.Resource.ResourceManager));
}
Include prism internationalizing module by .axaml
xmlns:i18N="clr-namespace:I18N.Avalonia.Prism;assembly=I18N.Avalonia.Prism"
<StackPanel>
<TextBlock Text="{i18N:PrismLocalization Welcome}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0, 24, 0,24"
FontSize="17"
FontWeight="Heavy" />
<Button Content="{i18N:PrismLocalization English}"
Margin="0,0,0,8"
Command="{Binding SwitchLanguage}"
CommandParameter="en"/>
<Button Content="{i18N:PrismLocalization German}"
Margin="0,0,0,8"
Command="{Binding SwitchLanguage}"
CommandParameter="de"/>
</StackPanel>
public override void RegisterServices()
{
base.RegisterServices();
Locator.CurrentMutable.RegisterLazySingleton(() => new Localizer(Properties.Resource.ResourceManager), typeof(ILocalizer));
}
Include reactive internatinalizing module by .axaml
xmlns:i18N="clr-namespace:I18N.Avalonia.ReactiveUi;assembly=I18N.Avalonia.ReactiveUi"
<StackPanel>
<TextBlock Text="{i18N:ReactiveUiLocalization Welcome}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0, 24, 0,24"
FontSize="17"
FontWeight="Heavy" />
<Button Content="{i18N:ReactiveUiLocalization English}"
Margin="0,0,0,8"
Command="{Binding SwitchLanguage}"
CommandParameter="en"/>
<Button Content="{i18N:ReactiveUiLocalization German}"
Margin="0,0,0,8"
Command="{Binding SwitchLanguage}"
CommandParameter="de"/>
</StackPanel>
public LanguageViewModel(ILocalizer i18N)
{
i18N.LanguageChangedNotification += OnLanguageChangedNotification;
}
private void OnLanguageChangedNotification()
{
Console.WriteLine(@"Change language to" + _localizer.Language.TwoLetterISOLanguageName);
// Your binding can be changed here or notify property changed can be called to refresh
}
- After language is set all binding properties will be automatic refreshed and LanguageChangedNotification is called to refresh bindings.
public LanguageViewModel(ILocalizer i18N)
{
i18N.Language = new CultureInfo("de");
}
Thanks to Sakya which has written this nice blog to understand this behavior and to build a nuget package with some changes.