Мультимовність у 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.
✶ ❖ ✿ ❖ ✴ ☙ ♥ ❧ ✴ ☙ ♥ ❧ ✴ ❖ ✿ ❖ ✶
З повагою та найкращими побажаннями — Юрій Чернієвський!
✶ ❖ ✿ ❖ ✴ ☙ ♥ ❧ ✴ ☙ ♥ ❧ ✴ ❖ ✿ ❖ ✶
Коментарі:
Завантаження коментарів…