Next sample page features a language selector, a label to display current language and a button to reload the page.
The language selector is binded to a variable with a setter where I update all culture settings I can think of.
The label successfully reflects any change on the selector. But when we click on the button to reload the page, it does not remember the changes.
@page "/test"
@inject NavigationManager NavigationManager
@using System.Globalization
<div class="Wrapper">
<select @bind="@Culture">
@foreach (var culture in cultures)
{
<option value="@culture">@culture.DisplayName</option>
}
</select>
<div>
Current culture: @CultureInfo.CurrentCulture.Name
</div>
<button @onclick="Reload">Reload the page</button>
</div>
<style>
.Wrapper {
display:flex;
flex-direction:column;
gap:15px;
max-width:200px;
margin:50px auto;
}
</style>
@code {
CultureInfo[] cultures = new[] {
new CultureInfo("es-ES"),
new CultureInfo("ca"),
new CultureInfo("en-US"),
new CultureInfo("pt-PT")
};
CultureInfo Culture
{
get => CultureInfo.CurrentCulture;
set
{
if (CultureInfo.CurrentCulture != value)
{
Thread.CurrentThread.CurrentCulture = value;
Thread.CurrentThread.CurrentUICulture = value;
CultureInfo.DefaultThreadCurrentCulture = value;
CultureInfo.DefaultThreadCurrentUICulture = value;
}
}
}
void Reload() {
NavigationManager.NavigateTo(NavigationManager.Uri, true);
}
}