2026-01-18 18:57:06 +04:00
|
|
|
import { Injectable, signal } from '@angular/core';
|
2026-02-26 22:23:08 +04:00
|
|
|
import { Router } from '@angular/router';
|
2026-01-18 18:57:06 +04:00
|
|
|
|
|
|
|
|
export interface Language {
|
|
|
|
|
code: string;
|
|
|
|
|
name: string;
|
|
|
|
|
flag: string;
|
|
|
|
|
flagSvg: string;
|
|
|
|
|
enabled: boolean;
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-24 00:09:11 +04:00
|
|
|
export interface Currency {
|
|
|
|
|
code: string;
|
|
|
|
|
symbol: string;
|
|
|
|
|
name: string;
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-18 18:57:06 +04:00
|
|
|
@Injectable({
|
|
|
|
|
providedIn: 'root'
|
|
|
|
|
})
|
|
|
|
|
export class LanguageService {
|
|
|
|
|
private currentLanguageSignal = signal<string>('ru');
|
2026-03-24 00:09:11 +04:00
|
|
|
private currentCurrencySignal = signal<string>('RUB');
|
2026-01-18 18:57:06 +04:00
|
|
|
|
|
|
|
|
languages: Language[] = [
|
|
|
|
|
{ code: 'ru', name: 'Русский', flag: '🇷🇺', flagSvg: '/flags/ru.svg', enabled: true },
|
2026-03-04 16:45:01 +04:00
|
|
|
{ code: 'en', name: 'English', flag: '🇬🇧', flagSvg: '/flags/en.svg', enabled: false },
|
|
|
|
|
{ code: 'hy', name: 'Հայերեն', flag: '🇦🇲', flagSvg: '/flags/arm.svg', enabled: false }
|
2026-01-18 18:57:06 +04:00
|
|
|
];
|
|
|
|
|
|
2026-03-24 00:09:11 +04:00
|
|
|
currencies: Currency[] = [
|
|
|
|
|
{ code: 'RUB', symbol: '₽', name: 'Рубль' },
|
|
|
|
|
{ code: 'USD', symbol: '$', name: 'Dollar' },
|
|
|
|
|
{ code: 'EUR', symbol: '€', name: 'Euro' },
|
|
|
|
|
{ code: 'AMD', symbol: '֏', name: 'Դրամ' },
|
|
|
|
|
];
|
|
|
|
|
|
2026-01-18 18:57:06 +04:00
|
|
|
currentLanguage = this.currentLanguageSignal.asReadonly();
|
2026-03-24 00:09:11 +04:00
|
|
|
currentCurrency = this.currentCurrencySignal.asReadonly();
|
2026-01-18 18:57:06 +04:00
|
|
|
|
2026-02-26 22:23:08 +04:00
|
|
|
constructor(private router: Router) {
|
2026-01-18 18:57:06 +04:00
|
|
|
// Load saved language from localStorage
|
|
|
|
|
const savedLang = localStorage.getItem('selectedLanguage');
|
|
|
|
|
if (savedLang && this.languages.find(l => l.code === savedLang && l.enabled)) {
|
|
|
|
|
this.currentLanguageSignal.set(savedLang);
|
|
|
|
|
}
|
2026-03-24 00:09:11 +04:00
|
|
|
|
|
|
|
|
const savedCurrency = localStorage.getItem('selectedCurrency');
|
|
|
|
|
if (savedCurrency && this.currencies.find(c => c.code === savedCurrency)) {
|
|
|
|
|
this.currentCurrencySignal.set(savedCurrency);
|
|
|
|
|
}
|
2026-01-18 18:57:06 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setLanguage(langCode: string): void {
|
|
|
|
|
const lang = this.languages.find(l => l.code === langCode);
|
|
|
|
|
if (lang && lang.enabled) {
|
|
|
|
|
this.currentLanguageSignal.set(langCode);
|
|
|
|
|
localStorage.setItem('selectedLanguage', langCode);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-24 00:09:11 +04:00
|
|
|
setCurrency(code: string): void {
|
|
|
|
|
const currency = this.currencies.find(c => c.code === code);
|
|
|
|
|
if (currency) {
|
|
|
|
|
this.currentCurrencySignal.set(code);
|
|
|
|
|
localStorage.setItem('selectedCurrency', code);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getCurrentCurrency(): Currency | undefined {
|
|
|
|
|
return this.currencies.find(c => c.code === this.currentCurrencySignal());
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-26 22:23:08 +04:00
|
|
|
/** Change language and navigate to the same page with the new prefix */
|
|
|
|
|
switchLanguage(langCode: string): void {
|
|
|
|
|
const lang = this.languages.find(l => l.code === langCode);
|
|
|
|
|
if (!lang?.enabled) return;
|
|
|
|
|
|
|
|
|
|
const currentUrl = this.router.url;
|
|
|
|
|
const currentLang = this.currentLanguageSignal();
|
|
|
|
|
const newUrl = currentUrl.replace(new RegExp(`^/${currentLang}`), `/${langCode}`);
|
|
|
|
|
|
|
|
|
|
this.setLanguage(langCode);
|
|
|
|
|
this.router.navigateByUrl(newUrl);
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-18 18:57:06 +04:00
|
|
|
getCurrentLanguage(): Language | undefined {
|
|
|
|
|
return this.languages.find(l => l.code === this.currentLanguageSignal());
|
|
|
|
|
}
|
|
|
|
|
}
|