Перевод Shopify-магазина

Что именно проверять и переводить в любом магазине на Shopify. Список ресурсов один и тот же всегда — меняется только набор языков. Порядок действий ниже, разделы раскрываются.

Всё переводится через Admin GraphQL API: translatableResources для чтения, translationsRegister для записи. Никаких приложений не нужно.

Порядок работы

  1. Узнать языки магазина. { shopLocales { locale primary published } }. Основной язык — источник, переводим на все остальные опубликованные.
  2. Определить тему. Переводы темы привязаны к конкретной теме через ?theme_id=. Узнайте, в какой теме работаете: в опубликованной или в рабочей копии. Переводы, записанные в одну тему, в другой не появятся.
  3. Пройти все 30 типов ресурсов из списка ниже. Для каждого — вычитать исходные строки, найти пропуски по каждому языку, дописать.
  4. Записывать с актуальным дайджестом. В translationsRegister обязателен translatableContentDigest — берите его из свежего ответа translatableContent. Со старым дайджестом Shopify ответит OK и не сохранит ничего.
  5. Проверить результат заново тем же запросом и прогнать проверки качества из последнего раздела.
Метки в списке. витрина покупатель видит напрямую · служебное влияет на SEO или письма · не переводить сломает ссылки · нельзя Shopify не даёт

Витрина: что видит покупатель

ТоварыНазвание, описание, SEO-заголовок и описание, тип товараPRODUCT

витрина Основной объём текста в магазине. Описание — это HTML, теги обязаны совпасть с оригиналом.

Ключи
title body_html meta_title meta_description product_type
Не трогать
handle — это адрес страницы. Перевод сменит URL и убьёт входящие ссылки и позиции в поиске.
Готово, когда
все ключи кроме handle заполнены на каждом языке
{ translatableResources(first: 50, resourceType: PRODUCT) {
    pageInfo { hasNextPage endCursor }
    nodes {
      resourceId
      translatableContent { key value digest }
      translations(locale: "de") { key value }
    } } }
КоллекцииНазвание, описание, SEOCOLLECTION

витрина Заголовки категорий и тексты над сеткой товаров. Названия коллекций часто дублируются в меню — там отдельный ресурс LINK, его тоже нужно перевести.

Ключи
title body_html meta_title meta_description
Не трогать
handle
Страницы магазинаО нас, контакты, доставка, FAQ и прочееPAGE

витрина Внимание: содержимое страницы может лежать не в теле страницы, а в шаблоне темы (templates/page.*.json). Если body_html пустой или короткий, а на сайте много текста — ищите его в ресурсе темы.

Ключи
title body_html meta_title meta_description
Не трогать
handle
МетаобъектыFAQ на карточках, ярлыки характеристик, кастомные блокиMETAOBJECT

витрина Сюда попадает всё, что магазин хранит структурированно: блоки «вопрос-ответ» на карточке товара, значки «Гипоаллергенно», «Многоразовое», подборки, состав. Часто самый большой блок после товаров и при этом самый забываемый.

Ключи зависят от определения метаобъекта — читайте их из ответа, не угадывайте. Одинаковые значения могут повторяться в разных записях: переведите один раз и размножьте, чтобы не расходились формулировки.

Alt-тексты картинок товаровОписания изображений в галерееMEDIA_IMAGE

служебное Покупатель их не видит, но они работают на поиск по картинкам Google и на скринридеры. Обычно самый большой по объёму блок и почти всегда забытый целиком.

Ключ
alt
Стиль
Переводите как обычный текст. Артикулы (W0146), названия коллекций и бренд оставляйте латиницей.
Alt-тексты картинок блога и коллекцийОбложки статей и категорийARTICLE_IMAGE · COLLECTION_IMAGE

служебное Тот же ключ alt, отдельные типы ресурсов. Часто содержат заголовок статьи целиком — переводите как заголовок, а не пословно.

Статьи блогаЗаголовок, текст, анонс, SEOARTICLE · BLOG

витрина Самый дорогой блок по объёму. Уточните у клиента, нужен ли блог на всех языках — часто его сознательно оставляют на одном.

