2016-04-17 3 views
0

私はIdentityServer3.Contrib.Localizationを使用して、identityserverへの変換を提供しました。Identityserver3ランタイムでローカライゼーションを取得して変更する

IdentityServer3.Contrib.Localizationは、スコープ、メッセージ、イベントのためだけローカリゼーションを提供しますが、まだログインページに翻訳し、ために不足しているテキストがあるなど、私はあなたがIViewServiceを使用して、すべての言語のカスタムビューを提供するべきだと思う

が、これが正しいパスかどうかわかりません。私は、起動クラスの設定でこれを登録し、特定の言語のローカライズを提供するために、例えば

// Register the localization service 

      idServerServiceFactory.Register(
       new Registration<ILocalizationService>(r => new GlobalizedLocalizationService(
       new LocaleOptions { Locale = "de-DE" }))); 

しかし、今私は、ユーザーの入力またはに基づいていることを言語に基づいて言語を変更したいですブラウザの受け入れ言語、実行時にどのように(スコープ、イベント、メッセージ、ビュー)のローカリゼーションを変更することができます。

OwinEnvironementServiceを使用して言語を取得するためにローカリゼーションサービスに注入することができますが、その例はありますか?

また、言語に基づいてローカリゼーションに必要な変更を加えるために、私はowinミドルウェアを提供できると思いますが、何か提案はありますか?

答えて

1

IdentityServer3.Localizationnuget.org)パッケージはこれを行うことができます:

var opts = new LocaleOptions 
{ 
    LocaleProvider = env => 
    { 
     var owinContext = new OwinContext(env); 
     var owinRequest = owinContext.Request; 
     var headers = owinRequest.Headers; 
     var accept_language_header = headers["accept-language"].ToString(); 
     var languages = accept_language_header 
           .Split(',') 
           .Select(StringWithQualityHeaderValue.Parse) 
           .OrderByDescending(s => s.Quality.GetValueOrDefault(1)); 
     var locale = languages.First().Value; 

     return locale; 
    } 
}; 

var factory = new IdentityServerServiceFactory(); 
factory.Register(new Registration<LocaleOptions>(opts)); 
factory.LocalizationService = new Registration<ILocalizationService, GlobalizedLocalizationService>(); 

=> Link to sample here.

関連する問題