Localization

Uno.Extensions.Localization uses Microsoft.Extensions.Localization for any localization related work.

For more documentation on localization, read the references listed at the bottom.

Text localization

Save locale specific resources in .resw files in folder corresponding to locale (eg en-US).

An implementation of IStringLocalizer (ResourceLoaderStringLocalizer) is registered as service.

private IHost Host { get; }

public App()
{
    Host = UnoHost
        .CreateDefaultBuilder()
        .UseLocalization()
        .Build();
    // ........ //
}

We use IStringLocalizer to resolve those localized texts

var stringLocalizer = serviceProvider.GetService<IStringLocalizer>();

// Using IStringLocalizer as a dictionary
string myString = stringLocalizer["MyKey"];

// You can get a LocalizedString object too
LocalizedString myString = stringLocalizer["MyKey"];
var isResourceNotFound = myString.ResourceNotFound;

UI Culture

Current culture/locale can be changed using the ILocalizationService. This requires an app restart.

public class MainViewModel
{
    private readonly ILocalizationService localizationService;

    public MainViewModel(ILocalizationService localizationService)
    {
        this.localizationService = localizationService;
    } 
    
    public async Task ToggleLocalization()
    {
        var currentCulture = localizationService.CurrentCulture;
        
        var culture = localizationService.SupportedCultures.First(culture => culture.Name != currentCulture.Name);
        await localizationService.SetCurrentCultureAsync(culture);
    }
}

References