From 140ea386dea49220f4cdd5b67027e8d30eee1b06 Mon Sep 17 00:00:00 2001
From: Rigel Kent <sendmemail@rigelk.eu>
Date: Tue, 2 Jun 2020 15:21:36 +0200
Subject: inject lang in document to match current locale

---
 client/src/app/app.component.ts                       | 17 ++++++++++++++---
 client/src/app/header/search-typeahead.component.html |  1 +
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts
index a464e90fa..aba91aad2 100644
--- a/client/src/app/app.component.ts
+++ b/client/src/app/app.component.ts
@@ -1,13 +1,13 @@
-import { Component, OnInit, ViewChild, AfterViewInit } from '@angular/core'
+import { Component, OnInit, ViewChild, AfterViewInit, Inject } from '@angular/core'
 import { DomSanitizer, SafeHtml } from '@angular/platform-browser'
 import { Event, GuardsCheckStart, NavigationEnd, Router, Scroll } from '@angular/router'
 import { AuthService, RedirectService, ServerService, ThemeService } from '@app/core'
-import { is18nPath } from '../../../shared/models/i18n'
+import { is18nPath, getShortLocale } from '../../../shared/models/i18n'
 import { ScreenService } from '@app/shared/misc/screen.service'
 import { filter, map, pairwise, first } from 'rxjs/operators'
 import { Hotkey, HotkeysService } from 'angular2-hotkeys'
 import { I18n } from '@ngx-translate/i18n-polyfill'
-import { PlatformLocation, ViewportScroller } from '@angular/common'
+import { PlatformLocation, ViewportScroller, DOCUMENT } from '@angular/common'
 import { PluginService } from '@app/core/plugins/plugin.service'
 import { HooksService } from '@app/core/plugins/hooks.service'
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
@@ -42,6 +42,7 @@ export class AppComponent implements OnInit, AfterViewInit {
   private serverConfig: ServerConfig
 
   constructor (
+    @Inject(DOCUMENT) private document: Document,
     private i18n: I18n,
     private viewportScroller: ViewportScroller,
     private router: Router,
@@ -170,6 +171,16 @@ export class AppComponent implements OnInit, AfterViewInit {
       filter(pathname => !pathname || pathname === '/' || is18nPath(pathname))
     ).subscribe(() => this.redirectService.redirectToHomepage(true))
 
+    navigationEndEvent.pipe(
+      map(() => window.location.pathname),
+    ).subscribe(pathname => {
+      if (is18nPath(pathname)) {
+        this.document.documentElement.lang = getShortLocale(pathname.split('/')[1])
+      } else {
+        this.document.documentElement.lang = 'en'
+      }
+    })
+
     navigationEndEvent.subscribe(e => {
       this.hooks.runAction('action:router.navigation-end', 'common', { path: e.url })
     })
diff --git a/client/src/app/header/search-typeahead.component.html b/client/src/app/header/search-typeahead.component.html
index 710268664..6d931db20 100644
--- a/client/src/app/header/search-typeahead.component.html
+++ b/client/src/app/header/search-typeahead.component.html
@@ -2,6 +2,7 @@
   <input
     type="text" id="search-video" name="search-video" #searchVideo i18n-placeholder placeholder="Search videos, channels…"
     [(ngModel)]="search" (ngModelChange)="onSearchChange()" (keyup)="handleKey($event)" (keydown.enter)="doSearch()"
+    aria-label="Search"
   >
   <span class="icon icon-search" (click)="doSearch()"></span>
 
-- 
cgit v1.2.3