用客户的语言发送电子邮件

慕尼黑的一位客户不应收到英文的订单确认邮件,而且您也不需要准备三种邮件模板和三种工作流程来避免这种情况。一种邮件模板即可支持您销售的所有语言。您的Shopify Flow步骤会指定客户使用的语言,应用程序会发送对应的版本。其他客户则会收到其主要语言的邮件模板。

本指南将带您从单语言排版逐步过渡到使用客户语言发送的电子邮件,并涵盖了各种特殊情况的处理方式:未知语言、地区变体、后续编辑、测试及故障排除。

工作原理

  • 一个版式只有一种主要语言。那就是版式本身,也就是您今天看到的这个版本。
  • 您可以在其中添加翻译:德语、法语,每个版式最多可添加30种语言。每种语言都有各自的主题、预览文本和内容。
  • 在 Shopify Flow 中**,“发送事务性电子邮件**”操作包含一个**“语言**”字段。请将其设置为客户的语言,例如 {{order.customerLocale}}。
  • 发送电子邮件时,应用程序会选择相应的翻译。如果没有匹配的翻译,则发送主语言版本。电子邮件绝不会因语言原因而被拦截。

一种版式,一种工作流程,支持所有语言。

步骤 1:添加语言

  1. 在**“电子邮件布局**”下打开该布局。
  2. 点击页面顶部的**“添加语言**”。
  3. 在**“语言**”下选择要添加的语言,然后点击**“添加语言”**。

新语言版本会以您已保存的版面布局为模板,并立即在编辑器中打开。请翻译主题、预览文本和正文内容,然后点击“保存”。

连接 AI 服务提供商后,您可以选择**“使用 AI 翻译**”而非复制内容。所有文本都会被翻译;而 Liquid 标签(如 {{ variables.order_name }})、链接和设计布局则完全保持不变。在您审核并保存之前,系统不会发送任何内容。请参阅 使用人工智能创建、编辑和翻译版式。

选中德语时,电子邮件布局的“添加语言”对话框
添加语言:选择语言。系统会生成该语言布局的副本,可直接进行翻译。

在语言出现之前你所设计的布局

在此功能推出之前创建的布局尚未指定主语言。我们从未询问过该布局使用何种语言编写,也不会进行猜测。当您首次向此类布局添加语言时,对话框会额外增加一个问题:“此布局的主语言是什么?”。

  • 没有任何选项是预先选定的。请选择该布局当前使用的语言:若要使用德语布局,请选择“德语”。
  • 在您做出选择之前**,“添加语言”选项和“添加语言**”按钮将保持禁用状态。
  • 每个布局只会提示一次。从现在起,您创建的布局将在创建页面上选择语言。

这一点至关重要:对于语言未提供翻译的客户,系统将默认使用主语言,并以此为基准进行翻译匹配。

在“语言”功能推出之前创建的布局上的“添加语言”对话框:该布局的主语言排在首位且为必填项,随后是待添加的语言
一个在语言概念出现之前就已创建的布局,首先会询问该布局使用的是哪种语言。没有任何选项被预先选中,且“添加语言”按钮在您做出选择之前始终处于禁用状态。

第 2 步:在同一编辑器中进行翻译

翻译内容将在您熟悉的编辑器中打开:对于构建器布局,是可视化构建器;对于其他内容,则是富文本或 HTML 编辑器。切换语言不会改变界面,仅会更改内容。

  • 使用语言选择器进行切换:在可视化构建器中画布上方的工具栏中,或在富文本/HTML布局中的“邮件内容”卡片顶部。
  • 标有**(布局)**的条目是主要语言。
富文本布局的德语版本:屏幕布局相同,名称和描述为只读,主题和正文为德语
切换语言时,屏幕显示内容保持不变。名称和描述在此处是共享且只读的;主题、预览文本和正文则属于该语言。
显示订单确认书德语版本的可视化构建器
可视化构建器的操作方式也一样:在画布上方的工具栏中选择语言。

每种语言的附件

一份德语发票PDF、一份法语条款清单:附件可能因语言而异。

视觉布局。附件在设计中以“附件块”的形式存在,每种语言都有各自的设计。新建语言时会以现有语言为模板进行复制,因此会继承相同的附件块;若在德语版本中替换该文件,则仅德语邮件会应用该附件。

富文本/HTML 布局。翻译页面上的“附件”卡片开头提供了一个选项:“此语言的附件”:

