Джерело
Мій шлях в IT (JavaScript Frontend) | Вчора в мене була одна з ситуацій, які, на жаль, періодично трапляютьс...
291 Охват/переглядів
2025-07-03 07:21
Повідомлення №74
Вчора в мене була одна з ситуацій, які, на жаль, періодично трапляються.Я витратив майже три години, щоб замінити " " на " ". Без перебільшень. Надаю скрін з пулл реквеста.Задача була в тому, щоб пофіксити вміст буфера обміну при копіюванні повідомлення в чаті. Цей зміст мав переклади через react-i18next, які містили динамічні данні, які під час перекладу повинні були підставлятися зі змінних.В двох словах як це повинно було працювати:const message= "Hello world"const translate = t("copyMessage", { message });
а десь в файлах en/uk.json:{ copyMessage: "Your message is {message}"}
console.log(translate) // "Your message is Hello world"
Натомість я отримував "Your message is {message}".Я перелопатив доку i18next, я переписував конфіги, намагався відокремити символи переноса рядків від фігурних дужок, я годину спілкувався з чатом GPT і в решті решт, просто випадково, стер один "пробіл" і поставив інший. І все запрацювало.Звідки там взявся саме такий пробіл і чому раніше все працювало?Справа в тому, що тут стояв якийсь "неразривний пробіл", який міг потрапити в цей файл у випадку, коли текст було скопійовано з якихось нотаток, якогось редактору тексту чи перекладача. І візуально відрізнити їх просто неможливо.Раніше цей проєкт був на Next і ми використовували для перекладу лібу "next-intl". Нещодавно ми видалили Next і залишили тільки React, і були вимушені перейти на "react-i18next". Чому саме так - я не можу сказати, бо я не інвестігейтив це питання і під час цього переходу працював на іншому проєкті. Але справа в тому, що в "next-intl" все працювало, а в "react-i18next" цей пробіл просто зламав весь функціонал.Ось так буває, лінтер і prettier не сваряться, все чудово білдиться, але бага все одно може бути через один неочевидний символ.