Тиха капітуляція: як інтернет змушує відступати від рідної мови
Опубліковано
Я прибрав російську з усіх налаштувань, а інтернет все одно спілкується зі мною російською. Розбір, чому так стається, і що з цим робити.
Я видалив російську всюди, де її можна видалити. У системних налаштуваннях,
розкладках клавіатур, налаштуваннях програм, переліку мов, з яких не потрібно
перекладати, у Google — а там мова інтерфейсу, мова пошуку й мова Gmail
налаштовуються окремо, у різних кутках налаштувань — усюди українська, потім
англійська. Навіть перевіряв, як браузер надсилає заголовок Accept-Language, і
що лежить у куках самих сайтів — чи не збереглася там колись обрана російська.
Скрізь те саме: українська, потім англійська. З мого боку російської не лишилося
ані сліду.
Але сайти та пошук вперто спілкуються зі мною російською. Я використав усі способи заявити, якою мовою хочу отримувати контент, але інтернет ігнорує мій вибір. А іноді ще гірше: російськомовний контент просто видають за український.
Майже кожен візит на сайт починається з пошуку перемикача на українську. Але досить одного некоректного посилання, редиректу чи переходу на піддомен — і сайт знову російською. Перемикаю. Ще раз. І десь на тисячний раз стає простіше пробігтися очима по російськомовній сторінці, ніж вкотре шукати той перемикач.
Це і є тиха капітуляція. Усвідомлення того, що відступаєш від власної мови, — гнітило найбільше.
Інтернет вперто навʼязує контент російською. Але на кожну дію має бути протидія.
Так народився Мовар — розширення для браузера з відкритим кодом. Цей проєкт має лише одну мету: змусити інтернет спілкуватися з вами рідною мовою.

