spree_emails 6.0.0.beta4 → 6.0.0.rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +30 -74
  3. data/Rakefile +23 -0
  4. data/app/mailers/spree/company_mailer.rb +4 -7
  5. data/app/mailers/spree/customer_mailer.rb +6 -8
  6. data/app/mailers/spree/digital_asset_mailer.rb +18 -11
  7. data/app/mailers/spree/fulfillment_mailer.rb +11 -7
  8. data/app/mailers/spree/newsletter_mailer.rb +1 -2
  9. data/app/mailers/spree/order_group_mailer.rb +16 -20
  10. data/app/mailers/spree/order_mailer.rb +15 -20
  11. data/app/mailers/spree/return_mailer.rb +10 -5
  12. data/app/mailers/spree/seller_mailer.rb +8 -13
  13. data/app/models/spree/emails/amount_line.rb +32 -0
  14. data/app/serializers/spree/emails/address_serializer.rb +6 -0
  15. data/app/serializers/spree/emails/amount_line_serializer.rb +13 -0
  16. data/app/serializers/spree/emails/applied_promotion_serializer.rb +7 -0
  17. data/app/serializers/spree/emails/customer_group_serializer.rb +6 -0
  18. data/app/serializers/spree/emails/customer_serializer.rb +19 -0
  19. data/app/serializers/spree/emails/delivery_method_serializer.rb +6 -0
  20. data/app/serializers/spree/emails/delivery_rate_serializer.rb +12 -0
  21. data/app/serializers/spree/emails/delivery_serializer.rb +6 -0
  22. data/app/serializers/spree/emails/fee_serializer.rb +7 -0
  23. data/app/serializers/spree/emails/freight_summary_serializer.rb +6 -0
  24. data/app/serializers/spree/emails/fulfillment_group_serializer.rb +25 -0
  25. data/app/serializers/spree/emails/fulfillment_serializer.rb +21 -0
  26. data/app/serializers/spree/emails/gift_card_serializer.rb +7 -0
  27. data/app/serializers/spree/emails/line_item_serializer.rb +24 -0
  28. data/app/serializers/spree/emails/market_serializer.rb +6 -0
  29. data/app/serializers/spree/emails/newsletter_subscriber_serializer.rb +6 -0
  30. data/app/serializers/spree/emails/option_value_serializer.rb +6 -0
  31. data/app/serializers/spree/emails/order_group_serializer.rb +50 -0
  32. data/app/serializers/spree/emails/order_serializer.rb +27 -0
  33. data/app/serializers/spree/emails/parcel_item_serializer.rb +36 -0
  34. data/app/serializers/spree/emails/payment_method_serializer.rb +6 -0
  35. data/app/serializers/spree/emails/payment_serializer.rb +11 -0
  36. data/app/serializers/spree/emails/purchase_summary_attributes.rb +41 -0
  37. data/app/serializers/spree/emails/purchased_item_attributes.rb +28 -0
  38. data/app/serializers/spree/emails/return_serializer.rb +19 -0
  39. data/app/serializers/spree/emails/stock_location_serializer.rb +6 -0
  40. data/app/services/spree/emails/samples/base.rb +79 -0
  41. data/app/services/spree/emails/samples/company_invitation.rb +19 -0
  42. data/app/services/spree/emails/samples/data_export.rb +11 -0
  43. data/app/services/spree/emails/samples/downloads.rb +28 -0
  44. data/app/services/spree/emails/samples/fulfillment.rb +33 -0
  45. data/app/services/spree/emails/samples/newsletter_confirmation.rb +11 -0
  46. data/app/services/spree/emails/samples/order.rb +22 -0
  47. data/app/services/spree/emails/samples/order_group.rb +22 -0
  48. data/app/services/spree/emails/samples/password_reset.rb +15 -0
  49. data/app/services/spree/emails/samples/payment_link.rb +17 -0
  50. data/app/services/spree/emails/samples/return.rb +29 -0
  51. data/app/subscribers/spree/order_email_subscriber.rb +2 -2
  52. data/app/subscribers/spree/order_group_email_subscriber.rb +1 -1
  53. data/app/subscribers/spree/return_email_subscriber.rb +2 -0
  54. data/app/views/spree/company_mailer/invitation_email.liquid +13 -0
  55. data/app/views/spree/customer_mailer/data_export_email.liquid +18 -0
  56. data/app/views/spree/customer_mailer/password_reset_email.liquid +14 -0
  57. data/app/views/spree/digital_asset_mailer/files_ready_email.liquid +23 -0
  58. data/app/views/spree/fulfillment_mailer/fulfilled_email.liquid +21 -0
  59. data/app/views/spree/newsletter_mailer/email_confirmation.liquid +13 -0
  60. data/app/views/spree/order_group_mailer/confirm_email.liquid +35 -0
  61. data/app/views/spree/order_group_mailer/store_owner_notification_email.liquid +11 -0
  62. data/app/views/spree/order_mailer/cancel_email.liquid +12 -0
  63. data/app/views/spree/order_mailer/confirm_email.liquid +12 -0
  64. data/app/views/spree/order_mailer/payment_link_email.liquid +12 -0
  65. data/app/views/spree/order_mailer/store_owner_notification_email.liquid +11 -0
  66. data/app/views/spree/return_mailer/refunded_email.liquid +19 -0
  67. data/app/views/spree/seller_mailer/approved_email.liquid +13 -0
  68. data/app/views/spree/seller_mailer/rejected_email.liquid +11 -0
  69. data/app/views/spree/seller_mailer/suspended_email.liquid +11 -0
  70. data/app/views/spree/shared/_fulfillment_group.liquid +25 -0
  71. data/app/views/spree/shared/_line_item.liquid +29 -0
  72. data/app/views/spree/shared/_order_summary.liquid +17 -0
  73. data/app/views/spree/shared/_purchase_totals.liquid +35 -0
  74. data/config/initializers/typelizer.rb +61 -0
  75. data/config/locales/ar.yml +40 -0
  76. data/config/locales/be.yml +37 -0
  77. data/config/locales/bg.yml +31 -0
  78. data/config/locales/ca.yml +35 -0
  79. data/config/locales/cs.yml +38 -0
  80. data/config/locales/da.yml +37 -0
  81. data/config/locales/de-CH.yml +11 -0
  82. data/config/locales/de.yml +38 -0
  83. data/config/locales/el.yml +37 -0
  84. data/config/locales/en.yml +0 -25
  85. data/config/locales/es-CL.yml +21 -0
  86. data/config/locales/es-EC.yml +22 -0
  87. data/config/locales/es-MX.yml +26 -0
  88. data/config/locales/es.yml +40 -0
  89. data/config/locales/et.yml +31 -0
  90. data/config/locales/fa.yml +37 -0
  91. data/config/locales/fi.yml +37 -0
  92. data/config/locales/fr.yml +38 -0
  93. data/config/locales/hu.yml +37 -0
  94. data/config/locales/id.yml +37 -0
  95. data/config/locales/it.yml +38 -0
  96. data/config/locales/ja.yml +36 -0
  97. data/config/locales/km.yml +37 -0
  98. data/config/locales/ko.yml +36 -0
  99. data/config/locales/ku.yml +37 -0
  100. data/config/locales/lt.yml +37 -0
  101. data/config/locales/lv.yml +39 -0
  102. data/config/locales/nb.yml +37 -0
  103. data/config/locales/ne.yml +37 -0
  104. data/config/locales/nl.yml +38 -0
  105. data/config/locales/pl.yml +39 -0
  106. data/config/locales/pt-BR.yml +34 -0
  107. data/config/locales/pt.yml +34 -0
  108. data/config/locales/ro.yml +37 -0
  109. data/config/locales/ru.yml +38 -0
  110. data/config/locales/sk.yml +31 -0
  111. data/config/locales/sl-SI.yml +31 -0
  112. data/config/locales/sv.yml +37 -0
  113. data/config/locales/th.yml +37 -0
  114. data/config/locales/tr.yml +38 -0
  115. data/config/locales/uk.yml +42 -0
  116. data/config/locales/vi.yml +35 -0
  117. data/config/locales/zh-CN.yml +38 -0
  118. data/config/locales/zh-TW.yml +40 -0
  119. data/lib/spree/emails/engine.rb +27 -3
  120. data/lib/spree/emails/previews/company_preview.rb +10 -0
  121. data/lib/spree/emails/previews/customer_preview.rb +4 -0
  122. data/lib/spree/emails/previews/digital_asset_preview.rb +20 -0
  123. metadata +110 -55
  124. data/app/helpers/spree/base_helper.rb +0 -45
  125. data/app/helpers/spree/digital_asset_helper.rb +0 -16
  126. data/app/helpers/spree/fulfillment_helper.rb +0 -12
  127. data/app/helpers/spree/mail_helper.rb +0 -10
  128. data/app/views/spree/company_mailer/invitation_email.html.erb +0 -8
  129. data/app/views/spree/company_mailer/invitation_email.text.erb +0 -11
  130. data/app/views/spree/customer_mailer/data_export_email.html.erb +0 -12
  131. data/app/views/spree/customer_mailer/data_export_email.text.erb +0 -9
  132. data/app/views/spree/customer_mailer/password_reset_email.html.erb +0 -10
  133. data/app/views/spree/customer_mailer/password_reset_email.text.erb +0 -13
  134. data/app/views/spree/digital_asset_mailer/files_ready_email.html.erb +0 -20
  135. data/app/views/spree/digital_asset_mailer/files_ready_email.text.erb +0 -10
  136. data/app/views/spree/fulfillment_mailer/fulfilled_email.html.erb +0 -22
  137. data/app/views/spree/fulfillment_mailer/fulfilled_email.text.erb +0 -18
  138. data/app/views/spree/newsletter_mailer/email_confirmation.html.erb +0 -12
  139. data/app/views/spree/newsletter_mailer/email_confirmation.text.erb +0 -9
  140. data/app/views/spree/order_group_mailer/confirm_email.html.erb +0 -38
  141. data/app/views/spree/order_group_mailer/confirm_email.text.erb +0 -26
  142. data/app/views/spree/order_group_mailer/store_owner_notification_email.html.erb +0 -14
  143. data/app/views/spree/order_group_mailer/store_owner_notification_email.text.erb +0 -11
  144. data/app/views/spree/order_mailer/cancel_email.html.erb +0 -12
  145. data/app/views/spree/order_mailer/cancel_email.text.erb +0 -13
  146. data/app/views/spree/order_mailer/confirm_email.html.erb +0 -12
  147. data/app/views/spree/order_mailer/confirm_email.text.erb +0 -13
  148. data/app/views/spree/order_mailer/payment_link_email.html.erb +0 -11
  149. data/app/views/spree/order_mailer/store_owner_notification_email.html.erb +0 -11
  150. data/app/views/spree/order_mailer/store_owner_notification_email.text.erb +0 -13
  151. data/app/views/spree/return_mailer/refunded_email.html.erb +0 -22
  152. data/app/views/spree/return_mailer/refunded_email.text.erb +0 -20
  153. data/app/views/spree/seller_mailer/approved_email.html.erb +0 -8
  154. data/app/views/spree/seller_mailer/approved_email.text.erb +0 -8
  155. data/app/views/spree/seller_mailer/rejected_email.html.erb +0 -6
  156. data/app/views/spree/seller_mailer/rejected_email.text.erb +0 -7
  157. data/app/views/spree/seller_mailer/suspended_email.html.erb +0 -6
  158. data/app/views/spree/seller_mailer/suspended_email.text.erb +0 -7
  159. data/app/views/spree/shared/_fulfillment_group_section.html.erb +0 -37
  160. data/app/views/spree/shared/_fulfillment_group_section.text.erb +0 -12
  161. data/app/views/spree/shared/_item_thumbnail_link.html.erb +0 -18
  162. data/app/views/spree/shared/_order_summary_section.html.erb +0 -20
  163. data/app/views/spree/shared/_po_number.text.erb +0 -6
  164. data/app/views/spree/shared/_purchase_totals.html.erb +0 -62
  165. data/app/views/spree/shared/_purchase_totals.text.erb +0 -24
  166. data/app/views/spree/shared/_purchased_items_table.html.erb +0 -41
  167. data/app/views/spree/shared/_purchased_items_table.text.erb +0 -28
  168. data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +0 -24
  169. data/app/views/spree/shared/purchased_items_table/_subtotal.html.erb +0 -3
  170. data/app/views/spree/shared/purchased_items_table/_summary_row.html.erb +0 -14
  171. data/app/views/spree/shared/purchased_items_table/_total.html.erb +0 -4
  172. data/config/i18n-tasks.yml +0 -22