Ключи
title body_html summary_html meta_title meta_description
Не трогать
handle
Опции товара и их значенияЦвет, Размер, ОбъёмPRODUCT_OPTION · PRODUCT_OPTION_VALUE

витрина Подписи над выбором варианта. Две ловушки:

«Title» и «Default Title» — служебная опция Shopify у товаров без вариантов. Тема её не выводит, переводить не нужно; она будет вечно висеть в отчёте как непереведённая.

Значения-размеры (5 ml, XL) обычно не переводятся, а вот ColorFarbe обязательно.

Навигация и каталог

Меню и пункты менюШапка, футер, боковое менюMENU · LINK

витрина MENU — название меню, LINK — подписи пунктов. Переводится только текст ссылки; адрес Shopify подставляет сам под язык.

Проверьте, что подписи совпадают с переводами коллекций и страниц, на которые они ведут — расхождения тут заметны сразу.

Фильтры каталогаНазвания фильтров и группFILTER

витрина Подписи в панели фильтров. Значения фильтров при этом приходят из тегов, метаполей или опций — их переводить надо в соответствующих ресурсах, а теги не переводятся вообще.

Оформление заказа, письма, юридическое

Способы доставкиНазвания тарифов в чекаутеDELIVERY_METHOD_DEFINITION

витрина «Стандартная доставка», «Экспресс», «Самовывоз» — то, что покупатель выбирает на шаге оплаты. Ресурсов бывает много: одно название × каждая зона доставки. Уникальных строк при этом обычно 10-25 — переводите уникальные и размножайте.

Письма и SMSПодтверждение заказа, отправка, брошенная корзинаEMAIL_TEMPLATE

служебное Обычно 50-70 шаблонов, у каждого тема письма и тело. Покупатель получает их на языке заказа, поэтому пропуск здесь виден клиенту напрямую.

Ключи
subject body (у части шаблонов только один)
Осторожно
Внутри Liquid-переменные {{ order.name }} — оставляйте как есть, не переводите и не меняйте пробелы внутри скобок.
Политики магазинаВозврат, доставка, конфиденциальность, офертаSHOP_POLICY

витрина Юридические тексты в футере. Здесь чаще всего встречается рассинхрон: на странице «Возврат» написано одно, в политике — другое. Сверьте сроки и условия с текстами на обычных страницах, прежде чем переводить.

Плейсхолдеры {{ phone }}, {{ address }}, {{ shop_name }} подставляются из настроек магазина. Их нельзя починить переводом — только в админке.

Строки магазина и накладнаяМета-заголовок сайта, вкладыш в посылкуSHOP · PACKING_SLIP_TEMPLATE

служебное SHOP — мета-заголовок и мета-описание главной. PACKING_SLIP_TEMPLATE — бумажка внутри посылки. Обе мелкие, обе забывают.

Планы подписки и платёжные шлюзыЕсли используютсяSELLING_PLAN · SELLING_PLAN_GROUP · PAYMENT_GATEWAY

служебное В большинстве магазинов пусты. Проверить надо всё равно — если магазин продаёт подписки, названия планов («Каждые 30 дней») покупатель видит на карточке товара.

Тема

Языковые файлы темыКнопки, подписи, системные строкиONLINE_STORE_THEME

витрина «В корзину», «Распродано», «Итого», «Продолжить покупки» — весь интерфейс. Самый заметный блок: пропуск виден на каждой странице.

Привязано к теме. Ресурс адресуется как gid://shopify/OnlineStoreTheme/<theme_id>. Переводы, записанные в тестовую тему, на опубликованном сайте не появятся.

Ключи shopify.* и customer_accounts.* — системные строки чекаута и личного кабинета, Shopify локализует их сам. Их тысячи, они будут вечно показываться как непереведённые. Исключайте из подсчёта.

Шаблоны и секции темыТексты, вбитые в конструктор страницONLINE_STORE_THEME_JSON_TEMPLATE · _SECTION_GROUP · _SETTINGS_DATA_SECTIONS · _SETTINGS_CATEGORY · _APP_EMBED · _LOCALE_CONTENT

витрина Заголовки главной, тексты баннеров, блоки «Почему мы», футер. Всё, что менеджер вбил руками в редакторе темы, живёт здесь, а не в страницах.

