Перейти к содержимому
Blowfish

Blowfish

Тема для движка Hugo

Версия3.9.0 (2026-10-07)
Проверено2026-10-17
Готовность для мультиязычного проекта
вики 88 % проверено 19 из 31
сайт 93 % проверено 20 из 34
как считается
Мнение авторане выберу Рассматривать только для одноязычных сайтов — в этом он без подводных камней. (2026-10-17)
Ценабесплатно
ЛицензияMIT
Репозиторийhttps://github.com/nunocoracao/blowfish
Демоhttps://blowfish.page
CSSTailwind CSS, уже собранный в теме
Версия Hugo0.162 и новее
JavaScriptСвой JavaScript; поиск — Fuse.js
Node.jsНе нужен для сайта; npm нужен только для их установщика blowfish-tools
Переводы интерфейсаИнтерфейс переведён на 36 языков, в том числе uk, ru, pt-BR

Поиск в окне поверх страницы, на Fuse.js. Включён сразу.

Где работаетв браузере посетителя (JavaScript)
На чём построенFuse.js — небольшая библиотека на JavaScript, ищет прямо в браузере.
Откуда берёт текстыТексты статей — отдельный файл на язык (у тестовой вики ~130 КБ), грузится, когда открывают поиск. В него попадают и статьи других языков, у которых нет перевода: поиск на английском выдаст статью, которая есть только на русском. Для мультиязычного сайта это ошибка.
ЯзыкиИщет на любом языке. Формы слов не понимает и ищет точное совпадение, опечатки не прощает.
Что можно настроить в темеГде искать (название, раздел, описание, текст) зашито в скрипт темы. Страницу можно убрать из поиска параметром excludeFromSearch. Другой поиск — только копией шаблонов.
Проверено2026-10-17

Плюсы

  • Меню языков появляется только у переведённых статей и ведёт только на существующие переводы.
  • hreflang только на существующие переводы, код языка правильный (pt-br).
  • Разметка Article и BreadcrumbList, хлебные крошки — настройками.
  • Оглавление справа, не уезжает при прокрутке.
  • Много готовых блоков: шаги, вкладки, подсказки, аккордеон, таймлайн, графики, Mermaid.
  • Интерфейс переведён на uk, ru, pt-BR; актуальная версия, без предупреждений на Hugo 0.165.
  • Лёгкие страницы: тексты для поиска грузятся только при открытии поиска.

Минусы

  • Это тема для блога и портфолио: бокового меню с разделами нет — для вики навигацию придётся делать самому.
  • В поиске нельзя выбрать, где искать, и он не прощает опечаток.
  • Поиск на одном языке выдаёт и статьи на других языках, если у них нет перевода, — для мультиязычного сайта это ошибка. Настройки нет, только своя копия шаблона index.json.
  • Нет x-default в hreflang.
  • Заготовки для своего кода — только в head и в подвале.
  • Репозиторий темы весит около 600 МБ (картинки примеров) — качать лучше только нужные папки.

Общее впечатление

Современная тема на Tailwind с богатым набором блоков. С языками справляется хорошо: меню языков и hreflang не ссылаются на несуществующие переводы, есть разметка для поисковиков.

Для вики главный минус тот же, что у PaperMod: нет бокового меню с разделами. Оглавление при этом удобное — справа и не уезжает при прокрутке.

Что пришлось доработать

ПроблемаПоиск выдаёт статьи на других языках, если у них нет перевода. Настройки, которая это выключает, нет.
Что сделаноСвоя копия шаблона index.json без трёх строк, которые подмешивают страницы других языков (не применялось, только по коду темы).
Файлыlayouts/_default/index.json
Объём работынебольшой
Требованиеsite-search
{{ $pages := .Site.Pages }}
{{/* убрать: range .Site.Home.Translations … lang.Merge … end */}}

Результаты по требованиям с этой темой

Многие результаты задаёт сам Hugo, и они одинаковы для всех тем: языковые адреса, работа без базы данных, генерация страниц из данных. От темы зависят меню языков, hreflang, поиск и места для своего кода — их нужно проверять у каждой темы отдельно. Значок в пунктирной рамке — результат перенесён из проверки с другой темой этого движка. Наведите на значок, чтобы увидеть подробности.

ТребованиеРезультатОт чего зависитПримечание
Мультиязычность
Материал можно начать на неосновном языке ml-author-any-langдадвижокстраница только на ru (/ru/o-proekte/) собирается без заглушки en
Переключатель языков показывает только существующие переводы ml-switcher-existingдатемаменю языков появляется, только если у статьи есть перевод, и ведёт только на существующие переводы; на статье только на ru его нет
hreflang только на существующие переводы ml-hreflang-existing проверить ↗доработкатемаhreflang только на существующие переводы и на саму страницу, код языка из locale (pt-br) — верно; нет только x-default
Нет автостраниц с контентом основного языка ml-no-fallback-pages проверить ↗датемастатья только на ru существует только на ru
Основной язык в корне, остальные с префиксом ml-default-rootдадвижокdefaultContentLanguageInSubdir = false: en в корне, ru на /ru/
Атрибут lang в нужном формате ml-html-langдатемаhtml lang = ru, плюс meta content-language
Переводы интерфейса для en, uk, ru, pt-BR ml-ui-stringsдадвижокi18n/*.yaml движка; переводы темы есть для en и ru
Контент доступен для автоматического перевода ИИ ml-ai-translatableдадвижокстатьи — обычные Markdown-файлы; в рабочем проекте их переводит скрипт через Gemini
Статьи, навигация и поиск
Управление боковым меню sidebar-controlнеттемабокового меню с навигацией по разделам нет — тема для блога и портфолио
Оглавление статьи toc-controlдатемаоглавление справа и остаётся на месте при прокрутке; включается настройкой, на странице — showTableOfContents
Таксономии (теги, рубрики, свои классификаторы) taxonomiesдатематеги, рубрики, авторы, серии — с оформленными страницами
Поиск по сайту site-searchдоработкатемаFuse.js в окне поиска; тексты — отдельный файл на язык (~130 КБ), грузится при открытии поиска. Ошибка для мультиязычного сайта: в выдачу языка попадают статьи на других языках, у которых нет перевода. Настройки нет — убирается своей копией шаблона index.json (3 строки)
Гибкость поиска search-replaceableдоработкатемазамена: только копией шаблонов; языки: любые, формы слов не понимает, ищет точное совпадение (threshold 0); где искать: зашито в скрипте — название, раздел, описание, текст; страницу можно исключить параметром excludeFromSearch
Подсветка кода code-highlightдатемаподсвечивает сам Hugo при сборке, кнопка «копировать»
Пошаговые инструкции content-stepsдатемашорткоды steps и step; ещё alert, tabs, accordion, timeline, mermaid, chart
Свой код в шаблоны без правки темы (Inject Partials) theme-inject-partialsдатема3 заготовки: extend-head, extend-head-uncached, extend-footer; заготовок до и после статьи нет
Генерация страниц из данных (pSEO) data-pagesдадвижокmodule.mounts: data/products → content/cms, data/*.yaml → hugo.Data, без копирования
SEO
Микроразметка schema.org seo-schemaдатемаJSON-LD: Article и BreadcrumbList (настройка enableStructuredBreadcrumbs)
Хранение и окружение
Работает без сервера БД no-dbдадвижокSSG, контент в Markdown и YAML
Работает в окружении Nginx + PHP-FPM 8.5 runtime-phpдадвижокPHP не нужен: Nginx отдаёт статику