2023-08-05 08:07:34 +02:00
|
|
|
import { T } from '@angular/cdk/keycodes';
|
2023-08-03 09:27:21 +02:00
|
|
|
import { Injectable } from '@angular/core';
|
2023-08-04 06:48:38 +02:00
|
|
|
import { BehaviorSubject } from 'rxjs';
|
2023-08-05 08:07:34 +02:00
|
|
|
|
2023-08-03 09:27:21 +02:00
|
|
|
import { ILanguage } from '../states/settings.state';
|
2023-08-12 07:33:07 +02:00
|
|
|
import { DetectedLang, MyElectronService } from './electron.service';
|
2023-08-03 09:27:21 +02:00
|
|
|
import { SettingsService } from './settings.service';
|
|
|
|
|
|
|
|
@Injectable({
|
|
|
|
providedIn: 'root'
|
|
|
|
})
|
|
|
|
export class LanguageService {
|
2023-08-04 07:08:00 +02:00
|
|
|
configuredLanguagesChanged = new BehaviorSubject<ILanguage[]>([]);
|
|
|
|
selectedLanguageChanged = new BehaviorSubject<ILanguage>(null);
|
2023-08-04 06:48:38 +02:00
|
|
|
|
2023-08-05 08:07:34 +02:00
|
|
|
constructor(
|
2023-08-08 01:56:46 +02:00
|
|
|
private settingsService: SettingsService,
|
|
|
|
private electronService: MyElectronService
|
|
|
|
) {
|
2023-08-04 07:08:00 +02:00
|
|
|
this.configuredLanguagesChanged.next(this.getConfiguredLanguages());
|
|
|
|
this.selectedLanguageChanged.next(this.getSelectedLanguage());
|
2023-08-12 07:33:07 +02:00
|
|
|
|
|
|
|
this.electronService.detectedLangSubject.subscribe(l => {
|
|
|
|
this.detectedLanguage(l);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
private detectedLanguage(lang: DetectedLang[]) {
|
|
|
|
if(!lang) return;
|
|
|
|
|
|
|
|
console.warn(lang);
|
|
|
|
|
|
|
|
if(lang.length >= 1){
|
|
|
|
const languages = this.getConfiguredLanguages();
|
|
|
|
|
|
|
|
let firstLang = lang[0].lang;
|
|
|
|
let firstLocalLang = languages.find(x => x.iso639 == firstLang);
|
|
|
|
if(firstLocalLang){
|
|
|
|
this.setSelectedLanguage(firstLocalLang);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(lang.length > 1){
|
|
|
|
firstLang = lang[1].lang;
|
|
|
|
firstLocalLang = languages.find(x => x.iso639 == firstLang);
|
|
|
|
if(firstLocalLang){
|
|
|
|
this.setSelectedLanguage(firstLocalLang);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
autoDetectLang(text: string): void {
|
|
|
|
if(!text || text.length < 6) return;
|
|
|
|
|
|
|
|
console.warn('autodetect');
|
|
|
|
console.warn(text);
|
|
|
|
|
|
|
|
//TODO: add settings to disable
|
|
|
|
|
|
|
|
this.electronService.detectLang(text);
|
2023-08-04 07:08:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
getSelectedLanguage(): ILanguage {
|
|
|
|
const lang = this.settingsService.getSettings().selectedLanguage;
|
|
|
|
return lang;
|
|
|
|
}
|
|
|
|
|
|
|
|
setSelectedLanguage(lang: ILanguage): void {
|
|
|
|
var settings = this.settingsService.getSettings();
|
|
|
|
settings.selectedLanguage = lang;
|
|
|
|
this.settingsService.saveSettings(settings);
|
|
|
|
|
|
|
|
this.selectedLanguageChanged.next(lang);
|
2023-08-05 08:07:34 +02:00
|
|
|
|
2023-08-08 01:56:46 +02:00
|
|
|
if (lang) {
|
|
|
|
this.electronService.setLang(lang.iso639);
|
|
|
|
}
|
2023-08-03 09:27:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
getConfiguredLanguages(): ILanguage[] {
|
2023-08-04 04:44:14 +02:00
|
|
|
const langs = this.settingsService.getSettings().configuredLanguages;
|
|
|
|
return langs;
|
2023-08-03 09:27:21 +02:00
|
|
|
}
|
|
|
|
|
2023-08-05 06:00:00 +02:00
|
|
|
addLanguage(lang: ILanguage) {
|
2023-08-03 09:27:21 +02:00
|
|
|
var settings = this.settingsService.getSettings();
|
|
|
|
settings.configuredLanguages.push(lang);
|
2023-08-05 05:45:34 +02:00
|
|
|
settings.configuredLanguages.sort((a, b) => a.name.localeCompare(b.name));
|
2023-08-03 09:27:21 +02:00
|
|
|
this.settingsService.saveSettings(settings);
|
2023-08-05 06:00:00 +02:00
|
|
|
|
2023-08-04 07:08:00 +02:00
|
|
|
this.configuredLanguagesChanged.next(settings.configuredLanguages);
|
2023-08-04 08:39:59 +02:00
|
|
|
|
2023-08-05 06:00:00 +02:00
|
|
|
if (settings.configuredLanguages.length === 1) {
|
2023-08-04 08:39:59 +02:00
|
|
|
this.setSelectedLanguage(lang);
|
|
|
|
}
|
2023-08-03 09:27:21 +02:00
|
|
|
}
|
|
|
|
|
2023-08-05 06:00:00 +02:00
|
|
|
removeLanguage(lang: ILanguage) {
|
2023-08-03 09:27:21 +02:00
|
|
|
var settings = this.settingsService.getSettings();
|
|
|
|
settings.configuredLanguages = settings.configuredLanguages.filter(x => x.iso639 !== lang.iso639);
|
|
|
|
this.settingsService.saveSettings(settings);
|
2023-08-04 06:48:38 +02:00
|
|
|
|
2023-08-04 07:08:00 +02:00
|
|
|
this.configuredLanguagesChanged.next(settings.configuredLanguages);
|
2023-08-04 08:39:59 +02:00
|
|
|
|
2023-08-05 06:00:00 +02:00
|
|
|
if (this.getSelectedLanguage().iso639 === lang.iso639) {
|
|
|
|
if (settings.configuredLanguages.length > 0) {
|
2023-08-04 08:39:59 +02:00
|
|
|
this.setSelectedLanguage(settings.configuredLanguages[0]);
|
|
|
|
} else {
|
|
|
|
this.setSelectedLanguage(null);
|
|
|
|
}
|
|
|
|
}
|
2023-08-03 09:27:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
searchLanguage(input: string): ILanguage[] {
|
2023-08-08 01:56:46 +02:00
|
|
|
if (!input) return [];
|
2023-08-05 06:00:00 +02:00
|
|
|
|
2023-08-03 09:27:21 +02:00
|
|
|
const avLangs = this.getAllAvaialbleLaguages();
|
2023-08-05 05:45:34 +02:00
|
|
|
let found = avLangs.filter(x => x.name.toLowerCase().includes(input.toLowerCase()) || x.iso639.toLowerCase().includes(input.toLowerCase()));
|
|
|
|
found.sort((a, b) => a.name.localeCompare(b.name));
|
|
|
|
found = found.slice(0, 5);
|
2023-08-03 09:27:21 +02:00
|
|
|
return found;
|
|
|
|
}
|
|
|
|
|
|
|
|
private getAllAvaialbleLaguages(): Language[] {
|
|
|
|
return [
|
2023-08-05 06:00:00 +02:00
|
|
|
new Language("aa", "Afar"),
|
|
|
|
new Language("ab", "Abkhazian"),
|
|
|
|
new Language("af", "Afrikaans"),
|
|
|
|
new Language("ak", "Akan"),
|
|
|
|
new Language("am", "Amharic"),
|
|
|
|
new Language("an", "Aragonese"),
|
|
|
|
new Language("ar", "Arabic"),
|
|
|
|
new Language("as", "Assamese"),
|
|
|
|
new Language("av", "Avar"),
|
|
|
|
new Language("ay", "Aymara"),
|
|
|
|
new Language("az", "Azerbaijani"),
|
|
|
|
new Language("ba", "Bashkir"),
|
|
|
|
new Language("be", "Belarusian"),
|
|
|
|
new Language("bg", "Bulgarian"),
|
|
|
|
new Language("bh", "Bihari"),
|
|
|
|
new Language("bi", "Bislama"),
|
|
|
|
new Language("bm", "Bambara"),
|
|
|
|
new Language("bn", "Bengali"),
|
|
|
|
new Language("bo", "Tibetan"),
|
|
|
|
new Language("br", "Breton"),
|
|
|
|
new Language("bs", "Bosnian"),
|
|
|
|
new Language("ca", "Catalan"),
|
|
|
|
new Language("ce", "Chechen"),
|
|
|
|
new Language("ch", "Chamorro"),
|
|
|
|
new Language("co", "Corsican"),
|
|
|
|
new Language("cr", "Cree"),
|
|
|
|
new Language("cs", "Czech"),
|
|
|
|
new Language("cu", "Old Church Slavonic"),
|
|
|
|
new Language("cv", "Chuvash"),
|
|
|
|
new Language("cy", "Welsh"),
|
|
|
|
new Language("da", "Danish"),
|
|
|
|
new Language("de", "German"),
|
|
|
|
new Language("dv", "Divehi"),
|
|
|
|
new Language("dz", "Dzongkha"),
|
|
|
|
new Language("ee", "Ewe"),
|
|
|
|
new Language("el", "Greek"),
|
2023-08-03 09:27:21 +02:00
|
|
|
new Language("en", "English"),
|
2023-08-05 06:00:00 +02:00
|
|
|
new Language("eo", "Esperanto"),
|
|
|
|
new Language("es", "Spanish"),
|
|
|
|
new Language("et", "Estonian"),
|
|
|
|
new Language("eu", "Basque"),
|
|
|
|
new Language("fa", "Persian"),
|
|
|
|
new Language("ff", "Peul"),
|
|
|
|
new Language("fi", "Finnish"),
|
|
|
|
new Language("fj", "Fijian"),
|
|
|
|
new Language("fo", "Faroese"),
|
2023-08-03 09:27:21 +02:00
|
|
|
new Language("fr", "French"),
|
2023-08-05 06:00:00 +02:00
|
|
|
new Language("fy", "West Frisian"),
|
|
|
|
new Language("ga", "Irish"),
|
|
|
|
new Language("gd", "Scottish Gaelic"),
|
|
|
|
new Language("gl", "Galician"),
|
|
|
|
new Language("gn", "Guarani"),
|
|
|
|
new Language("gu", "Gujarati"),
|
|
|
|
new Language("gv", "Manx"),
|
|
|
|
new Language("ha", "Hausa"),
|
|
|
|
new Language("he", "Hebrew"),
|
|
|
|
new Language("hi", "Hindi"),
|
|
|
|
new Language("ho", "Hiri Motu"),
|
|
|
|
new Language("hr", "Croatian"),
|
|
|
|
new Language("ht", "Haitian"),
|
|
|
|
new Language("hu", "Hungarian"),
|
|
|
|
new Language("hy", "Armenian"),
|
|
|
|
new Language("hz", "Herero"),
|
|
|
|
new Language("ia", "Interlingua"),
|
|
|
|
new Language("id", "Indonesian"),
|
|
|
|
new Language("ie", "Interlingue"),
|
|
|
|
new Language("ig", "Igbo"),
|
|
|
|
new Language("ii", "Sichuan Yi"),
|
|
|
|
new Language("ik", "Inupiak"),
|
|
|
|
new Language("io", "Ido"),
|
|
|
|
new Language("is", "Icelandic"),
|
|
|
|
new Language("it", "Italian"),
|
|
|
|
new Language("iu", "Inuktitut"),
|
|
|
|
new Language("ja", "Japanese"),
|
|
|
|
new Language("jv", "Javanese"),
|
|
|
|
new Language("ka", "Georgian"),
|
|
|
|
new Language("kg", "Kongo"),
|
|
|
|
new Language("ki", "Kikuyu"),
|
|
|
|
new Language("kj", "Kuanyama"),
|
|
|
|
new Language("kk", "Kazakh"),
|
|
|
|
new Language("kl", "Greenlandic"),
|
|
|
|
new Language("km", "Cambodian"),
|
|
|
|
new Language("kn", "Kannada"),
|
|
|
|
new Language("ko", "Korean"),
|
|
|
|
new Language("kr", "Kanuri"),
|
|
|
|
new Language("ks", "Kashmiri"),
|
|
|
|
new Language("ku", "Kurdish"),
|
|
|
|
new Language("kv", "Komi"),
|
|
|
|
new Language("kw", "Cornish"),
|
|
|
|
new Language("ky", "Kirghiz"),
|
|
|
|
new Language("la", "Latin"),
|
|
|
|
new Language("lb", "Luxembourgish"),
|
|
|
|
new Language("lg", "Ganda"),
|
|
|
|
new Language("li", "Limburgian"),
|
|
|
|
new Language("ln", "Lingala"),
|
|
|
|
new Language("lo", "Laotian"),
|
|
|
|
new Language("lt", "Lithuanian"),
|
|
|
|
new Language("lu", "Luba-Katanga"),
|
|
|
|
new Language("lv", "Latvian"),
|
|
|
|
new Language("mg", "Malagasy"),
|
|
|
|
new Language("mh", "Marshallese"),
|
|
|
|
new Language("mi", "Maori"),
|
|
|
|
new Language("mk", "Macedonian"),
|
|
|
|
new Language("ml", "Malayalam"),
|
|
|
|
new Language("mn", "Mongolian"),
|
|
|
|
new Language("mo", "Moldovan"),
|
|
|
|
new Language("mr", "Marathi"),
|
|
|
|
new Language("ms", "Malay"),
|
|
|
|
new Language("mt", "Maltese"),
|
|
|
|
new Language("my", "Burmese"),
|
|
|
|
new Language("na", "Nauruan"),
|
|
|
|
new Language("nb", "Norwegian Bokmål"),
|
|
|
|
new Language("nd", "North Ndebele"),
|
|
|
|
new Language("ne", "Nepali"),
|
|
|
|
new Language("ng", "Ndonga"),
|
|
|
|
new Language("nl", "Dutch"),
|
|
|
|
new Language("nn", "Norwegian Nynorsk"),
|
|
|
|
new Language("no", "Norwegian"),
|
|
|
|
new Language("nr", "South Ndebele"),
|
|
|
|
new Language("nv", "Navajo"),
|
|
|
|
new Language("ny", "Chichewa"),
|
|
|
|
new Language("oc", "Occitan"),
|
|
|
|
new Language("oj", "Ojibwa"),
|
|
|
|
new Language("om", "Oromo"),
|
|
|
|
new Language("or", "Oriya"),
|
|
|
|
new Language("os", "Ossetian"),
|
|
|
|
new Language("pa", "Panjabi"),
|
|
|
|
new Language("pi", "Pali"),
|
|
|
|
new Language("pl", "Polish"),
|
|
|
|
new Language("ps", "Pashto"),
|
|
|
|
new Language("pt", "Portuguese"),
|
|
|
|
new Language("qu", "Quechua"),
|
|
|
|
new Language("rm", "Raeto Romance"),
|
|
|
|
new Language("rn", "Kirundi"),
|
|
|
|
new Language("ro", "Romanian"),
|
|
|
|
new Language("ru", "Russian"),
|
|
|
|
new Language("rw", "Rwandi"),
|
|
|
|
new Language("sa", "Sanskrit"),
|
|
|
|
new Language("sc", "Sardinian"),
|
|
|
|
new Language("sd", "Sindhi"),
|
|
|
|
new Language("se", "Northern Sami"),
|
|
|
|
new Language("sg", "Sango"),
|
|
|
|
new Language("sh", "Serbo-Croatian"),
|
|
|
|
new Language("si", "Sinhalese"),
|
|
|
|
new Language("sk", "Slovak"),
|
|
|
|
new Language("sl", "Slovenian"),
|
|
|
|
new Language("sm", "Samoan"),
|
|
|
|
new Language("sn", "Shona"),
|
|
|
|
new Language("so", "Somalia"),
|
|
|
|
new Language("sq", "Albanian"),
|
|
|
|
new Language("sr", "Serbian"),
|
|
|
|
new Language("ss", "Swati"),
|
|
|
|
new Language("st", "Southern Sotho"),
|
|
|
|
new Language("su", "Sundanese"),
|
|
|
|
new Language("sv", "Swedish"),
|
|
|
|
new Language("sw", "Swahili"),
|
|
|
|
new Language("ta", "Tamil"),
|
|
|
|
new Language("te", "Telugu"),
|
|
|
|
new Language("tg", "Tajik"),
|
|
|
|
new Language("th", "Thai"),
|
|
|
|
new Language("ti", "Tigrinya"),
|
|
|
|
new Language("tk", "Turkmen"),
|
|
|
|
new Language("tl", "Tagalog"),
|
|
|
|
new Language("tn", "Tswana"),
|
|
|
|
new Language("to", "Tonga"),
|
|
|
|
new Language("tr", "Turkish"),
|
|
|
|
new Language("ts", "Tsonga"),
|
|
|
|
new Language("tt", "Tatar"),
|
|
|
|
new Language("tw", "Twi"),
|
|
|
|
new Language("ty", "Tahitian"),
|
|
|
|
new Language("ug", "Uyghur"),
|
|
|
|
new Language("uk", "Ukrainian"),
|
|
|
|
new Language("ur", "Urdu"),
|
|
|
|
new Language("uz", "Uzbek"),
|
|
|
|
new Language("ve", "Venda"),
|
|
|
|
new Language("vi", "Vietnamese"),
|
|
|
|
new Language("vo", "Volapük"),
|
|
|
|
new Language("wa", "Walloon"),
|
|
|
|
new Language("wo", "Wolof"),
|
|
|
|
new Language("xh", "Xhosa"),
|
|
|
|
new Language("yi", "Yiddish"),
|
|
|
|
new Language("yo", "Yoruba"),
|
|
|
|
new Language("za", "Zhuang"),
|
|
|
|
new Language("zh", "Chinese"),
|
|
|
|
new Language("zu", "Zulu"),
|
2023-08-03 09:27:21 +02:00
|
|
|
];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-08-05 06:00:00 +02:00
|
|
|
export class Language {
|
|
|
|
constructor(public iso639: string, public name: string) {
|
2023-08-03 09:27:21 +02:00
|
|
|
}
|
|
|
|
}
|