ASP NET 5使用单独程序集中的View组件进行本地化

时间:2016-01-20 02:34:37

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

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

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

startup.cs

NSPersistentStoreCoordinator

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

查看/共享/组件/页眉/ foo.cshtml

managedObjectIDForURIRepresentation

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

NSManagedObjectContext

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

总之我错过了什么吗?有没有人知道在“mvc 6网络应用程序”中“类库”的“视图组件”中使用本地化资源的方法

注意:

  • 我正在使用mvc 6 RC1

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

谢谢!

1 个答案:

答案 0 :(得分: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);
  }
}

"创建"的第二个参数;是"类库"

的命名空间

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

此外,我将此添加到我的"类库" project.json:

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

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