Той самий домен, без жодного кліку по перемикачу: ліворуч сайт відкрився російською, праворуч — Мовар домовився про мову ще на етапі запиту.
Чому так стається
Немає однієї причини — це набір чинників і механізмів, які в підсумку дають простий результат: контент не тією мовою, яку я обрав.
Мова браузера — лише підказка. Браузер надсилає заголовок Accept-Language
з кожним запитом — це прохання, а не команда. Багато серверів на нього взагалі не
дивляться. Що з ним робити — вирішує розробник конкретного сайту.
Geo-IP. Іноді для мови за замовчуванням враховується регіон, з якого йде запит: більшість людей із вашого регіону шукають російською — отже, статистично й ви шукаєте російською.
Кешування. Сторінка не тією мовою живе в кеші й не оновлюється.
Задекларована мова й справжня — різні речі. Заголовок можна не лише
зігнорувати — на нього можна ще й збрехати у відповідь. Сайт віддає російський
текст, а в розмітці зазначає <html lang="uk"> або через hreflang
оголошує пошуковикам, що за цією адресою — українська версія. І ось що ключове:
машинерія, яка вирішує, яку версію показати в пошуку й як її підписати,
переважно довіряє тому, що сайт про себе декларує — атрибуту lang, hreflang,
структурі URL, sitemap, — а не тому, що насправді в тексті. Ніхто не звіряє одне
з одним. Тож російська сторінка потрапляє в індекс як українська; ви фільтруєте
видачу за українською — і отримуєте російські результати з українською биркою.
Кирилицю читають як російську. Там, де надійного атрибута немає, мову вгадують статистичні детектори — CLD2 і CLD3, fastText. Вони не читають сторінку; вони обирають мову, чий тренувальний корпус має найбільше збігів за n-грамами. А російський сегмент вебу приблизно впʼятеро більший за український — за даними W3Techs, російською написано 3,4% сайтів проти 0,7% українською, — тож коли кириличний текст неоднозначний, вибір падає на більший корпус. Самі детектори до того ж схильні вважати ці дві мови близькими — надто на короткому вводі, де слову «погода» бракує сигналу, щоб їх розрізнити. У пошуку ще складніше: мова інтерфейсу, мова результатів і визначена мова запиту — три окремі осі, і всі три мають збігтися. А ШІ-відповідь зверху пише тією мовою, якою написані її джерела, — знову російською, бо саме таких джерел більше, і саме російською вони говорять за замовчуванням.
Двомовні сайти обирають за вас — і не тримають вибір. Український сайт часто
має українську версію, просто заховану за російською. Російський варіант сидить на
кореневій адресі, український — за /uk/ чи на піддомені; перемикач — у футері або
під значком прапора. А коли ви його таки знаходите, вибір усе одно не тримається:
кука вибору живе в межах одного піддомену й скидається на сусідньому, посилання в
меню веде на кореневу російську, а поламаний hreflang мовчки редиректом кидає вас
назад. Звідси й та сама мова, перемкнута вдесяте за сеанс.
Українська — на правах додаткової. Припустімо, ви таки дісталися української версії. Рівною вона буває рідко — і ось тут причина вже людська. Її роблять «щоб була», а далі підтримують за залишковим принципом, тож російське лізе точково, звідусіль, де про переклад забули. Кнопки, службові повідомлення, помилки у формі замовлення, підказки й сторонні віджети лишаються російськими, бо лежать не в тому файлі, який перекладали. Вбудований у сайт чат-бот відповідає російською, хай би якою мовою ви до нього писали. Банери та інфографіка намальовані російською: підпис усередині картинки — це робота дизайнера, а не рядок у файлі перекладу, тож текст локалізують, а зображення лишають як є. А сам переклад часто машинний і невичитаний — той, де «электропитание» стає «електрохарчуванням», електричний котел — «казаном», а «две недели» доставки — «двома неділями» замість двох тижнів. Формально українська версія є. Насправді ви читаєте суміш — і саме вона підштовхує повернутися на російську, де принаймні все написано людиною.
У списку мов російської немає — а в стрічці вона є. Окремий випадок — маркетплейси, дошки оголошень і все, де вміст пишуть самі користувачі. Інтерфейс там буває бездоганно українським, а в перемикачі мов російської немає навіть у списку — обирати можна хіба між українською та англійською. Але картки товарів, описи, характеристики й відгуки — російською, бо мову вмісту не перевіряє ніхто. Перемикати тут нема на що. Сторінка справді українська — російські в ній лише окремі блоки.
І петля замикається. Найгірше — навіть не кожен окремий збій, а цикл, у який вони складаються. Аналітика показує власникові сайту, що «більшість читачів обрала російську» — хоча вибір робив не читач, а замовчування самого сайту. З цього сигналу ростуть бюджети наступного року: менша україномовна аудиторія — менше українського контенту в замовленні — менший індекс — детектори й ранжування нахиляються до російської ще сильніше. І цикл повторюється.
Найкраще цей цикл видно там, де цифри публічні. Опитування Steam показує, якою мовою користувачі запускають клієнт: станом на липень 2026-го російська — третя мова платформи з 9,3%, українська — 0,7% і пʼятнадцяте місце. Видавці дивляться саме в цю таблицю, коли вирішують, які локалізації замовляти. Український гравець, у якого клієнт стоїть російською — за звичкою або через упевненість, що української однаково немає, — потрапляє в ті 9,3%. І наступного року аргумент «українською майже ніхто не грає» звучить вагоміше, бо його щойно підтвердили нашими ж руками. Втім, важіль працює і в інший бік: за останні роки українська в Steam уже обійшла італійську (0,70% проти 0,63%) — мову, яку локалізували за замовчуванням десятиліттями.

Мовна статистика Steam за липень 2026 року — саме та таблиця, на яку дивляться видавці, вирішуючи, які локалізації замовляти.
Як Мовар визначає мову
Досі я казав «Мовар бачить, що сторінка російською», ніби це очевидно. Насправді це
найважча частина всієї роботи, і найкраще видно чому, коли сигнали суперечать один
одному. Перемикач мов показує активною «UA». Атрибут <html lang> каже ru. А
класифікатор, подивившись на сам текст, повертає третє. Хто має рацію?
Мовар розвʼязує це не голосуванням, а зважуванням доказів — від найнадійнішого
сигналу до найслабшого. Перший — активний пункт перемикача мов, і саме він
важливіший за атрибут <html lang>, хоча інтуїція підказує навпаки. Причина
проста: перемикач малює той самий код, що малює й контент, — вони розробляються
разом і майже завжди збігаються. А <html lang> лежить у шаблоні й живе власним
життям: є сайти, що віддають lang="ru" на всіх без винятку локалях. Далі —
піддомен ru.example.com, потім сегмент шляху зі строгим збігом, щоб
/ru-return-warranty не спрацював на ru, і насамкінець self-hreflang, коли
сторінка сама вказує на себе з мовною міткою.
Коли всі пʼять сигналів мовчать, лишається сам текст сторінки. Тут Мовар пробує
вбудований у браузер
визначник мови —
Chrome та Edge мають його з коробки: коли він доступний, то точніший, а коли його
немає — працює franc на локальних таблицях триграм. Це шостий і останній крок
для вердикту всієї сторінки.

