I18N.Avalonia.Prism 1.0.1

dotnet add package I18N.Avalonia.Prism --version 1.0.1                
NuGet\Install-Package I18N.Avalonia.Prism -Version 1.0.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="I18N.Avalonia.Prism" Version="1.0.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add I18N.Avalonia.Prism --version 1.0.1                
#r "nuget: I18N.Avalonia.Prism, 1.0.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install I18N.Avalonia.Prism as a Cake Addin
#addin nuget:?package=I18N.Avalonia.Prism&version=1.0.1

// Install I18N.Avalonia.Prism as a Cake Tool
#tool nuget:?package=I18N.Avalonia.Prism&version=1.0.1                

Avalonia Internationalizing

License
Builds
.NET Core
Avalonia
Core NuGet
Prism NuGet
Reactive NuGet
Prism ReactiveUi

How to use it

Ressource manager files (.resx)

Prism registration

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"

Usage in .axaml

<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>

ReactiveUi registration (Splat)

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"

Usage in .axaml

<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>

Usage in model view

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
}

Language change

  • 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");
}

Acknowledgment

Thanks to Sakya which has written this nice blog to understand this behavior and to build a nuget package with some changes.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.1 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.1 187 8/9/2023
1.0.0 139 8/8/2023