I created the resource file for localization. while page loading, it sets the current culture info but changing the language from drop down list, it's not changing.
Here is my code,
MainLayout.razor:
@inherits LayoutComponentBase
@inject NavigationManager NavigationManager
<div class="sidebar">
<NavMenu />
</div>
<div class="main">
<div class="top-row px-4">
<select @onchange="OnSelected">
<option value="en">English</option>
<option value="de">German</option>
</select>
</div>
<div class="content px-4">
@Body
</div>
</div>
@code {
private void OnSelected(ChangeEventArgs e)
{
var selectedCulture = e.Value.ToString();
CultureInfo.CurrentUICulture =
CultureInfo.GetCultures(CultureTypes.AllCultures)
.First(c => c.Name == selectedCulture);
}
}
Localization.razor:
@page "/"
@inject IStringLocalizer<Localization> localizer
<h3>@localizer["Title"]</h3>
@localizer["Content"]
Program.cs:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Startup.cs:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddLocalization(options => { options.ResourcesPath = "Resources"; });
var supportedCultures = new List<CultureInfo> { new CultureInfo("en"), new CultureInfo("de") };
services.Configure<RequestLocalizationOptions>(options =>
{
options.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("de");
options.SupportedUICultures = supportedCultures;
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRequestLocalization(app.ApplicationServices.GetRequiredService<IOptions<RequestLocalizationOptions>>().Value);
app.UseRouting();
app.ApplicationServices
.UseBootstrapProviders()
.UseFontAwesomeIcons();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
});
}
}
Resx:
Localization.resx:
Localization.de.resx:
While changing the language in MainLayout.razor page, it's not changing the text in Localization.razor page based on language selection. What I need to do for changing text in all pages?

