APIインタフェースは、午後に従事し、ルックスより激しい午後に複数の言語を返す必要があり、そのためのオンライン記事の多くを参照する,,いくつかの記事があまりにも理論によって書かれているので、経験を総括,,
この機能を実行するとき、2つの論文の主な参照:
https://blog.johnwu.cc/article/ironman-day21-asp-net-core-localization.html
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-3.1
あなたは輝いて見ることができます
2つのケースがあります:1は、多言語Webプロジェクトに戻る必要がある,, 1は、DLLで、そのようなプラグインとして独立した多言語を実装する必要があり、
プロジェクトの前提はMicrosoft.Extensions.Localizationパッケージを導入する必要があります
A .Webプロジェクト
Asp.netコアプロジェクトがデフォルトで作成された場合は、同様の参照は完全なパッケージをMicrosoft.Extensions.Localization、ありませんので、追加導入
1.リソースファイルの問題の場所
オンラインチュートリアル、SharedResourceの使用状況を参照すると、Resourcesフォルダにあり、今日は何度も試してみましたので、使用されることが判明、
例えば、内の別のエリアにあります:
Resourcesフォルダを作成し、
その後SharedResourceと呼ばれるクラス、コンテンツを追加し、その結果のみ空のクラスを必要としません
SharedResource.en.resxまたはSharedResource.th.resx次のような対応する言語リソースファイルを追加します
構造:
SharedResource.cs:
名前空間ZKXT.Devices.Api.Areas.AppApi.Resources { パブリック クラスSharedResource {} }
2.Start.csで:
公共 ボイドConfigureServices(IServiceCollectionサービス) { services.Configure <RequestLocalizationOptions>(オプション=> { options.DefaultRequestCulture = 新しい RequestCulture(" ZN-CN "); // 默认的语言 })。 services.AddLocalization(); // 注册相应サービス } パブリック 無効の設定(IApplicationBuilderアプリ、IWebHostEnvironment ENV) { VARのサポート= 新しいリスト<のCultureInfo> () { 新しいのCultureInfo("CN-ZH ")、 // :複数の言語で登録され、あなたが特定のを見ることができるHTTP // www.lingoes.net/zh/translator/langcode.htm対応見つける 新しい新しいのCultureInfo(" EN " )、 新しい新しいのCultureInfo(" THを」) }; app.UseRequestLocalization(X => { x.SetDefaultCulture(" ZH-CN " ); x.SupportedCultures =支持体; // 設定サポート言語 x.SupportedUICultures =サポート; //設定UI言語は、あなたがアクションでこのプロパティを設定しない場合、CultureInfo.CurrentCultureは正しい言語を返しますが、CultureInfo.CurrentUICultureで返さは、デフォルトの言語で、大きなピットがあり x.AddInitialRequestCultureProvider(新新 AcceptLanguageHeaderRequestCultureProvider() ); // ウェイIプロジェクトが審査員として受け入れ言語をヘッダ値を使用することで現在の言語を決定するために設定 )}; }
2.Controllerで:
コンストラクタ内注入
公共 DevicesController(IStringLocalizer <SharedResource>ローカライズ= nullの):ControllerBase
注:このSharedResourceは、ベースフレームに対応した領域内になければなりませんSharedResourceがパスに対応する対応する名前空間に変換され、対応するリソースファイルを読み込み、より重要。
二つ。DLL内
1.手動でパッケージ組み込まMicrosoft.Extensions.Localizationに必要
2.必要性がWebプロジェクトに注入されるように、現在のスレッドは自動的にリクエストに言語を設定します
図に示した3リソースファイルのディレクトリ構造:
パブリック クラスベース { プライベート 静的 IStringLocalizerFactory _factory = NULL ; プライベート 文字列 _name = "" ; 静的ベース() { _factory = 新しい ResourceManagerStringLocalizerFactory(Options.Create(新しい LocalizationOptions(){resourcesPathを= " リソース" })、 NullLoggerFactory.Instance)。 _name = typeof演算(塩基).Assembly.GetName()の名前。 } 保護された 仮想 IStringLocalizer GetLocalizer() // ローカライザー返すように対応し、この機能のその後の使用、 { リターン _factory.Create(「SharedResource 」、_nameを); // ここでは名前を指定することができ、それは必ずしも新しいクラスSharedResource、読み取り工場のソースではありません、作成実現はキャッシング機能、そうでないたびに新しいクラスが付属して、直接のように作成し、自分のキャッシュをしません } }