Мультимовність у Publii: чому я зробив власний i18n для теми

Частина 1. Чому мені знадобився власний i18n у Publii

Усе почалося досить буденно. У якийсь момент у мене з’явилась потреба написати кілька публікацій англійською мовою. Загалом Publii з цим справляється без проблем: окремі пости, окремі slug’и — усе працює. Але коли я відкрив головну сторінку сайту, я помітив одну дуже не зручну деталь. Уривок англомовної публікації був англійською, а під ним — кнопка «Читати далі…» українською.

Це виглядало приблизно так:

Today I want to announce another update to the Roland E-09 Instrument Definition for Cakewalk file.…

Читати далі…

Формально — нічого не зламано. Але виглядало це, м'яко кажучи… не дуже.

Чому це проблема, навіть якщо все “працює”?

Можна сказати:

«Це ж дрібниця»

Але саме з таких дрібниць і складається відчуття якості теми.

Бо справа не лише в кнопці «Read more». Дуже швидко стає помітно, що і дати завжди в одному мовному форматі, написи типу “1 comments / 2 comments” не враховують поточну мову, “5 min read” також не перекладається, тексти в меню жорстко зашиті, дрібні UI-підписи також завжди однією мовою.

У Publii немає єдиного механізму, який би сказав:

«Цей пост — англійською. Усі допоміжні тексти теж мають бути англійською».

Якого рішення я не хотів?

Я досить швидко зрозумів, що типові підходи мені не підходять.

Я не хотів дублювати шаблони для кожної мови, розкидати {{#if}} по всіх hbs файлах, підключати сторонні i18n-бібліотеки, робити окремий плагін. Мені хотілося простішого рішення: один файл helpers, словники у звичайному JSON, жодних залежностей, робота у статичному сайті, передбачуваний результат.

Як з’явився цей набір helpers?

Я почав з найпростішого — перекладу одного рядка. Того самого «Read more». Але дуже швидко стало зрозуміло, якщо вже робити, то робити щось універсальне.

У результаті з’явився набір helpers, який визначає мову сторінки, працює з централізованими словниками, має fallback, не ламає шаблони, легко читається і розширюється. Це не бібліотека. Не продукт. І не офіційне рішення Publii. Це мій практичний підхід, який я використовую у власній темі.

⚠️ Use at your own risk.

Що буде далі?

У наступних частинах я поетапно покажу як я визначаю мову сторінки без плагінів, як працює простий helper перекладу, як локалізувати дати й plural, як привести до ладу HTML і меню мови, як це все використовується в реальних helpers.

У наступній частині я розповім — як визначити мову сторінки в Publii, використовуючи лише URL і slug.

З повагою та найкращими побажаннями — Юрій Чернієвський!

Коментарі:

Завантаження коментарів…

Поділитися цим:

Оновлено: 5 лютого 2026 року