【问题标题】:Blazor wasm localization showing just keysBlazor wasm 本地化仅显示键
【发布时间】:2021-12-30 16:40:20
【问题描述】:

关注 Dynamically set the culture from the Accept-Language header 以本地化我的 blazor wasm 应用程序。

WebUI.csproj

<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>

程序.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"] 只打印国家而不是本地化。任何想法为什么?

【问题讨论】:

  • 如果您看到的是密钥而不是本地化,这意味着它找不到文件。此外,de-DE 不是您的本地化文件的一部分,也许它不会回退到默认值?
  • 试试builder.Services.AddLocalization();,不设置ResourcesPath
  • @pfx 有效。您能否将此作为答案并详细说明为什么会这样?

标签: c# blazor blazor-webassembly


【解决方案1】:

对于(共享)资源,Blazor 遵循与 ASP.NET Core 相同的设置/规则。

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

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

要解决,不要设置ResourcesPath,直接使用

builder.Services.AddLocalization();

Link to ASP.NET Core question

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-09-30
      • 2022-10-26
      • 2021-10-29
      • 2023-03-26
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多