【问题标题】:ASP NET 5 Localization using View components in a separate assembly使用单独程序集中的视图组件进行 ASP NET 5 本地化
【发布时间】:2016-10-15 16:30:42
【问题描述】:

我有一个“类库”项目,上面有一些“ViewComponents”,我已经让它们在我的“MVC 6 Web 应用程序”(thanks to this question)上工作,但现在我正在尝试添加语言资源(本地化)到我的“ViewComponents”。关于如何做到这一点的任何建议?

我已经在“MVC 6 Web 应用”的启动文件中添加了必要的行:

startup.cs

[...]
services.AddMvc()
        .AddViewLocalization(options => options.ResourcesPath = "Resources");
[...]
app.UseRequestLocalization(new RequestCulture(new CultureInfo("es-MX")));

我还添加了对“类库”视图的依赖项:

Views/Shared/Components/Header/foo.cshtml

@using Microsoft.AspNet.Mvc.Localization
@inject IViewLocalizer LocString
<h1>@LocString["HelloWorld"]</h1>

并在我的“类库”项目中创建了资源文件夹和文件:

-Resources
   -Views.Shared.Components.Header.foo.cshtml.resx

但我得到的只是键名“HelloWorld”而不是本地化资源“Hola mundo”

简而言之,我错过了什么吗?有谁知道在“mvc 6 web app”上的“类库”中使用“视图组件”中的本地化资源的方法

注意事项:

  • 我正在使用 mvc 6 RC1

  • 来自非 ViewComponents 的其他视图的资源工作正常。

谢谢!

【问题讨论】:

    标签: c# asp.net-core asp.net-core-mvc


    【解决方案1】:

    问题是我不知道从视图组件访问时编译器要查找的资源文件的名称,所以按照this thread我直接使用了IStringLocalizerFactory:

    public class HeaderViewComponent : ViewComponent
    {
      private string viewName;
      private readonly IStringLocalizer _localizer;
    
      public HeaderViewComponent(IStringLocalizerFactory localizedFactory)
      {
         _localizer = localizedFactory.Create("name.of.your.resource.file", "Namespace");
      } 
      public IViewComponentResult Invoke()
      {
        [...]
        ViewBag.StringLocalizer = _localizer;
        return View("name", model);
      }
    }
    

    “Create”的第二个参数是你的“类库”的命名空间

    然后在我的 Invoke 函数中,我将 _localizer 添加到 ViewBag 以在视图上使用它(因为我还没有找到使用刚刚创建的本地化工厂注入 IViewLocalizer 的方法)。

    我还将它添加到我的“类库”project.json:

    "resource": [ "Views/**", "Resources/**" ]
    

    希望它可以帮助其他寻找使用类库资源的解决方案的人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-05
      • 2012-09-05
      • 1970-01-01
      • 2017-06-22
      • 2011-11-01
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      相关资源
      最近更新 更多