angular - 具有 angular 7 多语言支持的 asp.net 核心 web api

标签 angular multilingual asp.net-core-2.2

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

最佳答案

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

由于可能有许多 API,并且确保选择的语言 header 与每个 API 一起发送可能是一项繁琐的任务,因此请使用 HttpInterceptor Angular 功能。像这样

@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 localStorage.getItem("selectedLng") 中读取所选语言,并将其传递到 hte HttpRequest 对象的 header 中。

像这样将 HttpInterceptor 添加到根模块的 providers 数组中

providers: [{ provide: HTTP_INTERCEPTORS, useClass: HTTPListener, multi: true }],

在 ASP.NET Core 端,在 Startup 类的 Configure 方法中,

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();
    });
}

谢谢。

关于angular - 具有 angular 7 多语言支持的 asp.net 核心 web api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59712197/

相关文章:

angular - 如何使用 APP_BOOTSTRAP_LISTENER 获取对引导组件的引用?

c# - 使我的应用程序多语言

c# - BadHttpRequestException : Reading the request body timed out due to data arriving too slowly. 请参阅 ASP.NET 核心 2.2 上的 MinRequestBodyDataRate

asp.net-mvc - 在 ASP.NET Core 2.2 MVC 和 Identity 中设置登录路径

javascript - 如何将 JSON(在订阅中)分配给 Angular 变量

typescript - Angular2-如何安装打字文件?

javascript - 如何为标题栏定义 View 模型?

php - 多语言php脚本

html - 搜索引擎的多语言网站

asp.net-core - SignalR:无法在 Visual Studio 2017 项目中获取 js 库