spree_core 6.0.0.beta4 → 6.0.0.rc1

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 (495) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/app/helpers/spree/images_helper.rb +0 -57
  4. data/app/jobs/spree/base_job.rb +21 -0
  5. data/app/jobs/spree/carts/reap_expired_job.rb +2 -2
  6. data/app/jobs/spree/collections/regenerate_time_based_job.rb +6 -3
  7. data/app/jobs/spree/orders/finalize_stale_drafts_job.rb +8 -5
  8. data/app/jobs/spree/payments/cancel_unused_sessions_job.rb +61 -0
  9. data/app/jobs/spree/seller_payouts/sweep_seller_job.rb +2 -0
  10. data/app/mailers/spree/admin_user_mailer.rb +4 -19
  11. data/app/mailers/spree/base_mailer.rb +96 -13
  12. data/app/mailers/spree/email_template_mailer.rb +27 -0
  13. data/app/mailers/spree/export_mailer.rb +3 -4
  14. data/app/mailers/spree/import_mailer.rb +3 -4
  15. data/app/mailers/spree/invitation_mailer.rb +24 -7
  16. data/app/mailers/spree/seller_user_mailer.rb +4 -16
  17. data/app/mailers/spree/webhook_mailer.rb +2 -2
  18. data/app/models/concerns/spree/acted_by.rb +1 -1
  19. data/app/models/concerns/spree/admin_user_methods.rb +13 -1
  20. data/app/models/concerns/spree/api_typed.rb +91 -0
  21. data/app/models/concerns/spree/calculator/tiers.rb +76 -0
  22. data/app/models/concerns/spree/customer_methods.rb +15 -14
  23. data/app/models/concerns/spree/email_template_identity.rb +52 -0
  24. data/app/models/concerns/spree/parameterizable_name.rb +2 -0
  25. data/app/models/concerns/spree/payment_session_transitions.rb +8 -2
  26. data/app/models/concerns/spree/post_sale/taxation.rb +54 -0
  27. data/app/models/concerns/spree/post_sale/taxed_line.rb +51 -0
  28. data/app/models/concerns/spree/preference_schema.rb +4 -12
  29. data/app/models/concerns/spree/product_scopes.rb +11 -1
  30. data/app/models/concerns/spree/provider_listing.rb +41 -0
  31. data/app/models/concerns/spree/publishable.rb +82 -14
  32. data/app/models/concerns/spree/purchase/addresses.rb +23 -10
  33. data/app/models/concerns/spree/purchase/currency.rb +1 -1
  34. data/app/models/concerns/spree/purchase/deprecated_aliases.rb +87 -0
  35. data/app/models/concerns/spree/purchase/gift_cards.rb +10 -4
  36. data/app/models/concerns/spree/purchase/locale.rb +1 -1
  37. data/app/models/concerns/spree/purchase/payment_processing.rb +7 -3
  38. data/app/models/concerns/spree/purchase/purchase_order.rb +2 -2
  39. data/app/models/concerns/spree/purchase/totals.rb +49 -1
  40. data/app/models/concerns/spree/receivable.rb +1 -1
  41. data/app/models/concerns/spree/searchable.rb +0 -4
  42. data/app/models/concerns/spree/secret_preferences.rb +59 -0
  43. data/app/models/concerns/spree/single_store_resource.rb +1 -1
  44. data/app/models/concerns/spree/stores/email_branding.rb +31 -0
  45. data/app/models/concerns/spree/type_labels.rb +38 -0
  46. data/app/models/concerns/spree/typed_adjustment_line.rb +1 -1
  47. data/app/models/concerns/spree/typed_associations.rb +6 -0
  48. data/app/models/spree/address.rb +11 -1
  49. data/app/models/spree/adjusters/promotion.rb +1 -15
  50. data/app/models/spree/allowed_origin.rb +0 -1
  51. data/app/models/spree/api_key.rb +5 -6
  52. data/app/models/spree/authentication/strategies/oidc_strategy.rb +5 -5
  53. data/app/models/spree/base.rb +70 -22
  54. data/app/models/spree/calculator/flat_percent_item_total.rb +1 -3
  55. data/app/models/spree/calculator/flat_rate.rb +1 -3
  56. data/app/models/spree/calculator/flexi_rate.rb +1 -3
  57. data/app/models/spree/calculator/percent_on_line_item.rb +1 -1
  58. data/app/models/spree/calculator/price_sack.rb +1 -3
  59. data/app/models/spree/calculator/shipping/digital_delivery.rb +1 -3
  60. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -3
  61. data/app/models/spree/calculator/shipping/flat_rate.rb +1 -3
  62. data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -3
  63. data/app/models/spree/calculator/shipping/per_item.rb +1 -3
  64. data/app/models/spree/calculator/shipping/price_sack.rb +1 -3
  65. data/app/models/spree/calculator/tiered_flat_rate.rb +6 -23
  66. data/app/models/spree/calculator/tiered_percent.rb +7 -25
  67. data/app/models/spree/cart.rb +78 -18
  68. data/app/models/spree/channel/gating.rb +1 -1
  69. data/app/models/spree/channel.rb +4 -4
  70. data/app/models/spree/claim.rb +21 -1
  71. data/app/models/spree/claim_line_item.rb +41 -6
  72. data/app/models/spree/collection.rb +0 -1
  73. data/app/models/spree/collection_rule.rb +5 -21
  74. data/app/models/spree/commission_line.rb +1 -1
  75. data/app/models/spree/commission_rate.rb +2 -3
  76. data/app/models/spree/commission_rate_value.rb +1 -1
  77. data/app/models/spree/commission_rule.rb +4 -11
  78. data/app/models/spree/commission_rules/product_rule.rb +1 -1
  79. data/app/models/spree/company_invitation.rb +1 -0
  80. data/app/models/spree/consent_record.rb +0 -1
  81. data/app/models/spree/credit_card.rb +1 -1
  82. data/app/models/spree/current.rb +23 -0
  83. data/app/models/spree/custom_field.rb +2 -2
  84. data/app/models/spree/custom_field_definition.rb +9 -23
  85. data/app/models/spree/custom_fields/boolean.rb +1 -1
  86. data/app/models/spree/custom_fields/json.rb +1 -1
  87. data/app/models/spree/data_feed/google.rb +0 -2
  88. data/app/models/spree/data_request.rb +1 -1
  89. data/app/models/spree/delivery_method.rb +30 -13
  90. data/app/models/spree/delivery_method_rule.rb +4 -11
  91. data/app/models/spree/delivery_rate.rb +4 -5
  92. data/app/models/spree/delivery_rate_provider/base.rb +1 -0
  93. data/app/models/spree/delivery_zone.rb +0 -1
  94. data/app/models/spree/delivery_zone_member.rb +4 -4
  95. data/app/models/spree/digital_asset.rb +7 -0
  96. data/app/models/spree/digital_asset_provider/base.rb +2 -0
  97. data/app/models/spree/digital_link.rb +2 -5
  98. data/app/models/spree/discount.rb +1 -1
  99. data/app/models/spree/email_template.rb +25 -0
  100. data/app/models/spree/email_template_draft.rb +13 -0
  101. data/app/models/spree/email_template_revision.rb +17 -0
  102. data/app/models/spree/email_templates/entry.rb +118 -0
  103. data/app/models/spree/email_templates/sample_record.rb +16 -0
  104. data/app/models/spree/emails/branding.rb +80 -0
  105. data/app/models/spree/exchange.rb +15 -1
  106. data/app/models/spree/exchange_line_item.rb +121 -5
  107. data/app/models/spree/export.rb +0 -1
  108. data/app/models/spree/exports/products.rb +10 -1
  109. data/app/models/spree/exports/report.rb +1 -1
  110. data/app/models/spree/fee.rb +4 -2
  111. data/app/models/spree/fulfillment.rb +53 -27
  112. data/app/models/spree/fulfillment_changer.rb +2 -2
  113. data/app/models/spree/fulfillment_item.rb +0 -4
  114. data/app/models/spree/fulfillment_provider/base.rb +1 -0
  115. data/app/models/spree/gateway/bogus.rb +4 -0
  116. data/app/models/spree/gateway/custom_payment_source_method.rb +5 -0
  117. data/app/models/spree/gateway.rb +5 -1
  118. data/app/models/spree/gift_card.rb +12 -1
  119. data/app/models/spree/gift_card_batch.rb +0 -1
  120. data/app/models/spree/import.rb +2 -7
  121. data/app/models/spree/import_mapping.rb +1 -2
  122. data/app/models/spree/import_row.rb +2 -2
  123. data/app/models/spree/import_schemas/products.rb +1 -0
  124. data/app/models/spree/integration.rb +8 -18
  125. data/app/models/spree/invitation.rb +5 -5
  126. data/app/models/spree/line_item.rb +13 -2
  127. data/app/models/spree/locale.rb +11 -8
  128. data/app/models/spree/market.rb +1 -0
  129. data/app/models/spree/newsletter_subscriber.rb +3 -0
  130. data/app/models/spree/order.rb +56 -138
  131. data/app/models/spree/order_group.rb +11 -2
  132. data/app/models/spree/order_inventory.rb +10 -5
  133. data/app/models/spree/order_promotion.rb +1 -1
  134. data/app/models/spree/order_routing/has_strategy_preference.rb +1 -1
  135. data/app/models/spree/order_routing/strategy/base.rb +4 -2
  136. data/app/models/spree/order_routing/strategy/rules.rb +1 -1
  137. data/app/models/spree/order_routing_rule.rb +6 -22
  138. data/app/models/spree/package_type.rb +1 -2
  139. data/app/models/spree/payment/gateway_options.rb +14 -52
  140. data/app/models/spree/payment/processing.rb +2 -4
  141. data/app/models/spree/payment.rb +20 -5
  142. data/app/models/spree/payment_method/session_instrumentation.rb +1 -0
  143. data/app/models/spree/payment_method/store_credit.rb +4 -4
  144. data/app/models/spree/payment_method.rb +36 -4
  145. data/app/models/spree/payment_session.rb +5 -1
  146. data/app/models/spree/payment_setup_session.rb +1 -0
  147. data/app/models/spree/payout_provider/base.rb +3 -1
  148. data/app/models/spree/pickup_point_provider/base.rb +2 -0
  149. data/app/models/spree/price_list.rb +1 -2
  150. data/app/models/spree/price_rules/channel_rule.rb +1 -1
  151. data/app/models/spree/price_rules/customer_group_rule.rb +1 -1
  152. data/app/models/spree/product.rb +31 -7
  153. data/app/models/spree/product_submission.rb +0 -12
  154. data/app/models/spree/product_type.rb +0 -1
  155. data/app/models/spree/promotion/actions/create_line_items.rb +27 -17
  156. data/app/models/spree/promotion/rules/category.rb +0 -4
  157. data/app/models/spree/promotion/rules/channel.rb +0 -4
  158. data/app/models/spree/promotion/rules/country.rb +0 -4
  159. data/app/models/spree/promotion/rules/currency.rb +0 -4
  160. data/app/models/spree/promotion/rules/customer_group.rb +0 -4
  161. data/app/models/spree/promotion/rules/first_order.rb +0 -4
  162. data/app/models/spree/promotion/rules/item_total.rb +4 -8
  163. data/app/models/spree/promotion/rules/market.rb +0 -4
  164. data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -4
  165. data/app/models/spree/promotion/rules/option_value.rb +0 -3
  166. data/app/models/spree/promotion/rules/product.rb +0 -4
  167. data/app/models/spree/promotion/rules/user.rb +0 -4
  168. data/app/models/spree/promotion/rules/user_logged_in.rb +0 -4
  169. data/app/models/spree/promotion.rb +35 -6
  170. data/app/models/spree/promotion_action.rb +7 -14
  171. data/app/models/spree/promotion_action_line_item.rb +1 -1
  172. data/app/models/spree/promotion_handler/coupon.rb +59 -27
  173. data/app/models/spree/promotion_rule.rb +7 -14
  174. data/app/models/spree/purchase_order.rb +1 -0
  175. data/app/models/spree/quantity_rule.rb +1 -1
  176. data/app/models/spree/refund.rb +28 -3
  177. data/app/models/spree/return.rb +30 -2
  178. data/app/models/spree/return_line_item.rb +65 -14
  179. data/app/models/spree/role.rb +7 -7
  180. data/app/models/spree/saved_report.rb +1 -1
  181. data/app/models/spree/seller.rb +2 -1
  182. data/app/models/spree/seller_payout.rb +7 -0
  183. data/app/models/spree/seller_requirement.rb +4 -12
  184. data/app/models/spree/seller_requirement_custom_field.rb +1 -2
  185. data/app/models/spree/seller_requirement_submission.rb +2 -2
  186. data/app/models/spree/seller_requirements/accept_terms.rb +2 -3
  187. data/app/models/spree/seller_transfer.rb +5 -0
  188. data/app/models/spree/shipping_label.rb +1 -0
  189. data/app/models/spree/stock/availability_validator.rb +2 -2
  190. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  191. data/app/models/spree/stock/packer.rb +2 -2
  192. data/app/models/spree/stock/splitter/weight.rb +1 -1
  193. data/app/models/spree/stock_level/custom_events.rb +6 -0
  194. data/app/models/spree/stock_level.rb +1 -1
  195. data/app/models/spree/stock_movement.rb +1 -1
  196. data/app/models/spree/stock_receipt_item.rb +1 -1
  197. data/app/models/spree/stock_reservation.rb +2 -2
  198. data/app/models/spree/stock_transfer.rb +4 -2
  199. data/app/models/spree/store.rb +33 -7
  200. data/app/models/spree/store_credit.rb +8 -9
  201. data/app/models/spree/store_credit_event.rb +5 -5
  202. data/app/models/spree/tax_exemption_certificate.rb +2 -0
  203. data/app/models/spree/tax_identifier.rb +3 -1
  204. data/app/models/spree/tax_line.rb +53 -3
  205. data/app/models/spree/tax_provider/base.rb +71 -14
  206. data/app/models/spree/tax_provider/internal.rb +59 -33
  207. data/app/models/spree/tax_provider/recorded_share.rb +114 -0
  208. data/app/models/spree/tax_rate.rb +1 -2
  209. data/app/models/spree/taxonomy.rb +0 -1
  210. data/app/models/spree/variant.rb +4 -3
  211. data/app/models/spree/variant_media.rb +1 -1
  212. data/app/models/spree/webhook_endpoint.rb +10 -13
  213. data/app/models/spree/wishlist.rb +1 -6
  214. data/app/models/spree/wishlist_item/custom_events.rb +6 -0
  215. data/app/presenters/spree/csv/customer_presenter.rb +1 -1
  216. data/app/presenters/spree/csv/newsletter_subscriber_presenter.rb +1 -1
  217. data/app/presenters/spree/csv/order_line_item_presenter.rb +1 -1
  218. data/app/presenters/spree/csv/product_variant_presenter.rb +42 -12
  219. data/app/serializers/spree/emails/base_serializer.rb +14 -0
  220. data/app/serializers/spree/emails/export_serializer.rb +13 -0
  221. data/app/serializers/spree/emails/import_serializer.rb +19 -0
  222. data/app/serializers/spree/emails/invitation_serializer.rb +28 -0
  223. data/app/serializers/spree/emails/store_serializer.rb +31 -0
  224. data/app/serializers/spree/emails/user_serializer.rb +12 -0
  225. data/app/serializers/spree/emails/webhook_endpoint_serializer.rb +16 -0
  226. data/app/services/spree/carts/create.rb +8 -2
  227. data/app/services/spree/carts/destroy.rb +2 -2
  228. data/app/services/spree/carts/remove_out_of_stock_items.rb +2 -2
  229. data/app/services/spree/carts/split_by_seller.rb +1 -1
  230. data/app/services/spree/carts/update.rb +19 -5
  231. data/app/services/spree/catalogs/set_product_terms.rb +1 -1
  232. data/app/services/spree/categories/add_products.rb +13 -31
  233. data/app/services/spree/categories/remove_products.rb +12 -51
  234. data/app/services/spree/checkout/advance.rb +1 -4
  235. data/app/services/spree/collections/add_products.rb +10 -23
  236. data/app/services/spree/collections/remove_products.rb +7 -43
  237. data/app/services/spree/coupon_codes/bulk_generate.rb +8 -14
  238. data/app/services/spree/data_requests/create.rb +1 -1
  239. data/app/services/spree/deliveries/destroy.rb +2 -2
  240. data/app/services/spree/email_templates/check.rb +58 -0
  241. data/app/services/spree/email_templates/no_sample_record.rb +7 -0
  242. data/app/services/spree/email_templates/preview.rb +99 -0
  243. data/app/services/spree/emails/file_system.rb +23 -0
  244. data/app/services/spree/emails/filters.rb +84 -0
  245. data/app/services/spree/emails/liquid_context.rb +48 -0
  246. data/app/services/spree/emails/rendered_email.rb +14 -0
  247. data/app/services/spree/emails/renderer.rb +125 -0
  248. data/app/services/spree/emails/template.rb +51 -0
  249. data/app/services/spree/emails/template_data.rb +23 -0
  250. data/app/services/spree/emails/template_resolver.rb +109 -0
  251. data/app/services/spree/emails/text_converter.rb +72 -0
  252. data/app/services/spree/emails/translation_inliner.rb +134 -0
  253. data/app/services/spree/imports/row_processors/price_list_price.rb +10 -10
  254. data/app/services/spree/imports/row_processors/product_variant.rb +65 -34
  255. data/app/services/spree/imports/row_processors/purchase_order.rb +13 -13
  256. data/app/services/spree/locales.rb +4 -5
  257. data/app/services/spree/newsletter/subscribe.rb +8 -12
  258. data/app/services/spree/orders/build_fulfillments.rb +3 -2
  259. data/app/services/spree/orders/create.rb +2 -1
  260. data/app/services/spree/orders/discounts/create.rb +7 -4
  261. data/app/services/spree/orders/discounts/destroy.rb +1 -0
  262. data/app/services/spree/orders/discounts/update.rb +1 -0
  263. data/app/services/spree/orders/fees/create.rb +1 -0
  264. data/app/services/spree/orders/fees/destroy.rb +1 -0
  265. data/app/services/spree/orders/fees/update.rb +1 -0
  266. data/app/services/spree/orders/remove_line_item.rb +13 -3
  267. data/app/services/spree/orders/update.rb +10 -6
  268. data/app/services/spree/orders/update_item.rb +6 -3
  269. data/app/services/spree/orders/update_statuses.rb +3 -1
  270. data/app/services/spree/product_memberships.rb +61 -0
  271. data/app/services/spree/returns/eligibility_validator.rb +1 -1
  272. data/app/services/spree/search_provider/custom_field_schema.rb +2 -2
  273. data/app/services/spree/seeds/commission_rates.rb +1 -1
  274. data/app/services/spree/seeds/digital_delivery.rb +1 -1
  275. data/app/services/spree/seeds/payment_methods.rb +2 -2
  276. data/app/services/spree/seeds/saved_reports.rb +3 -3
  277. data/app/services/spree/sellers/requirements.rb +1 -2
  278. data/app/services/spree/shipping_labels/confirm_refund.rb +1 -1
  279. data/app/services/spree/shipping_labels/store_file.rb +3 -3
  280. data/app/services/spree/stock_levels/correct.rb +3 -3
  281. data/app/services/spree/stock_reservations/reserve.rb +2 -3
  282. data/app/services/spree/store_credits/apply.rb +15 -13
  283. data/app/services/spree/stores/provision_defaults.rb +15 -14
  284. data/app/subscribers/spree/seller_onboarding_subscriber.rb +1 -1
  285. data/app/views/layouts/spree/base_mailer.html.erb +2 -43
  286. data/app/views/layouts/spree/base_mailer.liquid +79 -0
  287. data/app/views/spree/admin_user_mailer/password_reset_email.liquid +14 -0
  288. data/app/views/spree/export_mailer/export_done.liquid +12 -0
  289. data/app/views/spree/import_mailer/import_done.liquid +15 -0
  290. data/app/views/spree/invitation_mailer/invitation_accepted.liquid +9 -0
  291. data/app/views/spree/invitation_mailer/invitation_email.liquid +13 -0
  292. data/app/views/spree/seller_user_mailer/password_reset_email.liquid +14 -0
  293. data/app/views/spree/shared/_mailer_button.html.erb +4 -5
  294. data/app/views/spree/shared/_mailer_hero.html.erb +6 -5
  295. data/app/views/spree/shared/_summary_row.liquid +8 -0
  296. data/app/views/spree/webhook_mailer/endpoint_disabled.liquid +21 -0
  297. data/app/workflows/spree/carts/add_item.rb +4 -4
  298. data/app/workflows/spree/carts/complete.rb +13 -3
  299. data/app/workflows/spree/carts/merge.rb +1 -1
  300. data/app/workflows/spree/carts/recalculate_totals.rb +5 -0
  301. data/app/workflows/spree/carts/upsert_items.rb +18 -9
  302. data/app/workflows/spree/claims/approve.rb +5 -22
  303. data/app/workflows/spree/claims/cancel.rb +5 -21
  304. data/app/workflows/spree/claims/create.rb +15 -0
  305. data/app/workflows/spree/claims/deny.rb +7 -0
  306. data/app/workflows/spree/claims/resolve.rb +34 -31
  307. data/app/workflows/spree/customers/anonymize.rb +3 -4
  308. data/app/workflows/spree/customers/create.rb +1 -1
  309. data/app/workflows/spree/data_requests/fulfill.rb +2 -2
  310. data/app/workflows/spree/deliveries/update_tracking.rb +1 -1
  311. data/app/workflows/spree/email_templates/discard_draft.rb +20 -0
  312. data/app/workflows/spree/email_templates/publish.rb +70 -0
  313. data/app/workflows/spree/email_templates/restore_revision.rb +33 -0
  314. data/app/workflows/spree/email_templates/revert.rb +29 -0
  315. data/app/workflows/spree/email_templates/save_draft.rb +85 -0
  316. data/app/workflows/spree/exchanges/approve.rb +5 -22
  317. data/app/workflows/spree/exchanges/cancel.rb +5 -21
  318. data/app/workflows/spree/exchanges/create.rb +6 -0
  319. data/app/workflows/spree/exchanges/fulfill.rb +75 -51
  320. data/app/workflows/spree/exchanges/receive.rb +6 -65
  321. data/app/workflows/spree/fulfillments/cancel.rb +1 -1
  322. data/app/workflows/spree/fulfillments/create.rb +51 -47
  323. data/app/workflows/spree/fulfillments/fulfill.rb +23 -27
  324. data/app/workflows/spree/fulfillments/mark_delivered.rb +1 -1
  325. data/app/workflows/spree/fulfillments/replacements.rb +59 -0
  326. data/app/workflows/spree/gift_cards/apply.rb +2 -2
  327. data/app/workflows/spree/orders/add_item.rb +5 -1
  328. data/app/workflows/spree/orders/cancel.rb +3 -3
  329. data/app/workflows/spree/orders/complete.rb +16 -8
  330. data/app/workflows/spree/payments/process.rb +2 -2
  331. data/app/workflows/spree/post_sale/approval.rb +35 -0
  332. data/app/workflows/spree/post_sale/cancellation.rb +44 -0
  333. data/app/workflows/spree/post_sale/receipt.rb +92 -0
  334. data/app/workflows/spree/products/nested_attributes.rb +1 -1
  335. data/app/workflows/spree/purchase_orders/cancel.rb +1 -1
  336. data/app/workflows/spree/purchase_orders/close.rb +3 -31
  337. data/app/workflows/spree/purchase_orders/mark_draft.rb +2 -2
  338. data/app/workflows/spree/purchase_orders/mark_ordered.rb +2 -2
  339. data/app/workflows/spree/purchase_orders/receive.rb +1 -1
  340. data/app/workflows/spree/purchase_orders/update.rb +5 -34
  341. data/app/workflows/spree/receivables/closing_short.rb +46 -0
  342. data/app/workflows/spree/receivables/draft_editing.rb +48 -0
  343. data/app/workflows/spree/refunds/create.rb +5 -2
  344. data/app/workflows/spree/refunds/order_payments.rb +14 -2
  345. data/app/workflows/spree/refunds/tax_credit.rb +67 -0
  346. data/app/workflows/spree/returns/approve.rb +5 -22
  347. data/app/workflows/spree/returns/cancel.rb +5 -22
  348. data/app/workflows/spree/returns/create.rb +8 -0
  349. data/app/workflows/spree/returns/receive.rb +5 -76
  350. data/app/workflows/spree/returns/refund.rb +31 -8
  351. data/app/workflows/spree/seller_requirement_submissions/create.rb +1 -2
  352. data/app/workflows/spree/seller_transfers/reverse.rb +28 -1
  353. data/app/workflows/spree/shipping_labels/purchase.rb +8 -8
  354. data/app/workflows/spree/shipping_labels/record.rb +5 -5
  355. data/app/workflows/spree/shipping_labels/refund.rb +2 -2
  356. data/app/workflows/spree/stock_receipts/recording.rb +4 -4
  357. data/app/workflows/spree/stock_transfers/cancel.rb +2 -2
  358. data/app/workflows/spree/stock_transfers/close.rb +3 -30
  359. data/app/workflows/spree/stock_transfers/mark_draft.rb +1 -1
  360. data/app/workflows/spree/stock_transfers/mark_in_transit.rb +3 -3
  361. data/app/workflows/spree/stock_transfers/mark_ready.rb +2 -2
  362. data/app/workflows/spree/stock_transfers/receive.rb +1 -1
  363. data/app/workflows/spree/stock_transfers/update.rb +5 -33
  364. data/config/i18n-tasks.yml +32 -18
  365. data/config/initializers/alba.rb +7 -0
  366. data/config/language_names.csv +264 -0
  367. data/config/locales/ar.yml +811 -0
  368. data/config/locales/be.yml +855 -0
  369. data/config/locales/bg.yml +723 -0
  370. data/config/locales/ca.yml +689 -0
  371. data/config/locales/cs.yml +855 -0
  372. data/config/locales/da.yml +771 -0
  373. data/config/locales/de-CH.yml +248 -0
  374. data/config/locales/de.yml +835 -0
  375. data/config/locales/el.yml +769 -0
  376. data/config/locales/en.yml +37 -503
  377. data/config/locales/es-CL.yml +301 -0
  378. data/config/locales/es-EC.yml +186 -0
  379. data/config/locales/es-MX.yml +334 -0
  380. data/config/locales/es.yml +831 -0
  381. data/config/locales/et.yml +644 -0
  382. data/config/locales/fa.yml +709 -0
  383. data/config/locales/fi.yml +771 -0
  384. data/config/locales/fr.yml +830 -0
  385. data/config/locales/hu.yml +751 -0
  386. data/config/locales/id.yml +756 -0
  387. data/config/locales/it.yml +833 -0
  388. data/config/locales/ja.yml +726 -0
  389. data/config/locales/km.yml +759 -0
  390. data/config/locales/ko.yml +575 -0
  391. data/config/locales/ku.yml +753 -0
  392. data/config/locales/lt.yml +821 -0
  393. data/config/locales/lv.yml +685 -0
  394. data/config/locales/nb.yml +824 -0
  395. data/config/locales/ne.yml +823 -0
  396. data/config/locales/nl.yml +826 -0
  397. data/config/locales/pl.yml +835 -0
  398. data/config/locales/pt-BR.yml +547 -0
  399. data/config/locales/pt.yml +636 -0
  400. data/config/locales/ro.yml +750 -0
  401. data/config/locales/ru.yml +834 -0
  402. data/config/locales/sk.yml +680 -0
  403. data/config/locales/sl-SI.yml +600 -0
  404. data/config/locales/sv.yml +827 -0
  405. data/config/locales/th.yml +745 -0
  406. data/config/locales/tr.yml +777 -0
  407. data/config/locales/uk.yml +836 -0
  408. data/config/locales/vi.yml +768 -0
  409. data/config/locales/zh-CN.yml +786 -0
  410. data/config/locales/zh-TW.yml +834 -0
  411. data/db/migrate/20260925000001_add_replacement_to_spree_fulfillment_items.rb +5 -0
  412. data/db/migrate/20261001000001_add_post_sale_tax.rb +30 -0
  413. data/db/migrate/20261001000001_convert_preferences_to_json.rb +166 -0
  414. data/db/migrate/20261001000001_create_spree_email_templates.rb +52 -0
  415. data/lib/generators/spree/dummy/dummy_generator.rb +0 -9
  416. data/lib/generators/spree/dummy/templates/rails/test.rb +7 -0
  417. data/lib/spree/checkout/default_requirements.rb +37 -13
  418. data/lib/spree/core/configuration.rb +1 -1
  419. data/lib/spree/core/controller_helpers/store.rb +1 -1
  420. data/lib/spree/core/dependencies.rb +5 -4
  421. data/lib/spree/core/emails/escaped_output.rb +60 -0
  422. data/lib/spree/core/engine.rb +48 -167
  423. data/lib/spree/core/permissions/default_catalog.rb +5 -0
  424. data/lib/spree/core/preferences/json_conversion.rb +182 -0
  425. data/lib/spree/core/preferences/masking.rb +4 -1
  426. data/lib/spree/core/preferences/preferable.rb +137 -83
  427. data/lib/spree/core/preferences/preferable_class_methods.rb +81 -146
  428. data/lib/spree/core/previews/import_preview.rb +10 -0
  429. data/lib/spree/core/tax/provider_error.rb +37 -0
  430. data/lib/spree/core/version.rb +1 -1
  431. data/lib/spree/core.rb +85 -370
  432. data/lib/spree/emails/editable_templates.rb +82 -0
  433. data/lib/spree/events/catalog.rb +189 -0
  434. data/lib/spree/events.rb +21 -1
  435. data/lib/spree/hooks.rb +0 -17
  436. data/lib/spree/i18n.rb +32 -15
  437. data/lib/spree/reporting/adapters/live.rb +6 -6
  438. data/lib/spree/reporting/default_vocabulary.rb +22 -10
  439. data/lib/spree/reporting/hydration.rb +1 -1
  440. data/lib/spree/reporting/query.rb +8 -0
  441. data/lib/spree/reporting/schema.rb +10 -10
  442. data/lib/spree/testing_support/editable_email_templates.rb +61 -0
  443. data/lib/spree/testing_support/emails.rb +22 -0
  444. data/lib/spree/testing_support/factories/cart_factory.rb +1 -1
  445. data/lib/spree/testing_support/factories/email_template_factory.rb +28 -0
  446. data/lib/spree/testing_support/factories/order_factory.rb +2 -2
  447. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  448. data/lib/spree/testing_support/factories/stock_factory.rb +1 -1
  449. data/lib/spree/testing_support/factories/variant_factory.rb +1 -1
  450. data/lib/spree/testing_support/i18n.rb +3 -94
  451. data/lib/spree/testing_support/lifecycle_events.rb +1 -1
  452. data/lib/spree/testing_support/order_walkthrough.rb +1 -1
  453. data/lib/spree/testing_support/preferences.rb +0 -5
  454. data/lib/spree/testing_support/store.rb +9 -1
  455. data/lib/spree/upgrades/5_6_to_6_0/manifest.yml +45 -0
  456. data/lib/tasks/categories_and_collections.rake +3 -3
  457. data/lib/tasks/core.rake +6 -4
  458. data/lib/tasks/media.rake +3 -3
  459. data/lib/tasks/package_types.rake +1 -1
  460. data/lib/tasks/preferences_json.rake +101 -0
  461. data/spec/fixtures/mailer_views/custom_views_probe_mailer/welcome_email.html.erb +4 -0
  462. metadata +188 -44
  463. data/app/models/acts_as_taggable_on/tag_decorator.rb +0 -10
  464. data/app/models/concerns/spree/has_image_alt_text.rb +0 -18
  465. data/app/models/spree/base_analytics_event_handler.rb +0 -54
  466. data/app/models/spree/invitations/store.rb +0 -6
  467. data/app/models/spree/preference.rb +0 -14
  468. data/app/models/spree/promotion_handler/page.rb +0 -25
  469. data/app/models/spree/promotion_handler/promotion_duplicator.rb +0 -60
  470. data/app/models/spree/stock/differentiator.rb +0 -45
  471. data/app/presenters/spree/filters/options_presenter.rb +0 -47
  472. data/app/services/spree/carts/empty.rb +0 -42
  473. data/app/services/spree/country_to_timezone.rb +0 -273
  474. data/app/services/spree/payments/create.rb +0 -92
  475. data/app/validators/spree/url_validator.rb +0 -23
  476. data/app/views/active_storage/blobs/_blob.html.erb +0 -14
  477. data/app/views/spree/admin_user_mailer/password_reset_email.html.erb +0 -8
  478. data/app/views/spree/export_mailer/export_done.html.erb +0 -7
  479. data/app/views/spree/import_mailer/import_done.html.erb +0 -12
  480. data/app/views/spree/invitation_mailer/invitation_accepted.html.erb +0 -4
  481. data/app/views/spree/invitation_mailer/invitation_email.html.erb +0 -12
  482. data/app/views/spree/seller_user_mailer/password_reset_email.html.erb +0 -8
  483. data/app/views/spree/shared/_base_mailer_footer.html.erb +0 -19
  484. data/app/views/spree/shared/_base_mailer_header.html.erb +0 -8
  485. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +0 -399
  486. data/app/views/spree/shared/_mailer_logo.html.erb +0 -41
  487. data/app/views/spree/shared/_purchased_items_styles.html.erb +0 -119
  488. data/app/views/spree/webhook_mailer/endpoint_disabled.html.erb +0 -51
  489. data/app/views/spree/webhook_mailer/endpoint_disabled.text.erb +0 -10
  490. data/app/workflows/spree/fulfillments/purchase_label.rb +0 -40
  491. data/app/workflows/spree/returns/purchase_label.rb +0 -32
  492. data/lib/spree/analytics.rb +0 -11
  493. data/lib/spree/core/preferences/scoped_store.rb +0 -34
  494. data/lib/spree/core/preferences/store.rb +0 -105
  495. data/lib/spree/translation_migrations.rb +0 -52