选择 发送的内容
与主要语言相同 主语言的附件。请在那里进行修改。这是所有语言的默认设置。
该语言的不同附件 只有使用该语言发送的电子邮件才会包含这些文件。

为该语言选择不同的附件需从主语言的列表开始,因此替换一个 PDF 文件即算一次更改。若删除该语言下的所有文件,则该语言发送的邮件将不带附件,而主语言的邮件仍保留其附件。若切换回“与主语言相同”选项,该语言将再次遵循主语言的设置。

将某语言设为主语言后,所有语言发送的内容都将与之前完全一致,因此提升翻译优先级不会更改任何人的附件。

大小限制和“附加/链接”模式与主语言相同,请参阅 附件和图片。

各语言版本的营销页脚

营销版面的结尾包含“取消订阅”语句和贵公司的详细信息。 翻译版本可以使用自定义的措辞:翻译页面上的**“营销页脚**”卡片提供了**“与布局相同**”或**“为此语言自定义文本**”两个选项。若该字段留空,则默认使用布局中的文本。关于页脚的工作原理,以及各语言的全站通用文本的存储位置,请参阅 营销邮件与退订。

步骤 3:告诉 Shopify Flow 发送哪种语言

在**“发送交易邮件**”操作中,将**“语言”**设置为存储客户语言的Shopify Flow变量:

触发器 语言
订单已创建,订单已支付 {{order.customerLocale}}
由客户创建 {{customer.locale}}
已创建订单发货 {{fulfillment.order.customerLocale}}

对于仅服务于一个市场的工作流程,请输入固定代码,例如 de。

该字段为可选字段。您之前构建的工作流程将继续照常运行:如果没有指定语言,它们将发送主语言,与以往完全一样。

Shopify Flow 中的“发送事务性电子邮件”操作,其中“回复地址”、“发件人姓名”和“语言”字段分别设置为 order.customerLocale,并包含变量
“Shopify Flow:Language”操作会采用客户的语言,此处为{{order.customerLocale}}。Reply-To 和 From 名称也是按步骤设置的。

客户将获得哪个版本

该应用会按照以下顺序寻找最匹配的结果:

  1. 确切的表述。fr-CA 会发送您在 fr-ca 上的翻译内容。
  2. 基础语言。de-CH 和 de-AT 会发送您的 de 翻译内容。一份德语翻译适用于德国、奥地利和瑞士。
  3. 一个区域变体。pt 发送了您对 pt-br 的翻译。
  4. **否则使用主语言。**布局本身会被发送出去。

大小写和分隔符不影响结果:de-DE、de-de 和 de_DE 是相同的。

如果这种语言并不存在呢?

不会出现任何问题。在以下情况下,邮件将以主要语言发送:

  • 该客户的语言没有翻译(一位日本客户,而您将其翻译成了德语和法语),
  • “语言”字段为空,或者该客户对应的“Shopify Flow”变量没有值,
  • 这个值根本不是一种语言。

由于“语言”字段的原因,发送操作绝不会被拒绝,也绝不会失败。唯一的检查发生在构建工作流程时:如果您输入的固定值不是语言代码(例如 english),Shopify Flow 会显示提示,建议使用诸如 de、fr 或 pt-BR 这样的代码。流程变量始终能通过验证。

每种语言一种版式

有时完整的翻译超出了你的需求:这封邮件的内容对所有人来说都一样,只有一句话例外。为此,每个布局都支持 {{ language }}。

{{ language }} 即您的 Shopify Flow 步骤发送的语言,采用小写形式(de、fr、de-at)。当该步骤未发送任何语言时,则采用布局的主语言。该功能适用于主题、预览文本和正文,既适用于可视化构建器,也适用于富文本/HTML 布局,同时在翻译中同样适用。

{% if language == "de" %}
  <p>Retouren aus Deutschland gehen an unser Lager in Hamburg.</p>
{% else %}
  <p>International returns are refunded within 10 working days.</p>
{% endif %}

在可视化编辑器中,将此内容放入 HTML / 代码块中。在富文本 / HTML 布局中,将正文切换为 HTML。

Shopify 通常会随语言一起发送一个地区,例如 de-AT 或 en-GB。{{ language }} 会保留该地区(de-at),因此当你指代“任何德语”时,只需比较前两个字母:

{% assign lang = language | slice: 0, 2 %}
{% if lang == "de" %}Hallo{% elsif lang == "fr" %}Bonjour{% else %}Hello{% endif %}

