2017-09-29 23 views
1

私は、剃刀のページを使って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アプリケーションのすべてのリクエストに対してカルチャを設定する別の方法はありますか?

+0

.NET Coreのローカリゼーションに関するドキュメントはありますか? https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization –

+0

マイクにお返事ありがとうございます。私の問題は、私がPageModelクラスにMiddlewareFilterを使用していて、うまくいきましたが、すべての剃刀のページでそれをやる必要があります。一度定義してアプリケーション全体に適用する方法を探したかったので、私のプロジェクトのPageModelごとに同じ属性を設定する必要はありません。 – pitaridis

+0

属性を持つBasePageModelを作成しようとしましたが、すべてのPageModelクラスがそれを継承していますか? –

答えて

0

はこの記事を参照してください:https://joonasw.net/view/aspnet-core-localization-deep-dive

は、いくつかの方法がありますが、私はRequestCultureProvidersを使用しています。

NuGet:私のStartup.Configure方法でMicrosoft.AspNetCore.Localization

IList<CultureInfo> sc = new List<CultureInfo>(); 
sc.Add(new CultureInfo("en-US")); 
sc.Add(new CultureInfo("zh-TW")); 

var lo = new RequestLocalizationOptions 
{ 
    DefaultRequestCulture = new RequestCulture("en-US"), 
    SupportedCultures = sc, 
    SupportedUICultures = sc 
}; 
var cp = lo.RequestCultureProviders. 
    OfType<CookieRequestCultureProvider>().First(); 
    cp.CookieName = "UserCulture"; // Or whatever name that you like 

app.UseRequestLocalization(lo); 

クッキー "UserCulture"を "c = zh-TW | uic = zh-TW"に設定してください。

これは魔法のように機能します。

関連する問題