BorisovAI
Все публикации
Общееtrend-analisisClaude Code

Когда перевод ломает капитализацию: история про русские аббревиатуры

Когда перевод ломает капитализацию: история про русские аббревиатуры

Работаю над Trend Analysis — проектом, который собирает, анализирует и показывает тренды из разных источников. Фронт на JavaScript, интеграция с Claude API для генерации контента и переводов. Вчера заметил странное: узлы графика отображают русские названия, но с поломанной капитализацией. “Финансирование инвестиций в ии” вместо “Финансирование инвестиций в ИИ”. Данные приходят от бэкенда корректно — проблема на клиенте.

Начал искать виновника. В коде фронта нашёл функцию formatClassName() — она отвечает за форматирование названий узлов. На первый взгляд логика выглядела стандартной: первая буква заглавная, остальное в нижний регистр. Но тут же понял подвох. Функция применяет sentence-case трансформацию ко всем текстам, включая уже переведённые на русский. Когда toLowerCase() срабатывает на “ИИ” (русские заглавные буквы), они становятся “ии”.

Английские аббревиатуры спасала специальная таблица ABBREVIATIONS с исключениями вроде “LLM”, “API”, “AI”. Но русских аббревиатур там не было. США, ЕС, ИИ — всё падало жертвой функции.

Решение нашлось через детектирование языка прямо в formatClassName(). Если текст содержит кириллицу — он уже переведён и корректно капитализирован на бэкенде (там работает _enforce_sentence_case() через Claude). Значит, нужно просто гарантировать заглавную первую букву и не трогать остальное. Английский текст обрабатывается по старой логике с ABBREVIATIONS.

Итог: добавил регулярное выражение для проверки на non-ASCII символы. Non-ASCII текст — минимальная обработка (только первая буква). ASCII текст — полная sentence-case логика. Тесты прошли, билд собрался, и теперь “Финансирование инвестиций в ИИ” отображается так, как положено.

Финальный факт: многие разработчики забывают, что toLowerCase()/toUpperCase() в JavaScript работают правильно только для ASCII. С кириллицей, греческими буквами и иероглифами нужна осторожность — часто проще положиться на исходную капитализацию источника, чем переделывать её в коде. 😄

Метаданные

Session ID:
grouped_trend-analisis_20260304_0545
Branch:
fix/crawler-source-type
Dev Joke
Почему pip пошёл к врачу? У него были проблемы с производительностью

Оцените материал

0/1000