私は、剃刀のページを使ってASP.NET Core 2プロジェクトを作成しました。訪問者に言語を選択する機会を与えたいと思います。最初の問題は、WebアプリケーションのURLを変更して、tiに現在の言語コードが含まれるようにすることでした。 ConfigureServicesに次のコードを追加してこの問題を解決しました。ASP.NET Core 2 Razorページのカルチャを変更
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizeFolder("/Account/Manage");
options.Conventions.AuthorizePage("/Account/Logout");
options.Conventions.AddFolderRouteModelConvention("/", model =>
{
foreach (var selector in model.Selectors)
{
var attributeRouteModel = selector.AttributeRouteModel;
attributeRouteModel.Template = AttributeRouteModel.CombineTemplates("{language=el-GR}", attributeRouteModel.Template);
}
});
});
}
}
今、私は、次のURLを使用してページを参照してください可能性:私がやりたい
http://domain/el-GR/MyPage
最後は、各リクエストの文化を変更することです。私は好きではない私は泉最善の解決策は、私のページに次のコードを置くことです:
System.Globalization.CultureInfo.CurrentCulture = new System.Globalization.CultureInfo((string)RouteData.Values["language"]);
System.Globalization.CultureInfo.CurrentUICulture = new System.Globalization.CultureInfo((string)RouteData.Values["language"]);
私は私で作成するすべてのかみそりのページでこれらの嘘を追加する必要がありますので、これは素晴らしいではありませんプロジェクト。
私のWebアプリケーションのすべてのリクエストに対してカルチャを設定する別の方法はありますか?
.NET Coreのローカリゼーションに関するドキュメントはありますか? https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization –
マイクにお返事ありがとうございます。私の問題は、私がPageModelクラスにMiddlewareFilterを使用していて、うまくいきましたが、すべての剃刀のページでそれをやる必要があります。一度定義してアプリケーション全体に適用する方法を探したかったので、私のプロジェクトのPageModelごとに同じ属性を設定する必要はありません。 – pitaridis
属性を持つBasePageModelを作成しようとしましたが、すべてのPageModelクラスがそれを継承していますか? –