Blazor Blazer组件-本地化不适用于语言更改
我创建了用于本地化的资源文件。页面加载时,它设置当前区域性信息,但从下拉列表更改语言时,它不会更改 这是我的密码 MainLayout.razor:Blazor Blazer组件-本地化不适用于语言更改,blazor,blazor-server-side,Blazor,Blazor Server Side,我创建了用于本地化的资源文件。页面加载时,它设置当前区域性信息,但从下拉列表更改语言时,它不会更改 这是我的密码 MainLayout.razor: @inherits LayoutComponentBase @inject NavigationManager NavigationManager <div class="sidebar"> <NavMenu /> </div> <div class="main&quo
@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);
}
}
@page "/"
@inject IStringLocalizer<Localization> localizer
<h3>@localizer["Title"]</h3>
@localizer["Content"]
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>();
});
}
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");
});
}
}
@继承LayoutComponentBase
@注入NavigationManager NavigationManager
英语
德国的
@身体
@代码{
已选择私有无效(ChangeEventArgs e)
{
var selectedCulture=e.Value.ToString();
CultureInfo.CurrentUICulture=
CultureInfo.GetCultures(CultureType.AllCultures)
.First(c=>c.Name==selectedCulture);
}
}
本地化。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);
}
}
@page "/"
@inject IStringLocalizer<Localization> localizer
<h3>@localizer["Title"]</h3>
@localizer["Content"]
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>();
});
}
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");
});
}
}
@page/“
@注入IStringLocalizer定位器
@定位器[“标题”]
@定位器[“内容”]
Program.cs:
@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);
}
}
@page "/"
@inject IStringLocalizer<Localization> localizer
<h3>@localizer["Title"]</h3>
@localizer["Content"]
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>();
});
}
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");
});
}
}
公共类程序
{
公共静态void Main(字符串[]args)
{
CreateHostBuilder(args.Build().Run();
}
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
});
}
Startup.cs:
@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);
}
}
@page "/"
@inject IStringLocalizer<Localization> localizer
<h3>@localizer["Title"]</h3>
@localizer["Content"]
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>();
});
}
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");
});
}
}
公共类启动
{
公共启动(IConfiguration配置)
{
配置=配置;
}
公共IConfiguration配置{get;}
public void配置服务(IServiceCollection服务)
{
services.AddRazorPages();
AddServerSideBlazor();
AddLocalization(options=>{options.ResourcesPath=“Resources”;});
var supportedCultures=new List{new CultureInfo(“en”)、new CultureInfo(“de”)};
配置(选项=>
{
options.DefaultRequestCulture=new Microsoft.AspNetCore.Localization.RequestCulture(“de”);
options.supportedCultures=supportedCultures;
});
}
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
app.UseExceptionHandler(“/Error”);
//默认的HSTS值为30天。您可能希望在生产场景中更改此值,请参阅https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRequestLocalization(app.ApplicationServices.GetRequiredService().Value);
app.UseRouting();
app.ApplicationServices
.UseBootstrapProviders()的
.UseFontAwesomeIcons();
app.UseEndpoints(端点=>
{
endpoints.MapRazorPages();
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage(“/_主机”);
});
}
}
Resx:
@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);
}
}
@page "/"
@inject IStringLocalizer<Localization> localizer
<h3>@localizer["Title"]</h3>
@localizer["Content"]
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>();
});
}
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:
本地化.de.resx:
更改MainLayout.razor页面中的语言时,不会根据语言选择更改Localization.razor页面中的文本。更改所有页面中的文本需要做什么?这可能会帮助您: