【问题标题】:Asp.net core 2.0 localization not working in partial view.Asp.net core 2.0 本地化在局部视图中不起作用。
【发布时间】:2018-07-18 10:56:40
【问题描述】:

我正在使用嵌入式资源文件实现基于约定的本地化。这是我的示例代码。

父视图(Details.cshtml)

@using Microsoft.AspNetCore.Mvc.Localization
@model SampleLocalization.Models.BoatDetailsViewModel
@inject IViewLocalizer Localizer

<section class="location-map">
    <h4 class="section-title">
        @Localizer["Location"]
    </h4>
    <input type="hidden" asp-for="Latitude" />
    <input type="hidden" asp-for="Longitude" />
    <section id="map_canvas" style="min-height:525px;"></section>
</section>
@{
    await Html.RenderPartialAsync("_SendMessagePartial", 
    Model.SendMessageViewModel);
} 

部分视图(_SendMessagePartial.cshtml)

@using Microsoft.AspNetCore.Mvc.Localization 
@model SampleLocalization.Models.BoatSendMessageViewModel 
@inject IViewLocalizer Localizer 

<h5 >@Localizer["Send Message"]</h5> 

@Localizer["Send Message"] 翻译不正确

资源文件结构如下

  • 解决方案
    • 资源
      • 查看次数
          • Details.de-DE.resx

注意:资源文件夹结构与视图文件夹结构相同

【问题讨论】:

  • 您有在 Startup.cs 中使用的示例吗?
  • 这个主题有什么更新吗?我也有同样的问题。
  • 基本上,我是新手,我认为主视图的资源文件适用于该视图以及所有部分视图,但事实并非如此。后来,我找到了以下解决方案。主视图和部分视图必须存在相应的资源文件。例如。 Details.cshtml => Details.de-DE.resx _SendMessagePartial.cshtml => _SendMessagePartial.de-DE.resx 使用 ViewDateDictionary 将注入的 Localizer 变量从主视图传递到局部视图,并在局部视图中使用该变量。

标签: asp.net-core


【解决方案1】:

基本上,问题是因为它是一个不同的文件,所以翻译应该在Solution/Resources/Views/Boat/_SendMessagePartial.de-DE.resx。解决方法是创建共享资源文件。您可以将空的SharedResource 类添加到项目的根目录中,然后在您的视图中使用IStringLocalizer&lt;SharedResource&gt; 而不是IViewLocalizer

这里是与https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.2相关的文档

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2021-01-20
    • 2019-01-28
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多