asp.Netcore JSONによる多言語化

3306 ワード

asp.Netcore JSONによる多言語化


Intro


前回お話ししたように、マイクロソフトはデフォルトでリソースファイルベースの多言語ローカライズを提供しており、個人的には使い勝手が悪いと感じ、jsonが直感的に見えないため、車輪を作りました.dotnet coreはjsonベースのローカライズコンポーネントです.

GetStarted


nugetパッケージを参照する必要があります.Extensions.Localization.Json
登録サービス:
services.AddJsonLocalization(options =>
    {
        options.ResourcesPath = Configuration.GetAppSetting("ResourcesPath");
        options.ResourcesPathType = ResourcesPathType.TypeBased; //                
        // options.ResourcesPathType = ResourcesPathType.CultureBased; //      culture           ,         
    });

ミドルウェア構成(asp.net coreの場合、以前と同じ):
app.UseRequestLocalization();

That's it~

リソースファイルを追加


Type Basedリソースファイルのパス


For Types: Home/Index => Controllers/HomeController
リソースパス:
  • [ResourcesPath]/Controllers/HomeController.[cultureName].json

  • 例:
  • Resources/Controllers/HomeController.en.json
  • Resources/Controllers/HomeController.zh.json

  • For Razorビュー:
    例:
  • Resources/Views/Home/Index.en.json
  • Resources/Views/Home/Index.zh.json

  • CultureBasedリソースファイルパス


    For Types: Home/Index => Controllers/HomeController
    リソースパス:
  • [ResourcesPath]/[cultureName]/Controllers/HomeController.json

  • 例:
  • Resources/en/Controllers/HomeController.json
  • Resources/zh/Controllers/HomeController.json

  • For Razorビュー:
    例:
  • Resources/en/Views/Home/Index.json
  • Resources/zh/Views/Home/Index.json

  • Copy your resource files to output:
    リソースファイルを出力ディレクトリにコピーするように設定する必要があります.そうしないと、リソースファイルが見つかりません.プロジェクトプロジェクトファイルの起動に次のサンプルコードを追加できます.
    
    
        Always
    
    
    

    上記の構成では、Resourcesディレクトリのすべてのjsonファイルを出力ディレクトリにコピーし、必要に応じて変更できます.

    Use


    使い方は前と同じです
    Controllerの例:
    public class ValuesController : Controller
    {
        private readonly IStringLocalizer _localizer;
    
        public ValuesController(IStringLocalizer localizer)
        {
            _localizer = localizer;
        }
    
        // GET: api/
        [HttpGet]
        public string Get()
        {
            return _localizer["Culture"];
        }
    }
    

    Razorビューの例:
    @using Microsoft.AspNetCore.Mvc.Localization
    @using Microsoft.Extensions.Localization
    @using WeihanLi.Extensions.Localization.Json.Sample.Controllers
    @inject IHtmlLocalizer HtmlLocalizer
    @inject IStringLocalizer StringLocalizer
    @inject IViewLocalizer ViewLocalizer
    @{
        ViewData["Title"] = "Index";
    }
    
    

    Index

    string: @StringLocalizer["Hello"]
    html: @HtmlLocalizer["Hello"]
    view: @ViewLocalizer["Hello"]

    リソースファイルの例:
    {
      "Culture": "  "
    }
    

    Samples

  • AspNetCore3.1 Basic Sample
  • ActivityReservation