import lande from 'lande'; import { debounce } from 'lodash'; import { urlRegex } from './url_regex'; const ISO_639_MAP = { afr: 'af', // Afrikaans ara: 'ar', // Arabic aze: 'az', // Azerbaijani bel: 'be', // Belarusian ben: 'bn', // Bengali bul: 'bg', // Bulgarian cat: 'ca', // Catalan ces: 'cs', // Czech ckb: 'ku', // Kurdish cmn: 'zh', // Mandarin dan: 'da', // Danish deu: 'de', // German ell: 'el', // Greek eng: 'en', // English est: 'et', // Estonian eus: 'eu', // Basque fin: 'fi', // Finnish fra: 'fr', // French hau: 'ha', // Hausa heb: 'he', // Hebrew hin: 'hi', // Hindi hrv: 'hr', // Croatian hun: 'hu', // Hungarian hye: 'hy', // Armenian ind: 'id', // Indonesian isl: 'is', // Icelandic ita: 'it', // Italian jpn: 'ja', // Japanese kat: 'ka', // Georgian kaz: 'kk', // Kazakh kor: 'ko', // Korean lit: 'lt', // Lithuanian mar: 'mr', // Marathi mkd: 'mk', // Macedonian nld: 'nl', // Dutch nob: 'no', // Norwegian pes: 'fa', // Persian pol: 'pl', // Polish por: 'pt', // Portuguese ron: 'ro', // Romanian run: 'rn', // Rundi rus: 'ru', // Russian slk: 'sk', // Slovak spa: 'es', // Spanish srp: 'sr', // Serbian swe: 'sv', // Swedish tgl: 'tl', // Tagalog tur: 'tr', // Turkish ukr: 'uk', // Ukrainian vie: 'vi', // Vietnamese }; const guessLanguage = (text) => { text = text .replace(urlRegex, '') .replace(/(^|[^/\w])@(([a-z0-9_]+)@[a-z0-9.-]+[a-z0-9]+)/ig, ''); if (text.length > 20) { const [lang, confidence] = lande(text)[0]; if (confidence > 0.8) return ISO_639_MAP[lang]; } return ''; }; export const debouncedGuess = debounce((text, setGuess) => { setGuess(guessLanguage(text)); }, 500, { maxWait: 1500, leading: true, trailing: true });