spree_core 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 (575) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -5
  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/search_provider/index_job.rb +4 -0
  10. data/app/jobs/spree/seller_payouts/sweep_seller_job.rb +2 -0
  11. data/app/jobs/spree/uploads/purge_unattached_job.rb +49 -0
  12. data/app/mailers/spree/admin_user_mailer.rb +4 -19
  13. data/app/mailers/spree/base_mailer.rb +97 -13
  14. data/app/mailers/spree/email_template_mailer.rb +27 -0
  15. data/app/mailers/spree/export_mailer.rb +3 -4
  16. data/app/mailers/spree/import_mailer.rb +3 -4
  17. data/app/mailers/spree/invitation_mailer.rb +24 -7
  18. data/app/mailers/spree/seller_user_mailer.rb +4 -16
  19. data/app/mailers/spree/webhook_mailer.rb +2 -2
  20. data/app/models/concerns/spree/acted_by.rb +1 -1
  21. data/app/models/concerns/spree/admin_user_methods.rb +15 -1
  22. data/app/models/concerns/spree/api_typed.rb +91 -0
  23. data/app/models/concerns/spree/calculated_adjustments.rb +41 -13
  24. data/app/models/concerns/spree/calculator/currency_amounts.rb +1 -1
  25. data/app/models/concerns/spree/calculator/tiers.rb +63 -0
  26. data/app/models/concerns/spree/canonical_decimals.rb +61 -0
  27. data/app/models/concerns/spree/customer_methods.rb +23 -18
  28. data/app/models/concerns/spree/derived_number.rb +11 -13
  29. data/app/models/concerns/spree/email_template_identity.rb +52 -0
  30. data/app/models/concerns/spree/parameterizable_name.rb +2 -0
  31. data/app/models/concerns/spree/payment_session_transitions.rb +8 -2
  32. data/app/models/concerns/spree/post_sale/taxation.rb +54 -0
  33. data/app/models/concerns/spree/post_sale/taxed_line.rb +51 -0
  34. data/app/models/concerns/spree/preference_schema/json_schema.rb +139 -0
  35. data/app/models/concerns/spree/preference_schema.rb +62 -32
  36. data/app/models/concerns/spree/product_scopes.rb +16 -2
  37. data/app/models/concerns/spree/provider_listing.rb +41 -0
  38. data/app/models/concerns/spree/publishable.rb +82 -14
  39. data/app/models/concerns/spree/purchase/addresses.rb +23 -10
  40. data/app/models/concerns/spree/purchase/currency.rb +1 -1
  41. data/app/models/concerns/spree/purchase/deprecated_aliases.rb +87 -0
  42. data/app/models/concerns/spree/purchase/gift_cards.rb +10 -4
  43. data/app/models/concerns/spree/purchase/locale.rb +1 -1
  44. data/app/models/concerns/spree/purchase/payment_processing.rb +8 -4
  45. data/app/models/concerns/spree/purchase/purchase_order.rb +9 -4
  46. data/app/models/concerns/spree/purchase/store_credits.rb +36 -1
  47. data/app/models/concerns/spree/purchase/totals.rb +49 -8
  48. data/app/models/concerns/spree/ransackable_attributes.rb +46 -0
  49. data/app/models/concerns/spree/receivable.rb +1 -1
  50. data/app/models/concerns/spree/searchable.rb +0 -4
  51. data/app/models/concerns/spree/secret_preferences.rb +59 -0
  52. data/app/models/concerns/spree/signed_id_attachments.rb +54 -0
  53. data/app/models/concerns/spree/single_store_resource.rb +1 -1
  54. data/app/models/concerns/spree/stores/email_branding.rb +32 -0
  55. data/app/models/concerns/spree/stores/markets.rb +5 -2
  56. data/app/models/concerns/spree/type_labels.rb +38 -0
  57. data/app/models/concerns/spree/typed_adjustment_line.rb +5 -6
  58. data/app/models/concerns/spree/typed_associations.rb +12 -18
  59. data/app/models/concerns/spree/vat_price_calculation.rb +5 -6
  60. data/app/models/spree/address.rb +12 -2
  61. data/app/models/spree/adjusters/largest_remainder.rb +14 -1
  62. data/app/models/spree/adjusters/promotion.rb +4 -19
  63. data/app/models/spree/allowed_origin.rb +3 -1
  64. data/app/models/spree/api_key.rb +5 -6
  65. data/app/models/spree/authentication/strategies/oidc_strategy.rb +5 -5
  66. data/app/models/spree/base.rb +99 -22
  67. data/app/models/spree/calculator/flat_percent_item_total.rb +2 -4
  68. data/app/models/spree/calculator/flat_rate.rb +3 -5
  69. data/app/models/spree/calculator/flexi_rate.rb +4 -6
  70. data/app/models/spree/calculator/percent_on_line_item.rb +2 -2
  71. data/app/models/spree/calculator/price_sack.rb +5 -7
  72. data/app/models/spree/calculator/shipping/digital_delivery.rb +3 -5
  73. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +7 -7
  74. data/app/models/spree/calculator/shipping/flat_rate.rb +5 -7
  75. data/app/models/spree/calculator/shipping/flexi_rate.rb +4 -6
  76. data/app/models/spree/calculator/shipping/per_item.rb +3 -5
  77. data/app/models/spree/calculator/shipping/price_sack.rb +5 -7
  78. data/app/models/spree/calculator/tiered_flat_rate.rb +7 -24
  79. data/app/models/spree/calculator/tiered_percent.rb +7 -25
  80. data/app/models/spree/cart.rb +78 -18
  81. data/app/models/spree/catalog.rb +1 -0
  82. data/app/models/spree/catalog_price.rb +0 -7
  83. data/app/models/spree/catalog_price_tier.rb +0 -8
  84. data/app/models/spree/category.rb +3 -1
  85. data/app/models/spree/channel/gating.rb +3 -2
  86. data/app/models/spree/channel.rb +6 -4
  87. data/app/models/spree/claim.rb +22 -1
  88. data/app/models/spree/claim_line_item.rb +41 -6
  89. data/app/models/spree/collection.rb +2 -1
  90. data/app/models/spree/collection_rule.rb +5 -21
  91. data/app/models/spree/commission_line.rb +1 -1
  92. data/app/models/spree/commission_rate.rb +7 -4
  93. data/app/models/spree/commission_rate_value.rb +1 -1
  94. data/app/models/spree/commission_rule.rb +4 -11
  95. data/app/models/spree/commission_rules/category_rule.rb +2 -5
  96. data/app/models/spree/commission_rules/item_total_rule.rb +2 -2
  97. data/app/models/spree/commission_rules/product_rule.rb +1 -1
  98. data/app/models/spree/commission_rules/seller_rule.rb +2 -5
  99. data/app/models/spree/company.rb +1 -0
  100. data/app/models/spree/company_invitation.rb +1 -0
  101. data/app/models/spree/consent_record.rb +0 -1
  102. data/app/models/spree/credit_card.rb +1 -1
  103. data/app/models/spree/current.rb +23 -0
  104. data/app/models/spree/custom_field.rb +2 -2
  105. data/app/models/spree/custom_field_definition.rb +20 -35
  106. data/app/models/spree/custom_fields/boolean.rb +1 -1
  107. data/app/models/spree/custom_fields/json.rb +1 -1
  108. data/app/models/spree/customer_group.rb +1 -0
  109. data/app/models/spree/data_feed/google.rb +0 -2
  110. data/app/models/spree/data_request.rb +2 -1
  111. data/app/models/spree/delivery_method.rb +36 -14
  112. data/app/models/spree/delivery_method_rule.rb +4 -11
  113. data/app/models/spree/delivery_method_rules/channel_rule.rb +2 -5
  114. data/app/models/spree/delivery_method_rules/item_total_rule.rb +2 -2
  115. data/app/models/spree/delivery_profile.rb +1 -0
  116. data/app/models/spree/delivery_rate.rb +7 -8
  117. data/app/models/spree/delivery_rate_provider/base.rb +1 -0
  118. data/app/models/spree/delivery_zone.rb +1 -2
  119. data/app/models/spree/delivery_zone_member.rb +4 -4
  120. data/app/models/spree/digital_asset.rb +7 -0
  121. data/app/models/spree/digital_asset_provider/base.rb +2 -0
  122. data/app/models/spree/digital_link.rb +2 -5
  123. data/app/models/spree/discount.rb +1 -1
  124. data/app/models/spree/email_template.rb +25 -0
  125. data/app/models/spree/email_template_draft.rb +13 -0
  126. data/app/models/spree/email_template_revision.rb +17 -0
  127. data/app/models/spree/email_templates/entry.rb +118 -0
  128. data/app/models/spree/email_templates/sample_record.rb +16 -0
  129. data/app/models/spree/emails/branding.rb +80 -0
  130. data/app/models/spree/exchange.rb +16 -1
  131. data/app/models/spree/exchange_line_item.rb +121 -5
  132. data/app/models/spree/export.rb +0 -1
  133. data/app/models/spree/exports/products.rb +10 -1
  134. data/app/models/spree/exports/report.rb +3 -3
  135. data/app/models/spree/fee.rb +4 -2
  136. data/app/models/spree/file_upload.rb +155 -0
  137. data/app/models/spree/fulfillment.rb +66 -30
  138. data/app/models/spree/fulfillment_changer.rb +2 -2
  139. data/app/models/spree/fulfillment_group.rb +6 -1
  140. data/app/models/spree/fulfillment_item.rb +0 -4
  141. data/app/models/spree/fulfillment_provider/base.rb +1 -0
  142. data/app/models/spree/gateway/bogus.rb +6 -0
  143. data/app/models/spree/gateway/custom_payment_source_method.rb +5 -0
  144. data/app/models/spree/gateway.rb +6 -2
  145. data/app/models/spree/gift_card.rb +18 -8
  146. data/app/models/spree/gift_card_batch.rb +3 -5
  147. data/app/models/spree/import.rb +5 -7
  148. data/app/models/spree/import_mapping.rb +1 -2
  149. data/app/models/spree/import_row.rb +2 -2
  150. data/app/models/spree/import_schemas/products.rb +1 -0
  151. data/app/models/spree/integration.rb +9 -19
  152. data/app/models/spree/invitation.rb +5 -5
  153. data/app/models/spree/line_item.rb +15 -4
  154. data/app/models/spree/locale.rb +11 -8
  155. data/app/models/spree/market.rb +8 -2
  156. data/app/models/spree/media.rb +1 -9
  157. data/app/models/spree/newsletter_subscriber.rb +4 -0
  158. data/app/models/spree/option_type.rb +2 -1
  159. data/app/models/spree/option_value.rb +2 -1
  160. data/app/models/spree/order.rb +60 -142
  161. data/app/models/spree/order_group.rb +18 -4
  162. data/app/models/spree/order_inventory.rb +10 -5
  163. data/app/models/spree/order_promotion.rb +1 -1
  164. data/app/models/spree/order_routing/has_strategy_preference.rb +1 -1
  165. data/app/models/spree/order_routing/strategy/base.rb +4 -2
  166. data/app/models/spree/order_routing/strategy/rules.rb +1 -1
  167. data/app/models/spree/order_routing_rule.rb +6 -22
  168. data/app/models/spree/package_type.rb +2 -2
  169. data/app/models/spree/payment/gateway_options.rb +15 -53
  170. data/app/models/spree/payment/processing.rb +2 -4
  171. data/app/models/spree/payment.rb +21 -13
  172. data/app/models/spree/payment_method/check.rb +2 -0
  173. data/app/models/spree/payment_method/session_instrumentation.rb +1 -0
  174. data/app/models/spree/payment_method/store_credit.rb +15 -13
  175. data/app/models/spree/payment_method.rb +78 -6
  176. data/app/models/spree/payment_session.rb +5 -1
  177. data/app/models/spree/payment_setup_session.rb +1 -0
  178. data/app/models/spree/payout_provider/base.rb +3 -1
  179. data/app/models/spree/pickup_point_provider/base.rb +2 -0
  180. data/app/models/spree/policy.rb +1 -0
  181. data/app/models/spree/price.rb +17 -14
  182. data/app/models/spree/price_adjustment_tier.rb +4 -0
  183. data/app/models/spree/price_list.rb +14 -9
  184. data/app/models/spree/price_rules/channel_rule.rb +3 -6
  185. data/app/models/spree/price_rules/customer_group_rule.rb +3 -6
  186. data/app/models/spree/price_rules/market_rule.rb +2 -5
  187. data/app/models/spree/price_rules/user_rule.rb +1 -3
  188. data/app/models/spree/product/channels.rb +9 -2
  189. data/app/models/spree/product.rb +54 -30
  190. data/app/models/spree/product_submission.rb +0 -12
  191. data/app/models/spree/product_type.rb +1 -1
  192. data/app/models/spree/promotion/actions/create_line_items.rb +28 -18
  193. data/app/models/spree/promotion/rules/category.rb +1 -5
  194. data/app/models/spree/promotion/rules/channel.rb +2 -9
  195. data/app/models/spree/promotion/rules/country.rb +3 -8
  196. data/app/models/spree/promotion/rules/currency.rb +1 -5
  197. data/app/models/spree/promotion/rules/customer_group.rb +2 -9
  198. data/app/models/spree/promotion/rules/first_order.rb +0 -4
  199. data/app/models/spree/promotion/rules/item_total.rb +6 -10
  200. data/app/models/spree/promotion/rules/market.rb +2 -9
  201. data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -4
  202. data/app/models/spree/promotion/rules/option_value.rb +2 -6
  203. data/app/models/spree/promotion/rules/product.rb +1 -5
  204. data/app/models/spree/promotion/rules/user.rb +0 -4
  205. data/app/models/spree/promotion/rules/user_logged_in.rb +0 -4
  206. data/app/models/spree/promotion.rb +36 -6
  207. data/app/models/spree/promotion_action.rb +7 -14
  208. data/app/models/spree/promotion_action_line_item.rb +1 -1
  209. data/app/models/spree/promotion_handler/coupon.rb +59 -27
  210. data/app/models/spree/promotion_rule.rb +7 -14
  211. data/app/models/spree/purchase_order.rb +3 -0
  212. data/app/models/spree/quantity_rule.rb +1 -1
  213. data/app/models/spree/refund.rb +41 -18
  214. data/app/models/spree/return.rb +31 -2
  215. data/app/models/spree/return_line_item.rb +65 -14
  216. data/app/models/spree/role.rb +7 -7
  217. data/app/models/spree/saved_report.rb +2 -1
  218. data/app/models/spree/search_provider/base.rb +4 -0
  219. data/app/models/spree/seller.rb +10 -2
  220. data/app/models/spree/seller_payout.rb +8 -0
  221. data/app/models/spree/seller_requirement.rb +5 -12
  222. data/app/models/spree/seller_requirement_custom_field.rb +1 -2
  223. data/app/models/spree/seller_requirement_submission.rb +3 -2
  224. data/app/models/spree/seller_requirements/accept_terms.rb +2 -3
  225. data/app/models/spree/seller_transfer.rb +6 -0
  226. data/app/models/spree/shipping_label.rb +2 -0
  227. data/app/models/spree/stock/availability_validator.rb +2 -2
  228. data/app/models/spree/stock/estimator.rb +1 -1
  229. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  230. data/app/models/spree/stock/packer.rb +2 -2
  231. data/app/models/spree/stock/splitter/weight.rb +1 -1
  232. data/app/models/spree/stock_level/custom_events.rb +6 -0
  233. data/app/models/spree/stock_level.rb +3 -1
  234. data/app/models/spree/stock_location.rb +1 -0
  235. data/app/models/spree/stock_movement.rb +1 -1
  236. data/app/models/spree/stock_receipt_item.rb +1 -1
  237. data/app/models/spree/stock_reservation.rb +2 -2
  238. data/app/models/spree/stock_transfer.rb +6 -2
  239. data/app/models/spree/store.rb +70 -19
  240. data/app/models/spree/store_credit.rb +13 -13
  241. data/app/models/spree/store_credit_event.rb +5 -5
  242. data/app/models/spree/supplier.rb +1 -0
  243. data/app/models/spree/tax_category.rb +1 -0
  244. data/app/models/spree/tax_exemption_certificate.rb +3 -0
  245. data/app/models/spree/tax_identifier.rb +3 -1
  246. data/app/models/spree/tax_line.rb +53 -3
  247. data/app/models/spree/tax_provider/base.rb +71 -14
  248. data/app/models/spree/tax_provider/internal.rb +70 -41
  249. data/app/models/spree/tax_provider/recorded_share.rb +114 -0
  250. data/app/models/spree/tax_rate.rb +30 -8
  251. data/app/models/spree/taxon.rb +1 -1
  252. data/app/models/spree/taxonomy.rb +0 -1
  253. data/app/models/spree/update_status.rb +25 -0
  254. data/app/models/spree/variant.rb +10 -12
  255. data/app/models/spree/variant_media.rb +1 -1
  256. data/app/models/spree/webhook_delivery.rb +1 -0
  257. data/app/models/spree/webhook_endpoint.rb +46 -13
  258. data/app/models/spree/wishlist.rb +1 -6
  259. data/app/models/spree/wishlist_item/custom_events.rb +6 -0
  260. data/app/presenters/spree/csv/customer_presenter.rb +1 -1
  261. data/app/presenters/spree/csv/newsletter_subscriber_presenter.rb +1 -1
  262. data/app/presenters/spree/csv/order_line_item_presenter.rb +10 -6
  263. data/app/presenters/spree/csv/price_list_price_presenter.rb +3 -8
  264. data/app/presenters/spree/csv/product_variant_presenter.rb +59 -20
  265. data/app/presenters/spree/csv/purchase_order_item_presenter.rb +1 -3
  266. data/app/serializers/spree/emails/base_serializer.rb +14 -0
  267. data/app/serializers/spree/emails/export_serializer.rb +13 -0
  268. data/app/serializers/spree/emails/import_serializer.rb +19 -0
  269. data/app/serializers/spree/emails/invitation_serializer.rb +28 -0
  270. data/app/serializers/spree/emails/store_serializer.rb +31 -0
  271. data/app/serializers/spree/emails/user_serializer.rb +12 -0
  272. data/app/serializers/spree/emails/webhook_endpoint_serializer.rb +16 -0
  273. data/app/services/spree/carts/create.rb +8 -2
  274. data/app/services/spree/carts/destroy.rb +2 -2
  275. data/app/services/spree/carts/remove_out_of_stock_items.rb +2 -2
  276. data/app/services/spree/carts/split_by_seller.rb +1 -1
  277. data/app/services/spree/carts/update.rb +22 -8
  278. data/app/services/spree/catalogs/set_product_terms.rb +1 -1
  279. data/app/services/spree/categories/add_products.rb +13 -31
  280. data/app/services/spree/categories/remove_products.rb +12 -51
  281. data/app/services/spree/checkout/advance.rb +1 -4
  282. data/app/services/spree/collections/add_products.rb +10 -23
  283. data/app/services/spree/collections/remove_products.rb +7 -43
  284. data/app/services/spree/coupon_codes/bulk_generate.rb +8 -14
  285. data/app/services/spree/data_requests/create.rb +1 -1
  286. data/app/services/spree/deliveries/destroy.rb +2 -2
  287. data/app/services/spree/email_templates/check.rb +58 -0
  288. data/app/services/spree/email_templates/no_sample_record.rb +7 -0
  289. data/app/services/spree/email_templates/preview.rb +99 -0
  290. data/app/services/spree/emails/file_system.rb +23 -0
  291. data/app/services/spree/emails/filters.rb +84 -0
  292. data/app/services/spree/emails/liquid_context.rb +48 -0
  293. data/app/services/spree/emails/rendered_email.rb +14 -0
  294. data/app/services/spree/emails/renderer.rb +125 -0
  295. data/app/services/spree/emails/template.rb +51 -0
  296. data/app/services/spree/emails/template_data.rb +23 -0
  297. data/app/services/spree/emails/template_resolver.rb +109 -0
  298. data/app/services/spree/emails/text_converter.rb +72 -0
  299. data/app/services/spree/emails/translation_inliner.rb +134 -0
  300. data/app/services/spree/imports/row_processors/price_list_price.rb +10 -10
  301. data/app/services/spree/imports/row_processors/product_variant.rb +77 -34
  302. data/app/services/spree/imports/row_processors/purchase_order.rb +13 -13
  303. data/app/services/spree/locales.rb +43 -10
  304. data/app/services/spree/newsletter/subscribe.rb +8 -12
  305. data/app/services/spree/orders/build_fulfillments.rb +3 -2
  306. data/app/services/spree/orders/create.rb +5 -4
  307. data/app/services/spree/orders/discounts/create.rb +14 -11
  308. data/app/services/spree/orders/discounts/destroy.rb +1 -0
  309. data/app/services/spree/orders/discounts/update.rb +1 -0
  310. data/app/services/spree/orders/fees/create.rb +1 -0
  311. data/app/services/spree/orders/fees/destroy.rb +1 -0
  312. data/app/services/spree/orders/fees/update.rb +1 -0
  313. data/app/services/spree/orders/remove_line_item.rb +13 -3
  314. data/app/services/spree/orders/update.rb +10 -6
  315. data/app/services/spree/orders/update_item.rb +6 -3
  316. data/app/services/spree/orders/update_statuses.rb +3 -1
  317. data/app/services/spree/prices/bulk_upsert.rb +32 -25
  318. data/app/services/spree/product_memberships.rb +61 -0
  319. data/app/services/spree/returns/eligibility_validator.rb +1 -1
  320. data/app/services/spree/search_provider/custom_field_schema.rb +2 -2
  321. data/app/services/spree/seeds/commission_rates.rb +1 -1
  322. data/app/services/spree/seeds/digital_delivery.rb +1 -1
  323. data/app/services/spree/seeds/payment_methods.rb +2 -2
  324. data/app/services/spree/seeds/saved_reports.rb +3 -3
  325. data/app/services/spree/seeds/stores.rb +1 -1
  326. data/app/services/spree/sellers/requirements.rb +1 -2
  327. data/app/services/spree/shipping_labels/confirm_refund.rb +1 -1
  328. data/app/services/spree/shipping_labels/store_file.rb +3 -3
  329. data/app/services/spree/stock_levels/correct.rb +3 -3
  330. data/app/services/spree/stock_reservations/reserve.rb +2 -3
  331. data/app/services/spree/store_credits/apply.rb +15 -13
  332. data/app/services/spree/stores/provision_defaults.rb +23 -25
  333. data/app/services/spree/update_check.rb +160 -0
  334. data/app/services/spree/uploads/assign_stores.rb +92 -0
  335. data/app/subscribers/spree/seller_onboarding_subscriber.rb +1 -1
  336. data/app/validators/spree/attachment_content_type_validator.rb +19 -2
  337. data/app/validators/spree/locale_codes_validator.rb +22 -0
  338. data/app/views/layouts/spree/base_mailer.html.erb +2 -43
  339. data/app/views/layouts/spree/base_mailer.liquid +79 -0
  340. data/app/views/spree/admin_user_mailer/password_reset_email.liquid +14 -0
  341. data/app/views/spree/export_mailer/export_done.liquid +12 -0
  342. data/app/views/spree/import_mailer/import_done.liquid +15 -0
  343. data/app/views/spree/invitation_mailer/invitation_accepted.liquid +9 -0
  344. data/app/views/spree/invitation_mailer/invitation_email.liquid +13 -0
  345. data/app/views/spree/seller_user_mailer/password_reset_email.liquid +14 -0
  346. data/app/views/spree/shared/_mailer_button.html.erb +4 -5
  347. data/app/views/spree/shared/_mailer_hero.html.erb +6 -5
  348. data/app/views/spree/shared/_summary_row.liquid +8 -0
  349. data/app/views/spree/webhook_mailer/endpoint_disabled.liquid +21 -0
  350. data/app/workflows/spree/carts/add_item.rb +4 -4
  351. data/app/workflows/spree/carts/complete.rb +13 -3
  352. data/app/workflows/spree/carts/merge.rb +1 -1
  353. data/app/workflows/spree/carts/recalculate_totals.rb +5 -0
  354. data/app/workflows/spree/carts/upsert_items.rb +18 -9
  355. data/app/workflows/spree/claims/approve.rb +5 -22
  356. data/app/workflows/spree/claims/cancel.rb +5 -21
  357. data/app/workflows/spree/claims/create.rb +15 -0
  358. data/app/workflows/spree/claims/deny.rb +7 -0
  359. data/app/workflows/spree/claims/resolve.rb +34 -31
  360. data/app/workflows/spree/customers/anonymize.rb +3 -4
  361. data/app/workflows/spree/customers/create.rb +1 -1
  362. data/app/workflows/spree/data_requests/fulfill.rb +2 -2
  363. data/app/workflows/spree/deliveries/update_tracking.rb +1 -1
  364. data/app/workflows/spree/email_templates/discard_draft.rb +20 -0
  365. data/app/workflows/spree/email_templates/publish.rb +70 -0
  366. data/app/workflows/spree/email_templates/restore_revision.rb +33 -0
  367. data/app/workflows/spree/email_templates/revert.rb +29 -0
  368. data/app/workflows/spree/email_templates/save_draft.rb +85 -0
  369. data/app/workflows/spree/exchanges/approve.rb +5 -22
  370. data/app/workflows/spree/exchanges/cancel.rb +5 -21
  371. data/app/workflows/spree/exchanges/create.rb +6 -0
  372. data/app/workflows/spree/exchanges/fulfill.rb +75 -51
  373. data/app/workflows/spree/exchanges/receive.rb +6 -65
  374. data/app/workflows/spree/fulfillments/cancel.rb +1 -1
  375. data/app/workflows/spree/fulfillments/create.rb +53 -49
  376. data/app/workflows/spree/fulfillments/fulfill.rb +23 -27
  377. data/app/workflows/spree/fulfillments/mark_delivered.rb +1 -1
  378. data/app/workflows/spree/fulfillments/replacements.rb +59 -0
  379. data/app/workflows/spree/gift_cards/apply.rb +2 -2
  380. data/app/workflows/spree/orders/add_item.rb +5 -1
  381. data/app/workflows/spree/orders/cancel.rb +3 -3
  382. data/app/workflows/spree/orders/complete.rb +16 -8
  383. data/app/workflows/spree/payments/capture.rb +20 -5
  384. data/app/workflows/spree/payments/process.rb +5 -3
  385. data/app/workflows/spree/post_sale/approval.rb +35 -0
  386. data/app/workflows/spree/post_sale/cancellation.rb +44 -0
  387. data/app/workflows/spree/post_sale/receipt.rb +92 -0
  388. data/app/workflows/spree/price_lists/update.rb +4 -4
  389. data/app/workflows/spree/products/nested_attributes.rb +1 -1
  390. data/app/workflows/spree/purchase_orders/cancel.rb +1 -1
  391. data/app/workflows/spree/purchase_orders/close.rb +3 -31
  392. data/app/workflows/spree/purchase_orders/create.rb +3 -1
  393. data/app/workflows/spree/purchase_orders/mark_draft.rb +2 -2
  394. data/app/workflows/spree/purchase_orders/mark_ordered.rb +2 -2
  395. data/app/workflows/spree/purchase_orders/receive.rb +1 -1
  396. data/app/workflows/spree/purchase_orders/update.rb +5 -34
  397. data/app/workflows/spree/receivables/closing_short.rb +46 -0
  398. data/app/workflows/spree/receivables/draft_editing.rb +48 -0
  399. data/app/workflows/spree/refunds/create.rb +5 -2
  400. data/app/workflows/spree/refunds/order_payments.rb +14 -2
  401. data/app/workflows/spree/refunds/tax_credit.rb +67 -0
  402. data/app/workflows/spree/returns/approve.rb +5 -22
  403. data/app/workflows/spree/returns/cancel.rb +5 -22
  404. data/app/workflows/spree/returns/create.rb +8 -0
  405. data/app/workflows/spree/returns/receive.rb +5 -76
  406. data/app/workflows/spree/returns/refund.rb +31 -8
  407. data/app/workflows/spree/seller_requirement_submissions/create.rb +1 -2
  408. data/app/workflows/spree/seller_transfers/reverse.rb +28 -1
  409. data/app/workflows/spree/shipping_labels/purchase.rb +8 -8
  410. data/app/workflows/spree/shipping_labels/record.rb +7 -7
  411. data/app/workflows/spree/shipping_labels/refund.rb +2 -2
  412. data/app/workflows/spree/stock_receipts/recording.rb +4 -4
  413. data/app/workflows/spree/stock_transfers/cancel.rb +2 -2
  414. data/app/workflows/spree/stock_transfers/close.rb +3 -30
  415. data/app/workflows/spree/stock_transfers/create.rb +3 -1
  416. data/app/workflows/spree/stock_transfers/mark_draft.rb +1 -1
  417. data/app/workflows/spree/stock_transfers/mark_in_transit.rb +3 -3
  418. data/app/workflows/spree/stock_transfers/mark_ready.rb +2 -2
  419. data/app/workflows/spree/stock_transfers/receive.rb +1 -1
  420. data/app/workflows/spree/stock_transfers/update.rb +5 -33
  421. data/config/currency_exponents.json +180 -0
  422. data/config/i18n-tasks.yml +32 -18
  423. data/config/initializers/alba.rb +7 -0
  424. data/config/language_names.csv +264 -0
  425. data/config/locales/ar.yml +811 -0
  426. data/config/locales/be.yml +855 -0
  427. data/config/locales/bg.yml +723 -0
  428. data/config/locales/ca.yml +689 -0
  429. data/config/locales/content_locales.rb +9 -0
  430. data/config/locales/cs.yml +855 -0
  431. data/config/locales/da.yml +771 -0
  432. data/config/locales/de-CH.yml +248 -0
  433. data/config/locales/de.yml +835 -0
  434. data/config/locales/el.yml +769 -0
  435. data/config/locales/en.yml +47 -505
  436. data/config/locales/es-CL.yml +301 -0
  437. data/config/locales/es-EC.yml +186 -0
  438. data/config/locales/es-MX.yml +334 -0
  439. data/config/locales/es.yml +831 -0
  440. data/config/locales/et.yml +644 -0
  441. data/config/locales/fa.yml +709 -0
  442. data/config/locales/fi.yml +771 -0
  443. data/config/locales/fr.yml +830 -0
  444. data/config/locales/hu.yml +751 -0
  445. data/config/locales/id.yml +756 -0
  446. data/config/locales/it.yml +833 -0
  447. data/config/locales/ja.yml +726 -0
  448. data/config/locales/km.yml +759 -0
  449. data/config/locales/ko.yml +575 -0
  450. data/config/locales/ku.yml +753 -0
  451. data/config/locales/lt.yml +821 -0
  452. data/config/locales/lv.yml +685 -0
  453. data/config/locales/nb.yml +824 -0
  454. data/config/locales/ne.yml +823 -0
  455. data/config/locales/nl.yml +826 -0
  456. data/config/locales/pl.yml +835 -0
  457. data/config/locales/pt-BR.yml +547 -0
  458. data/config/locales/pt.yml +636 -0
  459. data/config/locales/ro.yml +750 -0
  460. data/config/locales/ru.yml +834 -0
  461. data/config/locales/sk.yml +680 -0
  462. data/config/locales/sl-SI.yml +600 -0
  463. data/config/locales/sv.yml +827 -0
  464. data/config/locales/th.yml +745 -0
  465. data/config/locales/tr.yml +777 -0
  466. data/config/locales/uk.yml +836 -0
  467. data/config/locales/vi.yml +768 -0
  468. data/config/locales/zh-CN.yml +786 -0
  469. data/config/locales/zh-TW.yml +834 -0
  470. data/db/migrate/20260925000001_add_replacement_to_spree_fulfillment_items.rb +5 -0
  471. data/db/migrate/20261001000001_add_post_sale_tax.rb +30 -0
  472. data/db/migrate/20261001000001_convert_preferences_to_json.rb +166 -0
  473. data/db/migrate/20261001000001_create_spree_email_templates.rb +52 -0
  474. data/db/migrate/20261009000001_change_money_columns_to_decimal_19_4.rb +116 -0
  475. data/db/migrate/20261010000001_add_store_id_to_active_storage_blobs.rb +12 -0
  476. data/lib/generators/spree/dummy/dummy_generator.rb +0 -9
  477. data/lib/generators/spree/dummy/templates/rails/test.rb +26 -0
  478. data/lib/spree/checkout/default_requirements.rb +37 -13
  479. data/lib/spree/core/configuration.rb +19 -1
  480. data/lib/spree/core/controller_helpers/store.rb +1 -1
  481. data/lib/spree/core/dependencies.rb +5 -4
  482. data/lib/spree/core/emails/escaped_output.rb +60 -0
  483. data/lib/spree/core/engine.rb +72 -165
  484. data/lib/spree/core/permissions/default_catalog.rb +5 -0
  485. data/lib/spree/core/preferences/invalid_preferences.rb +18 -0
  486. data/lib/spree/core/preferences/json_conversion.rb +186 -0
  487. data/lib/spree/core/preferences/masking.rb +55 -2
  488. data/lib/spree/core/preferences/preferable.rb +343 -103
  489. data/lib/spree/core/preferences/preferable_class_methods.rb +188 -136
  490. data/lib/spree/core/previews/import_preview.rb +10 -0
  491. data/lib/spree/core/ransack_configuration.rb +13 -2
  492. data/lib/spree/core/tax/provider_error.rb +37 -0
  493. data/lib/spree/core/version.rb +1 -1
  494. data/lib/spree/core.rb +91 -373
  495. data/lib/spree/emails/editable_templates.rb +82 -0
  496. data/lib/spree/events/catalog.rb +189 -0
  497. data/lib/spree/events.rb +21 -1
  498. data/lib/spree/hooks.rb +0 -17
  499. data/lib/spree/i18n.rb +32 -15
  500. data/lib/spree/iso_data.rb +7 -0
  501. data/lib/spree/localized_number.rb +6 -0
  502. data/lib/spree/migrations.rb +4 -1
  503. data/lib/spree/money.rb +196 -15
  504. data/lib/spree/reporting/adapters/base.rb +7 -6
  505. data/lib/spree/reporting/adapters/live.rb +6 -6
  506. data/lib/spree/reporting/default_vocabulary.rb +22 -10
  507. data/lib/spree/reporting/hydration.rb +1 -1
  508. data/lib/spree/reporting/query.rb +8 -0
  509. data/lib/spree/reporting/registry.rb +13 -0
  510. data/lib/spree/reporting/schema.rb +10 -10
  511. data/lib/spree/testing_support/editable_email_templates.rb +61 -0
  512. data/lib/spree/testing_support/emails.rb +22 -0
  513. data/lib/spree/testing_support/factories/cart_factory.rb +1 -1
  514. data/lib/spree/testing_support/factories/email_template_factory.rb +28 -0
  515. data/lib/spree/testing_support/factories/order_factory.rb +2 -2
  516. data/lib/spree/testing_support/factories/product_factory.rb +9 -0
  517. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  518. data/lib/spree/testing_support/factories/stock_factory.rb +1 -1
  519. data/lib/spree/testing_support/factories/variant_factory.rb +1 -1
  520. data/lib/spree/testing_support/i18n.rb +3 -94
  521. data/lib/spree/testing_support/lifecycle_events.rb +1 -1
  522. data/lib/spree/testing_support/order_walkthrough.rb +1 -1
  523. data/lib/spree/testing_support/preferences.rb +0 -5
  524. data/lib/spree/testing_support/store.rb +9 -1
  525. data/lib/spree/upgrades/5_6_to_6_0/manifest.yml +67 -1
  526. data/lib/spree/uploads.rb +101 -0
  527. data/lib/tasks/categories_and_collections.rake +3 -3
  528. data/lib/tasks/core.rake +6 -4
  529. data/lib/tasks/markets.rake +2 -1
  530. data/lib/tasks/media.rake +3 -3
  531. data/lib/tasks/migrate_users_to_customers.rake +23 -18
  532. data/lib/tasks/money.rake +46 -0
  533. data/lib/tasks/package_types.rake +1 -1
  534. data/lib/tasks/preferences_json.rake +101 -0
  535. data/lib/tasks/seller_sample_data.rake +2 -2
  536. data/lib/tasks/store_settings.rake +13 -6
  537. data/lib/tasks/typed_adjustments_migration.rake +1 -1
  538. data/lib/tasks/uploads.rake +19 -0
  539. data/spec/fixtures/mailer_views/custom_views_probe_mailer/welcome_email.html.erb +4 -0
  540. metadata +219 -46
  541. data/app/jobs/spree/products/touch_categories_job.rb +0 -15
  542. data/app/jobs/spree/products/touch_taxons_job.rb +0 -13
  543. data/app/models/acts_as_taggable_on/tag_decorator.rb +0 -10
  544. data/app/models/concerns/spree/has_image_alt_text.rb +0 -18
  545. data/app/models/spree/base_analytics_event_handler.rb +0 -54
  546. data/app/models/spree/invitations/store.rb +0 -6
  547. data/app/models/spree/preference.rb +0 -14
  548. data/app/models/spree/promotion_handler/page.rb +0 -25
  549. data/app/models/spree/promotion_handler/promotion_duplicator.rb +0 -60
  550. data/app/models/spree/stock/differentiator.rb +0 -45
  551. data/app/presenters/spree/filters/options_presenter.rb +0 -47
  552. data/app/services/spree/carts/empty.rb +0 -42
  553. data/app/services/spree/country_to_timezone.rb +0 -273
  554. data/app/services/spree/payments/create.rb +0 -92
  555. data/app/validators/spree/url_validator.rb +0 -23
  556. data/app/views/active_storage/blobs/_blob.html.erb +0 -14
  557. data/app/views/spree/admin_user_mailer/password_reset_email.html.erb +0 -8
  558. data/app/views/spree/export_mailer/export_done.html.erb +0 -7
  559. data/app/views/spree/import_mailer/import_done.html.erb +0 -12
  560. data/app/views/spree/invitation_mailer/invitation_accepted.html.erb +0 -4
  561. data/app/views/spree/invitation_mailer/invitation_email.html.erb +0 -12
  562. data/app/views/spree/seller_user_mailer/password_reset_email.html.erb +0 -8
  563. data/app/views/spree/shared/_base_mailer_footer.html.erb +0 -19
  564. data/app/views/spree/shared/_base_mailer_header.html.erb +0 -8
  565. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +0 -399
  566. data/app/views/spree/shared/_mailer_logo.html.erb +0 -41
  567. data/app/views/spree/shared/_purchased_items_styles.html.erb +0 -119
  568. data/app/views/spree/webhook_mailer/endpoint_disabled.html.erb +0 -51
  569. data/app/views/spree/webhook_mailer/endpoint_disabled.text.erb +0 -10
  570. data/app/workflows/spree/fulfillments/purchase_label.rb +0 -40
  571. data/app/workflows/spree/returns/purchase_label.rb +0 -32
  572. data/lib/spree/analytics.rb +0 -11
  573. data/lib/spree/core/preferences/scoped_store.rb +0 -34
  574. data/lib/spree/core/preferences/store.rb +0 -105
  575. data/lib/spree/translation_migrations.rb +0 -52
