【问题标题】:How can I translate strings in Blazor components and App.razor?如何翻译 Blazor 组件和 App.razor 中的字符串?
【发布时间】:2020-12-16 06:32:12
【问题描述】:

我想本地化共享组件的字符串,例如“NavMenu.razor”或“App.razor”页面。

我设法翻译了我的页面中的内容,如general .NET Core instruction 和更多specific Blazor documentation 所述:

  • 创建一个具有正确名称的资源文件(例如 PageName.de.resx)。
  • 使用 @inject Microsoft.Extensions.Localization.IStringLocalizer<PageName> _l10n 将定位器注入 Razor 页面。
  • 使用_l10n["Product name"] 翻译页面内的文本,并正确翻译为“产品名称”。

这种方法不适用于“NavMenu.razor”和“App.razor”。

请注意:我使用 MatBlazor UI 库中的 MatNavMenu 进行主导航。

我在任何地方都找不到它的文档。非常感谢您的帮助。

【问题讨论】:

  • 尝试 ... IStringLocalizer 并使用 App.resx 。您可以以这种方式将注入放入 _imports 中,并且它可用于所有组件。我可以确认它以这种方式在 App.razor 中工作
  • 应该可以吧?奇怪的是,我以前尝试过类似的东西。按照您的指示再次尝试。没有运气。
  • 如果我有时间发布一个 repo 并展示它。我不能真正发布我正在查看的项目...
  • 我刚刚为你发布了一个 repo。原谅我使用网络服务的翻译。我只是在 edge 或 chrome 上更改了我的语言并重新加载页面以查看差异。

标签: .net-core localization blazor razor-pages blazor-webassembly


【解决方案1】:

简单:

  • 安装 Microsoft.Extensions.Localization

  • 在programs.cs中

    builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
    builder.Services.AddScoped<IStringLocalizer<App>,StringLocalizer<App>>();
    
  • 在您的客户项目中创建一个资源文件夹。将 resx 文件添加到 例如 App.resx 这将是您的默认资源。然后 为您希望支持的每种语言添加更多文件。应用程序.fr.resx App.es.resx 等。

然后在一个组件中注入

    @inject IStringLocalizer<App> L
    
    @L["YourText"]

本地化程序将使用浏览器语言并在我的例子中查找 App.en-AU.resx、App.en.resx、App.resx 的密钥顺序。如果没有找到,它将使用“YourText”

这是一个 blazor WASM 项目repo

【讨论】:

  • 谢谢。它有帮助。我犯了一个愚蠢的错误。我将“App.resx”文件放入“pages”子目录,然后...... BÄM!你的例子帮助我解决了这个问题。我也可以将组件的字符串放入这个应用程序资源文件中,它可以工作。
  • 有谁知道是否可以将 resx 文件放在单独的类库中并设置“options.resourcePath”...正在尝试但似乎不起作用:-(跨度>
  • 请注意,对AddLocalization 的调用已经为您注册了带有依赖注入的IStringLocalizer,因此您不需要调用它。 Here is the source code.
猜你喜欢
  • 2014-09-04
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多