如何构建一个多语言 Shopify 到 WordPress 的迁移

您花费了数月时间构建一个多语言 Shopify 商店。您的产品描述已翻译成法语、德语和西班牙语。您的结账流程支持三种语言。然后,您决定迁移到 WordPress 和 WooCommerce,以获得更多控制权、更高的利润或插件灵活性。
产品数据传输良好。图像也成功导入。但是您的翻译呢?它们消失了。
这是多语言 WordPress 迁移的隐藏成本,没有人警告您。Shopify 将您的翻译锁定在其专有的系统中,而 WordPress 使用完全不同的架构。如果没有明确的计划,您将花费数周时间来重建已经拥有的内容。本指南为您提供该计划。
为什么多语言迁移会失败(以及 Shopify 如何使情况更糟)
即使是单语商店,平台迁移也已经很痛苦了。添加多种语言,复杂性就会成倍增加。根本原因是架构:Shopify 和 WordPress 处理翻译的方式截然不同。
Shopify 的翻译模型是一个封闭的花园
Shopify 通过 Translate and Adapt API 将翻译存储为附加到资源的元数据。每个产品、集合和页面都有与 Shopify 内部资源 ID 绑定的翻译条目。
当您使用 Cart2Cart、LitExtension 或 CSV 导出等迁移工具导出商店时,您会获得默认语言内容。翻译呢?它们存在于一个单独的层中,大多数迁移工具完全忽略了该层。
实际导出了什么(以及丢失了什么)
以下是典型的 Shopify 到 WordPress 迁移工具传输的内容:
| 内容类型 | 是否传输? | 是否传输翻译? |
|---|---|---|
| 产品标题和描述 | 是 | 否 |
| 集合/类别名称 | 是 | 否 |
| 博客文章 | 是 | 否 |
| 页面(关于、联系方式) | 是 | 否 |
| 主题字符串(按钮、标签) | 否 | 否 |
| 结账/电子邮件字符串 | 否 | 否 |
| 导航菜单 | 部分 | 否 |
模式很明显。您的默认语言内容会迁移。您的翻译不会。即使您手动提取它们,您也无法直接将 Shopify 翻译粘贴到 WordPress 中。这些系统说着不同的语言,字面意义上也是如此。
将 Shopify 语言映射到 WordPress 翻译文件
在您开始重建之前,您需要了解 WordPress 如何处理多语言内容。这是大多数迁移指南的不足之处。
了解 Gettext 系统
WordPress 使用 Gettext 本地化系统。它不是将翻译存储在数据库层中,而是从静态二进制文件(.mo 文件)读取,这些文件是从人类可读的 .po 文件编译而来的。
一个 .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(挪威博克马尔语)映射到 WordPressnb_NO
使用 WordPress 语言环境代码命名您的 .po 和 .mo 文件: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
审核导出文件。计算每种语言有多少个字符串。确定哪些是产品内容翻译(由 WordPress 上的 CMS 或多语言插件处理),哪些是主题/UI 字符串翻译(由 .po 文件处理)。
第 2 步:设置您的 WordPress 和 WooCommerce 语言结构
在您全新的 WordPress 安装上,在导入任何内容之前配置您的语言基础设施。
- 转到设置 > 常规并设置您的站点语言
- 通过设置 > 常规 > 站点语言为每种目标语言安装语言包
- 创建翻译目录结构:
/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 的“添加到购物车”翻译重复用于 WooCommerce,因为周围的代码上下文不同。WooCommerce 字符串可能是 Add to cart(小写“c”)或包含产品名称的 %s 变量。
这是大多数人陷入困境的地方。您拥有来自 Shopify 的部分翻译,并且存在大量未翻译的 WordPress 特定字符串。
如何在不重新开始的情况下弥补差距
好消息:您无需手动翻译 5,000 个 WooCommerce 字符串。坏消息:您也不能跳过它们,否则您的商店将显示法语标题和英语错误消息的刺耳混合。
主题和插件字符串仍需要翻译
您的 WordPress 主题有自己的 .pot 文件。WooCommerce 有自己的文件。您安装的每个插件——支付网关、运费计算器、表单构建器——每个都有可翻译的字符串。这些在您的 Shopify 商店中不存在。
最快的方法是批量翻译这些大型 .po 文件,而不是逐个字符串翻译。上传您主题的 .pot 文件,选择目标语言,并让 AI 处理繁重的工作。
批量翻译大型 WooCommerce 文件
WooCommerce 的语言文件非常庞大。包含从购物车消息到税务错误代码的所有内容的数千个字符串,它是任何迁移中最大的翻译任务。SimplePoTranslate 通过 Smart Batching 处理此问题——将超大文件拆分为安全块,并行处理它们,并将结果合并回单个干净的文件中。
关键细节:您翻译的文件必须完全按照其在源文件中显示的方式保留每个代码变量。WooCommerce 电子邮件模板中的 %s 占位符在翻译过程中不能添加空格或交换位置。这是语法锁定防止损坏的变量到达您的生产商店的地方。
使用 SimplePoTranslate 的 Multi-Format Output,您可以在单个 ZIP 下载中获得 .po、.mo、.json、.php 和 .xliff 文件。这在迁移期间特别有用,因为您的 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 插件。每次交换都会引入新的可翻译字符串并使旧翻译过时。
构建一个在迁移后安装的每个插件的清单,并验证每个插件在 /wp-content/languages/plugins/ 中是否都有相应的翻译 .mo 文件。即使缺少一个插件,也意味着您的客户会在其他翻译界面中看到英语字符串。
在 WordPress 上启动您的多语言商店
多语言 WordPress 迁移不仅仅是数据传输。它是商店与国际客户沟通方式的重新架构。正确处理此问题的商店在非英语市场中看到了更高的转化率,因为体验感觉是原生的,而不是拼凑起来的。
工作流程很简单:导出您的 Shopify 翻译,将其映射到 WordPress 语言环境代码,转换为 .po 格式,使用批量 AI 翻译填补空白,验证您的变量,并部署静态 .mo 文件。没有数据库膨胀。没有运行时翻译开销。只有快速、可靠的多语言商务。
如果您面临着数千个未翻译的 WooCommerce 字符串的迁移,SimplePoTranslate 的大型文件本地化方法 可以为您节省数周的手动工作。
准备好在迁移后翻译您的 WooCommerce 商店了吗? 免费试用 SimplePoTranslate ——无需信用卡。上传您的 .pot 文件并在几分钟内获得生产就绪的翻译。