ВозможностиПлагинЦеныРесурсы
Изменить язык
РесурсыКак исправить нечеткие переводы в файлах .po WordPress

Как исправить нечеткие переводы в файлах .po WordPress

SimplePoTranslate Team11 мая 2026 г.
Как исправить нечеткие переводы в файлах .po WordPress

Вы перевели каждую строку. Вы сохранили файл, загрузили .mo и обновили свой сайт. И все же несколько надписей по-прежнему упрямо остаются на английском языке. Вы открываете файл .po, находите строку, и вот она, идеально переведенная. Так почему же WordPress ее игнорирует?

Ответ почти всегда кроется в маленьком флаге, спрятанном над записью: #, fuzzy. Нечеткий перевод — это способ gettext сказать: "этот перевод может быть неправильным, поэтому пока не доверяйте ему." И что критически важно, WordPress отказывается отображать нечеткие строки на активном сайте, вместо этого возвращаясь к исходному английскому. Это одна из самых распространенных и непонятных причин проблемы "мой перевод не отображается".

В этом руководстве объясняется, что именно означает флаг нечеткого перевода, почему он постоянно появляется в ваших каталогах, и как находить и очищать нечеткие строки в Poedit, в командной строке и в масштабах всего списка задач. Как только вы поймете механизм, загадка отсутствующих переводов исчезнет.

Что на самом деле означает флаг fuzzy?

Флаг fuzzy — это маркер, который gettext добавляет к записи перевода, чтобы указать, что перевод является неопределенным и требует проверки человеком. В исходном файле .po он отображается как специальный комментарий непосредственно над строкой.

#: includes/cart.php:88
#, fuzzy
msgid "Add to cart"
msgstr "Im Warenkorb"

Эта строка #, fuzzy сообщает каждому инструменту, поддерживающему gettext, включая WordPress, что msgstr под ней является предварительным. Перевод существует, но gettext не считает его подтвержденным.

Почему WordPress пропускает нечеткие строки

Вот поведение, которое застает всех врасплох. Когда WordPress компилирует или читает файл .mo, он рассматривает нечеткие записи как непереведенные. Строка технически присутствует в файле, но WordPress намеренно игнорирует ее и вместо этого показывает исходный msgid.

Итак, с вашей точки зрения, перевод "завершен", он находится прямо в файле. Но с точки зрения WordPress, эта строка не имеет надежного перевода, поэтому он отображает английский источник. Именно поэтому готовый на вид каталог может по-прежнему отображать непереведенный текст на внешнем интерфейсе.

Этот дизайн является преднамеренным и, справедливости ради, разумным. Весь смысл флага fuzzy заключается в предотвращении тихого появления непроверенных, потенциально неверных переводов в рабочем режиме. Представьте строку, которая изначально читалась как "Delete account" и позже была изменена на "Deactivate account". Если gettext слепо сохранит старый перевод, ваши пользователи могут увидеть кнопку с надписью "Delete account", которая на самом деле только деактивирует, что является опасным несоответствием. Скрывая нечеткие строки, gettext заставляет человека подтвердить, что перевод по-прежнему соответствует новому значению, прежде чем он дойдет до кого-либо. Флаг — это механизм безопасности, а не ошибка.

Почему флаги fuzzy постоянно появляются?

Флаги fuzzy не случайны. Они генерируются автоматически инструментами gettext в двух основных ситуациях, и понимание обеих позволяет понять, как их предотвратить.

Изменилась исходная строка

Наиболее частая причина — обновление исходного кода. Представьте, что разработчик изменяет строку в следующей версии плагина с "Add to cart" на "Add to basket". Когда вы объединяете новый шаблон с существующим переводом, gettext видит, что исходный код больше не соответствует тому, что вы изначально перевели. Вместо того чтобы отбросить ваш старый перевод, он сохраняет его, но помечает как fuzzy, по сути говоря: "английский изменился, поэтому, пожалуйста, перепроверьте, подходит ли ваш перевод по-прежнему".

Автоматическое сопоставление с помощью памяти переводов и msgmerge

Вторая причина — нечеткое сопоставление во время слияния. Инструмент msgmerge обновляет старый файл перевода в соответствии с новым шаблоном, и когда он находит исходную строку, которая похожа, но не идентична предыдущей, он копирует старый перевод и помечает его как fuzzy.

# Merge a new template into an existing translation.
# Similar-but-changed strings get marked #, fuzzy automatically.
msgmerge --update awesome-plugin-de_DE.po awesome-plugin.pot

Память переводов в настольных редакторах ведет себя так же: когда она автоматически заполняет предложение из близкого совпадения, она помечает результат как fuzzy, чтобы вы не забыли его проверить. В обоих случаях флаг выполняет свою функцию. Проблема только в том, что нечеткие записи остаются непроверенными, и WordPress незаметно скрывает их.

Стоит знать о третьем, более хитром источнике: инструменты копирования-вставки и массового импорта. Некоторые платформы для перевода и скрипты импорта по умолчанию помечают каждую запись как fuzzy в качестве консервативной меры, ожидая, что человек подтвердит каждую из них впоследствии. Если вы импортируете каталог из другой системы и обнаруживаете, что каждая строка внезапно стала fuzzy, то обычно это причина. Переводы могут быть совершенно в порядке, но пока флаги не будут очищены, ни один из них не появится на вашем сайте. Знание источника флагов подскажет вам, действительно ли нужно просматривать каждую запись или безопасна ли уверенная массовая очистка.

