Розробникам · Теми
Переклади в темі
Як тема говорить мовою сторінки: фільтр t, спільний словник дев’ятьма мовами, власні слова теми, тексти налаштувань і контакти магазину.
Тема не пише слів відвідувача в розмітці — лише ключі через фільтр t: {{ 'ui.cart_empty' | t }}. Тоді сторінка говорить мовою, яку обрав покупець, а загальні слова (кошик, «Головна», наявність, пошук) вже перекладено дев’ятьма мовами інтерфейсу: uk, en, ru, de, es, fr, it, pl, pt.
Де шукається слово
| Крок | Звідки | Приклад для сторінки німецькою |
|---|---|---|
| 1 | locales/<мова сторінки>.json теми | locales/de.json |
| 2 | Спільний словник lang/<мова сторінки>/theme.php | lang/de/theme.php |
| 3 | Запасні мови теми: англійська, потім українська; для російської — українська | locales/en.json, далі locales/uk.json |
| 4 | Спільний словник запасною мовою платформи (англійською) | lang/en/theme.php |
| 5 | Нічого не знайдено | виводиться сам ключ |
Тож тема описує лише своє. Ключ, якого немає ніде, видно на сторінці як є (sec.picks_title) — так помилку легко помітити в превʼю.
Текст за замовчуванням у схемі секції — порожній або ключ слова: "default": "t:sec.buy". Ключ перекладається мовою сторінки так само, як фільтр t. Звичайних слів у default і presets не буває: секцію, яку власник додав і не заповнив, покупці побачать будь-якою мовою. Заготовки на кшталт «Текст відгуку покупця» — ключі ph.* спільного словника.
Групи ключів
| Ключі | Де | Що |
|---|---|---|
| ui.* | спільний словник | Слова інтерфейсу: кошик, «Головна», наявність, знижка, пошук, 404, крихти, підказки редактора («Виберіть товар у правій панелі»), ui.products_one / _few / _many. |
| set.* | спільний словник | Тексти глобальних налаштувань, коли поле порожнє: оформлення, «Дякуємо», кабінет, вхід, 404. |
| tpl.cart_title, tpl.cart_upsell_title, tpl.search_title | спільний словник | Налаштування спільних сторінок. |
| sec.<секція>_<поле> | тема | Тексти своїх секцій за замовчуванням: sec.header_hours. |
| tpl.<сторінка>_<поле> | тема | Тексти своїх сторінок за замовчуванням: tpl.product_tab_specs. |
locales — вкладений JSON: ключ ui.cart_empty — це {"ui": {"cart_empty": "…"}}. Мови — лише з переліку вітрини, значення — лише рядки, файл до 256 КБ. Пишіть щонайменше uk і en.
Перебити спільне слово
Тема перебиває слово спільного словника, назвавши той самий ключ у своїх locales, — і лише тими мовами, якими назвала. Nexa каже «Кошик порожній — саме час обрати ґаджет» замість спільного «Кошик поки порожній.» українською й англійською; німецькою сторінка бере спільне німецьке слово, а не англійське слово теми, бо крок 2 іде раніше за крок 3.
// resources/themes/nexa/locales/uk.json (уривок)
{
"ui": {"cart_empty": "Кошик порожній — саме час обрати ґаджет.", "to_catalog": "До техніки"},
"sec": {"header_hours": "Щодня 9:00–21:00"}
}Тексти, які змінює власник
Текст, який власник може змінити, — налаштування з порожнім default і підставою з перекладу. Порожнє поле говорить мовою сторінки, а вписаний власником текст перемагає:
{%- assign s_hours = section.settings.hours | default: 'sec.header_hours' | t -%}
{% if s_hours != blank %}<span>{{ s_hours }}</span>{% endif %}
{% schema %}
{"name": "Шапка", "enabled_on": {"groups": ["header"]},
"settings": [{"id": "hours", "type": "text", "label": "Графік (порожньо — текст теми)", "default": ""}]}
{% endschema %}- Не пишіть текст у схеми: він однаковий для всіх мов і перекриє переклад.
- Налаштування і секцій і шаблонів сторінок мають поле на кожну мову магазину. уже містить текст мовою сторінки; немає його — основною мовою; немає й там — , і підстава спрацьовує далі.
- Глобальні налаштування теми () поки одномовні: порожнє поле бере текст теми мовою сторінки.
- У налаштуваннях шаблону — те саме з : .
Контакти й числа
Телефон, пошта, адреса й графік магазину — з «Налаштувань», а не з тексту теми: shop.phone, shop.email, shop.address.summary, shop.working_hours. Секція може дати власнику своє поле й упасти на них, коли воно порожнє:
{%- assign phone = section.settings.phone | default: shop.phone -%}
{% if phone != blank %}<a href="tel:{{ phone | remove: ' ' }}">{{ phone }}</a>{% endif %}Число з відмінком — сніпет products-count набору сторінок: {% render 'products-count', count: collection.products_count %} → «1 товар / 3 товари / 5 товарів». Правила української, російської й польської; для інших мов — «1 product / 5 products». Слова беруться з ui.products_one, ui.products_few і ui.products_many, тож тема може перебити й їх.
Підстановок у t немає: слово з місцем для значення (ui.rating_of — «Оцінка %rating з 5») заповнюйте фільтром replace: {{ 'ui.rating_of' | t | replace: '%rating', rating }}.
Жодного слова в розмітці
Правило для тем каталогу й офіційних тем: у Liquid поза {% comment %} і {% schema %} немає тексту для відвідувача — ні в розмітці, ні в рядках у лапках. Кожен ключ, який тема просить у t, має текст українською й англійською — у locales теми або в спільному словнику. Підписи налаштувань у схемі (label) — для власника в редакторі, вони лишаються в схемі.
{# Ні #}
<button>Додати в кошик</button>
{% assign title = section.settings.title | default: 'Новинки' %}
{# Так #}
<p>{{ 'ui.sold_out' | t }}</p>
{% assign title = section.settings.title | default: 'sec.new_title' | t %}