Мёртвые шаблоны. В теме обычно лежат заготовки page.about, page.faq, page.courses, password, не привязанные ни к одной странице. Прежде чем переводить — проверьте, что шаблон реально используется. Иначе можно перевести тысячу строк, которых никто не увидит.

Мусор в значениях. Сюда же попадают адреса картинок shopify://shop_images/..., ссылки, SVG-иконки, 1400px, 100%, даты. Это не текст — отфильтруйте, иначе покрытие никогда не дойдёт до 100%.

Что переводить не нужно

МетаполяТехнические значения и кеши приложенийMETAFIELD

не переводить Формально переводимы, фактически на 90% состоят из числовых id, JSON и кеша виджетов отзывов (Judge.me, Loox), который приложение пересоздаёт само.

Переводить стоит только те метаполя, что реально выводятся текстом на витрине — например «Способ применения» или «Состав». Найдите их по значению, а не по ключу: ключ у всех один и тот же (value).

Адреса страницhandle у товаров, коллекций, страниц, статейhandle

не переводить Shopify разрешает переводить handle, и апки это делают. Но смена адреса ломает входящие ссылки, рекламу и накопленные позиции в поиске.

Переводите handle, только если клиент явно просит локальные URL и готов настроить редиректы со старых адресов.

ТегиТоваров, статей, блогов

нельзя Shopify не даёт переводить теги в принципе. Если теги выводятся на витрине как фильтры или значки — единственный выход это перенести их в метаполя или метаобъекты.

Текст внутри картинокБаннеры, инфографика

нельзя Переводом не решается: нужен отдельный файл на каждый язык и подмена в теме. Зафиксируйте это как отдельную задачу дизайнеру и предупредите клиента.

За пределами API: что переводом не чинится

Настройки магазинаТелефон, адрес, название, валюта, единицыадминка

нельзя Мутации для настроек магазина в API нет. Всё, что подставляется из Settings → General, правится только руками.

Проверьте до начала работы, иначе будете переводить текст, который всё равно перебьётся: телефон (формат подставляется автоматически и может разойтись с тем, что написано в текстах), юридический адрес, название компании, валюта и единицы измерения.

Отдельно: формат даты и чисел. Разделитель разрядов и порядок дня-месяца Shopify берёт из локали, а если в тексте вручную написано 09/07/2026 — оно останется американским на всех языках.

Markets, домены и hreflangКак язык попадает в поискMarkets

служебное Перевод без корректной настройки рынков не даёт трафика: Google не понимает, какая версия для какой страны.

Структура URL
Подпапки /de/ — по умолчанию и обычно правильный выбор. Поддомены и отдельные домены дороже в поддержке.
hreflang
Shopify генерирует сам, если рынки настроены. Проверьте, что теги есть в исходном коде страницы.
Коды языков
Частая ошибка — en-uk вместо правильного en-gb. Регион пишется по ISO 3166, не «как привычно».
Самоссылка
Страница обязана ссылаться hreflang сама на себя. Отсутствие самоссылки — самая массовая ошибка в вебе.
Ответ 200
Все альтернативные URL должны отдавать 200, не редирект и не 404.
Карта сайта
После публикации языка проверьте, что он попал в sitemap.xml.

Мета-заголовки — прямой фактор ранжирования. Немец, который ищет по-немецки, должен увидеть немецкий заголовок в выдаче, иначе не кликнет. Не оставляйте meta_title на английском «потому что и так понятно».

Сторонние приложенияОтзывы, апсейлы, попапы, программы лояльностивне API

не переводить через Shopify. Тексты приложений в translatableResources не попадают — переводятся внутри самого приложения, если оно это умеет.

Составьте список установленных приложений, которые что-то выводят покупателю, и пройдите каждое отдельно: виджет отзывов, всплывающие окна, блок «с этим покупают», трекинг доставки, кабинет лояльности.

Если приложение мультиязычность не поддерживает — это вопрос к его разработчику, и клиента лучше предупредить заранее.

Языки справа налевоАрабский, иврит, фарсиRTL

