我正在用asp.net核心web开发一个Range7应用程序。我的应用程序支持多种语言(英语和阿拉伯语)。当用户从角度应用程序中选择语言时,我将他的语言偏好保存在本地存储中。现在,如何将所选语言发送到web,以便基于所选语言,我可以从服务器返回数据,并从web以他选择的语言显示通知。
发布于 2020-01-13 08:38:32
您必须确保将语言头Accept-Language与每个请求一起发送到服务器。
由于可能有许多API,并确保所选的语言头与每个API一起发送可能是一项繁琐的任务,因此请使用HttpInterceptor角度特性。就像这样
@Injectable()
export class HTTPListener implements HttpInterceptor {
constructor() {
}
intercept(
req: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
let languageRequest = req.clone({ setHeaders: { 'Accept-Language': localStorage.getItem("selectedLng") } });
return next.handle(languageRequest).pipe(
map(event => {
return event;
}),
catchError(error => {
}),
finalize(() => {
})
)
}
}
请注意,我们正在从localStorage.getItem("selectedLng")读取所选语言,并将其传递到hte HttpRequest对象的标题中。
将HttpInterceptor添加到根模块的提供者数组中,如下所示
providers: [{ provide: HTTP_INTERCEPTORS, useClass: HTTPListener, multi: true }],
在ASP.NET核心端,在启动类的配置方法中,
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Use((context, next) =>
{
var userLangs = context.Request.Headers["Accept-Language"].ToString();
var lang = userLangs.Split(',').FirstOrDefault();
//If no language header was provided, then default to english.
if(string.IsNullOrEmpty(lang))
{
lang = "en";
}
//You could set the environment culture based on the language.
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(lang);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
//you could save the language preference for later use as well.
context.Items["SelectedLng"] = lang;
context.Items["ClientCulture"] = Thread.CurrentThread.CurrentUICulture.Name;
return next();
});
}
谢谢。
https://stackoverflow.com/questions/59712197
复制相似问题