Followed从Accept-Language头动态设置区域性以本地化我的blazor-wasm应用程序。
WebUI.csproj
<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>
程序.cs
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
添加的文件夹:
Resources
Shared.resx
Shared.en.resx
_进口剃须刀
@using WebUI.Resources
视图:
@using System.Globalization
@inject IStringLocalizer<Shared> loc
@CultureInfo.CurrentCulture
@loc["countries"]
文化正在显示DE-DE@loc["countries"]只是打印国家而不是本地化。有什么想法吗?
对于(共享(资源,Blazor
遵循与ASP.NET Core
相同的设置/规则。
简而言之,当您指定options.ResourcesPath
时,它的值将作为前缀添加到资源的名称中,默认为CCD_ 4+资源名称。
如果将options.ResourcesPath
设置为Resources
,则会得到Resources.WebUI.Resources.Shared.resx
而不是WebUI.Resources.Shared.resx
。
要解决问题,不要设置ResourcesPath
,只需使用
builder.Services.AddLocalization();
链接到ASP。NET核心问题
您只指定了一个英文本地化文件:Shared.en.resx
。
当您在组件中指定@loc["countries"]
时,它会尝试使用浏览器区域设置来翻译文本";国家";。
本地化程序查找资源文件Shared.de.resx
,但该文件不存在,因此它默认为基本翻译,在本例中为英语。