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
リソースパス:
services.AddJsonLocalization(options =>
{
options.ResourcesPath = Configuration.GetAppSetting("ResourcesPath");
options.ResourcesPathType = ResourcesPathType.TypeBased; //
// options.ResourcesPathType = ResourcesPathType.CultureBased; // culture ,
});
app.UseRequestLocalization();
例:
For Razorビュー:
例:
CultureBasedリソースファイルパス
For Types:
Home/Index
=> Controllers/HomeController リソースパス:
例:
For Razorビュー:
例:
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": " "
}