ローカライズの拡張性
Note
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
警告
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、「.NET および .NET Core サポート ポリシー」を参照してください。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
重要
この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。
現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
作成者: Hisham Bin Ateya
この記事の内容は次のとおりです。
- ローカライズ API の拡張性ポイントを挙げます。
- ASP.NET Core アプリのローカライズを拡張する手順を紹介します。
ローカライズ API の拡張性ポイント
ASP.NET Core ローカライズ API は拡張性を持つように作られています。 拡張性により、開発者はそのニーズに合わせてローカライズをカスタマイズできます。 たとえば、OrchardCore には POStringLocalizer
があります。 POStringLocalizer
では、Portable Object ローカライズで PO
ファイルを使用し、ローカライズ リソースを格納することが詳しく説明されます。
この記事では、ローカライズ API によって与えられる 2 つの主要な拡張性ポイントを挙げます。
ローカライズ カルチャ プロバイダー
ASP.NET Core ローカライズ API には、実行中の要求の現在のカルチャを決定できる既定のプロバイダーが 4 つあります。
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
- CustomRequestCultureProvider
前のプロバイダーの詳しい説明は、ローカライズ ミドルウェア ドキュメントにあります。 既定のプロバイダーでニーズが満たされない場合、次のいずれかの手法でカスタム プロバイダーを構築します。
CustomRequestCultureProvider を使用する
CustomRequestCultureProvider からは、単純な委任を利用して現在のローカライズ カルチャを決定するカスタム RequestCultureProvider が与えられます。
options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
{
var currentCulture = "en";
var segments = context.Request.Path.Value.Split(new char[] { '/' },
StringSplitOptions.RemoveEmptyEntries);
if (segments.Length > 1 && segments[0].Length == 2)
{
currentCulture = segments[0];
}
var requestCulture = new ProviderCultureResult(currentCulture);
return Task.FromResult(requestCulture);
}));
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
{
var currentCulture = "en";
var segments = context.Request.Path.Value.Split(new char[] { '/' },
StringSplitOptions.RemoveEmptyEntries);
if (segments.Length > 1 && segments[0].Length == 2)
{
currentCulture = segments[0];
}
var requestCulture = new ProviderCultureResult(currentCulture);
return Task.FromResult(requestCulture);
}));
RequestCultureProvider の新しい実装を使用する
カスタム ソースから要求カルチャ情報を決定する RequestCultureProvider の新しい実装を作成できます。 たとえば、構成ファイルまたはデータベースをカスタム ソースにすることができます。
次の例では、AppSettingsRequestCultureProvider
を確認できます。これによって RequestCultureProvider が拡張され、 appsettings.json
からの要求カルチャ情報が決定されます。
public class AppSettingsRequestCultureProvider : RequestCultureProvider
{
public string CultureKey { get; set; } = "culture";
public string UICultureKey { get; set; } = "ui-culture";
public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException();
}
var configuration = httpContext.RequestServices.GetService<IConfigurationRoot>();
var culture = configuration[CultureKey];
var uiCulture = configuration[UICultureKey];
if (culture == null && uiCulture == null)
{
return Task.FromResult((ProviderCultureResult)null);
}
if (culture != null && uiCulture == null)
{
uiCulture = culture;
}
if (culture == null && uiCulture != null)
{
culture = uiCulture;
}
var providerResultCulture = new ProviderCultureResult(culture, uiCulture);
return Task.FromResult(providerResultCulture);
}
}
ローカライズ リソース
ASP.NET Core ローカライズからは ResourceManagerStringLocalizer が与えられます。 ResourceManagerStringLocalizer は、resx
を使用してローカライズ リソースを格納する IStringLocalizer の実装です。
resx
ファイルの使用に限定されることはありません。 IStringLocalizer
を実装することで、あらゆるデータ ソースを使用できます。
次のサンプル プロジェクトでは IStringLocalizer が実装されます。
ASP.NET Core