Blazor wasm 本地化仅显示键

Blazor wasm localization showing just keys

跟随 Dynamically set the culture from the Accept-Language header 本地化了我的 blazor wasm 应用程序。

WebUI.csproj

<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>

Program.cs

builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");

已添加文件夹:

Resources
   Shared.resx
   Shared.en.resx

_Imports.razor

@using WebUI.Resources

在视图中:

@using System.Globalization
@inject IStringLocalizer<Shared> loc
@CultureInfo.CurrentCulture
@loc["countries"]

文化正在显示DE-DE。 @loc["countries"] 只打印国家而不是本地化。有什么想法吗?

您只指定了一个英文本地化文件:Shared.en.resx

当您在组件中指定 @loc["countries"] 时,它会尝试使用浏览器区域设置来翻译文本“国家/地区”。

本地化程序查找资源文件 Shared.de.resx 但该文件不存在,因此它默认为基本翻译,在本例中为英语。

对于(共享)资源,Blazor 遵循与 ASP.NET Core 相同的 setup/rules。

简而言之,当您指定 options.ResourcesPath 时,它的值将作为前缀添加到您的资源名称中, 默认情况下是 namespace + 资源名称。

如果 options.ResourcesPath 设置为 Resources,您将得到 Resources.WebUI.Resources.Shared.resx 而不是 WebUI.Resources.Shared.resx

求解,不用设置ResourcesPath,直接用

builder.Services.AddLocalization();