.net core JSONベースの多言語化を実現
3634 ワード
.net core 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 リソースパス:
例:
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": " "
}
Samples
More
拡張は
CultureBased
方式を追加し、ある言語の言語パッケージを簡単にパッケージ化し、拡張も容易になり、他の言語をサポートする場合は1つの他の言語の言語パッケージを導入するだけでよい.オンラインの例:https://reservation.weihanli.xyz/