Тексти теми та мови
Де лежать написи теми, як зробити їх перекладними і як написати текст із відмінюванням за числом.
На цій сторінці
Написи теми — «До кошика», «Немає в наявності», «Показати ще» — не пишуться прямо
в розмітці. Вони лежать у файлах теми, по одному на мову, і виводяться тегом
{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 це просто рядок з крапками, а не шлях.
Ключі, що починаються з //, вважаються коментарями і в написи не потрапляють —
зручно, щоб пояснити сусідові по коду, що за розділ нижче.
Де магазин шукає напис
- у файлі вашої теми для поточної мови;
- якщо ключа там немає — у написах самого магазину;
- не знайшлося ніде — виводиться сам ключ.
Третій випадок не роняє сторінку, але у верстці висітиме 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) товару і категорії одна на всі мови — змінюється лише мовний префікс. Подробиці — на сторінці Адреси розділів і мови.
Довжина напису — частина верстки
Одна й та сама кнопка трьома мовами займає різну ширину: українські та німецькі підписи помітно довші за російські, англійські коротші. Кнопка фіксованої ширини, зібрана на російському тексті, українською порветься.
Перевіряти це потрібно перемиканням мови на живій вітрині, а не прикидкою — окремий пункт у перевірці перед випуском.
Написи доповнень — не ваш клопіт
Доповнення везе свої написи в собі. Якщо воно виводить щось на вітрині, його шаблон приїжджає у вашу тему разом з перекладами — вам залишається оформити блок, а не перекладати його.