【问题标题】:Identityserver3 get and change localization in runtimeIdentityserver3 在运行时获取和更改本地化
【发布时间】:2016-04-17 13:47:21
【问题描述】:

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

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

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

例如,为了提供特定语言的本地化,我在启动类配置中注册了它:

  // Register the localization service

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

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

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

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

【问题讨论】:

    标签: asp.net localization owin identityserver3


    【解决方案1】:

    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.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多