@jupri-lab/i18n-core
Version:
Speak Easy. Effortless Internationalization for Your JavaScript Apps
51 lines (44 loc) • 1.51 kB
text/typescript
import type EventManager from "./EventManager";
export default class LanguageManager<TLanguage extends string> {
private languages: TLanguage[];
private currentLanguage: TLanguage;
private queryParam = "lang";
private enableQueryParams = false;
constructor(args: {
enableQueryParams: boolean;
initialLanguage: TLanguage;
languages: TLanguage[];
queryParam: string;
}) {
this.currentLanguage = args.initialLanguage;
this.languages = args.languages;
this.enableQueryParams = args.enableQueryParams;
this.queryParam = args.queryParam;
}
getLanguages() {
return this.languages;
}
getCurrentLanguage() {
if (this.enableQueryParams) {
const urlParams = new URLSearchParams(window.location.search);
const param = urlParams.get(this.queryParam) as TLanguage;
if (param) {
this.currentLanguage = param;
}
}
return this.currentLanguage;
}
changeLanguage(language: TLanguage, eventManager: EventManager<string>) {
if (this.currentLanguage !== language) {
this.currentLanguage = language;
if (this.enableQueryParams)
this.appendQueryParams(this.queryParam, language);
eventManager.trigger("language_changed");
}
}
private appendQueryParams(key: string, value: string) {
const newURL = new URL(window.location.href);
newURL.searchParams.set(key, value);
window.history.replaceState({}, "", newURL.href);
}
}