Как найти и исправить нечеткие строки?

Очистка нечетких строк означает их проверку, и после подтверждения правильности перевода — удаление флага. Существует три практических способа сделать это, в зависимости от объема работы.

Исправление нечетких строк в Poedit

Poedit делает это проще всего. Откройте файл .po и используйте элементы управления поиска и фильтрации, чтобы отобразить только нечеткие записи; они выделены цветом (обычно оранжевым), поэтому сразу бросаются в глаза. Нажмите на каждую из них, подтвердите или исправьте перевод, затем отключите состояние fuzzy с помощью сочетания клавиш (Правка, затем "Перевод нечеткий", или сочетание клавиш, показанное в меню). При сохранении Poedit перекомпилирует чистый .mo, и теперь подтвержденные строки будут отображаться на вашем сайте. Если вы новичок в этом редакторе, полное руководство по Poedit подробно описывает рабочий процесс фильтрации и проверки.

Исправление нечетких строк в командной строке

Для автоматизации или больших каталогов командная строка работает быстрее. Вы можете подсчитать нечеткие записи и, после массовой проверки, удалить флаги, чтобы WordPress мог их загрузить.

# Count how many fuzzy strings remain
msgattrib --only-fuzzy --no-obsolete awesome-plugin-de_DE.po | grep -c "msgid"

# Clear all fuzzy flags (only after you trust the translations)
msgattrib --clear-fuzzy --empty awesome-plugin-de_DE.po \
  --output-file=awesome-plugin-de_DE.po

Будьте осторожны с массовой очисткой. Удаление флагов fuzzy без проверки переводов сводит на нет цель флага и может привести к отправке пользователям действительно неверного текста. Используйте подход командной строки, когда вы доверяете источнику переводов, и ручной метод Poedit, когда вы этого не делаете.

Безопасный компромисс — экспортировать нечеткие строки в отдельный файл, просмотреть только их и объединить обратно. Это сохраняет ваши подтвержденные переводы нетронутыми, пока вы сосредоточены только на записях, которые действительно требуют внимания.

# Extract only the fuzzy entries for focused review
msgattrib --only-fuzzy --no-obsolete awesome-plugin-de_DE.po \
  --output-file=fuzzy-only.po

Просмотр пятидесяти изолированных строк гораздо менее подвержен ошибкам, чем прокрутка тысячестрочного каталога в поисках оранжевых строк, и это дает вам чистую запись того, что именно изменилось в последнем обновлении.

После очистки флагов всегда повторно сохраняйте или перекомпилируйте файл .mo. Состояние fuzzy находится в .po, но WordPress читает бинарный .mo, поэтому, пока вы его не перегенерируете, ваш внешний интерфейс будет продолжать показывать английский язык, хотя .po выглядит чистым. Poedit перекомпилирует автоматически при сохранении; в командной строке вы запускаете msgfmt awesome-plugin-de_DE.po -o awesome-plugin-de_DE.mo. Забыть этот последний шаг компиляции — одна из самых распространенных причин того, что свежеочищенный каталог по-прежнему не отображается: перевод подтвержден в исходном файле, но бинарный файл, который фактически загружает сайт, устарел.

Обратите внимание, что нечеткие записи часто появляются рядом со строками множественного числа, где измененный msgid_plural может пометить весь блок множественного числа как fuzzy. Если ваш список нечетких записей в основном состоит из подсчетов и количеств, наше руководство по множественным числам Gettext и сложной плюрализации объясняет, почему эти записи особенно уязвимы во время слияний.

Масштабная очистка нечеткого списка задач

Одна нечеткая строка — это исправление за тридцать секунд. Каталог с четырьмя сотнями нечетких строк после крупного обновления плагина — это другая проблема, а для десятка языков это становится настоящим узким местом. Искушение массово очистить флаги без проверки — это именно то, как ошибочные переводы попадают в производство.

Более чистое решение — заново перевести нечеткие записи, а не просто штамповать устаревшие совпадения. Когда вы пропускаете каталог через SimplePoTranslate, контекстно-зависимый ИИ создает актуальный, подтвержденный перевод для каждой измененной строки, так что вы не просто удаляете предупреждающий флаг, вы заменяете неопределенные совпадения реальными переводами. Syntax Locking сохраняет каждый %s, %1$s, {count} и HTML-тег нетронутыми во время обработки, а Smart Batching обрабатывает большие каталоги после обновления за один раз. Вы получаете чистый ZIP-архив с файлами .po, .mo, .json, .php и .xliff, без оставшихся нечетких записей, готовый к развертыванию из облака.

Стоит отличать это от более широкого вопроса о том, почему переводы вообще не отображаются. Флаги fuzzy — одна из конкретных причин, но отсутствующие файлы .mo, неправильные имена файлов и несоответствия локалей вызывают тот же симптом. Полный диагностический контрольный список см. в нашем руководстве по устранению неполадок, из-за которых переводы не отображаются в WordPress, которое рассматривает нечеткие строки как один пункт в более длинном списке.

Готовы очистить весь нечеткий список задач и сделать так, чтобы каждая строка отображалась на вашем сайте? Попробуйте SimplePoTranslate бесплатно — кредитная карта не требуется. Бесплатный тариф заново переводит ваш файл .po, заменяя неопределенные нечеткие совпадения чистыми, подтвержденными переводами.

Поделиться этой статьёй