{{ language }} 这是该步骤所要求的,而非找到的翻译。对于日本客户,即使已发送了主语言,系统仍会显示ja,因此一个没有任何翻译的布局仍能对此做出响应。编辑器中的**“系统变量**”卡片会列出该变量的当前值,并可通过单击将其复制。 在尚未设置主语言的布局上,该字段将保持为空,直到Shopify Flow发送语言信息为止。

一个HTML布局,其body标签使用“if language equals de”条件,紧邻列出语言变量的“系统变量”卡片
{{ language }} 在版面中:一个段落面向德国客户,另一个段落面向其他所有客户。系统变量卡上显示其当前值。

上线前请先进行测试

  • 一旦布局支持多语言,"发送测试邮件"功能就会出现语言选择器。请将每种语言的邮件各发送给自己一次。
  • 该测试使用的是您的测试变量,而非生产数据。实际的工作流程运行才是最终的验证;请参阅 测试您的电子邮件设置。
  • 要测试整个流程,请针对一位客户语言与您翻译目标语言相同的订单运行该工作流程。

查看已发送的内容

系统会记录每封电子邮件的语言。打开一项活动:在**“活动详情**”下的**“语言”一栏中,会显示已发送的翻译内容,或布局的主语言**。**点击“重新发送”**将再次发送相同语言的内容。

一条关于已发送电子邮件的历史记录,其中“事件详情”部分包含状态、持续时间以及语言为德语的信息
“历史事件”中的“事件详情”下的“语言”字段会显示发布的是哪个版本。

更改主语言

您的店铺最初使用英语,但现在大部分客户都是德国人吗?打开德语翻译,点击**“设为主语言**”。德语将作为主布局,英语则成为翻译版本:两者位置互换,且不会丢失任何内容。此后,对于没有对应翻译的客户以及未指定语言的邮件,系统将显示德语内容。您可通过版本历史记录撤销此操作。

“将德语设为主语言”对话框,其中解释说这两种语言将互换位置
设为主语言:翻译和版面布局的位置会互换。不会丢失任何内容,且可通过版本历史记录撤销此操作。

删除一种语言

打开该翻译,点击**“删除**”,然后点击其名称(例如“删除德语”)。使用该语言的客户将从下一封邮件开始收到主语言版本的内容。该翻译仍会保留在布局的版本历史记录中,并可恢复。请参阅 版式版本历史。

如果某件事与预期不符

某位客户收到的邮件显示的是主语言,而非其本国语言。请在“历史记录”中打开该邮件并查看“语言”字段。“布局的主语言”意味着未找到匹配的翻译:Shopify Flow步骤中的“语言”字段为空,该变量的值对该客户而言不存在,或者您未提供该语言的翻译。 请先检查该步骤;步骤 3 中的表格中应包含每个触发器对应的正确变量。

“添加语言”选项呈灰色。该布局尚未设置主语言。请先在对话框顶部选择“此布局的主语言”。

**我需要的语言不在列表中。**该列表包含最常见的语言。任何有效的语言代码均可通过 API 添加。

**我已经修改了版式,但德语邮件中仍显示着旧内容。**翻译内容只是复制而来的。请在德语版本中也进行相应修改。

我已经修改了附件,但其中一种语言仍会发送旧文件。在富文本/HTML布局中,该语言被设置为“此语言使用不同的附件”,因此它会保留自己的附件列表。请打开该语言的翻译文件并修改其中的文件,或者将其切换为**“与主语言相同**”。 在可视化布局中,请在该语言的“附件”块中替换文件。

我在 Shopify Flow 操作中没有看到“语言”字段。该步骤是在此次更新之前添加的,而 Shopify Flow 会保留步骤创建时设置的字段。请删除“发送事务性电子邮件”步骤,然后重新添加:此时,“语言”字段会出现在**“发件人姓名**”和**“变量(JSON)**”之间。

通过 API

可通过 GET 和 PUT /api/v1/email-templates/:id/translations/:locale 读取和编写翻译内容,使用 POST /api/v1/email-templates/:id/translations/:locale/promote 可将某项翻译设为主语言,MCP 工具包括 list_template_translations、set_template_translation 和 promote_template_translation。对于富文本/HTML 布局,翻译的 attachments 字段即为其自身的列表,主语言的列表则为 null;marketingTexts 则存放该语言营销布局的页脚文本。 接受任何有效的语言代码,每个布局最多支持 30 种语言。请参阅 REST API 参考指南 和 连接人工智能助手(MCP)。

相关