Suggested changes for Simon's PR #1113

This commit is contained in:
wiz 2022-01-12 13:24:20 +09:00
parent 4ca730697c
commit efffd1a929
No known key found for this signature in database
GPG key ID: A394E332255A6173
2 changed files with 21 additions and 17 deletions

View file

@ -1,3 +1,4 @@
import { DOCUMENT } from '@angular/common';
import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core'; import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms'; import { FormBuilder, FormGroup } from '@angular/forms';
import { languages } from 'src/app/app.constants'; import { languages } from 'src/app/app.constants';
@ -14,6 +15,7 @@ export class LanguageSelectorComponent implements OnInit {
languages = languages; languages = languages;
constructor( constructor(
@Inject(DOCUMENT) private document: Document,
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
private languageService: LanguageService, private languageService: LanguageService,
) { } ) { }
@ -26,6 +28,9 @@ export class LanguageSelectorComponent implements OnInit {
} }
changeLanguage() { changeLanguage() {
this.languageService.setLanguage(this.languageForm.get('language').value); const newLang = this.languageForm.get('language').value;
this.languageService.setLanguage(newLang);
const rawUrlPath = this.languageService.stripLanguageFromUrl(null);
this.document.location.href = (newLang !== 'en' ? `/${newLang}` : '') + rawUrlPath;
} }
} }

View file

@ -1,7 +1,6 @@
import { DOCUMENT } from '@angular/common'; import { DOCUMENT, getLocaleId } from '@angular/common';
import { Inject, Injectable } from '@angular/core'; import { LOCALE_ID, Inject, Injectable } from '@angular/core';
import { languages } from 'src/app/app.constants'; import { languages } from 'src/app/app.constants';
import { RelativeUrlPipe } from '../shared/pipes/relative-url/relative-url.pipe';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@ -11,31 +10,31 @@ export class LanguageService {
private languages = languages; private languages = languages;
constructor( constructor(
@Inject(DOCUMENT) private document: Document, @Inject(DOCUMENT) private document: Document,
private relativeUrlPipe: RelativeUrlPipe, @Inject(LOCALE_ID) private locale: string,
) { } ) { }
getLanguage(): string { getLanguage(): string {
return this.language; return getLocaleId(this.locale).substring(0, 2);
} }
getLanguageForUrl() { stripLanguageFromUrl(urlPath: string) {
return this.language === 'en' ? '' : '/' + this.language; let rawUrlPath = urlPath ? urlPath : document.location.pathname;
}
setLocalLanguage() {
const urlLanguage = this.document.location.pathname.split('/')[1]; const urlLanguage = this.document.location.pathname.split('/')[1];
if (this.languages.map((lang) => lang.code).indexOf(urlLanguage) > -1) { if (this.languages.map((lang) => lang.code).indexOf(urlLanguage) != -1) {
this.language = urlLanguage; rawUrlPath = rawUrlPath.substring(3);
} else {
this.language = 'en';
} }
return rawUrlPath;
}
getLanguageForUrl(): string {
let lang = this.getLanguage();
return lang === 'en' ? '' : '/' + lang;
} }
setLanguage(language: string): void { setLanguage(language: string): void {
this.language = language;
try { try {
document.cookie = `lang=${language}; expires=Thu, 18 Dec 2050 12:00:00 UTC; path=/`; document.cookie = `lang=${language}; expires=Thu, 18 Dec 2050 12:00:00 UTC; path=/`;
} catch (e) { } } catch (e) { }
this.document.location.href = this.relativeUrlPipe.transform(`/${language}/`);
} }
} }