@@ -27,7 +27,7 @@ module Spree
27
27
  # about the sale.
28
28
  def send_customer_confirmation(order_group, event)
29
29
  return if order_group.confirmation_delivered?
30
- return if event.payload['notify_customer'] == false
30
+ return if event.metadata['notify_customer'] == false
31
31
  return unless order_group.store.prefers_send_consumer_transactional_emails?
32
32
 
33
33
  OrderGroupMailer.confirm_email(order_group.id).deliver_later
@@ -10,6 +10,8 @@ module Spree
10
10
 
11
11
  store = return_record.store
12
12
  return unless store.prefers_send_consumer_transactional_emails?
13
+ # A return owed nothing closes without a refund, so there is none to announce.
14
+ return if return_record.refunded_total.zero?
13
15
 
14
16
  ReturnMailer.refunded_email(return_record.id).deliver_later
15
17
  end
@@ -0,0 +1,13 @@
1
+ ---
2
+ subject: "{{ store.name }} {{ 'company_mailer.invitation_email.subject' | t: company: company.name }}"
3
+ ---
4
+ <mj-section>
5
+ <mj-column css-class="hero">
6
+ <mj-text mj-class="heading">{{ 'company_mailer.invitation_email.title' | t: company: company.name }}</mj-text>
7
+ <mj-text mj-class="greeting">{{ 'company_mailer.invitation_email.greeting' | t }}</mj-text>
8
+ <mj-text mj-class="lead">{{ 'company_mailer.invitation_email.instructions' | t: company: company.name, store: store.name }}</mj-text>
9
+ <mj-button href="{{ accept_url }}">{{ 'company_mailer.invitation_email.action' | t }}</mj-button>
10
+ <mj-text mj-class="note">{{ 'company_mailer.invitation_email.expiry_notice' | t }}</mj-text>
11
+ <mj-text mj-class="note" padding="16px 0 0">{{ 'company_mailer.invitation_email.ignore_notice' | t }}</mj-text>
12
+ </mj-column>
13
+ </mj-section>
@@ -0,0 +1,18 @@
1
+ ---
2
+ subject: "{{ store.name }} {{ 'customer_mailer.data_export_email.subject' | t }}"
3
+ ---
4
+ <mj-section>
5
+ <mj-column css-class="hero">
6
+ <mj-text mj-class="heading">{{ 'customer_mailer.data_export_email.action' | t }}</mj-text>
7
+ <mj-text mj-class="greeting">{{ 'customer_mailer.data_export_email.greeting' | t }}</mj-text>
8
+ <mj-text mj-class="lead">{{ 'customer_mailer.data_export_email.instructions' | t }}</mj-text>
9
+ {% if download_url %}
10
+ <mj-button href="{{ download_url }}">{{ 'customer_mailer.data_export_email.action' | t }}</mj-button>
11
+ {% endif %}
12
+ {% if expires_at %}
13
+ {% assign expires_on = expires_at | date: 'long' %}
14
+ <mj-text mj-class="note">{{ 'customer_mailer.data_export_email.expiry_notice' | t: date: expires_on }}</mj-text>
15
+ {% endif %}
16
+ <mj-text mj-class="note" padding="16px 0 0">{{ 'customer_mailer.data_export_email.ignore_notice' | t }}</mj-text>
17
+ </mj-column>
18
+ </mj-section>
@@ -0,0 +1,14 @@
1
+ ---
2
+ subject: "{{ store.name }} {{ 'customer_mailer.password_reset_email.subject' | t }}"
3
+ ---
4
+ {% assign name = customer.first_name | default: customer.email %}
5
+ <mj-section>
6
+ <mj-column css-class="hero">
7
+ <mj-text mj-class="heading">{{ 'customer_mailer.password_reset_email.action' | t }}</mj-text>
8
+ <mj-text mj-class="greeting">{{ 'customer_mailer.password_reset_email.greeting' | t: name: name }}</mj-text>
9
+ <mj-text mj-class="lead">{{ 'customer_mailer.password_reset_email.instructions' | t }}</mj-text>
10
+ <mj-button href="{{ reset_url }}">{{ 'customer_mailer.password_reset_email.action' | t }}</mj-button>
11
+ <mj-text mj-class="note">{{ 'customer_mailer.password_reset_email.expiry_notice' | t }}</mj-text>
12
+ <mj-text mj-class="note" padding="16px 0 0">{{ 'customer_mailer.password_reset_email.ignore_notice' | t }}</mj-text>
13
+ </mj-column>
14
+ </mj-section>
@@ -0,0 +1,23 @@
1
+ ---
2
+ subject: "{% if resend %}[{{ 'resend' | t }}] {% endif %}{{ store.name }} {{ 'digital_asset_mailer.files_ready_email.subject' | t }} #{{ order.number }}"
3
+ ---
4
+ <mj-section>
5
+ <mj-column css-class="hero">
6
+ <mj-text mj-class="heading">{{ 'digital_asset_mailer.files_ready_email.subject' | t }}</mj-text>
7
+ <mj-text mj-class="greeting">{{ 'digital_asset_mailer.files_ready_email.dear_customer' | t: name: order.customer_name }}</mj-text>
8
+ <mj-text mj-class="lead">{{ 'digital_asset_mailer.files_ready_email.instructions' | t: number: order.number }}</mj-text>
9
+ </mj-column>
10
+ </mj-section>
11
+ <mj-section padding="32px 0 0">
12
+ <mj-column>
13
+ {% for download in downloads %}
14
+ <mj-text mj-class="body" padding="8px 0 0">
15
+ <a href="{{ download.url }}">{{ download.filename }}</a>
16
+ {% if download.expires_at %}
17
+ {% assign expires_on = download.expires_at | date: 'long' %}
18
+ <br /><span style="font-size: 12px;">{{ 'digital_asset_mailer.files_ready_email.available_until' | t: date: expires_on }}</span>
19
+ {% endif %}
20
+ </mj-text>
21
+ {% endfor %}
22
+ </mj-column>
23
+ </mj-section>
@@ -0,0 +1,21 @@
1
+ ---
2
+ subject: "{% if resend %}[{{ 'resend' | t }}] {% endif %}{{ store.name }} {{ 'fulfillment_mailer.fulfilled_email.subject' | t }} #{{ order.number }}"
3
+ ---
4
+ {% assign heading = 'fulfillment_mailer.fulfilled_email.fulfillment_summary' | t %}
5
+ <mj-section>
6
+ <mj-column css-class="hero">
7
+ <mj-text mj-class="heading">{{ 'fulfillment_mailer.fulfilled_email.subject' | t }}</mj-text>
8
+ <mj-text mj-class="greeting">{{ 'fulfillment_mailer.fulfilled_email.dear_customer' | t: name: order.customer_name }}</mj-text>
9
+ <mj-text mj-class="lead">{{ 'fulfillment_mailer.fulfilled_email.instructions' | t: number: order.number }}</mj-text>
10
+ {% if fulfillment.delivery_method_name != blank %}
11
+ <mj-text mj-class="lead">{{ 'fulfillment_mailer.fulfilled_email.delivery_method' | t: delivery_method: fulfillment.delivery_method_name }}</mj-text>
12
+ {% endif %}
13
+ {% if fulfillment.tracking != blank %}
14
+ <mj-text mj-class="lead">{{ 'fulfillment_mailer.fulfilled_email.track_information' | t: tracking: fulfillment.tracking }}</mj-text>
15
+ {% endif %}
16
+ {% if fulfillment.tracking_url != blank %}
17
+ <mj-button href="{{ fulfillment.tracking_url }}">{{ fulfillment.tracking | default: fulfillment.tracking_url }}</mj-button>
18
+ {% endif %}
19
+ </mj-column>
20
+ </mj-section>
21
+ {% render 'spree/shared/order_summary', heading: heading, purchase: order, items: fulfillment.manifest_items, totals: false %}
@@ -0,0 +1,13 @@
1
+ ---
2
+ subject: "{{ 'newsletter_mailer.email_confirmation.subject' | t }}"
3
+ ---
4
+ <mj-section>
5
+ <mj-column css-class="hero">
6
+ <mj-text mj-class="heading">{{ 'newsletter_mailer.email_confirmation.subject' | t }}</mj-text>
7
+ <mj-text mj-class="greeting">{{ 'newsletter_mailer.email_confirmation.dear_customer' | t }}</mj-text>
8
+ <mj-text mj-class="lead">{{ 'newsletter_mailer.email_confirmation.instructions' | t }}</mj-text>
9
+ <mj-button href="{{ confirmation_url }}">{{ 'newsletter_mailer.email_confirmation.verify_email_address_link' | t }}</mj-button>
10
+ <mj-text mj-class="note">{{ 'newsletter_mailer.email_confirmation.message_copy_link' | t }}<br /><a href="{{ confirmation_url }}">{{ confirmation_url }}</a></mj-text>
11
+ <mj-text mj-class="note" padding="16px 0 0">{{ 'newsletter_mailer.email_confirmation.ignore_disclaimer' | t }}</mj-text>
12
+ </mj-column>
13
+ </mj-section>
@@ -0,0 +1,35 @@
1
+ ---
2
+ subject: "{% if resend %}[{{ 'resend' | t }}] {% endif %}{{ store.name }} {{ 'order_group_mailer.confirm_email.subject' | t }} #{{ order_group.number }}"
3
+ ---
4
+ {% assign parcel_count = order_group.fulfillment_groups.size %}
5
+ <mj-section>
6
+ <mj-column css-class="hero">
7
+ <mj-text mj-class="heading">{{ 'order_group_mailer.confirm_email.subject' | t }}</mj-text>
8
+ <mj-text mj-class="greeting">{{ 'order_group_mailer.confirm_email.dear_customer' | t: name: order_group.customer_name }}</mj-text>
9
+ <mj-text mj-class="lead">{{ 'order_group_mailer.confirm_email.instructions' | t: number: order_group.number }}</mj-text>
10
+ {%- comment -%}Counted from the parcels, never from the orders the checkout divided into: several sellers shipping out of one warehouse send one box.{%- endcomment -%}
11
+ {% if parcel_count > 1 %}
12
+ <mj-text mj-class="lead">{{ 'order_group_mailer.confirm_email.arriving_separately' | t: count: parcel_count }}</mj-text>
13
+ {% endif %}
14
+ </mj-column>
15
+ </mj-section>
16
+ {% if order_group.po_number != blank %}
17
+ <mj-section padding="48px 0 0">
18
+ <mj-column>
19
+ <mj-text mj-class="body" padding="0">{{ 'order_mailer.po_number' | t: number: order_group.po_number }}</mj-text>
20
+ </mj-column>
21
+ </mj-section>
22
+ {% endif %}
23
+ {% for group in order_group.fulfillment_groups %}
24
+ {% render 'spree/shared/fulfillment_group', group: group, position: forloop.index, count: parcel_count %}
25
+ {% endfor %}
26
+ {% if order_group.unfulfilled_items.size > 0 %}
27
+ {% assign heading = 'order_group_mailer.nothing_to_ship' | t %}
28
+ {% render 'spree/shared/order_summary', heading: heading, purchase: order_group, items: order_group.unfulfilled_items, totals: false %}
29
+ {% endif %}
30
+ <mj-section padding="48px 0 0">
31
+ <mj-column>
32
+ <mj-text mj-class="section-heading" padding="0">{{ 'order_summary' | t }}</mj-text>
33
+ {% render 'spree/shared/purchase_totals', purchase: order_group %}
34
+ </mj-column>
35
+ </mj-section>
@@ -0,0 +1,11 @@
1
+ ---
2
+ subject: "{{ 'order_group_mailer.store_owner_notification_email.subject' | t: store_name: store.name }}"
3
+ ---
4
+ {% assign heading = 'order_group_mailer.store_owner_notification_email.purchase_summary' | t: number: order_group.number %}
5
+ <mj-section>
6
+ <mj-column css-class="hero">
7
+ <mj-text mj-class="heading">{{ 'order_group_mailer.store_owner_notification_email.heading' | t }}</mj-text>
8
+ <mj-text mj-class="lead">{{ 'order_group_mailer.store_owner_notification_email.instructions' | t: count: order_group.order_count }}</mj-text>
9
+ </mj-column>
10
+ </mj-section>
11
+ {% render 'spree/shared/order_summary', heading: heading, purchase: order_group, items: order_group.items, totals: true %}
@@ -0,0 +1,12 @@
1
+ ---
2
+ subject: "{% if resend %}[{{ 'resend' | t }}] {% endif %}{{ store.name }} {{ 'order_mailer.cancel_email.subject' | t }} #{{ order.number }}"
3
+ ---
4
+ {% assign heading = 'order_mailer.cancel_email.order_summary_canceled' | t: number: order.number %}
5
+ <mj-section>
6
+ <mj-column css-class="hero">
7
+ <mj-text mj-class="heading">{{ 'order_mailer.cancel_email.subject' | t }}</mj-text>
8
+ <mj-text mj-class="greeting">{{ 'order_mailer.cancel_email.dear_customer' | t: name: order.customer_name }}</mj-text>
9
+ <mj-text mj-class="lead">{{ 'order_mailer.cancel_email.instructions' | t }}</mj-text>
10
+ </mj-column>
11
+ </mj-section>
12
+ {% render 'spree/shared/order_summary', heading: heading, purchase: order, items: order.items, totals: true %}
@@ -0,0 +1,12 @@
1
+ ---
2
+ subject: "{% if resend %}[{{ 'resend' | t }}] {% endif %}{{ store.name }} {{ 'order_mailer.confirm_email.subject' | t }} #{{ order.number }}"
3
+ ---
4
+ {% assign heading = 'order_mailer.confirm_email.order_summary' | t: number: order.number %}
5
+ <mj-section>
6
+ <mj-column css-class="hero">
7
+ <mj-text mj-class="heading">{{ 'order_mailer.confirm_email.subject' | t }}</mj-text>
8
+ <mj-text mj-class="greeting">{{ 'order_mailer.confirm_email.dear_customer' | t: name: order.customer_name }}</mj-text>
9
+ <mj-text mj-class="lead">{{ 'order_mailer.confirm_email.instructions' | t }}</mj-text>
10
+ </mj-column>
11
+ </mj-section>
12
+ {% render 'spree/shared/order_summary', heading: heading, purchase: order, items: order.items, totals: true %}
@@ -0,0 +1,12 @@
1
+ ---
2
+ subject: "{{ 'order_mailer.payment_link_email.subject' | t: number: order.number }}"
3
+ ---
4
+ <mj-section>
5
+ <mj-column css-class="hero">
6
+ <mj-text mj-class="heading">{{ 'order_mailer.payment_link_email.subject' | t: number: order.number }}</mj-text>
7
+ <mj-text mj-class="greeting">{{ 'order_mailer.confirm_email.dear_customer' | t: name: order.customer_name }}</mj-text>
8
+ <mj-text mj-class="lead">{{ 'order_mailer.payment_link_email.message' | t: store_name: store.name }}</mj-text>
9
+ <mj-button href="{{ payment_url }}">{{ 'order_mailer.payment_link_email.pay_for_order' | t }}</mj-button>
10
+ <mj-text mj-class="note">{{ 'order_mailer.payment_link_email.message_copy_link' | t }}<br /><a href="{{ payment_url }}">{{ payment_url }}</a></mj-text>
11
+ </mj-column>
12
+ </mj-section>
@@ -0,0 +1,11 @@
1
+ ---
2
+ subject: "{{ 'order_mailer.store_owner_notification_email.subject' | t: store_name: store.name }}"
3
+ ---
4
+ {% assign heading = 'order_mailer.store_owner_notification_email.order_summary' | t: number: order.number %}
5
+ <mj-section>
6
+ <mj-column css-class="hero">
7
+ <mj-text mj-class="heading">{{ 'order_mailer.store_owner_notification_email.heading' | t }}</mj-text>
8
+ <mj-text mj-class="lead">{{ 'order_mailer.store_owner_notification_email.instructions' | t }}</mj-text>
9
+ </mj-column>
10
+ </mj-section>
11
+ {% render 'spree/shared/order_summary', heading: heading, purchase: order, items: order.items, totals: true %}
@@ -0,0 +1,19 @@
1
+ ---
2
+ subject: "{% if resend %}[{{ 'resend' | t }}] {% endif %}{{ store.name }} {{ 'return_mailer.refunded_email.subject' | t }} #{{ order.number }}"
3
+ ---
4
+ {% assign heading = 'return_mailer.refunded_email.returned_items' | t %}
5
+ <mj-section>
6
+ <mj-column css-class="hero">
7
+ <mj-text mj-class="heading">{{ 'return_mailer.refunded_email.subject' | t }}</mj-text>
8
+ <mj-text mj-class="greeting">{{ 'return_mailer.refunded_email.dear_customer' | t: name: order.customer_name }}</mj-text>
9
+ <mj-text mj-class="lead">{{ 'return_mailer.refunded_email.instructions' | t: number: order.number }}</mj-text>
10
+ </mj-column>
11
+ </mj-section>
12
+ <mj-section padding="48px 0 0">
13
+ <mj-column>
14
+ <mj-text mj-class="section-heading" padding="0 0 16px">{{ 'return_mailer.refunded_email.refund_summary' | t }}</mj-text>
15
+ {%- assign refunded_total = return.refunded_total | money -%}
16
+ <mj-text mj-class="body" padding="0" font-weight="500" color="{{ store.branding.heading_color }}">{{ 'return_mailer.refunded_email.total_refunded' | t: total: refunded_total }}</mj-text>
17
+ </mj-column>
18
+ </mj-section>
19
+ {% render 'spree/shared/order_summary', heading: heading, purchase: order, items: return.returned_items, totals: false %}
@@ -0,0 +1,13 @@
1
+ ---
2
+ subject: "{{ 'seller_mailer.approved_email.subject' | t: store_name: store.name }}"
3
+ ---
4
+ <mj-section>
5
+ <mj-column css-class="hero">
6
+ <mj-text mj-class="heading">{{ 'seller_mailer.approved_email.heading' | t }}</mj-text>
7
+ <mj-text mj-class="greeting">{{ 'seller_mailer.greeting' | t: seller_name: seller.name }}</mj-text>
8
+ <mj-text mj-class="lead">{{ 'seller_mailer.approved_email.message' | t: store_name: store.name }}</mj-text>
9
+ {% if dashboard_url %}
10
+ <mj-button href="{{ dashboard_url }}">{{ 'seller_mailer.approved_email.action' | t }}</mj-button>
11
+ {% endif %}
12
+ </mj-column>
13
+ </mj-section>
@@ -0,0 +1,11 @@
1
+ ---
2
+ subject: "{{ 'seller_mailer.rejected_email.subject' | t: store_name: store.name }}"
3
+ ---
4
+ <mj-section>
5
+ <mj-column css-class="hero">
6
+ <mj-text mj-class="heading">{{ 'seller_mailer.rejected_email.heading' | t }}</mj-text>
7
+ <mj-text mj-class="greeting">{{ 'seller_mailer.greeting' | t: seller_name: seller.name }}</mj-text>
8
+ <mj-text mj-class="lead">{{ 'seller_mailer.rejected_email.message' | t: store_name: store.name }}</mj-text>
9
+ <mj-text mj-class="note">{{ 'seller_mailer.get_in_touch' | t: store_email: store.mail_from_address }}</mj-text>
10
+ </mj-column>
11
+ </mj-section>
@@ -0,0 +1,11 @@
1
+ ---
2
+ subject: "{{ 'seller_mailer.suspended_email.subject' | t: store_name: store.name }}"
3
+ ---
4
+ <mj-section>
5
+ <mj-column css-class="hero">
6
+ <mj-text mj-class="heading">{{ 'seller_mailer.suspended_email.heading' | t }}</mj-text>
7
+ <mj-text mj-class="greeting">{{ 'seller_mailer.greeting' | t: seller_name: seller.name }}</mj-text>
8
+ <mj-text mj-class="lead">{{ 'seller_mailer.suspended_email.message' | t: store_name: store.name }}</mj-text>
9
+ <mj-text mj-class="note">{{ 'seller_mailer.get_in_touch' | t: store_email: store.mail_from_address }}</mj-text>
10
+ </mj-column>
11
+ </mj-section>
@@ -0,0 +1,25 @@
1
+ {%- comment -%}
2
+ One real parcel of a purchase: the goods it carries and what it cost to
3
+ deliver. A purchase arriving in one parcel is not numbered.
4
+ Arguments: group, position, count.
5
+ {%- endcomment -%}
6
+ <mj-section padding="48px 0 0">
7
+ <mj-column>
8
+ <mj-text mj-class="section-heading" padding="0 0 16px">
9
+ {%- if count > 1 -%}{{ 'order_group_mailer.delivery_numbered' | t: position: position, count: count }}{%- else -%}{{ 'order_group_mailer.delivery' | t }}{%- endif -%}
10
+ </mj-text>
11
+ {%- if group.seller_names.size > 0 -%}
12
+ {%- assign sellers = group.seller_names | join: ', ' -%}
13
+ <mj-text mj-class="note" align="left" padding="0 0 16px">{{ 'order_group_mailer.sold_by' | t: sellers: sellers }}</mj-text>
14
+ {%- endif -%}
15
+ {% render 'spree/shared/line_item' for group.items as item %}
16
+ <mj-table css-class="summary" padding="16px 0 0">
17
+ {%- if group.unpriced -%}
18
+ {%- assign cost = 'delivery_rates.quoted_after_review' | t -%}
19
+ {%- else -%}
20
+ {%- assign cost = group.cost | money -%}
21
+ {%- endif -%}
22
+ {% render 'spree/shared/summary_row', label: 'shipping', translate: true, sub: group.name, value: cost %}
23
+ </mj-table>
24
+ </mj-column>
25
+ </mj-section>
@@ -0,0 +1,29 @@
1
+ {%- comment -%}
2
+ One purchased line as a tile: thumbnail, name, options, quantity and amount.
3
+ Arguments: item.
4
+ {%- endcomment -%}
5
+ <mj-table padding="0 0 8px">
6
+ <tr>
7
+ <td>
8
+ <table class="item" width="100%" cellpadding="0" cellspacing="0" role="presentation" style="width: 100%; background-color: #F0F0F0; border-radius: 16px;">
9
+ <tr>
10
+ <td class="item_image" width="96" valign="middle" style="padding: 8px; width: 96px;">
11
+ {%- if item.image_url -%}
12
+ <a href="{{ item.url }}"><img src="{{ item.image_url }}" alt="{{ item.name }}" width="80" class="item_thumb" style="display: block; width: 80px; height: auto; border-radius: 12px;" /></a>
13
+ {%- else -%}
14
+ <a href="{{ item.url }}" aria-label="{{ item.name }}" style="display: block; width: 80px; height: 80px; background-color: #E4E4E4; border-radius: 12px; text-decoration: none;">&#160;</a>
15
+ {%- endif -%}
16
+ </td>
17
+ <td class="item_info" valign="middle">
18
+ <a href="{{ item.url }}" class="item_name">{{ item.name }}</a>
19
+ {%- if item.options_text != blank -%}<p class="item_meta">{{ item.options_text }}</p>{%- endif -%}
20
+ </td>
21
+ <td class="item_amount" align="right" valign="middle">
22
+ <p class="item_qty">{{ item.quantity }} x {{ item.price | money }}</p>
23
+ <p class="item_price">{{ item.amount | money }}</p>
24
+ </td>
25
+ </tr>
26
+ </table>
27
+ </td>
28
+ </tr>
29
+ </mj-table>
@@ -0,0 +1,17 @@
1
+ {%- comment -%}
2
+ A headed list of purchased lines, with the purchase's totals unless the
3
+ lines are only part of it (one parcel's items, say).
4
+ Arguments: heading, purchase, items, totals.
5
+ {%- endcomment -%}
6
+ <mj-section padding="48px 0 0">
7
+ <mj-column>
8
+ <mj-text mj-class="section-heading" padding="0 0 16px">{{ heading }}</mj-text>
9
+ {%- if purchase.po_number != blank -%}
10
+ <mj-text mj-class="body" padding="0 0 16px">{{ 'order_mailer.po_number' | t: number: purchase.po_number }}</mj-text>
11
+ {%- endif -%}
12
+ {% render 'spree/shared/line_item' for items as item %}
13
+ {%- if totals -%}
14
+ {% render 'spree/shared/purchase_totals', purchase: purchase %}
15
+ {%- endif -%}
16
+ </mj-column>
17
+ </mj-section>
@@ -0,0 +1,35 @@
1
+ {%- comment -%}
2
+ Every figure of an order or a purchase, once. Arguments: purchase.
3
+ {%- endcomment -%}
4
+ {%- assign tax_total = purchase.additional_tax_total | plus: 0 -%}
5
+ {%- assign gift_card_total = purchase.gift_card_total | plus: 0 -%}
6
+ <mj-table css-class="summary" padding="16px 0 0">
7
+ {%- assign value = purchase.item_total | money -%}
8
+ {% render 'spree/shared/summary_row', label: 'order_mailer.subtotal', translate: true, value: value %}
9
+ {%- for line in purchase.promotion_discounts -%}
10
+ {%- assign value = line.amount | money -%}
11
+ {% render 'spree/shared/summary_row', label: 'promotion', translate: true, sub: line.label, value: value %}
12
+ {%- endfor -%}
13
+ {%- for line in purchase.delivery_lines -%}
14
+ {%- assign value = line.amount | money -%}
15
+ {% render 'spree/shared/summary_row', label: 'shipping', translate: true, sub: line.label, value: value %}
16
+ {%- endfor -%}
17
+ {%- if tax_total != 0 -%}
18
+ {%- assign value = purchase.additional_tax_total | money -%}
19
+ {% render 'spree/shared/summary_row', label: 'tax', translate: true, value: value %}
20
+ {%- endif -%}
21
+ {%- if gift_card_total > 0 -%}
22
+ {%- assign gift_card_value = purchase.gift_card_total | money | prepend: '-' -%}
23
+ {% render 'spree/shared/summary_row', label: 'gift_card', translate: true, value: gift_card_value %}
24
+ {%- endif -%}
25
+ {%- for line in purchase.manual_discounts -%}
26
+ {%- assign value = line.amount | money -%}
27
+ {% render 'spree/shared/summary_row', label: line.label, value: value %}
28
+ {%- endfor -%}
29
+ {%- for line in purchase.fee_lines -%}
30
+ {%- assign value = line.amount | money -%}
31
+ {% render 'spree/shared/summary_row', label: line.label, value: value %}
32
+ {%- endfor -%}
33
+ {%- assign value = purchase.total_minus_store_credits | money -%}
34
+ {% render 'spree/shared/summary_row', label: 'order_mailer.total', translate: true, value: value, total: true %}
35
+ </mj-table>
@@ -0,0 +1,61 @@
1
+ # Generates TypeScript types for the data customer email templates receive,
2
+ # into @spree/admin-sdk as Email* types, for the dashboard's template editor.
3
+ # Runs only under `bundle exec rake typelizer:generate`.
4
+ Rails.application.config.after_initialize do
5
+ next unless defined?(Typelizer) && ENV['ENABLE_TYPELIZER']
6
+
7
+ emails_root = Spree::Emails::Engine.root
8
+
9
+ # Core's email serializers cannot depend on Typelizer, and two of the
10
+ # customer email serializers stand alone, so they get its DSL here.
11
+ [Spree::Emails::BaseSerializer, Spree::Emails::AmountLineSerializer, Spree::Emails::FulfillmentGroupSerializer].each do |serializer|
12
+ serializer.extend(Typelizer::DSL) unless serializer.respond_to?(:typelize)
13
+ end
14
+
15
+ Spree::Emails::AmountLineSerializer.typelize(label: [:string, nullable: true], amount: :string)
16
+ Spree::Emails::FulfillmentGroupSerializer.typelize(name: [:string, nullable: true], unpriced: :boolean, cost: :string,
17
+ seller_names: [:string, multi: true],
18
+ # Declared before Typelizer's hooks were attached, so it
19
+ # cannot tell this association is a list.
20
+ items: [:EmailParcelItem, multi: true])
21
+ Spree::Emails::ParcelItemSerializer.typelize(
22
+ id: :string, name: :string, quantity: :number, sku: [:string, nullable: true], options_text: [:string, nullable: true],
23
+ price: :string, amount: :string, url: [:string, nullable: true],
24
+ image_url: [:string, nullable: true]
25
+ )
26
+ Spree::Emails::StoreSerializer.typelize(
27
+ id: :string, name: :string, address: [:string, nullable: true], mail_from_address: :string, default_currency: :string,
28
+ default_locale: :string, url: :string, support_email: :string, logo_url: [:string, nullable: true],
29
+ logo_width: [:number, nullable: true],
30
+ branding: '{ background_color: string; card_color: string; text_color: string; heading_color: string; ' \
31
+ 'accent_color: string | null; link_color: string; button_color: string; button_text_color: string; ' \
32
+ 'button_border: string; font: string; font_family: string; heading_font_family: string; font_url: string | null }'
33
+ )
34
+
35
+ # Staff emails are not editable, so their data has no type.
36
+ staff = %w[User Invitation Import Export WebhookEndpoint].to_set
37
+
38
+ Typelizer.configure do |config|
39
+ config.dirs += [emails_root.join('app/serializers/spree/emails'), Spree::Core::Engine.root.join('app/serializers/spree/emails')]
40
+
41
+ # Their own folder in the admin SDK; the Store API types they nest
42
+ # (Payment, Address, ...) import from the admin SDK's types of that name.
43
+ # Self-contained in their own folder: every record an email serializes has
44
+ # an email serializer of its own, so these types describe exactly what
45
+ # templates receive.
46
+ config.writer(:emails, from: :admin) do |c|
47
+ c.output_dir = emails_root.join('../../packages/admin-sdk/src/types/generated/emails')
48
+ c.types_import_path = '.'
49
+ c.reject_class = ->(serializer:) {
50
+ name = serializer.name.to_s
51
+ bare = name.delete_prefix('Spree::Emails::').delete_suffix('Serializer')
52
+ !name.start_with?('Spree::Emails::') || staff.include?(bare) || bare == 'Base'
53
+ }
54
+ c.serializer_name_mapper = ->(serializer) {
55
+ "Email#{serializer.name.to_s.delete_prefix('Spree::Emails::').delete_suffix('Serializer')}"
56
+ }
57
+ # Associations a request must ask for (`expand`) never reach an email.
58
+ c.properties_transformer = ->(properties) { properties.reject(&:optional) }
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,40 @@
1
+ ---
2
+ ar:
3
+ spree:
4
+ customer_mailer:
5
+ password_reset_email:
6
+ action: إعادة تعيين كلمة المرور
7
+ expiry_notice: ستنتهي صلاحية رابط إعادة تعيين كلمة المرور هذا قريبًا. إذا لم تطلب ذلك، فلا داعي لاتخاذ أي إجراء.
8
+ greeting: مرحبًا %{name}،
9
+ ignore_notice: إذا لم تطلب إعادة تعيين كلمة المرور، فيمكنك تجاهل هذا البريد الإلكتروني بأمان. لن يتم تغيير كلمة مرورك.
10
+ instructions: تلقينا طلبًا لإعادة تعيين كلمة مرورك. انقر على الزر أدناه لاختيار كلمة مرور جديدة.
11
+ subject: تعليمات إعادة تعيين كلمة المرور
12
+ newsletter_mailer:
13
+ email_confirmation:
14
+ dear_customer: مرحبًا،
15
+ ignore_disclaimer: إذا لم تطلب ذلك، يُرجى تجاهل هذا البريد الإلكتروني.
16
+ instructions: يُرجى النقر على الزر أدناه للتحقق من عنوان بريدك الإلكتروني.
17
+ message_copy_link: 'إذا لم يعمل الزر، يُرجى نسخ الرابط التالي ولصقه في متصفحك:'
18
+ subject: تحقق من عنوان بريدك الإلكتروني
19
+ verify_email_address_link: تحقق من عنوان البريد الإلكتروني
20
+ order_mailer:
21
+ cancel_email:
22
+ dear_customer: " عزيزي %{name} ، "
23
+ instructions: " تم إلغاء طلبك. يرجى الاحتفاظ بمعلومات الإلغاء هذه لسجلاتك. "
24
+ subject: " إلغاء الطلب "
25
+ confirm_email:
26
+ dear_customer: " عزيزي %{name}، "
27
+ instructions: " يرجى مراجعة معلومات الطلب التالية والاحتفاظ بها لسجلاتك "
28
+ subject: " تأكيد الطلب "
29
+ payment_link_email:
30
+ message: يُرجى النقر على الزر أدناه لدفع قيمة طلبك.
31
+ message_copy_link: 'إذا لم يعمل الزر، يُرجى نسخ الرابط التالي ولصقه في متصفحك:'
32
+ pay_for_order: ادفع قيمة الطلب
33
+ subject: رابط الدفع للطلب رقم %{number}
34
+ store_owner_notification_email:
35
+ heading: تم استلام طلب جديد
36
+ instructions: لقد تلقيت طلبًا جديدًا.
37
+ order_summary: ملخص الطلب %{number}
38
+ subject: استلم %{store_name} طلبًا جديدًا
39
+ subtotal: 'المجموع الفرعي:'
40
+ total: 'إجمالي الطلب:'
@@ -0,0 +1,37 @@
1
+ ---
2
+ be:
3
+ spree:
4
+ customer_mailer:
5
+ password_reset_email:
6
+ action: Скінуць пароль
7
+ expiry_notice: Гэта спасылка для скіду пароля хутка згіне. Калі вы не запытвалі гэта, ніякіх дзеянняў не патрабуецца.
8
+ greeting: Прывітанне, %{name}!
9
+ ignore_notice: Калі вы не запытвалі скід пароля, вы можаце спакойна праігнараваць гэты ліст. Ваш пароль не будзе зменены.
10
+ instructions: Мы атрымалі запыт на скід вашага пароля. Націсніце кнопку ніжэй, каб выбраць новы пароль.
11
+ newsletter_mailer:
12
+ email_confirmation:
13
+ dear_customer: Прывітанне,
14
+ ignore_disclaimer: Калі вы не запытвалі гэта, калі ласка, праігнаруйце гэты ліст.
15
+ instructions: Калі ласка, націсніце кнопку ніжэй, каб пацвердзіць ваш адрас электроннай пошты.
16
+ message_copy_link: 'Калі кнопка не працуе, скапіруйце і ўстаўце наступную спасылку ў ваш браўзер:'
17
+ subject: Пацвердзіце ваш адрас электроннай пошты
18
+ verify_email_address_link: Пацвердзіць адрас электроннай пошты
19
+ order_mailer:
20
+ cancel_email:
21
+ instructions: Ваш заказ быў адменены. Захавайце гэтую інфармацыю.
22
+ subject: Ануляванне замовы
23
+ confirm_email:
24
+ instructions: Калі ласка, праверце дэталі замовы.
25
+ subject: Пацвярджэнне заказу
26
+ payment_link_email:
27
+ message: Калі ласка, націсніце кнопку ніжэй, каб аплаціць ваш заказ.
28
+ message_copy_link: 'Калі кнопка не працуе, скапіруйце і ўстаўце наступную спасылку ў ваш браўзер:'
29
+ pay_for_order: Аплаціць заказ
30
+ subject: 'Спасылка на аплату заказу #%{number}'
31
+ store_owner_notification_email:
32
+ heading: Атрыманы новы заказ
33
+ instructions: Вы атрымалі новы заказ.
34
+ order_summary: Зводка заказу %{number}
35
+ subject: "%{store_name} атрымала новы заказ"
36
+ subtotal: 'Прамежкавы вынік:'
37
+ total: 'Усяго па заказе:'
@@ -0,0 +1,31 @@
1
+ ---
2
+ bg:
3
+ spree:
4
+ customer_mailer:
5
+ password_reset_email:
6
+ action: Нулиране на паролата
7
+ expiry_notice: Тази връзка за нулиране на паролата ще изтече скоро. Ако не сте поискали това, не е необходимо действие.
8
+ greeting: Здравейте, %{name},
9
+ ignore_notice: Ако не сте поискали нулиране на паролата, можете спокойно да игнорирате този имейл. Паролата ви няма да бъде променена.
10
+ instructions: Получихме заявка за нулиране на паролата ви. Натиснете бутона по-долу, за да изберете нова парола.
11
+ newsletter_mailer:
12
+ email_confirmation:
13
+ dear_customer: Здравейте,
14
+ ignore_disclaimer: Ако не сте поискали това, моля, игнорирайте този имейл.
15
+ instructions: Моля, натиснете бутона по-долу, за да потвърдите имейл адреса си.
16
+ message_copy_link: 'Ако бутонът не работи, моля, копирайте и поставете следната връзка в браузъра си:'
17
+ subject: Потвърдете имейл адреса си
18
+ verify_email_address_link: Потвърди имейл адреса
19
+ order_mailer:
20
+ payment_link_email:
21
+ message: Моля, натиснете бутона по-долу, за да платите за вашата поръчка.
22
+ message_copy_link: 'Ако бутонът не работи, моля, копирайте и поставете следната връзка в браузъра си:'
23
+ pay_for_order: Плати за поръчката
24
+ subject: Връзка за плащане на поръчка №%{number}
25
+ store_owner_notification_email:
26
+ heading: Получена нова поръчка
27
+ instructions: Получихте нова поръчка.
28
+ order_summary: Обобщение на поръчка %{number}
29
+ subject: "%{store_name} получи нова поръчка"
30
+ subtotal: 'Междинна сума:'
31
+ total: 'Обща сума на поръчката:'
@@ -0,0 +1,35 @@
1
+ ---
2
+ ca:
3
+ spree:
4
+ customer_mailer:
5
+ password_reset_email:
6
+ action: Restableix la contrasenya
7
+ expiry_notice: Aquest enllaç per restablir la contrasenya caducarà aviat. Si no ho heu sol·licitat, no cal fer res.
8
+ greeting: Hola %{name},
9
+ ignore_notice: Si no heu sol·licitat restablir la contrasenya, podeu ignorar aquest correu electrònic amb tota tranquil·litat. La vostra contrasenya no es canviarà.
10
+ instructions: Hem rebut una sol·licitud per restablir la vostra contrasenya. Feu clic al botó de sota per triar-ne una de nova.
11
+ newsletter_mailer:
12
+ email_confirmation:
13
+ dear_customer: Hola,
14
+ ignore_disclaimer: Si no ho heu sol·licitat, ignoreu aquest correu electrònic.
15
+ instructions: Feu clic al botó de sota per verificar la vostra adreça de correu electrònic.
16
+ message_copy_link: 'Si el botó no funciona, copieu i enganxeu l''enllaç següent al vostre navegador:'
17
+ subject: Verifiqueu la vostra adreça de correu electrònic
18
+ verify_email_address_link: Verifica l'adreça de correu electrònic
19
+ order_mailer:
20
+ cancel_email:
21
+ subject: Cancel·lació de comanda
22
+ confirm_email:
23
+ subject: Confirmació de comanda
24
+ payment_link_email:
25
+ message: Feu clic al botó de sota per pagar la vostra comanda.
26
+ message_copy_link: 'Si el botó no funciona, copieu i enganxeu l''enllaç següent al vostre navegador:'
27
+ pay_for_order: Paga la comanda
28
+ subject: 'Enllaç de pagament per a la comanda #%{number}'
29
+ store_owner_notification_email:
30
+ heading: Nova comanda rebuda
31
+ instructions: Heu rebut una comanda nova.
32
+ order_summary: Resum de la comanda %{number}
33
+ subject: "%{store_name} ha rebut una comanda nova"
34
+ subtotal: 'Subtotal:'
35
+ total: 'Total de la comanda:'