2017-01-14 11 views
3

最近、新しいASP.NET Core Webアプリケーションを作成しました。私の要件の1つは、クライアントがエンドポイントを公開して、.resxファイルに格納されているすべての変換キーと値を取得することです。ResourceManagerですべてのキーを取得する方法

ASP.NET Coreを使用する前は、このようなことができました。しかし、コマンドResourceManager.GetResourceSet()はもはや認識されない:

public IActionResult Get(string lang) 
{ 
    var resourceObject = new JObject(); 

    var resourceSet = Resources.Strings.ResourceManager.GetResourceSet(new CultureInfo(lang), true, true); 
    IDictionaryEnumerator enumerator = resourceSet.GetEnumerator(); 
    while (enumerator.MoveNext()) 
    { 
     resourceObject.Add(enumerator.Key.ToString(), enumerator.Value.ToString()); 
    } 

    return Ok(resourceObject); 
} 

は、ASP.NETコアプロジェクト内のリソースのすべてのキーと値を取得するための新たな方法はありますか?

答えて

6

documentationを見ると、ASP.NETコアチームがIStringLocalizerIStringLocalizer<T>を導入したことがわかります。カバーの下にIStringLocalizerResourceManagerResourceReaderを使用します。ドキュメントからの基本的な使い方:

var resourceSet = _localizer.GetAllStrings().Select(x => x.Name); 

をしかし、言語によって、すべてのキーを取得するために、あなたはWithCultureメソッドを使用する必要があります:

using Microsoft.AspNetCore.Mvc; 
using Microsoft.Extensions.Localization; 

namespace Localization.StarterWeb.Controllers 
{ 
    [Route("api/[controller]")] 
    public class AboutController : Controller 
    { 
     private readonly IStringLocalizer<AboutController> _localizer; 

     public AboutController(IStringLocalizer<AboutController> localizer) 
     { 
      _localizer = localizer; 
     } 

     [HttpGet] 
     public string Get() 
     { 
      return _localizer["About Title"]; 
     } 
    } 
} 

すべてのキーを取得するため、あなたはそれを行うことができます

var resourceSet = _localizer.WithCulture(new CultureInfo(lang)) 
          .GetAllStrings().Select(x => x.Name); 

コントローラにIStringLocalizerを注入すると、のapを持つResourceManagerStringLocalizerクラスのインスタンスとしてインスタンス化されます特定のCultureInfoの新しいResourceManagerStringLocalizerクラスを作成するので、lang変数に固有のリソースを取得するには、WithCultureメソッドを使用する必要があります。

+0

これは私が必要としていたものです。非常に高く評価。 – Sobhan

関連する問題