Hi,
I’m having a serious issue with my Shipping confirmation notification template.
Originally, I only wanted to add one sentence, but after editing inside Translate & Adapt (localize), the template became corrupted.
Now:
Current problems
I cannot save the template because of Liquid errors: “Liquid syntax error: ‘endfor’ tag was never closed” “Liquid syntax error: ‘unless’ tag was never closed”
Even when I revert to the default template, the error still appears.
The block that renders items ({% for line in fulfillment.fulfillment_line_items %}) no longer outputs correctly.
The English version and Japanese version do not match anymore, and one seems to be partially overwritten.
When I try to rewrite the loop myself, items appear but without proper formatting, and nested line items don’t work.
What I need
I want to:
Restore the original default Shipping confirmation template completely
(including removing broken overrides made in Translate & Adapt)
Make sure the following section renders like normal again:
Items in this shipment
- product image
- product title
- variant title
- quantity
Allow me to safely add a small English-only message in the body without breaking the template.
Additional context
Even when using the original Shopify default snippet, Shopify still shows an error when saving. So it looks like the template became corrupted internally or that some unclosed tag is stuck somewhere in the translation overrides.
I asked Shopify Support but they said they cannot fix notification template code.
Could someone help me:
identify where the Liquid tags mismatched?
provide a clean, fully restored default template for Shipping confirmation?
explain how to safely add a locale-specific message without breaking the notification?
Remove the translation override in Translate & Adapt, then go to Settings → Notifications and hit Revert to default for the Shipping confirmation. Add your English-only line outside the {% for %} loop, inside {% if shop.locale == 'en' %}…{% endif %}.
It sounds like Translate & Adapt created a broken override inside your notification, which is why even reverting to the default still shows Liquid errors. When a translation layer adds or removes {% for %}, {% unless %}, or {% endif %} incorrectly, Shopify’s notification editor can’t validate the template anymore — even if your visible code looks “default.”
I’ve fixed this issue before on several stores. The solution is:
Remove all hidden translation overrides created by Translate & Adapt (they don’t clear automatically).
Restore the true default Shipping Confirmation template from Shopify’s system templates — not the “Revert to default” button.
Rebuild the for line in fulfillment.fulfillment_line_items block so images, titles, variants, and quantities render normally again.
Add your custom message in a safe way, using a locale condition like:
{% if shop.locale == 'en' %}
Your custom English message here.
{% endif %}
This keeps translations separate and prevents Liquid mismatches.
If you want, I can clean up your template, remove the broken translation overrides, and give you a fresh working version of the default Shopify notification.
Just share the current template (or grant collaborator access), and I’ll fix the Liquid errors for you.
Yes, I edited the Shipping confirmation using Translate & Adapt, and after that the template started showing Liquid errors. Even if I click “Revert to default” in the notification editor, the errors are still there.
Here are the errors I’m seeing:
“Liquid syntax error: ‘endif’ tag was never closed”
“Liquid syntax error: ‘unless’ tag was never closed”
Below is my current Shipping confirmation email template code.
If you have time, could you please help me restore the true default template and fix the for line in fulfillment.fulfillment_line_items block?
{% if fulfillment.item_count == item_count %} {% capture email_title %}Your order is on the way{% endcapture %} {% capture email_body %}Your order is on the way. Track your shipment to see the delivery status.{% endcapture %} {% elsif fulfillment.item_count > 1 %} {% if fulfillment_status == 'fulfilled' %} {% capture email_title %}The last items in your order are on the way{% endcapture %} {% capture email_body %}The last items in your order are on the way. Track your shipment to see the delivery status.{% endcapture %} {% else %} {% capture email_title %}Some items in your order are on the way{% endcapture %} {% capture email_body %}Some items in your order are on the way. Track your shipment to see the delivery status.{% endcapture %} {% endif %} {% else %} {% if fulfillment_status == 'fulfilled' %} {% capture email_title %}The last item in your order is on the way{% endcapture %} {% capture email_body %}The last item in your order is on the way. Track your shipment to see the delivery status.{% endcapture %} {% else %} {% capture email_title %}One item in your order is on the way{% endcapture %} {% capture email_body %}One item in your order is on the way. Track your shipment to see the delivery status.{% endcapture %} {% endif %} {% endif %} {% capture email_emphasis %}Estimated delivery date: {{fulfillment.estimated_delivery_at | date: format: 'date'}}{% endcapture %}
{%- if shop.email_logo_url %} {%- else %}
{{ shop.name }}
{%- endif %} {%- if po_number %} {%- endif %}
Order {{ order_name }}
PO number #{{ po_number }}
{{ email_title }}
{{ email_body }}
{% if fulfillment.estimated_delivery_at %}
{{ email_emphasis }}
{% endif %} {% if order_status_url %}
View your order
{% if shop.url %}
or Visit our store
{% endif %}
{% else %} {% if shop.url %}
Visit our store
{% endif %} {% endif %} {% if fulfillment.tracking_numbers.size > 0 %}
{% if fulfillment.tracking_numbers.size == 1 and fulfillment.tracking_company and fulfillment.tracking_url %} {{ fulfillment.tracking_company }} tracking number: {{ fulfillment.tracking_numbers.first }} {% elsif fulfillment.tracking_numbers.size == 1 %} Tracking number: {{ fulfillment.tracking_numbers.first }} {% else %} {{ fulfillment.tracking_company }} tracking numbers:
{% for tracking_number in fulfillment.tracking_numbers %} {% if fulfillment.tracking_urls[forloop.index0] %} {{ tracking_number }} {% else %} {{ tracking_number }} {% endif %}
{% endfor %} {% endif %}
{% endif %}
Items in this shipment
{% endunless %} {% endfor %}
{% for line in fulfillment.fulfillment_line_items %} {% comment %} Skip child add-ons since they will be rendered under the parent line item {% endcomment %} {% unless line.line_item.nested_line_child? %} {% assign is_parent = false %} {% assign is_nested_line_parent = line.line_item.nested_line_parent? %} {% if line.line_item.bundle_parent? or line.line_item.nested_line_parent? %} {% assign is_parent = true %} {% endif %} {% if is_nested_line_parent %} {% assign css_order_list_cell_nested_line_parent_class = 'order-list__parent-cell' %} {% assign css_order_list_parent_image_cell_nested_line_parent_class = 'order-list__nested-parent-image-cell' %} {% endif %}
{% if line.line_item.nested_line_parent? %} {% for child_line in line.line_item.nested_lines %} {% if false %} {% assign css_class = 'order-list__bundle-item' %} {% assign css_image_class = 'order-list__image-cell' %} {% assign css_description_class = 'order-list__product-description-cell' %} {% else %} {% assign css_class = 'order-list__deliverable-item_abandoned' %} {% assign css_image_class = 'order-list__image-cell--nested-line-item' %} {% assign css_description_class = 'order-list__product-description-cell--nested-line-item' %} {% if forloop.last %} {% assign css_curved_line_cell_container_class = 'curved-line-cell-container__top-spacer-cell--show-border' %} {% assign css_hide_vertical_line_class = 'vertical-line__content--hide' %} {% assign css_curved_line_cell_container_cell__no_padding_class = 'curved-line-cell-container__cell--no-padding' %} {% endif %} {% endif %}
{% if false and is_parent %} {% else %} {% endif %} {% if is_nested_line_parent %} {% endif %}
{% if line.line_item.image %}
{% else %}
{% endif %} {% if line.line_item.image %}
{% else %}
{% endif %}
{% if line.line_item.presentment_title %} {% assign line_title = line.line_item.presentment_title %} {% elsif line.line_item.title %} {% assign line_title = line.line_item.title %} {% else %} {% assign line_title = line.line_item.product.title %} {% endif %} {% if line.quantity < line.line_item.quantity %} {% capture line_display %} {{ line.quantity }} of {{ line.line_item.quantity }} {% endcapture %} {% else %} {% assign line_display = line.line_item.quantity %} {% endif %} {{ line_title }} × {{ line_display }}
{% if line.line_item.variant.title != 'Default Title' and is_parent == false %} {{ line.line_item.variant.title }}
{% elsif line.line_item.variant.title != 'Default Title' and line.line_item.nested_line_parent? %} {{ line.line_item.variant.title }}
{% elsif line.line_item.variant.title != 'Default Title' and line.line_item.bundle_parent? and false == false %} {{ line.line_item.variant.title }}
{% endif %} {% if false %} {% for child_line in line.line_item.bundle_components %} {% if true %} {% assign css_class = 'order-list__bundle-item' %} {% assign css_image_class = 'order-list__image-cell' %} {% assign css_description_class = 'order-list__product-description-cell' %} {% else %} {% assign css_class = 'order-list__deliverable-item_abandoned' %} {% assign css_image_class = 'order-list__image-cell--nested-line-item' %} {% assign css_description_class = 'order-list__product-description-cell--nested-line-item' %} {% if false %} {% assign css_curved_line_cell_container_class = 'curved-line-cell-container__top-spacer-cell--show-border' %} {% assign css_hide_vertical_line_class = 'vertical-line__content--hide' %} {% assign css_curved_line_cell_container_cell__no_padding_class = 'curved-line-cell-container__cell--no-padding' %} {% endif %} {% endif %}
{% if child_line.image %}
{% else %}
{% endif %} {% if child_line.product.title %} {% assign item_title = child_line.product.title %} {% else %} {% assign item_title = child_line.title %} {% endif %} {% assign item_display = child_line.quantity %} {{ item_display }} × {{ item_title }}
{% if child_line.variant.title != 'Default Title'%} {{ child_line.variant.title }} {% endif %}
{% endfor %} {% else %} {% for group in line.line_item.groups %} {% if group.deliverable? %} For: {{ group.display_title }}
{% else %} Part of: {{ group.display_title }}
{% endif %} {% endfor %} {% endif %} {% if line.line_item.selling_plan_allocation %} {{ line.line_item.selling_plan_allocation.selling_plan.name }}
{% endif %} {% if line.line_item.refunded_quantity > 0 %} Refunded {% endif %} {% if line.line_item.discount_allocations %} {% for discount_allocation in line.line_item.discount_allocations %} {% if discount_allocation.discount_application.target_selection != 'all' %}
{{ discount_allocation.discount_application.title | upcase }} (-{{ discount_allocation.amount | money }})
{% endif %} {% endfor %} {% endif %}
{% if child_line.image %}
{% else %}
{% endif %} {% if child_line.product.title %} {% assign item_title = child_line.product.title %} {% else %} {% assign item_title = child_line.title %} {% endif %} {% assign item_display = child_line.quantity %} {{ item_title }} × {{ item_display }}
{% if child_line.variant.title != 'Default Title'%} {{ child_line.variant.title }} {% endif %}
{% endfor %} {% endif %}
If you have any questions, reply to this email or contact us at {{ shop.email }}
Translate & Adapt added a bad Liquid tag in one of your language translations.
Even if you reset the template, Shopify still reads the broken tag—so the error never goes away.
How to fix it
1. Remove all Translate & Adapt overrides
Go to:
Settings → Languages → (Language) → Notifications
Then:
Revert every edited line
Save
Do this for every language that was customized.
This removes the broken Liquid.
2. Restore the default Shipping Confirmation template
Now go to:
Settings → Notifications → Shipping confirmation
Click Restore to default
Save
It should work once the translations are cleaned.
Default loop restored
This is the clean default Shopify block for items:
{% for line in fulfillment.fulfillment_line_items %}
{% assign item = line.line_item %}
Translation overrides are corrupted causing the errors. Delete all overrides in Translate&Adapt for this notification, then restore the default shipping confirmation template. Add English only messages using a simple locale check outside the line item loop Test with a draft email make sure the loops and formatting are intact.