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 |
| CSS | Tailwind CSS, уже собранный в теме |
| Версия Hugo | 0.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 отдаёт статику |