Драбина сигналів: перший, що дав відповідь, вирішує; коли доказів бракує — вердикт «невідомо», і Мовар нічого не чіпає.
Але вердикт для сторінки — це ще не все. Окремі елементи — картку товару, пункт меню, заголовок результату — доводиться класифікувати поодинці, і тут не допоможе ні ШІ, ні триграми: рядок у три слова для них замалий. Для цього є окремий класифікатор.
Найочевидніше рішення — характерні літери: і, ї, є, ґ проти ы, ё. На абзаці працює чудово; на короткій назві без жодної такої літери мовчить, а на цитаті — бреше. Тому літери в Моварі — не весь метод, а лише перший щабель драбини з чотирьох. Виграє той щабель, чий лідер першим відірвався хоча б на одиницю:
- Літери — символи, характерні всередині набору кандидатів.
- Службові слова — вручну відібрані граматичні маркери, найвища точність.
- Частотні слова — контентні слова, згенеровані з корпусу субтитрів.
franc— триграмна підстраховка, і лише для тексту від 24 символів: коротше триграми — це вже шум, а не доказ.
Найелегантніше тут — що «характерний» означає не «унікальний у світі», а
«унікальний серед тих мов, які ми зараз розрізняємо». Літера і вирішує суперечку
між українською та російською, бо є лише в першій, — але між українською та
білоруською вона не визначальна, бо є в обох. І навпаки: слово и розрізняє
українську й російську, хоча сама літера и є в обох абетках.
Тому й висновок повертається не самим кодом мови, а разом із доказами: який щабель спрацював, з яким відривом і чи взагалі було з чого обирати — чи, може, кандидат був єдиним у своєму письмі й «переміг» без боротьби.
Окремий випадок — коли сама картка несе мовну мітку. Google, наприклад, підписує власним атрибутом блок ШІ-відповіді. Тоді Мовар не обирає між міткою й текстом, а зважує їх разом: мітка вирішує, коли тексту мало або його ще немає — скажімо, відповідь ШІ ще не дописалася, — але впевнене читання тексту мітку перебиває. Тобто картка, підписана українською, а насправді російська, за своєю биркою не сховається: щойно в тексті зʼявляються характерні літери, вирок виносять вони. Це рівно та розбіжність між задекларованим і справжнім, з якої починалася стаття, — тільки полагоджена на рівні окремого блоку.
А головне — буває вирок «невідомо». Коли доказів бракує або голоси розділилися, класифікатор не вгадує. Для Мовара «невідомо» означає «не чіпати».
Ця частина зрештою переросла сам Мовар. Класифікатор, профілі мов і коди винесені
в окремий пакет langtell, опублікований
на npm: він відповідає не на питання «якою мовою цей текст», як franc чи cld3, а на
питання «якою мовою цей заголовок, з огляду на сторінку й заголовки, з якими він
приїхав» — і показує, з чого склався висновок. Кириличний набір там ширший, ніж
потрібно Мовару (є ще сербська, македонська, казахська), тож будь-хто може взяти
його під власну пару мов. У Мовара лишилося те, що специфічне саме для нього:
швидка евристика для основного шляху, оркестратор рушіїв і нормалізація BCP-47.
І все це — на пристрої. Жодного запиту назовні, жодної телеметрії. Це не побічний ефект, а умова.
Принципи
За всіма цими рішеннями стоять правила, які я намагаюся не порушувати навіть тоді, коли порушити зручно.
Спершу перемкнути, приховати — в останню чергу. Мовар не блокувальник. Головна його робота — знайти українську версію, яка вже існує, і перемкнути сайт на неї.
Через спільні механізми, а не через список сайтів. Заголовок, hreflang,
розмітка, перемикач мов — це те, що є всюди, тож базовий рівень працює й на сайті,
якого ми ніколи не бачили, без жодного рядка, написаного під нього. Для окремих
сайтів — Google, YouTube — є власні моделі сторінки, які розширюють можливості там,
де спільних сигналів не вистачає. Але це надбудова, а не фундамент.
Критерій — мова, а не зміст. Мовар не оцінює тексти й не вішає ярликів.
Краще не приховати російське, ніж помилково приховати українське. Весь механізм визначення базується на доказах, а висновок «не впевнений» означає «не чіпати».
Явний вибір користувача сильніший за налаштування. Якщо ви самі клікнули на сайті «російська», Мовар не перекидає вас назад — він відступає на цьому сайті до кінця сеансу (щонайбільше на добу). Інакше розширення скасовувало б ваш власний вибір.
Не фільтруємо контент за замовчуванням. Приховування вмісту вимкнене, доки ви самі не ввімкнете його в налаштуваннях.
Уся обробка — на пристрої. Включно з ШІ: коли браузер дає вбудований визначник мови, Мовар користується ним локально.
Опортуністично, а не обовʼязково. Є вбудований визначник — беремо. Немає — працюємо на локальних алгоритмах. Ніколи не завантажуємо ШІ-моделі й не вимагаємо новішого браузера.
Не заглядаємо в медіа. Мовар не читає текст усередині зображень, відео чи звуку. Це водночас принцип і обмеження.
Жодної аналітики. Ні лічильників, ні телеметрії, ні «анонімної статистики».
Обіцянки перевіряє алгоритм. Кожна з них звіряється з кодом на кожній збірці: скажімо, «нічого не покидає браузер» — це перевірка, яка сканує джерела на мережеві виклики й блокує збірку, якщо знайде. Не маркетинг, а тест.
Не перекладати. Ніколи, навіть опційно. Наступний розділ — саме про це.
Чому Мовар не перекладає
Найочевидніша реакція на «текст не тією мовою» — перекласти його. Машинний переклад під рукою, браузери вже мають вбудовані перекладачі, і доволі непогані. Мовар цього не робить принципово, і це, мабуть, найважливіше рішення в усьому продукті.
Що він робить із російським вмістом, який таки лишився на сторінці? Не перекладає — і не ховає сторінку цілком. Він прибирає окремі елементи, рівно ті, що заблокованою мовою: варіант «російська» зі списку в перемикачі мов — на будь-якому сайті, де такий перемикач є; результат у видачі Google, який насправді російський, хоч і підписаний українською; картку відео на YouTube. Решта сторінки лишається як є. Саме тому фільтр працює поелементно, а не за одним вердиктом для всієї сторінки: сторінка буває чесно українською — а російськими в ній лише кілька карток, і перемикати там нічого. Ви можете ввімкнути це в налаштуваннях і обрати, що робити з відфільтрованим вмістом: приховати чи лишити за завісою.

