Telegram Web K with changes to work inside I2P
https://web.telegram.i2p/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.5 KiB
83 lines
2.5 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
import cancelEvent from '../helpers/dom/cancelEvent'; |
|
import {attachClickEvent} from '../helpers/dom/clickEvent'; |
|
import loadFonts from '../helpers/dom/loadFonts'; |
|
import {Config, LangPackDifference, LangPackString} from '../layer'; |
|
import I18n, {LangPackKey} from '../lib/langPack'; |
|
import rootScope from '../lib/rootScope'; |
|
import Button from './button'; |
|
import {putPreloader} from './putPreloader'; |
|
|
|
let set = false; |
|
|
|
function getLang(): Promise<[Config.config, LangPackString[], LangPackDifference.langPackDifference]> { |
|
if(cachedPromise) return cachedPromise; |
|
return cachedPromise = rootScope.managers.apiManager.getConfig().then((config) => { |
|
if(config.suggested_lang_code !== I18n.lastRequestedLangCode) { |
|
// I18n.loadLangPack(config.suggested_lang_code); |
|
|
|
return Promise.all([ |
|
config, |
|
I18n.getStrings(config.suggested_lang_code, ['Login.ContinueOnLanguage']), |
|
I18n.getCacheLangPack() |
|
]); |
|
} else { |
|
return [] as any; |
|
} |
|
}); |
|
} |
|
|
|
let cachedPromise: ReturnType<typeof getLang>; |
|
|
|
export default function getLanguageChangeButton(appendTo: HTMLElement) { |
|
if(set) return; |
|
getLang().then(([config, strings]) => { |
|
if(!config) { |
|
return; |
|
} |
|
|
|
const backup: LangPackString[] = []; |
|
strings.forEach((string) => { |
|
const backupString = I18n.strings.get(string.key as LangPackKey); |
|
if(!backupString) { |
|
return; |
|
} |
|
|
|
backup.push(backupString); |
|
I18n.strings.set(string.key as LangPackKey, string); |
|
}); |
|
|
|
const key: LangPackKey = 'Login.ContinueOnLanguage'; |
|
const btnChangeLanguage = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: key}); |
|
btnChangeLanguage.lastElementChild.classList.remove('i18n'); // prevent changing language |
|
loadFonts({text: [I18n.format(key, true)]}).then(() => { |
|
window.requestAnimationFrame(() => { |
|
appendTo.append(btnChangeLanguage); |
|
}); |
|
}); |
|
|
|
rootScope.addEventListener('language_change', () => { |
|
btnChangeLanguage.remove(); |
|
}, {once: true}); |
|
|
|
backup.forEach((string) => { |
|
I18n.strings.set(string.key as LangPackKey, string); |
|
}); |
|
|
|
attachClickEvent(btnChangeLanguage, (e) => { |
|
cancelEvent(e); |
|
|
|
set = true; |
|
|
|
btnChangeLanguage.disabled = true; |
|
putPreloader(btnChangeLanguage); |
|
|
|
I18n.getLangPack(config.suggested_lang_code); |
|
}); |
|
}); |
|
}
|
|
|