2016-01-20 29 views
3

我有一個「類庫」項目,它上面有一些「ViewComponents」,我已經讓它們在我的「MVC 6 Web應用程序」(thanks to this question)上工作, m試圖添加語言資源(本地化)到我的「ViewComponents」。任何有關如何做這件事的建議?ASP NET 5在一個單獨的程序集中使用視圖組件的本地化

我已經添加了necesary行啓動文件對我的 「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 
<h1>@LocString["HelloWorld"]</h1> 

,並建立了資源文件夾和文件在我的「類庫」項目:

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

,但我得到的是關鍵的「HelloWorld」的名稱,而不是本地化的資源「HOLA世界報」

總之我錯過了什麼?有誰知道一種方法來在「視圖組件」在「6 MVC Web應用程序」

注意使用本地化的資源從一個「類庫」:

  • 我使用MVC 6 RC1

  • 來自其他ViewComponents視圖的資源工作正常。

謝謝!

回答

0

的問題是,我不知道該資源文件編譯器一直在尋找從一個視圖組件訪問時的名字,所以以下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以在視圖上使用它(因爲我還沒有找到一種方法來使用localizedFactory注入IViewLocalizer I剛剛創建)。

此外,我已將此添加到我的「類庫」 project.json:

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

希望它可以幫助別人尋找到一個類庫使用資源的解決方案