Фільтр вмісту — свідомий вибір: вмикається вручну, а відфільтроване або зникає, або лишається на місці за розмитою завісою.
Чому не переклад, попри те, що технічно це найпростіше? Причин дві, і жодна з них не другорядна.
Переклад відмиває джерело. Машинна українська читається як питомий текст, і ви знову опиняєтесь наодинці рівно з тим вмістом, від якого відгородились, — тепер мовою, якій довіряєте, з пропагандою включно. Сигнал «це російське» і є те, заради чого Мовар встановлюють; переклад цей сигнал приховує. Чесних варіантів, коли українського контенту немає, рівно два: показати як є — або приховати.
Переклад гальмує розвиток української. Україномовної аудиторії не видно тим, хто створює контент, — вона розчиняється в російськомовній статистиці. Переклад це лише закріплює: читач задоволений, а автор так і не дізнається, що його аудиторія українською читає охочіше. Попит лишається невидимим, і українського контенту не стає більше.
І тут варто сказати прямо, бо це найчастіше непорозуміння. Мовар не ділить авторів на правильних і неправильних, і не претендує на те, щоб оцінювати зміст. Пропаганда чудово маскується й під українську — сама лише мова не гарантує нічого про якість тексту. Мовар робить рівно те, що заявлено: налаштовує інтернет на вашу мову й змушує сайти поважати вибір, який ви вже зробили. Так, під фільтр потрапляє й проукраїнський автор, який пише російською — бо критерій тут мова, а не лояльність. Будь-який інший критерій перетворив би мовний інструмент на щось зовсім інше. А якщо на конкретному сайті це заважає — його там можна вимкнути, на годину або назавжди.
Чого Мовар не може
Було б нечесно вдавати, що розширення лагодить усе. Мовар виправляє те, що відбувається у вашому браузері: запит, який надсилається, адресу, яку ви відкриваєте, параметри пошуку, перемикач, який він уже знає для сайту, — і прибирає окремі елементи, що лишились російськими попри бирку. Він не править закешовані відповіді CDN, не перетеговує неправильно класифіковані статті Вікіпедії, не перекладе текст, вкарбований у зображення, і не змусить ШІ відповісти українською.
Поелементний фільтр теж має чітку межу. Щоб прибрати картку, Мовар має розуміти структуру сторінки, а зараз він знає видачу Google і YouTube. Той самий маркетплейс із попереднього розділу — де в перемикачі російської немає, а в каталозі вона є — поки лишається неприкритим: перемикач Мовар там почистить, а картки товарів залишаться. Кожна нова структура — це окреме правило, і це чесна відповідь на питання «а мій сайт?».
Є й місця, де доводиться зупинятися на півдорозі. У YouTube немає аналога
google-івського lr — жодного параметра, який справді відсіює російськомовні
відео; hl і gl лише підштовхують інтерфейс, ранжування й рекомендації. Тож
адреса там нічого не гарантує, і єдине, що прибирає російські картки, — той самий
поелементний фільтр, який ви вмикаєте вручну. А коли фільтр Google за українською
дає порожню сторінку, Мовар один раз перезапитує без нього: наполягати на мові до
кінця означало б показати вам нуль результатів замість тих, що таки є, — після чого
ви б це розширення просто вимкнули.
Але чіткий сигнал — це передумова для всього іншого. Поки системи бачитимуть «брудний» сигнал, детектори, ранжування та ШІ-відповіді будуть орієнтовані на некоректну мову. Повернути собі свою мову сьогодні — це отримати більше українських джерел зараз і більше підтримки української завтра.
Сподобалась ідея? Долучайтеся
Мовар — некомерційний проєкт. Немає ні платної версії, ні преміум-функцій, ні даних на продаж, і монетизувати його я не збираюся. Мета одна — щоб української в інтернеті ставало більше. Тож якщо ідея вам близька, ось що справді допомагає:
- Відгук у магазині розширень. Chrome Web Store, AMO та App Store вирішують, кому показувати розширення, саме за оцінками й відгуками. Один чесний відгук важить більше, ніж здається.
- Розкажіть знайомим. Кожен, хто вмикає Мовар, — це ще один чистий сигнал у тій самій статистиці, з якої ростуть бюджети на локалізацію. Той самий цикл, що на початку статті, тільки вже в інший бік.
- Повідомлення про помилки. Сайт, де Мовар не спрацював — або спрацював там, де не мав, — найцінніше, що можна надіслати. Кожен такий випадок стає тестом і більше не повторюється.
- Дизайн. Це те, чого бракує найбільше: іконки, ілюстрації, матеріали для сторінок у магазинах. Якщо ви дизайнер і вам близька ідея — напишіть.
- Зірочка на GitHub. Найдешевша дія з усіх: що помітніший проєкт, то більше людей його знайде.
Мовар працює у Chrome, Firefox, Edge, Opera, Brave і Safari (зокрема на iOS). Встановити Мовар, а прочитати повний розбір усіх цих механізмів — на сторінці «Чому так стається»; код — на GitHub.
А якщо вам у власному проєкті треба визначати мову — сторінки, заголовка, назви
товару, короткого рядка з користувацького вводу — спробуйте
langtell. Він народився в цьому проєкті,
але виріс в окремий пакет. Він дивиться не лише на сам текст, а й на
<html lang>, og:locale та заголовок Content-Language, зважує ці докази й
повертає вердикт разом із переліком того, що на нього вплинуло, — тож завжди видно,
чому рядок класифіковано саме так. Нуль обовʼязкових залежностей, MIT, franc
підключається окремо й лише якщо потрібен.
Мовар, langtell і решта моїх проєктів живуть на
GitHub — підпишіться на профіль, щоб бачити
оновлення й нові релізи.
Налаштуйте інтернет на рідну мову.
Перемкніть інтернет на українську
Мовар — безкоштовне розширення з відкритим кодом. Воно мовчки знаходить українську версію сайту й перемикає на неї, а пошук просить видавати українські результати. Усе працює на вашому пристрої.
Браузери на Chromium в Android — Chrome, Edge, Opera, Brave — узагалі не підтримують розширень. Це обмеження самих браузерів, а не Мовара. Firefox для Android їх підтримує, тож кнопка вище встановить Мовар саме туди.