@@ -0,0 +1,786 @@
1
+ ---
2
+ zh-CN:
3
+ activemodel:
4
+ errors:
5
+ messages:
6
+ blank: 不能为空
7
+ activerecord:
8
+ attributes:
9
+ spree/address:
10
+ address1: 地址1
11
+ address2: 地址2(非必填)
12
+ city: 城市
13
+ company: 公司
14
+ country: 国家
15
+ label: 地址名称
16
+ phone: 电话
17
+ state: 省份
18
+ spree/country:
19
+ iso: ISO
20
+ iso3: ISO3
21
+ iso_name: ISO名称
22
+ name: 名称
23
+ numcode: ISO编号
24
+ spree/credit_card:
25
+ cc_type: 信用卡类型
26
+ month: 月份
27
+ name: 持卡人姓名
28
+ number: 卡号
29
+ verification_value: 验证码
30
+ year: 年份
31
+ spree/customer_group:
32
+ description: 描述
33
+ name: 名称
34
+ spree/gift_card:
35
+ amount_used: 已使用金额
36
+ expires_at: 过期时间
37
+ spree/import:
38
+ preferred_delimiter: 分隔符
39
+ spree/import_mapping:
40
+ file_column: 文件列
41
+ schema_field: 架构字段
42
+ spree/import_row:
43
+ row_number: 编号
44
+ spree/inventory_unit:
45
+ state: 状态
46
+ spree/invitation:
47
+ inviter: 邀请人
48
+ spree/line_item:
49
+ price: 单价
50
+ quantity: 数量
51
+ spree/option_type:
52
+ filterable: 可筛选
53
+ kind: 类型
54
+ name: 名称
55
+ spree/option_value:
56
+ color_code: 颜色代码
57
+ image: 色卡图片
58
+ spree/order:
59
+ checkout_complete: 完成结账
60
+ completed_at: 结账日期
61
+ considered_risky: 风险
62
+ coupon_code: 优惠券号码
63
+ created_at: 下单日期
64
+ email: 电子邮件
65
+ internal_note: 内部备注
66
+ ip_address: IP地址
67
+ item_count: 商品数量
68
+ item_total: 小记
69
+ number: 订单号
70
+ payment_state: 支付状态
71
+ shipment_state: 物流状态
72
+ special_instructions: 特别说明
73
+ state: 状态
74
+ total: 总计
75
+ spree/order/bill_address:
76
+ address1: 地址
77
+ city: 城市
78
+ phone: 电话
79
+ state: 省份
80
+ spree/order/ship_address:
81
+ address1: 地址
82
+ city: 城市
83
+ phone: 电话
84
+ state: 省份
85
+ spree/payment:
86
+ amount: 金额
87
+ number: 编号
88
+ spree/payment_method:
89
+ name: 名称
90
+ spree/policy:
91
+ body: 正文
92
+ owner: 适用对象
93
+ spree/price_list:
94
+ description: 描述
95
+ ends_at: 结束时间
96
+ match_policy: 匹配策略
97
+ name: 名称
98
+ priority: 优先级
99
+ starts_at: 开始时间
100
+ status: 状态
101
+ spree/price_rule:
102
+ priority: 优先级
103
+ type: 类型
104
+ spree/product:
105
+ available_on: 上架日期
106
+ cost_currency: 成本币种
107
+ cost_price: 成本
108
+ description: 描述
109
+ discontinue_on: 停售日期
110
+ less_than: 小于
111
+ make_active_at: 上架时间
112
+ master_price: 默认价格
113
+ more_than: 大于
114
+ name: 名称
115
+ on_hand: 库存
116
+ tax_category: 缴税分类
117
+ spree/promotion:
118
+ advertise: 推广
119
+ code: 编号
120
+ description: 描述
121
+ event_name: 事件名称
122
+ expires_at: 过期日期
123
+ generate_code: 生成优惠码
124
+ name: 名称
125
+ path: 路径
126
+ promotion_category: 促销分类
127
+ starts_at: 开始日期
128
+ usage_limit: 使用次数限制
129
+ spree/promotion_category:
130
+ code: 编号
131
+ name: 名称
132
+ spree/property:
133
+ name: 名称
134
+ presentation: 描述
135
+ spree/role:
136
+ name: ming cheng
137
+ spree/shipment:
138
+ number: 编号
139
+ spree/state:
140
+ abbr: 缩写
141
+ name: 名称
142
+ spree/store:
143
+ address: 地址
144
+ contact_phone: 联系电话
145
+ meta_description: meta描述语
146
+ meta_keywords: meta关键词
147
+ name: 名称
148
+ preferred_digital_asset_authorized_clicks: 下载点击次数限制
149
+ preferred_digital_asset_authorized_days: 下载天数限制
150
+ preferred_limit_digital_download_count: 限制数字链接下载次数
151
+ preferred_limit_digital_download_days: 限制数字链接下载天数
152
+ seo_robots: SEO 爬虫指令
153
+ seo_title: SEO 标题
154
+ storefront_custom_code_body_end: body 结束标签前的自定义代码
155
+ storefront_custom_code_body_start: body 开始标签后的自定义代码
156
+ storefront_custom_code_head: 页面 head 中的自定义代码
157
+ url: URL地址
158
+ spree/store_credit:
159
+ amount_used: 已使用金额
160
+ spree/tax_category:
161
+ description: 描述
162
+ name: 名称
163
+ spree/tax_rate:
164
+ amount: 税率
165
+ included_in_price: 包含在售价中
166
+ show_rate_in_label: 在标签中显示比率
167
+ spree/taxon:
168
+ name: 名称
169
+ permalink: 永久链接
170
+ position: 位置
171
+ sort_order: 排序顺序
172
+ spree/taxonomy:
173
+ name: 名称
174
+ spree/user:
175
+ avatar: 头像
176
+ email: 电子邮箱
177
+ password: 密码
178
+ password_confirmation: 确认密码
179
+ spree/variant:
180
+ cost_currency: 成本币种
181
+ cost_price: 成本
182
+ depth: 长度/深度
183
+ height: 高度
184
+ price: 单价
185
+ sku: 条码
186
+ weight: 重量
187
+ width: 宽度
188
+ spree/zone:
189
+ description: 描述
190
+ name: 名称
191
+ user:
192
+ current_sign_in: 本次登录时间
193
+ last_sign_in: 上次登录时间
194
+ sign_in_count: 登录次数
195
+ errors:
196
+ messages:
197
+ blank: 不能为空
198
+ models:
199
+ spree/allowed_origin:
200
+ attributes:
201
+ origin:
202
+ must_be_origin_only: 必须是源(协议和主机),不能包含路径、查询或片段
203
+ spree/classification:
204
+ attributes:
205
+ taxon_id:
206
+ already_linked: 已经关联
207
+ spree/credit_card:
208
+ attributes:
209
+ base:
210
+ card_expired: 信用卡过期
211
+ expiry_invalid: 信用卡过期日不正确
212
+ spree/gift_card:
213
+ attributes:
214
+ base:
215
+ cannot_destroy_used_gift_card: 无法删除已使用的礼品卡
216
+ spree/import:
217
+ attributes:
218
+ attachment:
219
+ content_type: 的内容类型不被允许
220
+ type:
221
+ inclusion: 不在允许的类型列表中
222
+ spree/market:
223
+ attributes:
224
+ base:
225
+ cannot_destroy_default_market: 无法删除默认市场。
226
+ cannot_destroy_last_market: 无法删除唯一的市场。
227
+ spree/market_country:
228
+ attributes:
229
+ country:
230
+ already_in_market: 已被分配到本店铺的另一个市场
231
+ not_in_shipping_zone: 未被任何配送区域覆盖。请先设置配送区域。
232
+ spree/payment:
233
+ attributes:
234
+ amount:
235
+ greater_than_max_amount: 超过了允许的最大金额 %{max_amount}
236
+ spree/price_list:
237
+ attributes:
238
+ ends_at:
239
+ must_be_after_starts_at: 必须晚于开始时间
240
+ spree/product:
241
+ attributes:
242
+ base:
243
+ cannot_destroy_if_attached_to_line_items: 无法删除已添加到已下达订单中的商品。这种情况下,请将其停售。
244
+ discontinue_on:
245
+ invalid_date_range: 必须晚于上架日期
246
+ spree/product_publication:
247
+ attributes:
248
+ unpublished_at:
249
+ must_be_after_published_at: 必须晚于发布日期
250
+ spree/promotion:
251
+ attributes:
252
+ expires_at:
253
+ invalid_date_range: 必须晚于开始日期
254
+ spree/store:
255
+ attributes:
256
+ base:
257
+ cannot_destroy_only_store: 无法删除唯一的店铺。
258
+ spree/store_credit:
259
+ attributes:
260
+ amount_authorized:
261
+ exceeds_total_credits: 超过了总额度。
262
+ amount_used:
263
+ cannot_be_greater_than_amount: 不能大于总金额。
264
+ greater_than_zero_restrict_delete: 大于零,无法删除店铺积分。
265
+ spree/user:
266
+ attributes:
267
+ bill_address_id:
268
+ belongs_to_other_user: 属于其他用户
269
+ deprecated_in_completed_order: 在已完成订单中已弃用
270
+ ship_address_id:
271
+ belongs_to_other_user: 属于其他用户
272
+ deprecated_in_completed_order: 在已完成订单中已弃用
273
+ spree/variant:
274
+ attributes:
275
+ base:
276
+ cannot_destroy_if_attached_to_line_items: 无法删除已添加到已下达订单中的变体。这种情况下,请将其停售。
277
+ spree/webhook_endpoint:
278
+ attributes:
279
+ url:
280
+ internal_address_not_allowed: 不能指向内部或私有网络地址
281
+ models:
282
+ spree/address:
283
+ one: 地址
284
+ other: 地址
285
+ spree/classification:
286
+ one: 分类
287
+ other: 分类
288
+ spree/country:
289
+ one: 国家
290
+ other: 国家
291
+ spree/credit_card:
292
+ one: 信用卡
293
+ other: 信用卡
294
+ spree/customer_group:
295
+ one: 客户群组
296
+ other: 客户群组
297
+ spree/customer_group_user:
298
+ one: 客户群组成员
299
+ other: 客户群组成员
300
+ spree/export:
301
+ one: 导出
302
+ other: 导出
303
+ spree/integration:
304
+ one: 集成
305
+ other: 集成
306
+ spree/inventory_unit:
307
+ one: 库存单位
308
+ other: 库存单位
309
+ spree/line_item:
310
+ one: 单项
311
+ other: 单项
312
+ spree/option_type:
313
+ one: 选项类型
314
+ other: 选项类型
315
+ spree/option_value:
316
+ one: 选项值
317
+ other: 选项值
318
+ spree/order:
319
+ one: 订单
320
+ other: 订单
321
+ spree/payment:
322
+ one: 支付
323
+ other: 支付
324
+ spree/payment_method:
325
+ one: 支付方式
326
+ other: 支付方式
327
+ spree/price:
328
+ one: 价格
329
+ other: 价格
330
+ spree/price_list:
331
+ one: 价格表
332
+ other: 价格表
333
+ spree/price_rule:
334
+ one: 价格规则
335
+ other: 价格规则
336
+ spree/product:
337
+ one: 产品
338
+ other: 产品
339
+ spree/promotion:
340
+ one: 促销
341
+ other: 促销
342
+ spree/promotion_category:
343
+ one: 促销分类
344
+ other: 促销分类
345
+ spree/property:
346
+ one: 属性
347
+ other: 属性
348
+ spree/refund_reason:
349
+ one: 退款原因
350
+ other: 退款原因
351
+ spree/role:
352
+ one: 角色
353
+ other: 角色
354
+ spree/shipment:
355
+ one: 物流
356
+ other: 物流
357
+ spree/shipping_method:
358
+ one: 配送方式
359
+ other: 配送方式
360
+ spree/state:
361
+ one: 省份
362
+ other: 省份
363
+ spree/stock_location:
364
+ one: 库存地点
365
+ other: 库存地点
366
+ spree/stock_movement:
367
+ one: 库存变动
368
+ other: 库存变动
369
+ spree/stock_transfer:
370
+ one: 库存转移
371
+ other: 库存转移
372
+ spree/store:
373
+ one: 店铺
374
+ other: 店铺
375
+ spree/store_credit:
376
+ one: Store Credit
377
+ other: Store Credits
378
+ spree/tax_category:
379
+ one: 缴税分类
380
+ other: 缴税分类
381
+ spree/tax_rate:
382
+ one: 税率
383
+ other: 税率
384
+ spree/taxon:
385
+ one: 分类
386
+ other: 分类
387
+ spree/taxonomy:
388
+ one: 分类
389
+ other: 分类
390
+ spree/user:
391
+ one: 用户
392
+ other: 用户
393
+ spree/variant:
394
+ one: 具体型号
395
+ other: 具体型号
396
+ spree/zone:
397
+ one: 区域
398
+ other: 区域
399
+ errors:
400
+ messages:
401
+ already_confirmed: 已被确认
402
+ not_found: 无法找到
403
+ not_locked: 未冻结
404
+ not_saved:
405
+ one: 有 1 个错误导致此%{resource}无法保存:
406
+ other: 有 %{count} 个错误导致此%{resource}无法保存:
407
+ number:
408
+ percentage:
409
+ format:
410
+ precision: 1
411
+ spree:
412
+ accept: 接受
413
+ accepted: 已接收
414
+ accepts_email_marketing: 接受邮件营销
415
+ account: 帐户
416
+ active: 激活
417
+ address: 地址
418
+ address1: 地址
419
+ address2: 地址(继续)
420
+ adjustment: 调整
421
+ adjustment_labels:
422
+ tax_rates:
423
+ excluding_tax: "%{name}%{amount}"
424
+ including_tax: "%{name}%{amount} (Included in Price)"
425
+ adjustments_deleted: 调整项已删除
426
+ admin_user_mailer:
427
+ password_reset_email:
428
+ action: 重置密码
429
+ expiry_notice: 此密码重置链接即将过期。如果这不是您本人操作,则无需采取任何措施。
430
+ greeting: 您好,%{name}:
431
+ ignore_notice: 如果您没有请求重置密码,可以放心忽略此邮件。您的密码不会被更改。
432
+ instructions: 我们收到了重置您 %{store_name} 管理员账户密码的请求。请点击下方按钮设置新密码。
433
+ subject: 密码重置说明
434
+ all: 全部
435
+ amount: 金额
436
+ api_key_no_current_key: 没有 API 密钥对此请求进行身份验证
437
+ api_key_scopes_immutable: 在密钥创建后无法更改;请创建一个拥有所需权限范围的新密钥并吊销此密钥
438
+ approver: 核准者
439
+ authorized: 已经审批
440
+ availability: 可用性
441
+ backorderable: 可预订
442
+ backordered: 待补
443
+ bill_address: 账单地址
444
+ billing_address: 账单地址
445
+ calculator: 计算器
446
+ canceled: 已经取消
447
+ cannot_be_destroyed: 订单无法删除。
448
+ capture: 付款
449
+ cart: 购物车
450
+ cart_already_updated: 购物车已更新。
451
+ cart_line_item:
452
+ delivery_unavailable: "%{li_name} 无法配送至所选地址"
453
+ discontinued: "%{li_name} 因已停售而被移除"
454
+ out_of_stock: "%{li_name} 因已售罄而被移除"
455
+ categories: 分类
456
+ category: 分类
457
+ channel: 销售渠道
458
+ channels: 销售渠道
459
+ checkout: 结账
460
+ checkout_requirements:
461
+ email_required: 需要填写电子邮箱地址
462
+ line_items_required: 请至少向购物车中添加一件商品
463
+ payment_required: 请添加支付方式
464
+ ship_address_required: 需要填写收货地址
465
+ city: 城市
466
+ color_code: 颜色代码
467
+ company: 公司
468
+ compare_at_amount: 原价金额
469
+ compare_at_price: 原价
470
+ complete: 完成
471
+ confirm: 确认
472
+ cost_price: 进货价
473
+ count_on_hand: 库存数量
474
+ country: 国家
475
+ coupon_code: 优惠券号码
476
+ coupon_code_already_applied: 优惠券号码已在本订单中使用
477
+ coupon_code_applied: 优惠券号码已在订单中生效。
478
+ coupon_code_expired: 优惠券号码已过期
479
+ coupon_code_max_usage: 优惠券号码使用次数超出限制
480
+ coupon_code_not_eligible: 您的订单号码无法在您的订单上生效。
481
+ coupon_code_not_found: 您所输入的优惠券号码不存在。请重新输入。
482
+ coupon_code_used: 您输入的优惠码已被使用。请重试。
483
+ created_at: 创建日期
484
+ credit_card: 信用卡
485
+ currency: 币种
486
+ currency_not_supported_by_store: 不被本店铺支持
487
+ customer: 顾客
488
+ customers: 客户
489
+ default: 默认
490
+ default_stock_location_name: 店铺地点
491
+ default_wishlist_name: 心愿单
492
+ delivery: 配送
493
+ depth: 长
494
+ description: 描述
495
+ destination: 目的地
496
+ destroy: 删除
497
+ details: 详情
498
+ digital:
499
+ digital_delivery: 数字交付
500
+ digital_assets: 数字资产
501
+ discontinued: 已停售
502
+ discontinued_variants_present: 此订单中的部分商品已不再供应。
503
+ display_delivery_range: "%{delivery_range} 个工作日内送达"
504
+ draft: 草稿
505
+ eligibility_errors:
506
+ messages:
507
+ no_matching_channel: 此优惠码不适用于该销售渠道。
508
+ no_matching_market: 此优惠码在您所在的市场不可用。
509
+ wrong_country: 此优惠码不适用于您所在的国家/地区
510
+ email: 电子邮件
511
+ error: 错误
512
+ error_user_destroy_with_orders: 无法删除关联了订单的用户
513
+ error_user_does_not_have_any_store_credits: 用户没有任何可用的店铺积分
514
+ errors:
515
+ messages:
516
+ cannot_delete_default_channel: 无法删除默认渠道。请先将另一个渠道设为默认。
517
+ channel_store_mismatch: 必须属于同一店铺
518
+ invalid_order_routing_rule: 不是已注册的订单路由规则
519
+ invalid_order_routing_strategy: 不是已注册的订单路由策略
520
+ store_association_can_not_be_changed: 店铺关联无法更改
521
+ store_is_already_set: 店铺已设置
522
+ expired: 已过期
523
+ export_mailer:
524
+ export_done:
525
+ message: 干得好,您的导出已就绪!请使用下方链接下载。
526
+ subject: 您的导出 %{export_number} 已成功处理!
527
+ greeting: 您好,%{user_name}:
528
+ field: 字段
529
+ first_name: 名
530
+ flat_percent: 固定费率
531
+ flat_rate_per_order: 固定费率 (每订单)
532
+ flexible_rate: 灵活费率
533
+ free: 免费
534
+ gateway: 网关
535
+ gateway_error: 网关出错
536
+ gift_card: 礼品卡
537
+ gift_card_already_redeemed: 该礼品卡已被兑换。
538
+ gift_card_applied: 礼品卡已成功应用于您的订单!
539
+ gift_card_customer_not_logged_in: 礼品卡无法用于访客用户。
540
+ gift_card_expired: 该礼品卡已过期。
541
+ gift_card_mismatched_currency: 礼品卡无法用于当前货币。
542
+ gift_card_mismatched_customer: 此礼品卡与另一用户关联。
543
+ gift_card_not_found: 未找到该礼品卡。
544
+ gift_card_removed: 礼品卡已成功从您的订单中移除
545
+ gift_card_using_store_credit_error: 在使用店铺积分后,您无法再应用礼品卡。
546
+ height: 高度
547
+ i18n:
548
+ this_file_language: 中文 简体 (zh-CN)
549
+ idempotency_key_reused: 此 Idempotency-Key 已使用不同的请求参数被使用过。
550
+ image: 图片
551
+ import: 导入
552
+ in_stock: 有货
553
+ internal_note: 内部备注
554
+ inventory: 库存
555
+ invitation_mailer:
556
+ greeting: 您好,%{user_name}:
557
+ invitation_accepted:
558
+ body: "%{invitee_name} 已接受您加入 %{resource_name} 的邀请"
559
+ subject: "%{invitee_name} 已接受您加入 %{resource_name} 的邀请"
560
+ invitation_email:
561
+ body: "%{inviter_name} 邀请您加入 %{resource_name}"
562
+ link_description: 要接受此邀请,请点击下方链接:
563
+ subject: 加入 %{resource_name} 的邀请
564
+ iso: ISO Alpha-2
565
+ item: 商品项
566
+ items_cannot_be_shipped: 商品无法发货
567
+ key: 密钥
568
+ kind: 类型
569
+ label: 标签
570
+ last_name: 姓
571
+ line_item: 订单项
572
+ line_items: 订单项
573
+ link: 链接
574
+ locale: 语言区域
575
+ locale_not_supported_by_store: 不被本店铺支持
576
+ manual: 手动
577
+ market: 市场
578
+ me_no_current_user: 没有管理员用户对此请求进行身份验证
579
+ media: 媒体
580
+ meta_description: 元描述
581
+ meta_keywords: 关键字
582
+ meta_title: 元标题
583
+ metadata: 元数据
584
+ min_quantity: 最小数量
585
+ month: 月
586
+ name: 名称
587
+ new_variant: 新建具体型号
588
+ no_cc_type: 不适用
589
+ none: 没有
590
+ number: 订单号
591
+ on_hand: 库存
592
+ only_active_products_can_be_added_to_cart: 草稿和已归档的商品无法加入购物车,请先将商品标记为已上架。
593
+ open: 打开
594
+ option_name: 选项名称
595
+ option_type: 选项类型
596
+ option_value: 选项值
597
+ options: 选项
598
+ or: 或
599
+ order: 订单
600
+ order_canceled: 订单已取消
601
+ order_routing:
602
+ strategies:
603
+ legacy: 传统
604
+ rules: 规则(按顺序)
605
+ order_summary: 订单概述
606
+ orders: 订单
607
+ out_of_stock: 没有库存
608
+ password: 密码
609
+ path: 路径
610
+ payment: 支付
611
+ payment_method: 支付方式
612
+ payment_methods: 支付方式
613
+ payment_processing_failed: 无法处理支付信息,请检查您所输入的详细信息
614
+ payment_source: 支付来源
615
+ percent: 百分比
616
+ percent_per_item: 单件百分比
617
+ phone: 电话
618
+ price: 价格
619
+ price_range: 价格范围
620
+ price_rules:
621
+ channel_rule:
622
+ description: 根据销售渠道设定定价
623
+ customer_group_rule:
624
+ description: 对特定客户群组应用定价
625
+ price_sack: 袋价格
626
+ prices: 价格
627
+ privacy_policy: 隐私政策
628
+ processing: 处理中
629
+ product: 产品
630
+ product_translations: 商品翻译
631
+ products: 产品
632
+ products_cannot_be_shipped: 我们目前无法将 %{product_names} 配送至您当前的所在地。请更改您的收货地址,或从购物车中移除 %{product_names}。
633
+ promotion: 促销
634
+ promotion_action_types:
635
+ create_adjustment:
636
+ description: 为订单添加促销用的价格调整
637
+ name: 添加订单的价格调整
638
+ create_item_adjustments:
639
+ description: 为订单上的单项产品添加一笔促销用的价格调整
640
+ name: 添加单项的价格调整
641
+ create_line_items:
642
+ description: 增加特定商品到订单中
643
+ name: 赠送礼品
644
+ free_shipping:
645
+ description: 整张订单免费发货
646
+ name: 免运费
647
+ promotion_actions: 优惠方式
648
+ promotion_already_used: 您无法删除已被应用的促销
649
+ promotion_label: 促销(%{name})
650
+ promotion_rule_types:
651
+ category:
652
+ description: 订单包含指定分类中的商品
653
+ name: 分类
654
+ channel:
655
+ description: 限定为通过指定销售渠道下达的订单
656
+ name: 销售渠道
657
+ country:
658
+ description: 仅限收货地址在特定国家/地区的订单
659
+ name: 国家/地区
660
+ currency:
661
+ description: 仅限使用特定货币的订单
662
+ name: 货币
663
+ customer:
664
+ description: 仅限指定客户使用
665
+ name: 客户
666
+ customer_group:
667
+ description: 仅限指定客户群组中的客户使用
668
+ name: 客户群组
669
+ customer_logged_in:
670
+ description: 仅限已登录客户使用
671
+ name: 仅限已登录客户
672
+ first_order:
673
+ description: 必须是客户的第一笔订单
674
+ name: 第一笔订单
675
+ item_total:
676
+ description: 订单总额满足这些条件
677
+ name: 小记
678
+ market:
679
+ description: 限定为在指定市场下达的订单
680
+ name: 市场
681
+ one_use_per_user:
682
+ description: 每人只可使用一次
683
+ name: 每人一次
684
+ product:
685
+ description: 订单包含指定的产品
686
+ name: 产品
687
+ promotions: 促销
688
+ quantity: 数量
689
+ query: 查询
690
+ reason: 原因
691
+ received: 已收到
692
+ refund: 退款
693
+ refund_amount: 退款金额
694
+ registration: 注册
695
+ remove: 移出
696
+ remove_gift_card_on_completed_order_error: 订单下达后您无法移除礼品卡
697
+ resellable: 可转售
698
+ resend: 重新发送
699
+ response_code: 返回代码
700
+ return: 退货
701
+ returned: 已退回
702
+ returns_policy: 退货政策
703
+ row: 行
704
+ rules: Rules
705
+ say_no: 不
706
+ say_yes: 是的
707
+ scope: 范围
708
+ selected_quantity_not_available: 所选的 %{item} 数量不足。
709
+ ship: 发货
710
+ ship_address: 配送地址
711
+ shipment: 配送
712
+ shipped: 已发货
713
+ shipping: 配送中
714
+ shipping_address: 配送地址
715
+ shipping_flat_rate_per_item: 以单项计固定费率
716
+ shipping_flat_rate_per_order: 固定费率
717
+ shipping_flexible_rate: 以每项计弹性价格
718
+ shipping_policy: 配送政策
719
+ shipping_rates:
720
+ display_price:
721
+ excluding_tax: "%{price}(+ %{tax_amount} %{tax_rate_name})"
722
+ including_tax: "%{price}(含 %{tax_amount} %{tax_rate_name})"
723
+ sku: 条形码
724
+ source: 来源
725
+ status: 状态
726
+ stock_location: 库存区域
727
+ stock_locations: 库存区域
728
+ stock_transfer:
729
+ errors:
730
+ must_have_variant: 您必须至少添加一个变体
731
+ same_location: 不能与目标地点相同
732
+ variants_unavailable: 部分变体在 %{stock} 上不可用
733
+ store: 商城
734
+ store_credit:
735
+ allocated: 已添加
736
+ authorized: 已授权
737
+ captured: 已使用
738
+ credit: 积分
739
+ eligible: 符合条件
740
+ store_credit_name: 店铺积分
741
+ store_credit_payment_method:
742
+ currency_mismatch: 店铺积分货币与订单货币不匹配
743
+ insufficient_authorized_amount: 无法捕获超过已授权的金额
744
+ insufficient_funds: 剩余的店铺积分金额不足
745
+ successful_action: 店铺积分%{action}成功
746
+ unable_to_credit: 无法退款代码:%{auth_code}
747
+ unable_to_find: 未能找到店铺积分
748
+ unable_to_find_for_action: 未能找到授权码为 %{auth_code}、操作为 %{action} 的店铺积分
749
+ unable_to_void: 无法作废代码:%{auth_code}
750
+ success: 成功
751
+ tags: 标签
752
+ tax: 税
753
+ tax_category: 缴税分类
754
+ terms_of_service: 服务条款
755
+ total: 总计
756
+ track_inventory: 追踪库存
757
+ tracking: 追踪
758
+ tracking_number: 物流编号
759
+ tracking_url: 查询网站
760
+ type: 类型
761
+ unable_to_connect_to_gateway: 无法连接支付网关.
762
+ updated_at: 更新于
763
+ url: URL
764
+ user: 用户
765
+ validation:
766
+ must_be_int: 必须是整数
767
+ value: 值
768
+ variant: 具体型号
769
+ variants: 具体型号
770
+ verified: 已验证
771
+ void: 作废
772
+ webhook_mailer:
773
+ endpoint_disabled:
774
+ disabled_at_label: 禁用于
775
+ heading: Webhook 端点已禁用
776
+ instructions: 请检查端点 URL 和服务,然后在 设置 → 开发者 → Webhooks 中重新启用它。
777
+ message: Webhook 端点 "%{endpoint_name}" 在多次投递失败后已被自动禁用。
778
+ name_label: 名称
779
+ reason_label: 原因
780
+ subject: Webhook 端点已禁用:%{endpoint_name}
781
+ url_label: URL
782
+ weight: 重量
783
+ weight_unit: 重量单位
784
+ width: 宽度
785
+ year: 年
786
+ zip: 邮编