2016-04-17 3 views
0

Ich habe IdentityServer3.Contrib.Localization verwendet, um die Übersetzung zum Identitätsserver bereitzustellen.Identityserver3 Lokalisierung in Laufzeit abrufen und ändern

IdentityServer3.Contrib.Localization bietet nur Lokalisierung für Bereiche, Nachrichten, Ereignisse, aber immer noch gibt es fehlende Texte in Anmeldeseite und etc.

ich Ihnen zur Verfügung stellen sollten mit IViewService für jede Sprache eine benutzerdefinierte Ansichten denken, zu übersetzen, aber Ich weiß nicht, ob das der richtige Weg ist.

Zum Beispiel, um eine Lokalisierung für eine bestimmte Sprache zur Verfügung zu stellen i diese Konfiguration in Startup-Klasse registrieren: auf der

// Register the localization service 

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

aber jetzt möchte ich die Sprache, die eine Benutzereingabe oder basierend auf der Auszeichnungssprache ändern browser accept-language, wie kann ich die Lokalisierung für (Bereiche, Ereignisse, Nachrichten, Ansichten) in der Laufzeit ändern?

einige erwähnen, dass ich OwinEnvironementService verwenden und es in den Lokalisierungsdienst injizieren kann, um die Sprache zu bekommen, aber gibt es ein Beispiel?

Auch ich denke, dass ich eine owin Middleware zur Verfügung stellen kann, um die erforderliche Änderung in der Lokalisierung auf der Sprache, aber irgendwelche Vorschläge zur Verfügung zu stellen?

Antwort

1

Die IdentityServer3.Localization (nuget.org) Paket kann dies jetzt tun:

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.

Verwandte Themen