ASP NET 5使用单独程序集中的View组件进行本地化
我有一个“类库”项目,上面有一些“ViewComponents”,我已经让它们在我的“MVC 6 Web应用程序”上运行了( 感谢这个问题 ),但现在我正在尝试将语言资源(本地化)添加到我的“ViewComponents”。 关于如何做到这一点的任何建议?
我已经在我的“MVC 6 Web应用程序”上添加了必要的行到启动文件:
startup.cs
[...] services.AddMvc() .AddViewLocalization(options => options.ResourcesPath = "Resources"); [...] app.UseRequestLocalization(new RequestCulture(new CultureInfo("es-MX")));
我还在我的“类库”视图中添加了依赖项:
查看/共享/组件/页眉/ foo.cshtml
@using Microsoft.AspNet.Mvc.Localization @inject IViewLocalizer LocString @LocString["HelloWorld"]
并在我的“类库”项目中创建了Resource文件夹和文件:
-Resources -Views.Shared.Components.Header.foo.cshtml.resx
但我得到的只是关键字“HelloWorld”而不是本地化资源“Hola mundo”的名称
总之我错过了什么吗? 有没有人知道在“mvc 6 web应用程序”中“类库”的“视图组件”中使用本地化资源的方法
笔记:
-
我正在使用mvc 6 RC1
-
来自非ViewComponents的其他视图的资源正常工作。
谢谢!
问题是我从视图组件访问时不知道编译器正在寻找的资源文件的名称,所以在这个线程后我直接使用了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/**" ]
希望它能帮助其他人寻找在类库中使用资源的解决方案