@@ -0,0 +1,834 @@
1
+ ---
2
+ zh-TW:
3
+ activemodel:
4
+ errors:
5
+ messages:
6
+ blank: 不能為空白
7
+ activerecord:
8
+ attributes:
9
+ spree/address:
10
+ address1: 地址
11
+ address2: 地址 (接續.)
12
+ city: 城市
13
+ company: 公司名
14
+ country: 國家
15
+ label: 地址名稱
16
+ phone: 電話號碼
17
+ state: 省/洲
18
+ spree/calculator/tiered_flat_rate:
19
+ preferred_base_amount: 最少數量
20
+ preferred_tiers: 分層
21
+ spree/calculator/tiered_percent:
22
+ preferred_base_percent: 基礎百分比
23
+ preferred_tiers: 分層
24
+ spree/country:
25
+ iso: ISO
26
+ iso3: ISO3
27
+ iso_name: ISO 名稱
28
+ name: 名稱
29
+ numcode: ISO 編碼
30
+ spree/credit_card:
31
+ cc_type: 信用卡類型
32
+ month: 到期月份
33
+ name: 持卡人姓名
34
+ number: 卡號
35
+ verification_value: 驗證碼
36
+ year: 到期年份
37
+ spree/customer_group:
38
+ description: 說明
39
+ name: 名稱
40
+ spree/gift_card:
41
+ amount_used: 已使用金額
42
+ expires_at: 到期時間
43
+ spree/import:
44
+ preferred_delimiter: 分隔符號
45
+ spree/import_mapping:
46
+ file_column: 檔案欄位
47
+ schema_field: 結構欄位
48
+ spree/import_row:
49
+ row_number: 編號
50
+ spree/inventory_unit:
51
+ state: 狀態
52
+ spree/invitation:
53
+ inviter: 邀請人
54
+ spree/line_item:
55
+ price: 價格
56
+ quantity: 數量
57
+ spree/option_type:
58
+ filterable: 可篩選
59
+ kind: 類型
60
+ name: 名稱
61
+ spree/option_value:
62
+ color_code: 顏色代碼
63
+ image: 色票圖片
64
+ spree/order:
65
+ checkout_complete: 訂單已完成
66
+ completed_at: 結帳日期
67
+ considered_risky: 風險
68
+ coupon_code: 優惠代碼
69
+ created_at: 訂單日期
70
+ email: 電子信箱
71
+ internal_note: 內部備註
72
+ ip_address: IP 位址
73
+ item_count: 商品
74
+ item_total: 品項總計
75
+ number: 訂單號碼
76
+ payment_state: 付款狀態
77
+ shipment_state: 物流狀態
78
+ special_instructions: 特別說明
79
+ state: 訂單狀態
80
+ total: 總計
81
+ spree/order/bill_address:
82
+ address1: 帳單地址
83
+ city: 城市
84
+ phone: 電話
85
+ state: 省/洲
86
+ spree/order/ship_address:
87
+ address1: 商品寄送地址
88
+ city: 城市
89
+ phone: 電話
90
+ state: 省/洲
91
+ spree/payment:
92
+ amount: 金額
93
+ number: 數量
94
+ spree/payment_method:
95
+ name: 付款方式
96
+ spree/policy:
97
+ body: 內文
98
+ owner: 適用政策對象
99
+ spree/price_list:
100
+ description: 說明
101
+ ends_at: 結束時間
102
+ match_policy: 比對政策
103
+ name: 名稱
104
+ priority: 優先順序
105
+ starts_at: 開始時間
106
+ status: 狀態
107
+ spree/price_rule:
108
+ priority: 優先順序
109
+ type: 類型
110
+ spree/product:
111
+ available_on: 上架日期
112
+ cost_currency: 成本幣別
113
+ cost_price: 成本
114
+ description: 商品描述
115
+ discontinue_on: 下架日期
116
+ less_than: 少於
117
+ make_active_at: 啟用時間
118
+ master_price: 預設價格
119
+ more_than: 多於
120
+ name: 商品名稱
121
+ on_hand: 庫存
122
+ tax_category: 稅金類別
123
+ spree/promotion:
124
+ advertise: 廣告
125
+ code: 優惠代碼
126
+ description: 描述
127
+ event_name: 活動名稱
128
+ expires_at: 活動結束於
129
+ generate_code: 產生優惠代碼
130
+ name: 名稱
131
+ path: 路徑
132
+ promotion_category: 優惠類別
133
+ starts_at: 開始於
134
+ usage_limit: 使用次數限制
135
+ spree/promotion_category:
136
+ code: 優惠代碼
137
+ name: 優惠類別
138
+ spree/property:
139
+ name: 名稱
140
+ presentation: 描述
141
+ spree/role:
142
+ name: 身份
143
+ spree/shipment:
144
+ number: 編號
145
+ spree/state:
146
+ abbr: 縮寫
147
+ name: 名稱
148
+ spree/store:
149
+ address: 地址
150
+ contact_phone: 聯絡電話
151
+ mail_from_address: 寄件電子郵件地址
152
+ meta_description: 提供給搜尋引擎之網站敘述
153
+ meta_keywords: 提供給搜尋引擎之關鍵字
154
+ name: 網站名稱
155
+ preferred_digital_asset_authorized_clicks: 下載點擊次數上限
156
+ preferred_digital_asset_authorized_days: 下載天數上限
157
+ preferred_limit_digital_download_count: 限制數位連結下載次數
158
+ preferred_limit_digital_download_days: 限制數位連結下載天數
159
+ seo_robots: SEO 爬蟲設定
160
+ seo_title: 提供給搜尋引擎之標題
161
+ storefront_custom_code_body_end: body 結束標籤前的自訂程式碼
162
+ storefront_custom_code_body_start: body 開始標籤後的自訂程式碼
163
+ storefront_custom_code_head: 頁面 head 中的自訂程式碼
164
+ url: 網址
165
+ spree/store_credit:
166
+ amount_used: 已使用金額
167
+ spree/tax_category:
168
+ description: 敘述
169
+ name: 名稱
170
+ spree/tax_rate:
171
+ amount: 稅率
172
+ included_in_price: 將稅金包含至售價中
173
+ show_rate_in_label: 顯示稅率
174
+ spree/taxon:
175
+ name: 名稱
176
+ permalink: 永久鏈結
177
+ position: 位置
178
+ sort_order: 排序順序
179
+ spree/taxonomy:
180
+ name: 名稱
181
+ spree/user:
182
+ avatar: 頭像
183
+ email: Email
184
+ password: 密碼
185
+ password_confirmation: 確認密碼
186
+ spree/variant:
187
+ cost_currency: 成本幣別
188
+ cost_price: 成本
189
+ depth: 長/深度
190
+ height: 高度
191
+ price: 單價
192
+ sku: SKU
193
+ weight: 重量
194
+ width: 寬度
195
+ spree/zone:
196
+ description: 敘述
197
+ name: 名稱
198
+ user:
199
+ current_sign_in: 本次登入時間
200
+ last_sign_in: 上次登入時間
201
+ sign_in_count: 登入次數
202
+ errors:
203
+ messages:
204
+ blank: 不能為空白
205
+ models:
206
+ spree/allowed_origin:
207
+ attributes:
208
+ origin:
209
+ must_be_origin_only: 必須是來源(協定與主機),不可包含路徑、查詢字串或片段
210
+ spree/classification:
211
+ attributes:
212
+ taxon_id:
213
+ already_linked: 已於此商品連結
214
+ spree/credit_card:
215
+ attributes:
216
+ base:
217
+ card_expired: 信用卡已失效
218
+ expiry_invalid: 信用卡到期日有誤
219
+ spree/gift_card:
220
+ attributes:
221
+ base:
222
+ cannot_destroy_used_gift_card: 無法刪除已使用的禮品卡
223
+ spree/import:
224
+ attributes:
225
+ attachment:
226
+ content_type: 的內容類型不被允許
227
+ type:
228
+ inclusion: 不在允許的類型清單中
229
+ spree/line_item:
230
+ attributes:
231
+ currency:
232
+ must_match_order_currency: 幣別需與訂單相同
233
+ spree/market:
234
+ attributes:
235
+ base:
236
+ cannot_destroy_default_market: 無法刪除預設市場。
237
+ cannot_destroy_last_market: 無法刪除唯一的市場。
238
+ spree/market_country:
239
+ attributes:
240
+ country:
241
+ already_in_market: 已被指派給此商店中的另一個市場
242
+ not_in_shipping_zone: 未被任何運送區域涵蓋。請先設定運送區域。
243
+ spree/payment:
244
+ attributes:
245
+ amount:
246
+ greater_than_max_amount: 超過允許的最高金額 %{max_amount}
247
+ spree/price_list:
248
+ attributes:
249
+ ends_at:
250
+ must_be_after_starts_at: 必須在開始時間之後
251
+ spree/product:
252
+ attributes:
253
+ base:
254
+ cannot_destroy_if_attached_to_line_items: 商品與被加入購物車過後不可刪除
255
+ discontinue_on:
256
+ invalid_date_range: 需比上架日期晚
257
+ spree/product_publication:
258
+ attributes:
259
+ unpublished_at:
260
+ must_be_after_published_at: 必須在發布日期之後
261
+ spree/promotion:
262
+ attributes:
263
+ expires_at:
264
+ invalid_date_range: 已經失效
265
+ spree/refund:
266
+ attributes:
267
+ amount:
268
+ greater_than_allowed: 退款金額超過上限
269
+ spree/store:
270
+ attributes:
271
+ base:
272
+ cannot_destroy_only_store: 無法刪除唯一的商店。
273
+ spree/store_credit:
274
+ attributes:
275
+ amount_authorized:
276
+ exceeds_total_credits: 超過可以使用的總商城抵用金
277
+ amount_used:
278
+ cannot_be_greater_than_amount: 無法超過總額
279
+ greater_than_zero_restrict_delete: 商城購物金已經被使用過了,所以無法刪除此商城抵用金
280
+ spree/user:
281
+ attributes:
282
+ bill_address_id:
283
+ belongs_to_other_user: 屬於其他使用者
284
+ deprecated_in_completed_order: 在已完成的訂單中已棄用
285
+ ship_address_id:
286
+ belongs_to_other_user: 屬於其他使用者
287
+ deprecated_in_completed_order: 在已完成的訂單中已棄用
288
+ spree/variant:
289
+ attributes:
290
+ base:
291
+ cannot_destroy_if_attached_to_line_items: 一但此商品型號被加入過購物車後則無法刪除
292
+ spree/webhook_endpoint:
293
+ attributes:
294
+ url:
295
+ internal_address_not_allowed: 不可指向內部或私人網路位址
296
+ models:
297
+ spree/address:
298
+ one: 地址
299
+ other: 所有地址
300
+ spree/classification:
301
+ one: 分類
302
+ other: 分類
303
+ spree/country:
304
+ one: 地址
305
+ other: 所有地址
306
+ spree/credit_card:
307
+ one: 信用卡
308
+ other: 所有信用卡
309
+ spree/customer_group:
310
+ one: 顧客群組
311
+ other: 顧客群組
312
+ spree/customer_group_user:
313
+ one: 顧客群組使用者
314
+ other: 顧客群組使用者
315
+ spree/export:
316
+ one: 匯出
317
+ other: 匯出
318
+ spree/integration:
319
+ one: 整合
320
+ other: 整合
321
+ spree/inventory_unit:
322
+ one: 庫存單位
323
+ other: 所有庫存單位
324
+ spree/line_item:
325
+ one: 品項
326
+ other: 所有品項
327
+ spree/option_type:
328
+ one: 選項
329
+ other: 所有選項
330
+ spree/option_value:
331
+ one: 選項值
332
+ other: 所有選項值
333
+ spree/order:
334
+ one: 訂單
335
+ other: 所有訂單
336
+ spree/payment:
337
+ one: 付款
338
+ other: 付款
339
+ spree/payment_method:
340
+ one: 付款方式
341
+ other: 付款方式
342
+ spree/price:
343
+ one: 價格
344
+ other: 價格
345
+ spree/price_list:
346
+ one: 價目表
347
+ other: 價目表
348
+ spree/price_rule:
349
+ one: 價格規則
350
+ other: 價格規則
351
+ spree/product:
352
+ one: 商品
353
+ other: 所有商品
354
+ spree/promotion:
355
+ one: 優惠
356
+ other: 所有優惠
357
+ spree/promotion_category:
358
+ one: 優惠分類
359
+ other: 所有優惠分類
360
+ spree/property:
361
+ one: 商品特色
362
+ other: 所有商品特色
363
+ spree/refund_reason:
364
+ one: 退款理由
365
+ other: 所有退款理由
366
+ spree/role:
367
+ one: 角色
368
+ other: 角色
369
+ spree/shipment:
370
+ one: 物流
371
+ other: 物流
372
+ spree/shipping_method:
373
+ one: 物流選項
374
+ other: 物流選項
375
+ spree/state:
376
+ one: 狀態
377
+ other: 狀態
378
+ spree/stock_location:
379
+ one: 存貨位置
380
+ other: 存貨位置
381
+ spree/stock_movement:
382
+ one: 存貨狀態
383
+ other: 存貨狀態
384
+ spree/stock_transfer:
385
+ one: 轉移存貨
386
+ other: 轉移存貨
387
+ spree/store:
388
+ one: 商店
389
+ other: 商店
390
+ spree/store_credit:
391
+ one: 商城抵用金
392
+ other: 商城抵用金
393
+ spree/tax_category:
394
+ one: 稅金類別
395
+ other: 稅金類別
396
+ spree/tax_rate:
397
+ one: 稅率
398
+ other: 稅率
399
+ spree/taxon:
400
+ one: 自訂類別
401
+ other: 自訂類別
402
+ spree/taxonomy:
403
+ one: 自訂類別集合
404
+ other: 自訂類別集合
405
+ spree/user:
406
+ one: 使用者
407
+ other: 使用者
408
+ spree/variant:
409
+ one: 型號
410
+ other: 型號
411
+ spree/zone:
412
+ one: 區域
413
+ other: 區域
414
+ errors:
415
+ messages:
416
+ already_confirmed: 已經驗證,請直接登入。
417
+ not_found: 找不到。
418
+ not_locked: 並未被鎖定。
419
+ not_saved:
420
+ one: 有一個錯誤導致 %{resource} 不能被儲存:
421
+ other: 有 %{count} 個錯誤導致 %{resource} 不能被儲存:
422
+ number:
423
+ percentage:
424
+ format:
425
+ precision: 1
426
+ spree:
427
+ accept: 同意
428
+ accepted: 已同意
429
+ accepts_email_marketing: 接受電子郵件行銷
430
+ account: 帳號
431
+ active: 啟動
432
+ address: 地址
433
+ address1: 地址
434
+ address2: 地址 (接續.)
435
+ adjustment: 調整項目
436
+ adjustment_labels:
437
+ tax_rates:
438
+ excluding_tax: "%{name}%{amount}"
439
+ including_tax: "%{name}%{amount} (售價已含稅金)"
440
+ adjustments_deleted: 調整已刪除
441
+ admin_user_mailer:
442
+ password_reset_email:
443
+ action: 重設密碼
444
+ expiry_notice: 此密碼重設連結即將過期。如果這不是您本人操作,則無需採取任何動作。
445
+ greeting: 您好,%{name}:
446
+ ignore_notice: 如果您沒有請求重設密碼,可以放心忽略此郵件。您的密碼不會被變更。
447
+ instructions: 我們收到了重設您 %{store_name} 管理員帳戶密碼的請求。請點擊下方按鈕設定新密碼。
448
+ subject: 密碼重設說明
449
+ all: 所有
450
+ amount: 金額
451
+ api_key_no_current_key: 沒有任何 API 金鑰對此請求進行驗證
452
+ api_key_scopes_immutable: 在金鑰建立後無法變更;請建立一把含有所需範圍的新金鑰並撤銷此金鑰
453
+ approver: 審核者
454
+ authorized: 已授權
455
+ availability: 庫存
456
+ backorderable: 無庫存可繼續銷售
457
+ backordered: 已缺貨
458
+ bill_address: 帳單地址
459
+ billing_address: 帳單地址
460
+ calculator: 計算規則
461
+ canceled: 已取消
462
+ canceler: 取消者
463
+ cannot_be_destroyed: 無法刪除訂單。
464
+ capture: 收款
465
+ cart: 購物車
466
+ cart_already_updated: 購物車已更新。
467
+ cart_line_item:
468
+ delivery_unavailable: "%{li_name} 無法配送至所選地址"
469
+ discontinued: "%{li_name} 已下架,因此被移除"
470
+ out_of_stock: "%{li_name} 已售完,因此被移除"
471
+ categories: 分類
472
+ category: 分類
473
+ channel: 銷售管道
474
+ channels: 銷售通路
475
+ checkout: 結帳
476
+ checkout_requirements:
477
+ email_required: 電子郵件地址為必填
478
+ line_items_required: 請至少在購物車中加入一項商品
479
+ payment_required: 請新增付款方式
480
+ ship_address_required: 運送地址為必填
481
+ city: 城市
482
+ color_code: 顏色代碼
483
+ company: 公司名
484
+ compare_at_amount: 比較金額
485
+ compare_at_price: 原價
486
+ complete: 完成
487
+ confirm: 確認
488
+ cost_price: 成本
489
+ count_on_hand: 庫存數量
490
+ country: 國家
491
+ coupon_code: 優惠代碼
492
+ coupon_code_already_applied: 此訂單已經使用過此優惠代碼
493
+ coupon_code_applied: 你已經成功於此訂單使用優惠代碼
494
+ coupon_code_better_exists: 上一個優惠代碼的優惠更多!
495
+ coupon_code_expired: 優惠代碼已經過期
496
+ coupon_code_max_usage: 優惠代碼已經被用完
497
+ coupon_code_not_eligible: 此優惠代碼不適用於此訂單。
498
+ coupon_code_not_found: 此優惠代碼不存在,請重試。
499
+ coupon_code_unknown_error: 此優惠代碼目前無法被使用。
500
+ coupon_code_used: 您輸入的優惠代碼已被使用過。請再試一次。
501
+ created_at: 建立於
502
+ credit_card: 信用卡
503
+ currency: 貨幣
504
+ currency_not_supported_by_store: 不被此商店支援
505
+ customer: 客戶
506
+ customers: 顧客
507
+ default: 預設
508
+ default_stock_location_name: 商店地點
509
+ default_wishlist_name: 願望清單
510
+ delivery: 寄送
511
+ depth: 深度
512
+ description: 敘述
513
+ destination: 目的地
514
+ destroy: 刪除
515
+ details: 資訊
516
+ digital:
517
+ digital_delivery: 數位交付
518
+ digital_assets: 數位資產
519
+ discontinued: 已下架
520
+ discontinued_variants_present: 此訂單中幾個品項有不再販售的型號
521
+ display_delivery_range: "%{delivery_range} 個工作天內送達"
522
+ draft: 草稿
523
+ eligibility_errors:
524
+ messages:
525
+ has_excluded_product: 你的購物車中有商品導致此優惠無法使用
526
+ item_total_less_than: 此優惠代碼無法使用於訂單金額少於 %{amount} 的情況。
527
+ item_total_less_than_or_equal: 此優惠代碼無法使用於訂單金額少於或等於 %{amount} 的情況。
528
+ item_total_more_than: 此優惠代碼無法使用於訂單金額高於 %{amount} 的情況。
529
+ item_total_more_than_or_equal: 此優惠代碼無法使用於訂單金額高於或等於 %{amount} 的情況。
530
+ limit_once_per_user: 此優惠代碼每個會員只能使用一次
531
+ missing_product: 此優惠代碼無法使用,購物車內的商品沒有滿足優惠條件。
532
+ missing_taxon: 你必須有商品來自適用此活動的類別於購物車,才能使用此優惠代碼
533
+ no_applicable_products: 你必須有適用此活動的商品於購物車內,才能使用此優惠代碼
534
+ no_matching_channel: 此優惠券代碼不適用於此銷售管道。
535
+ no_matching_market: 此優惠券代碼不適用於您的市場。
536
+ no_matching_taxons: 你必須有商品來自適用此活動的類別於購物車,才能使用此優惠代碼
537
+ no_user_or_email_specified: 你必須登入或是提供 Email ,才能使用此優惠代碼
538
+ no_user_specified: 你必須登入才能使用此優惠代碼
539
+ not_first_order: 此優惠代碼只適用於首購
540
+ wrong_country: 此優惠代碼在您的國家不適用
541
+ email: Email
542
+ error: 錯誤
543
+ error_user_destroy_with_orders: 已經有訂單的客戶無法被刪除
544
+ error_user_does_not_have_any_store_credits: 使用者沒有任何可用的商店點數
545
+ errors:
546
+ messages:
547
+ cannot_delete_default_channel: 無法刪除預設通路。請先將另一個通路提升為預設通路。
548
+ channel_store_mismatch: 必須屬於同一個商店
549
+ invalid_order_routing_rule: 不是已註冊的訂單路由規則
550
+ invalid_order_routing_strategy: 不是已註冊的訂單路由策略
551
+ store_association_can_not_be_changed: 商店關聯無法變更
552
+ store_is_already_set: 商店已設定
553
+ expired: 已過期
554
+ export_mailer:
555
+ export_done:
556
+ message: 做得好,您的匯出已就緒!請使用下方連結下載。
557
+ subject: 您的匯出 %{export_number} 已成功處理!
558
+ greeting: 您好 %{user_name},
559
+ field: 欄位
560
+ first_name: 名字
561
+ flat_percent: 固定比例
562
+ flat_rate_per_order: 每單固定比例
563
+ flexible_rate: 彈性比例
564
+ free: 免費
565
+ gateway: 接口
566
+ gateway_error: 接口錯誤
567
+ gift_card: 禮品卡
568
+ gift_card_already_redeemed: 此禮品卡已被兌換。
569
+ gift_card_applied: 禮品卡已成功套用至您的訂單!
570
+ gift_card_customer_not_logged_in: 訪客無法套用禮品卡。
571
+ gift_card_expired: 此禮品卡已過期。
572
+ gift_card_mismatched_currency: 禮品卡無法以目前的貨幣套用。
573
+ gift_card_mismatched_customer: 此禮品卡已與其他使用者建立關聯。
574
+ gift_card_not_found: 找不到此禮品卡。
575
+ gift_card_removed: 禮品卡已成功從您的訂單中移除
576
+ gift_card_using_store_credit_error: 套用商店點數後即無法再套用禮品卡。
577
+ height: 高度
578
+ i18n:
579
+ this_file_language: 繁體中文 (zh-TW)
580
+ idempotency_key_reused: 此 Idempotency-Key 已搭配不同的請求參數使用過。
581
+ image: 圖片
582
+ import: 匯入
583
+ in_stock: 有庫存
584
+ inactive: 已失效
585
+ incomplete: 未完成
586
+ insufficient_stock_lines_present: 此訂單中有幾個品項庫存不夠
587
+ internal_note: 內部備註
588
+ inventory: 庫存
589
+ invitation_mailer:
590
+ greeting: 您好 %{user_name},
591
+ invitation_accepted:
592
+ body: "%{invitee_name} 已接受您加入 %{resource_name} 的邀請"
593
+ subject: "%{invitee_name} 已接受您加入 %{resource_name} 的邀請"
594
+ invitation_email:
595
+ body: "%{inviter_name} 已邀請您加入 %{resource_name}"
596
+ link_description: 若要接受此邀請,請點選下方連結:
597
+ subject: 加入 %{resource_name} 的邀請
598
+ iso: ISO Alpha-2
599
+ item: 項目
600
+ items_cannot_be_shipped: 我們無法計算您所選的項目的運費。
601
+ key: 金鑰
602
+ kind: 類型
603
+ label: 標籤
604
+ last_name: 姓氏
605
+ line_item: 明細項目
606
+ line_items: 明細項目
607
+ link: 連結
608
+ locale: 語言
609
+ locale_not_supported_by_store: 不被此商店支援
610
+ manual: 手動
611
+ market: 市場
612
+ me_no_current_user: 沒有任何管理員使用者對此請求進行驗證
613
+ media: 媒體
614
+ meta_description: Meta 敘述
615
+ meta_keywords: Meta 關鍵字
616
+ meta_title: Meta 標題
617
+ metadata: Metadata
618
+ min_quantity: 最小數量
619
+ month: 月份
620
+ name: 名稱
621
+ new_variant: 新增型號
622
+ no_cc_type: 不適用
623
+ no_payment_found: 沒有付款
624
+ none: 沒有
625
+ number: 號碼
626
+ on_hand: 庫存
627
+ only_active_products_can_be_added_to_cart: 草稿與已封存的商品無法加入購物車,請先將商品標示為啟用。
628
+ open: 開啟
629
+ option_name: 選項名稱
630
+ option_type: 選項
631
+ option_value: 選項值
632
+ options: 選項
633
+ or: 或
634
+ order: 訂單
635
+ order_canceled: 訂單已取消
636
+ order_routing:
637
+ strategies:
638
+ legacy: 舊版
639
+ rules: 規則(依序)
640
+ order_summary: 訂單總結
641
+ orders: 訂單
642
+ out_of_stock: 已售罄
643
+ password: 密碼
644
+ path: 路徑
645
+ payment: 支付
646
+ payment_method: 付款方式
647
+ payment_method_not_supported: 不支援此付款方式,請選擇別的付款方式
648
+ payment_methods: 付款方式
649
+ payment_processing_failed: 付款無法處理,請確認你輸入的資料沒有錯誤
650
+ payment_source: 付款來源
651
+ pending: 等待中
652
+ percent: 百分比
653
+ percent_per_item: 每單位之百分比
654
+ phone: 電話
655
+ price: 價格
656
+ price_range: 價格區間
657
+ price_rules:
658
+ channel_rule:
659
+ description: 依銷售管道套用定價
660
+ customer_group_rule:
661
+ description: 將定價套用至特定顧客群組
662
+ price_sack: Price Sack
663
+ prices: 價格
664
+ privacy_policy: 隱私權政策
665
+ processing: 處理中
666
+ product: 商品
667
+ product_translations: 商品翻譯
668
+ products: 商品
669
+ products_cannot_be_shipped: 我們目前無法將 %{product_names} 運送至您所在的地點。請變更您的運送地址,或從購物車中移除 %{product_names}。
670
+ promotion: 優惠
671
+ promotion_action_types:
672
+ create_adjustment:
673
+ description: 為訂單建立促銷用的價格調整
674
+ name: 新增訂單的價格調整
675
+ create_item_adjustments:
676
+ description: 為訂單上的一個品項建立一筆促銷用的價格調整
677
+ name: 新增單項的價格調整
678
+ create_line_items:
679
+ description: 新增特定商品到訂單中
680
+ name: 新增訂單商品
681
+ free_shipping:
682
+ description: 整張訂單免運費
683
+ name: 免運費
684
+ promotion_actions: 優惠
685
+ promotion_already_used: 您無法刪除已套用的促銷活動
686
+ promotion_label: 優惠活動:%{name}
687
+ promotion_rule_types:
688
+ category:
689
+ description: 訂單包含指定類別中的商品
690
+ name: 類別
691
+ channel:
692
+ description: 限定透過指定管道下單的訂單
693
+ name: 管道(s)
694
+ country:
695
+ description: 訂單要被寄去指定(或是預設)的國家
696
+ name: 國家
697
+ currency:
698
+ description: 限定使用特定貨幣的訂單
699
+ name: 貨幣
700
+ customer:
701
+ description: 僅供指定顧客使用
702
+ name: 顧客
703
+ customer_group:
704
+ description: 僅供指定顧客群組中的顧客使用
705
+ name: 顧客群組
706
+ customer_logged_in:
707
+ description: 僅供已登入的顧客使用
708
+ name: 僅限已登入的顧客
709
+ first_order:
710
+ description: 使用者的首筆訂單
711
+ name: 首筆訂單
712
+ item_total:
713
+ description: 商品總價符合條件
714
+ name: 商品總價
715
+ market:
716
+ description: 限定在指定市場下單的訂單
717
+ name: 市場(s)
718
+ one_use_per_user:
719
+ description: 每人只可使用一次
720
+ name: 每人一次
721
+ option_value:
722
+ description: 訂單包含指定商品以及指定的選項
723
+ name: 選項值(s)
724
+ product:
725
+ description: 訂單包含指定商品
726
+ name: 商品(s)
727
+ promotions: 優惠
728
+ quantity: 數量
729
+ query: 查詢
730
+ reason: 原因
731
+ received: 已收到
732
+ reference: 參考
733
+ refund: 退款
734
+ refund_amount: 退款金額
735
+ refunds: 退款
736
+ registration: 註冊
737
+ rejected: 已拒絕
738
+ remove: 移除
739
+ remove_gift_card_on_completed_order_error: 訂單成立後即無法移除禮品卡
740
+ resellable: 可轉售
741
+ resend: 重寄
742
+ response_code: 回應碼
743
+ return: 退貨
744
+ returned: 已退貨
745
+ returns_policy: 退貨政策
746
+ row: 列
747
+ rules: 規則
748
+ say_no: 否
749
+ say_yes: 是
750
+ scope: 範圍
751
+ selected_quantity_not_available: 所選數量 %{item} 不可行
752
+ ship: 寄送
753
+ ship_address: 收件地址
754
+ shipment: 物流
755
+ shipped: 已寄送
756
+ shipping: 寄送中
757
+ shipping_address: 收件地址
758
+ shipping_flat_rate_per_item: 訂單內每項商品收取固定運費
759
+ shipping_flat_rate_per_order: 每筆訂單收取固定運費
760
+ shipping_flexible_rate: 運費將根據訂單內每項商品收取
761
+ shipping_policy: 運送政策
762
+ shipping_price_sack: 每袋價格
763
+ shipping_rates:
764
+ display_price:
765
+ excluding_tax: "%{price} (+ %{tax_amount} %{tax_rate_name})"
766
+ including_tax: "%{price} (包含 %{tax_amount} %{tax_rate_name})"
767
+ sku: SKU
768
+ slug: Slug
769
+ source: 來源
770
+ status: 狀態
771
+ stock_location: 庫存位置
772
+ stock_locations: 庫存位置
773
+ stock_transfer:
774
+ errors:
775
+ must_have_variant: 必須至少有有一個型號
776
+ same_location: 不可與目的地地點相同
777
+ variants_unavailable: 部分款式在 %{stock} 無法取得
778
+ store: 商店
779
+ store_credit:
780
+ allocated: 已新增
781
+ authorized: 已授權
782
+ captured: 已使用
783
+ credit: 抵用金
784
+ eligible: 符合資格
785
+ store_credit_name: 商城抵用金
786
+ store_credit_payment_method:
787
+ currency_mismatch: 商城抵用金的幣別與訂單不符
788
+ insufficient_authorized_amount: 無法獲取超過的金額
789
+ insufficient_funds: 商城抵用金不足
790
+ successful_action: 成功的商城抵用金 %{action}
791
+ unable_to_credit: '無法給予商城抵用金: %{auth_code}'
792
+ unable_to_find: 無法找到商城抵用金
793
+ unable_to_find_for_action: "%{action} 的行為,無法找到商城抵用金: %{auth_code}"
794
+ unable_to_void: '無法作廢: %{auth_code}'
795
+ success: 成功
796
+ tags: 標籤
797
+ tax: 稅金
798
+ tax_category: 稅金類別
799
+ terms_of_service: 服務條款
800
+ there_are_no_items_for_this_order: 訂單內無商品,請加入商品至訂單內後再繼續。
801
+ tiered_flat_rate: 分層固定費率
802
+ tiered_percent: 分層費率
803
+ total: 總計
804
+ track_inventory: 追蹤庫存
805
+ tracking: 追蹤
806
+ tracking_number: 追蹤號碼
807
+ tracking_url: 追蹤網址
808
+ type: 類型
809
+ unable_to_connect_to_gateway: 無法連線至接口
810
+ updated_at: 更新時間
811
+ url: URL
812
+ user: 使用者
813
+ validation:
814
+ must_be_int: 必須是整數
815
+ value: 值
816
+ variant: 型號
817
+ variants: 型號
818
+ verified: 已驗證
819
+ void: 作廢
820
+ webhook_mailer:
821
+ endpoint_disabled:
822
+ disabled_at_label: 停用時間
823
+ heading: Webhook 端點已停用
824
+ instructions: 請檢查端點 URL 與服務,然後於「設定 → 開發者 → Webhook」中重新啟用。
825
+ message: Webhook 端點「%{endpoint_name}」在多次傳送失敗後已被自動停用。
826
+ name_label: 名稱
827
+ reason_label: 原因
828
+ subject: Webhook 端點已停用:%{endpoint_name}
829
+ url_label: URL
830
+ weight: 重量
831
+ weight_unit: 重量單位
832
+ width: 寬度
833
+ year: 年份
834
+ zip: 郵遞區號