ASP.NET Coreのローカリゼーション周りのメモ
ASP.NET Core のローカリゼーション回りのソースを読んだのでメモ
調べたバージョンはASP.NET Core 3.1
IStringLocalizer, IStringLocalizerFactoryあたりは今回は触れません。
ここではミドルウェア周りについて触れます
使い方
詳細はこちらに書いているので
ここではさらっと触れるのみとします。
publicclassStartup{publicvoidConfigureServices(IServiceCollectionservices){//省略...//ローカリゼーション周りのクラスをDIコンテナに登録する。//.resxファイルはResourcesフォルダに配置するのでResourcesPathを変更services.AddLocalization(options=>options.ResourcesPath="Resources");}publicvoidConfigure(IApplicationBuilderapp,IWebHostEnvironmentenv){//省略...//ミドルウェアの登録及び、オプションの設定app.UseRequestLocalization(options=>{//サポートするカルチャの設定string[]supportedCultures=newstring[]{"ja","en"};options.AddSupportedCultures(supportedCultures).AddSupportedUICultures(supportedCultures).SetDefaultCulture(supportedCultures[0]);});//省略...}}あとは利用側でIStringLocalizer<T>をインジェクションし、Tに相当するクラス及びResources/T.ja.resx, Resources/T.en.resxを用意すればよいです。
RequestLocalizationMiddlewareクラス
ApplicationBuilderExtensionsクラスのUseRequestLocalizationメソッドを実行する事で登録されます。
RequestLocalizationMiddlewareクラスのソースはこちら
HttpContextから カルチャーに関する情報を取得し SetCurrentThreadCultureメソッドで CultureInfo.CurrentCulture, CultureInfo.CurrentUICultureにセットしています。
カルチャーに関する情報はデフォルトでは
- クエリストリング
- Cookie
Accept-Languageリクエストヘッダー
の順序で解決が行われます。
これらの内容は RequestLocalizationOptionsで設定を行います。
RequestLocalizationOptionsクラス
ソースはこちら
上記の RequestLocalizationMiddlewareでカルチャの解決に使用するオプションを定義しています。
これらのプロパティについて紹介します。
RequestCultureProvidersプロパティ
HttpContextからカルチャの解決を行っているものの正体です。
デフォルトでは
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
の3つがListの要素に設定されています。
解決に用いるキーの名前はインスタンスプロパティとして定義されているので変更することができます。
(例 CookieRequestCultureProviderのCookie名が .AspNetCore.Cultureという値であり ASP.NET Coreを使用している事を外部に公開していることになるので、この名前を変更したい という要望に対応することができます。 )
このRequestCultureProvidersプロパティを変更することで、解決の順序を変更することや、新しいカルチャ解決の方法を追加することも可能です
(例. HttpContextが渡されているので Claimから解決することもおそらく可能ではないかと思います。)
新しいカルチャ解決の方法を実装する際はRequestCultureProviderを継承
もしくはCustomRequestCultureProvider
に直接ラムダ式を記述すれば可能です。
AddInitialRequestCultureProvider拡張メソッドを呼ぶことで、先頭に追加することも可能です。
SupportedCultures, SupportedUICultures, DefaultRequestCultureプロパティ
サポートしているカルチャの一覧です。
DefaultRequestCultureはカルチャが解決できなかった時に使用されるデフォルトのカルチャです。
プロパティに直接セットすることも可能ですがAddSupportedCultures, AddSupportedUICultures, SetDefaultCultureメソッドを呼ぶことでもセット可能です。
(Addという名前で始まっていますがソースを見た感じ総入れ替えが行われているように見える..🤔)
FallBackToParentCultures, FallBackToParentUICulturesプロパティ
カルチャが見つからなかったときにフォールバックするか?の設定のようです。
例えば
- SupportedCulturesがja
- リクエストから解決したカルチャがja-JP
のときにjaを使うといったことが可能なようです。
RequestLocalizationMiddlewareクラスのGetCultureInfo
メソッドあたりで使われています。
終わりに
今回はカルチャの解決方法について注目してソースを確認しました。
次は利用する側(IStringLocalizer, IStringLocalizerFactory) について見てみようと思います。