ASP.NET Core 本地化在 _Layout head 中不起作用。 这是一个(简化的)重现: @注入IHtmlLocalizer<SharedResources></desc> <question vote="1"> <p>我的 MVC 项目中有一个 <pre><code>_Layout.cshtml</code></pre>,我想通过 ASP.NET Core 本地化设置页面 <pre><code><title></code></pre>。 </p> <p>这是(简化的)重现:</p> <pre><code>@inject IHtmlLocalizer<SharedResources> SharedLocalizer; <!DOCTYPE html> <html> <head> <title>@SharedLocalizer["My Default Language Text"]</title> </head> <body> @SharedLocalizer["My Default Language Text"] @RenderBody() </body> </html> </code></pre> <p><pre><code>body</code></pre>中的资源已正确本地化,并按预期呈现资源文件中的文本。但无论我尝试什么,<pre><code>head</code></pre>中的资源都不是,并且仍然是“我的默认语言文本”。</p> <p>请注意,我在这两种情况下都看到了这种行为:</p> <ol> <li>通过 <pre><code>@inject IHtmlLocalizer<SharedResources> SharedLocalizer</code></pre> 使用共享资源(如上面的代码)</li> <li>或者当我通过 <pre><code>IViewLocalizer</code></pre><pre> 使用 </pre><code>@inject Microsoft.AspNetCore.Mvc.Localization.IViewLocalizer Localizer</code></li> 时 </ol> <p>我正在运行 <pre><code>v1.1.3</code></pre> 包中的 <pre><code>Microsoft.AspNetCore.*</code></pre>。</p> </question> <answer tick="true" vote="3"> <p>我刚刚发现我的问题与这个错误有关:<a href="https://github.com/aspnet/Localization/issues/277" rel="nofollow noreferrer">https://github.com/aspnet/Localization/issues/277</a>(非英语本地化作为默认本地化)。</p> </answer> <answer tick="false" vote="0"> <p>我在 .net core 5 上使用 IStringLocalizer 时遇到了这个问题。 就我而言,问题发生的原因如下:</p> <p>当我在 Startup.cs 上使用 <em>LanguageViewLocationExpanderFormat.Suffix</em> 配置时:</p> <pre><code>services.AddLocalization(o => { o.ResourcesPath = "Resources"; }); services.AddControllersWithViews() .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) .AddDataAnnotationsLocalization(); </code></pre> <p>我的资源文件夹就像:</p> <p>资源></p> <ul> <li>Views.Home.Index.en-US.resx</li> <li>Views.Home.Index.pt-BR.resx</li> <li>...</li> </ul> <p>由于上述配置,我的 _layout.cshtml 没有注入任何资源。</p> <p>要解决这个问题,我们有两个选择:</p> <p><strong>第一个选项:</strong></p> <p>为您的 _layout.cstml 创建特定的 resx 文件,例如“<em>Views.Shared._Layout.en-US.resx</em>”,并使用以下命令注入您的布局视图:</p> <pre><code>@using Microsoft.AspNetCore.Mvc.Localization; @inject IViewLocalizer Localizer </code></pre> <p><strong>第二个选项:</strong></p> <p>为您的应用程序/上下文创建通用 resx 文件,例如“Resources”文件夹中的“<em>Controllers.HomeController.en-US.resx</em>”,并注入指定控制器的两个(或多个)视图:</p> <pre><code>@using Microsoft.AspNetCore.Mvc.Localization; @using Yourproject.Controllers; @inject Microsoft.Extensions.Localization.IStringLocalizer<HomeController> Localizer </code></pre> </answer> </body></html>

问题描述 投票:0回答:0
asp.net-core
© www.soinside.com 2019 - 2024. All rights reserved.