витрина Перевод — половина работы. Большинство тем заявляют поддержку RTL, но зеркалят только текст: меню, отступы, стрелки каруселей и корзина остаются слева направо.

Что проверить вживую: направление меню и хлебных крошек, положение иконки корзины, стрелки слайдеров, выравнивание цен и кнопок, порядок полей в чекауте, формат адреса и телефона.

Типографика. Арабский на весе 400 выглядит тонким и плохо читается с телефона — обычно нужен 500-600. Это правка темы, а не перевода.

Кастомные секции и блоки сторонних приложений ломают RTL чаще всего — их проверяйте отдельно.

Ловушки, из-за которых работа теряется

Дайджест устарел — Shopify молча ничего не сохранит

translationsRegister вернёт userErrors: [], как будто всё хорошо, но перевода не будет. Так теряются целые блоки.

Берите digest из того же ответа, что и value, и записывайте сразу. Если исходный текст правили между чтением и записью — перечитайте.

Набор HTML-тегов должен совпадать с оригиналом

Если в исходнике <p><strong>, а в переводе тегов нет или они другие — вёрстка поедет. Перед записью сравнивайте отсортированный список тегов оригинала и перевода, и не записывайте при расхождении.

Английский, записанный как «перевод»

Частый след прошлых подрядчиков и авто-переводчиков: перевод формально есть, отчёт показывает 100%, а лежит там исходный английский текст байт в байт.

Проверяйте: если перевод посимвольно равен оригиналу — считайте, что перевода нет. Для языков на латинице дополнительно ищите характерные английские фразы.

Переводы темы записаны не в ту тему

Тема адресуется через ?theme_id=. Можно честно перевести всю тему и не увидеть на сайте ни строчки, потому что работали в копии, а опубликована другая.

Сверяйте покрытие в опубликованной теме отдельно от рабочей. При публикации новой темы переводы темы не переезжают автоматически.

Пустые и служебные значения портят статистику

Ссылки, shopify://, SVG, числа, 1400px, e-mail, Liquid {{ }}, JSON — формально «непереведённые строки». Отфильтруйте их сразу, иначе не отличите реальный пропуск от шума и не поймёте, когда работа закончена.

Дубли расходятся между собой

Один и тот же вопрос FAQ или название тарифа доставки встречается в нескольких записях. Если переводить каждую отдельно, формулировки разъедутся.

Соберите уникальные значения, переведите один раз, разложите по всем записям.

Машинный перевод выдаёт несуществующие слова

Особенно на финском, венгерском, греческом. Термин из бьюти-сферы превращается в набор букв, и заметить это может только носитель.

Сверяйте ключевые термины по товарной группе и держите единый глоссарий на весь магазин.

Чужой алфавит внутри перевода

Кириллица в финском, иероглиф в русском, латиница посреди греческого — типичный след склейки из нескольких источников.

Прогоняйте финальную проверку регуляркой по диапазонам символов: для каждого языка допустим свой алфавит плюс латиница для брендов, всё остальное — к разбору.

Финальная проверка

  1. Покрытие по каждому типу и каждому языку. Перечитайте все 30 типов заново, уже после записи. Ожидаемый остаток — только handle, служебные Default Title, shopify.* и отфильтрованный мусор.
  2. Скан на чужие алфавиты по всем языкам разом.
  3. Скан на «перевод = оригинал» — ищем формально закрытые, но не переведённые строки.
  4. Живая витрина. Откройте по одной странице каждого типа на 2-3 языках: главная, карточка товара, коллекция, корзина, страница возврата. Строки темы и метаобъектов проверяются только так — через API они выглядят готовыми.
  5. Сверка фактов. Телефон, e-mail, адрес, сроки возврата и доставки должны совпадать во всех блоках и на всех языках. Расхождения тут дороже любой опечатки.
  6. Поисковая часть. hreflang на месте и со самоссылкой, языки в sitemap.xml, мета-заголовки переведены, переключатель языков работает на всех типах страниц.
  7. Полный путь покупателя на одном неосновном языке. Каталог → карточка → корзина → чекаут → письмо о заказе. Именно так находятся пропуски в теме, чекауте и письмах, которых не видно в API.