Identityserver3 在运行时获取和更改本地化

Identityserver3 get and change localization in runtime

我使用 IdentityServer3.Contrib.Localization 为身份服务器提供翻译。

IdentityServer3.Contrib.Localization 仅提供范围、消息、事件的本地化,但仍然缺少要在登录页面等中翻译的文本。

我认为您应该使用 IViewService 为每种语言提供自定义视图,但我不知道这是否是正确的路径。

例如,为了提供特定语言的本地化,我在启动时注册了这个 class 配置:

  // Register the localization service

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

但现在我想根据用户输入的语言或浏览器接受的语言更改语言,我如何更改 [=28= 中的(范围、事件、消息、视图)的本地化] 时间。

有人提到我可以使用 OwinEnvironementService 并将其注入本地化服务以获取语言,但有任何示例吗?

此外,我认为我可以提供一个 owin 中间件,以便根据语言提供所需的本地化更改,但有什么建议吗?

IdentityServer3.Localization(nuget.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.