Документація

Тексти теми та мови

Де лежать написи теми, як зробити їх перекладними і як написати текст із відмінюванням за числом.

На цій сторінці

Написи теми — «До кошика», «Немає в наявності», «Показати ще» — не пишуться прямо в розмітці. Вони лежать у файлах теми, по одному на мову, і виводяться тегом {trans}.

themes/ваша-тема/locale/
    ru.json
    uk.json
    en.json
{trans key="storefront.cart"}

Як влаштований файл

Звичайний список «ключ — напис», без вкладеності:

{
    "//": "Написи теми. Ключі, що починаються з //, вважаються коментарями.",

    "storefront.cart": "Кошик",
    "storefront.buy": "Купити",
    "storefront.in_cart": "У кошику:",
    "storefront.no_products": "Товарів не знайдено",
    "storefront.search_placeholder": "Пошук товарів"
}

Список плоский. Вкладені об'єкти не підтримуються — ключ виду storefront.cart це просто рядок з крапками, а не шлях.

Ключі, що починаються з //, вважаються коментарями і в написи не потрапляють — зручно, щоб пояснити сусідові по коду, що за розділ нижче.

Де магазин шукає напис

  1. у файлі вашої теми для поточної мови;
  2. якщо ключа там немає — у написах самого магазину;
  3. не знайшлося ніде — виводиться сам ключ.

Третій випадок не роняє сторінку, але у верстці висітиме storefront.cart. Тому перед викладенням кожну мову потрібно пройти очима — на сторінці Перевірка перед випуском це окремий пункт.

Файлу для мови немає зовсім — тема просто візьме написи магазину. Тож тему можна випустити з однією мовою і додати решту пізніше.

Підстановки

Усе, що передано тегу крім key, підставляється в рядок:

{ "storefront.hello": "Вітаємо, :name!" }
{trans key="storefront.hello" name=$customer.first_name}

Числа і відмінювання

Параметр count вмикає вибір форми за числом. Форми розділяються у файлі знаком |, за потреби з діапазонами:

{
    "storefront.products_count": "{0} немає товарів|[1,1] :count товар|[2,4] :count товари|[5,*] :count товарів",
    "storefront.reviews_count": "{0} відгуків поки немає|[1,1] :count відгук|[2,4] :count відгуки|[5,*] :count відгуків"
}
{trans key="storefront.products_count" count=$total}
Запис Коли спрацьовує
{0} рівно нуль
[1,1] рівно один
[2,4] від двох до чотирьох
[5,*] п'ять і більше

:count усередині рядка замінюється самим числом.

Правила для російської, української та англійської вже є — свого алгоритму писати не треба. Для англійської двох форм достатньо:

{ "storefront.products_count": "{0} No products|[1,1] :count product|[2,*] :count products" }

Перевіряти відмінювання потрібно саме числами, а не на око: 1 товар, 2 товари, 5 товарів, 21 товар, 22 товари. Останні два — найчастіша помилка.

Написи, які їдуть у браузер

Частину написів магазин підставляє вже в браузері: підказки живого пошуку, повідомлення оформлення. Їх передає тема — атрибутами, а не через файл перекладів магазину:

<form data-live-search
      data-text-empty="{trans key='storefront.no_products'}"
      data-text-categories="{trans key='storefront.categories'}"
      …>

Так зроблено навмисно: написи належать темі, і підказки пошуку говорять її мовою. Повний список таких атрибутів — на сторінці Атрибути data-*.

⚠️ Не передали напис — на його місці буде порожнеча. Помилка тиха: сторінка працює, просто у випадному списку порожній рядок.

Мови вітрини

Які мови ввімкнені, вирішує власник магазину. Тема має працювати за будь-якого набору:

{foreach $shop->locales() as $l}
    <a href="{$l.url}"{if $l.active} class="is-active"{/if}>{$l.short}</a>
{/foreach}

З коробки магазин знає російську, українську та англійську. Мова, якої немає в списку магазину, отримає своєю назвою власний код великими літерами.

Що перекладається, а що ні

Перекладається вміст: назви товарів і категорій, описи, SEO-поля, інформаційні сторінки. Це робить власник у панелі, теми це не стосується.

Не перекладається адреса. Адреса (slug) товару і категорії одна на всі мови — змінюється лише мовний префікс. Подробиці — на сторінці Адреси розділів і мови.

Довжина напису — частина верстки

Одна й та сама кнопка трьома мовами займає різну ширину: українські та німецькі підписи помітно довші за російські, англійські коротші. Кнопка фіксованої ширини, зібрана на російському тексті, українською порветься.

Перевіряти це потрібно перемиканням мови на живій вітрині, а не прикидкою — окремий пункт у перевірці перед випуском.

Написи доповнень — не ваш клопіт

Доповнення везе свої написи в собі. Якщо воно виводить щось на вітрині, його шаблон приїжджає у вашу тему разом з перекладами — вам залишається оформити блок, а не перекладати його.

Оновлено 24 серпня 2026