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>();
我使用 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>();