Как осуществить мультиязыковую миграцию с Shopify на WordPress

Вы потратили месяцы на создание многоязычного магазина Shopify. Описания ваших продуктов переведены на французский, немецкий и испанский языки. Процесс оформления заказа работает на трех языках. Затем вы решаете перейти на WordPress и WooCommerce для большего контроля, увеличения прибыли или гибкости плагинов.
Данные о продуктах переносятся нормально. Изображения переносятся. Но ваши переводы? Они исчезают.
Это скрытая цена многоязыковой миграции WordPress, о которой никто не предупреждает. Shopify блокирует ваши переводы в своей собственной проприетарной системе, а WordPress использует совершенно другую архитектуру. Без четкого плана вы потратите недели на восстановление того, что у вас уже было. Это руководство предоставит вам этот план.
Почему многоязыковые миграции ломаются (и Shopify усугубляет ситуацию)
Миграция платформ достаточно болезненна и для одноязычных магазинов. Добавьте несколько языков, и сложность возрастет многократно. Основная причина заключается в архитектуре: Shopify и WordPress обрабатывают переводы принципиально разными способами.
Модель перевода Shopify - это огороженный сад
Shopify хранит переводы как метаданные, прикрепленные к ресурсам через Translate and Adapt API. Каждый продукт, коллекция и страница имеет записи перевода, привязанные к внутренним идентификаторам ресурсов Shopify.
Когда вы экспортируете свой магазин с помощью инструмента миграции, такого как Cart2Cart, LitExtension или экспорта CSV, вы получаете контент на языке по умолчанию. А переводы? Они живут в отдельном слое, который большинство инструментов миграции полностью игнорируют.
Что на самом деле экспортируется (и что теряется)
Вот что типичный инструмент миграции Shopify-to-WordPress переносит:
| Тип контента | Переносится? | Переносятся ли переводы? |
|---|---|---|
| Названия и описания продуктов | Да | Нет |
| Названия коллекций/категорий | Да | Нет |
| Записи в блоге | Да | Нет |
| Страницы (О нас, Контакты) | Да | Нет |
| Строки темы (кнопки, метки) | Нет | Нет |
| Строки оформления заказа/электронной почты | Нет | Нет |
| Меню навигации | Частично | Нет |
Картина ясна. Контент на языке по умолчанию переносится. Ваши переводы - нет. И даже если вы извлечете их вручную, вы не сможете просто вставить переводы Shopify в WordPress. Системы говорят на разных языках, в прямом смысле этого слова.
Сопоставление языков Shopify с файлами перевода WordPress
Прежде чем начать восстановление, вам необходимо понять, как WordPress обрабатывает многоязычный контент. Именно здесь большинство руководств по миграции терпят неудачу.
Понимание системы Gettext
WordPress использует систему локализации Gettext. Вместо хранения переводов в слое базы данных, он считывает их из статических бинарных файлов (.mo files), скомпилированных из удобочитаемых .po files.
Файл .po выглядит следующим образом:
msgid "Add to Cart"
msgstr "Ajouter au panier"
msgid "Search results for %s"
msgstr "Résultats de recherche pour %s"
Каждая тема и плагин WordPress поставляется с файлом шаблона .pot, содержащим все переводимые строки. Вы создаете файл .po для каждого языка, заполняете переводы, компилируете его в .mo и помещаете в нужный каталог.
Именно в эту систему должны быть сопоставлены ваши переводы Shopify.
Проблема несоответствия языковых кодов
Shopify использует теги языков IETF (en, fr, de). WordPress использует коды локали с вариантами регионов (fr_FR, de_DE, es_ES). Во время миграции вам необходимо сопоставить каждый язык Shopify с правильной локалью WordPress. Ошибка в этом означает, что WordPress не сможет найти ваши файлы перевода.
Распространенные сопоставления, которые сбивают людей с толку:
- Shopify
ptсоответствует WordPresspt_PT(Португалия) илиpt_BR(Бразилия) - не взаимозаменяемы - Shopify
zh-CNсоответствует WordPresszh_CN, но Shopifyzh-TWсоответствуетzh_TW - Shopify
nb(Норвежский Bokmal) соответствует WordPressnb_NO
Назовите свои файлы .po и .mo с кодом локали WordPress: themename-fr_FR.po, woocommerce-de_DE.mo. Неправильный код означает, что WordPress будет молча игнорировать файл.
Пошаговый процесс многоязыковой миграции WordPress
Вот конкретный рабочий процесс для сохранения ваших переводов во время миграции с Shopify на WordPress.
Шаг 1: Экспорт и аудит ваших переводов Shopify
Прежде чем прикасаться к WordPress, извлеките все из Shopify. Используйте Shopify Admin API или такой инструмент, как Shopify Translate CSV Export, чтобы перенести свои переводы в структурированные файлы.
# Using Shopify CLI to export translations
shopify app translate export --locale fr
shopify app translate export --locale de
shopify app translate export --locale es
Проведите аудит экспортированных файлов. Подсчитайте, сколько строк у вас на каждом языке. Определите, какие из них являются переводами контента продукта (обрабатываются вашей CMS или многоязычным плагином на WordPress), а какие - переводами строк темы/UI (обрабатываются файлами .po).
Шаг 2: Настройка языковой структуры WordPress и WooCommerce
На свежей установке WordPress настройте свою языковую инфраструктуру до импорта какого-либо контента.
- Перейдите в Settings > General и установите язык сайта
- Установите языковые пакеты для каждого целевого языка через Settings > General > Site Language
- Создайте структуру каталогов перевода:
/wp-content/languages/
/wp-content/languages/plugins/
/wp-content/languages/themes/
Для переводов контента продукта (заголовки, описания) вам понадобится многоязычный плагин контента, такой как WPML или Polylang. Но для строк темы и плагина UI - кнопки, метки, сообщения об ошибках и процесс оформления заказа - вам нужны статические файлы .po/.mo. Это облачный подход, который позволяет избежать раздувания плагинов.
Шаг 3: Преобразование ваших переводов в формат PO
Переводы строк вашей темы Shopify необходимо преобразовать в формат Gettext .po. Именно здесь миграция становится технической.
Если ваши переводы Shopify находятся в формате JSON или CSV, вы можете преобразовать их в .po с помощью скрипта или инструмента. Ключ в сопоставлении каждой исходной строки с парой msgid/msgstr:
import csv
with open('shopify_translations_fr.csv', 'r') as infile, \
open('theme-fr_FR.po', 'w') as outfile:
outfile.write('msgid ""\nmsgstr ""\n')
outfile.write('"Language: fr_FR\\n"\n\n')
reader = csv.DictReader(infile)
for row in reader:
outfile.write(f'msgid "{row["key"]}"\n')
outfile.write(f'msgstr "{row["translation"]}"\n\n')
Это дает вам отправную точку, но в вашей новой теме WordPress и установке WooCommerce будут сотни строк, которых не было в Shopify. Вы не можете повторно использовать перевод Shopify "Add to Cart" для WooCommerce, потому что окружающий контекст кода отличается. Строка WooCommerce может быть Add to cart (в нижнем регистре "c") или включать переменную %s для названия продукта.
Именно здесь большинство людей застревают. У вас есть частичные переводы из Shopify и огромный пробел непереведенных строк, специфичных для WordPress.
Как перевести пробелы, не начиная с нуля
Хорошая новость: вам не нужно переводить 5000 строк WooCommerce вручную. Плохая новость: вы не можете их пропустить, иначе в вашем магазине будет отображаться резкая смесь французских заголовков и английских сообщений об ошибках.
Строки темы и плагинов все еще нуждаются в переводе
У вашей темы WordPress есть свой файл .pot. У WooCommerce есть свой. У каждого установленного вами плагина - платежные шлюзы, калькуляторы доставки, конструкторы форм - есть переводимые строки. Их не было в вашем магазине Shopify.
Самый быстрый подход - переводить эти большие файлы .po пакетно, а не строка за строкой. Загрузите файл .pot вашей темы, выберите целевой язык и позвольте AI выполнить тяжелую работу.
Пакетный перевод больших файлов WooCommerce
Языковой файл WooCommerce огромен. С тысячами строк, охватывающих все, от сообщений корзины до кодов ошибок налога, это самая большая задача перевода в любой миграции. SimplePoTranslate обрабатывает это с помощью Smart Batching - разделения больших файлов на безопасные фрагменты, параллельной обработки и объединения результатов обратно в один чистый файл.
Критически важная деталь: ваши переведенные файлы должны сохранять каждую кодовую переменную точно в том виде, в каком она отображается в источнике. Заполнитель %s в шаблоне электронной почты WooCommerce не может иметь добавленное пространство или измененную позицию во время перевода. Именно здесь блокировка синтаксиса предотвращает попадание сломанных переменных в ваш рабочий магазин.
С помощью Multi-Format Output SimplePoTranslate вы получаете файлы .po, .mo, .json, .php и .xliff в одном ZIP-архиве. Это особенно полезно во время миграции, потому что разные части вашего стека WordPress могут потреблять переводы в разных форматах. Ваша тема читает файлы .mo. Безголовый интерфейс может нуждаться в .json. Пользовательская интеграция может ожидать .xliff. Один запуск перевода охватывает все из них.
Избегание трех самых распространенных сбоев перевода при миграции
Даже при правильном рабочем процессе существуют подводные камни, специфичные для миграции платформы, которые застают опытных разработчиков врасплох.
Сломанные переменные в транзакционных электронных письмах
Транзакционные электронные письма WooCommerce насыщены заполнителями: {order_number}, {customer_name}, %1$s, %2$s. Если ваш процесс перевода повреждает хотя бы один из них, клиенты получают электронные письма, такие как "Hello {customer_name}" буквально, или, что еще хуже, электронные письма с перепутанными данными.
Всегда проверяйте свои переведенные файлы на соответствие исходному .pot перед развертыванием. Такие инструменты, как Poedit, будут отмечать несоответствия заполнителей, а облачные переводчики с блокировкой синтаксиса полностью исключают этот класс ошибок.
Отсутствующие правила множественного числа
Shopify просто обрабатывает множественное число. WordPress Gettext поддерживает сложные формы множественного числа, которые варьируются в зависимости от языка. В русском языке три формы множественного числа. В арабском - шесть. Если ваш переведенный файл .po не содержит правильный заголовок Plural-Forms и соответствующие записи msgstr[0], msgstr[1], msgstr[2], WordPress возвращается к непереведенной строке.
# Correct Russian plural forms header
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : "
"n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
msgid "%s item"
msgid_plural "%s items"
msgstr[0] "%s товар"
msgstr[1] "%s товара"
msgstr[2] "%s товаров"
Это то, о чем Shopify никогда не требовал от вас думать. В WordPress это имеет значение.
Осиротевшие строки после замены плагинов
Когда вы переходите с Shopify, вы не просто меняете платформы. Вы заменяете целую экосистему плагинов. Ваш платежный шлюз Shopify становится WooCommerce Payments или Stripe for WooCommerce. Ваша система отзывов становится плагином WordPress. Каждая замена вводит новые переводимые строки и делает старые переводы устаревшими.
Составьте контрольный список каждого плагина, который вы устанавливаете после миграции, и убедитесь, что у каждого из них есть соответствующий переведенный файл .mo в /wp-content/languages/plugins/. Отсутствие даже одного плагина означает, что ваши клиенты видят английские строки посреди в остальном переведенного интерфейса.
Запустите свой многоязычный магазин на WordPress
Многоязыковая миграция WordPress - это не просто перенос данных. Это ре-архитектура того, как ваш магазин общается с международными клиентами. Магазины, которые правильно это делают, видят более высокие коэффициенты конверсии на неанглийских рынках, потому что опыт кажется родным, а не собранным воедино.
Рабочий процесс прост: экспортируйте свои переводы Shopify, сопоставьте их с кодами локали WordPress, преобразуйте в формат .po, заполните пробелы с помощью пакетного перевода AI, проверьте свои переменные и разверните статические файлы .mo. Никакого раздувания базы данных. Никаких накладных расходов на перевод во время выполнения. Просто быстрая, надежная, многоязычная коммерция.
Если вы столкнулись с миграцией с тысячами непереведенных строк WooCommerce, подход SimplePoTranslate к локализации больших файлов может сэкономить вам недели ручной работы.
Готовы перевести свой магазин WooCommerce после миграции? Попробуйте SimplePoTranslate бесплатно - кредитная карта не требуется. Загрузите свой файл .pot и получите готовые к производству переводы за считанные минуты.