首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持角7多语言支持的asp.net核心web

支持角7多语言支持的asp.net核心web
EN

Stack Overflow用户
提问于 2020-01-13 07:30:31
回答 1查看 2K关注 0票数 3

我正在用asp.net核心web开发一个Range7应用程序。我的应用程序支持多种语言(英语和阿拉伯语)。当用户从角度应用程序中选择语言时,我将他的语言偏好保存在本地存储中。现在,如何将所选语言发送到web,以便基于所选语言,我可以从服务器返回数据,并从web以他选择的语言显示通知。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-13 08:38:32

您必须确保将语言头Accept-Language与每个请求一起发送到服务器。

由于可能有许多API,并确保所选的语言头与每个API一起发送可能是一项繁琐的任务,因此请使用HttpInterceptor角度特性。就像这样

代码语言:javascript
复制
@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添加到根模块的提供者数组中,如下所示

代码语言:javascript
复制
providers: [{ provide: HTTP_INTERCEPTORS, useClass: HTTPListener, multi: true }],

在ASP.NET核心端,在启动类的配置方法中,

代码语言:javascript
复制
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();
    });
}

谢谢。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59712197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档