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,830 @@
1
+ ---
2
+ fr:
3
+ activemodel:
4
+ errors:
5
+ messages:
6
+ blank: ne peut pas être vide
7
+ activerecord:
8
+ attributes:
9
+ spree/address:
10
+ address1: Adresse
11
+ address2: Adresse complémentaire
12
+ city: Ville
13
+ company: Entreprise
14
+ country: Pays
15
+ label: Nom d'adresse
16
+ phone: Téléphone
17
+ state: Province / Région / État
18
+ spree/calculator/tiered_flat_rate:
19
+ preferred_base_amount: Montant de base
20
+ preferred_tiers: Tiers
21
+ spree/calculator/tiered_percent:
22
+ preferred_base_percent: Pourcentage de base
23
+ preferred_tiers: Tiers
24
+ spree/country:
25
+ iso: ISO
26
+ iso3: ISO3
27
+ iso_name: Nom ISO
28
+ name: Nom
29
+ numcode: Code ISO
30
+ spree/credit_card:
31
+ base: Base
32
+ cc_type: Type
33
+ month: Mois
34
+ name: Nom
35
+ number: Numéro
36
+ verification_value: Code de sécurité
37
+ year: Année
38
+ spree/customer_group:
39
+ description: Description
40
+ name: Nom
41
+ spree/gift_card:
42
+ amount_used: Montant utilisé
43
+ expires_at: Expire le
44
+ spree/import:
45
+ preferred_delimiter: Délimiteur
46
+ spree/import_mapping:
47
+ file_column: Colonne du fichier
48
+ schema_field: Champ du schéma
49
+ spree/import_row:
50
+ row_number: Numéro
51
+ spree/inventory_unit:
52
+ state: Province / Région / État
53
+ spree/invitation:
54
+ inviter: Invitant
55
+ spree/line_item:
56
+ price: Prix
57
+ quantity: Quantité
58
+ spree/option_type:
59
+ filterable: Filtrable
60
+ kind: Type
61
+ name: Nom
62
+ spree/option_value:
63
+ color_code: Code couleur
64
+ image: Image de l'échantillon
65
+ spree/order:
66
+ checkout_complete: Votre commande à été reçu
67
+ completed_at: Terminé à
68
+ considered_risky: Considérée à risque
69
+ coupon_code: Coupon de promotion
70
+ created_at: Date d'achat
71
+ email: Courriel du client
72
+ internal_note: Note interne
73
+ ip_address: Adresse IP
74
+ item_count: Articles
75
+ item_total: Nombre total d'articles
76
+ number: Nombre
77
+ payment_state: État du paiement
78
+ shipment_state: État du colis
79
+ special_instructions: Instructions spéciales
80
+ state: État de la commande
81
+ total: Total
82
+ spree/order/bill_address:
83
+ address1: Rue de l'adresse de facturation
84
+ city: Ville de l'adresse de facturation
85
+ phone: Numéro de téléphone de l'adresse de facturation
86
+ state: Province / Région / État de l'adresse de facturation
87
+ spree/order/ship_address:
88
+ address1: Rue de l'adresse de livraison
89
+ city: Ville de l'adresse de livraison
90
+ phone: Numéro de téléphone de l'adresse de livraison
91
+ state: Province / Région / État de l'adresse de livraison
92
+ spree/payment:
93
+ amount: Montant
94
+ number: Numéro
95
+ spree/payment_method:
96
+ name: Nom
97
+ spree/policy:
98
+ body: Contenu
99
+ owner: Politique pour
100
+ spree/price_list:
101
+ description: Description
102
+ ends_at: Se termine le
103
+ match_policy: Règle de correspondance
104
+ name: Nom
105
+ priority: Priorité
106
+ starts_at: Commence le
107
+ status: Statut
108
+ spree/price_rule:
109
+ priority: Priorité
110
+ type: Type
111
+ spree/product:
112
+ available_on: Disponible le
113
+ cost_currency: Devise du prix
114
+ cost_price: Prix d'achat
115
+ description: Description
116
+ discontinue_on: Disponible jusqu'au
117
+ less_than: Moins que
118
+ make_active_at: Activer le
119
+ master_price: Prix de départ
120
+ more_than: Plus de
121
+ name: Nom
122
+ on_hand: En Stock
123
+ tax_category: Catégorie de taxe
124
+ spree/promotion:
125
+ advertise: Publiciser
126
+ code: Code
127
+ description: Description
128
+ event_name: Nom de l'événement
129
+ expires_at: Expire le
130
+ generate_code: code
131
+ name: Nom
132
+ path: Chemin
133
+ promotion_category: Catégorie de promotion
134
+ starts_at: Débute le
135
+ usage_limit: Limite d'utilisation
136
+ spree/promotion_category:
137
+ code: Code
138
+ name: Nom
139
+ spree/property:
140
+ name: Nom
141
+ presentation: Présentation
142
+ spree/role:
143
+ name: Nom
144
+ spree/shipment:
145
+ number: Numéro
146
+ spree/state:
147
+ abbr: Abréviation
148
+ name: Nom
149
+ spree/store:
150
+ address: Adresse
151
+ contact_phone: Téléphone de contact
152
+ mail_from_address: Courriel d'envoi
153
+ meta_description: Description (Meta)
154
+ meta_keywords: Mots-clés (Meta)
155
+ name: Nom du site
156
+ preferred_digital_asset_authorized_clicks: Limite de clics de téléchargement
157
+ preferred_digital_asset_authorized_days: Limite de jours de téléchargement
158
+ preferred_limit_digital_download_count: Limiter le nombre de téléchargements des liens numériques
159
+ preferred_limit_digital_download_days: Limiter le nombre de jours de téléchargement des liens numériques
160
+ seo_robots: Robots PDG
161
+ seo_title: Titre SEO
162
+ storefront_custom_code_body_end: Code personnalisé avant la balise body de fermeture
163
+ storefront_custom_code_body_start: Code personnalisé après la balise body d'ouverture
164
+ storefront_custom_code_head: Code personnalisé dans l'en-tête de la page
165
+ url: Adresse URL
166
+ spree/store_credit:
167
+ amount_used: Total utilisé
168
+ spree/tax_category:
169
+ description: Description
170
+ name: Nom
171
+ spree/tax_rate:
172
+ amount: Taux
173
+ included_in_price: Inclus dans le prix
174
+ show_rate_in_label: Afficher le taux dans l'étiquette
175
+ spree/taxon:
176
+ name: Nom
177
+ permalink: Permalien
178
+ position: Position
179
+ sort_order: Ordre de tri
180
+ spree/taxonomy:
181
+ name: Nom
182
+ spree/user:
183
+ avatar: Avatar
184
+ email: Courriel
185
+ password: Mot de passe
186
+ password_confirmation: Confirmation du mot de passe
187
+ spree/variant:
188
+ cost_currency: Devise du prix
189
+ cost_price: Prix coûtant
190
+ depth: Profondeur
191
+ height: Hauteur
192
+ price: Prix
193
+ sku: SKU
194
+ weight: Poids
195
+ width: Largeur
196
+ spree/zone:
197
+ description: Description
198
+ name: Nom
199
+ user:
200
+ current_sign_in: Connexion actuelle le
201
+ last_sign_in: Dernière connexion le
202
+ sign_in_count: Nombre de connexions
203
+ errors:
204
+ messages:
205
+ blank: ne peut pas être vide
206
+ models:
207
+ spree/allowed_origin:
208
+ attributes:
209
+ origin:
210
+ must_be_origin_only: doit être une origine (schéma et hôte) sans chemin, requête ou fragment
211
+ spree/classification:
212
+ attributes:
213
+ taxon_id:
214
+ already_linked: est déjà relié à ce produit
215
+ spree/credit_card:
216
+ attributes:
217
+ base:
218
+ card_expired: Cette carte est expirée
219
+ expiry_invalid: Cette carte est invalide
220
+ spree/gift_card:
221
+ attributes:
222
+ base:
223
+ cannot_destroy_used_gift_card: Impossible de supprimer une carte cadeau utilisée
224
+ spree/import:
225
+ attributes:
226
+ attachment:
227
+ content_type: a un type de contenu non autorisé
228
+ type:
229
+ inclusion: n'est pas inclus dans la liste des types autorisés
230
+ spree/line_item:
231
+ attributes:
232
+ currency:
233
+ must_match_order_currency: Doit correspondre à la devise de la commande
234
+ spree/market:
235
+ attributes:
236
+ base:
237
+ cannot_destroy_default_market: Impossible de supprimer le marché par défaut.
238
+ cannot_destroy_last_market: Impossible de supprimer le seul marché.
239
+ spree/market_country:
240
+ attributes:
241
+ country:
242
+ already_in_market: est déjà attribué à un autre marché dans cette boutique
243
+ not_in_shipping_zone: n'est couvert par aucune zone d'expédition. Veuillez d'abord configurer une zone d'expédition.
244
+ spree/payment:
245
+ attributes:
246
+ amount:
247
+ greater_than_max_amount: est supérieur au montant maximum autorisé de %{max_amount}
248
+ spree/price_list:
249
+ attributes:
250
+ ends_at:
251
+ must_be_after_starts_at: doit être postérieur à la date de début
252
+ spree/product:
253
+ attributes:
254
+ base:
255
+ cannot_destroy_if_attached_to_line_items: Les produits ne peuvent pas être supprimés s'ils se trouvent dans un élément de campagne
256
+ discontinue_on:
257
+ invalid_date_range: Doit être postérieure à la date disponible
258
+ spree/product_publication:
259
+ attributes:
260
+ unpublished_at:
261
+ must_be_after_published_at: doit être postérieur à la date de publication
262
+ spree/promotion:
263
+ attributes:
264
+ expires_at:
265
+ invalid_date_range: Doit être postérieur à la date de début
266
+ spree/refund:
267
+ attributes:
268
+ amount:
269
+ greater_than_allowed: est plus grand que la valeur autorisée.
270
+ spree/store:
271
+ attributes:
272
+ base:
273
+ cannot_destroy_only_store: Impossible de supprimer la seule boutique.
274
+ spree/store_credit:
275
+ attributes:
276
+ amount_authorized:
277
+ exceeds_total_credits: Dépasse le solde total
278
+ amount_used:
279
+ cannot_be_greater_than_amount: Ne peut pas être supérieur à la somme.
280
+ greater_than_zero_restrict_delete: Est supérieur à zéro. Le crédit ne peut pas être supprimé.
281
+ spree/user:
282
+ attributes:
283
+ bill_address_id:
284
+ belongs_to_other_user: appartient à un autre utilisateur
285
+ deprecated_in_completed_order: obsolète dans une commande finalisée
286
+ ship_address_id:
287
+ belongs_to_other_user: appartient à un autre utilisateur
288
+ deprecated_in_completed_order: obsolète dans une commande finalisée
289
+ spree/variant:
290
+ attributes:
291
+ base:
292
+ cannot_destroy_if_attached_to_line_items: Les variantes ne peuvent pas être supprimées si elles appartiennent à un élément de campagne
293
+ spree/webhook_endpoint:
294
+ attributes:
295
+ url:
296
+ internal_address_not_allowed: ne doit pas pointer vers une adresse de réseau interne ou privé
297
+ models:
298
+ spree/address:
299
+ one: Adresse
300
+ other: Adresses
301
+ spree/classification:
302
+ one: Classification
303
+ other: Classifications
304
+ spree/country:
305
+ one: Pays
306
+ other: Pays
307
+ spree/credit_card:
308
+ one: Carte de crédit
309
+ other: Cartes de crédit
310
+ spree/customer_group:
311
+ one: Groupe de clients
312
+ other: Groupes de clients
313
+ spree/customer_group_user:
314
+ one: Utilisateur de groupe de clients
315
+ other: Utilisateurs de groupe de clients
316
+ spree/export:
317
+ one: Exportation
318
+ other: Exportations
319
+ spree/integration:
320
+ one: Intégration
321
+ other: Intégrations
322
+ spree/inventory_unit:
323
+ one: Stock
324
+ other: Stocks
325
+ spree/line_item:
326
+ one: article
327
+ other: articles
328
+ spree/option_type:
329
+ one: Type d'option
330
+ other: Types d'option
331
+ spree/option_value:
332
+ one: Valeur d'option
333
+ other: Valeurs d'option
334
+ spree/order:
335
+ one: Commande
336
+ other: Commandes
337
+ spree/payment:
338
+ one: Paiement
339
+ other: Paiements
340
+ spree/payment_method:
341
+ one: Méthode de paiement
342
+ other: Méthodes de paiement
343
+ spree/price:
344
+ one: Prix
345
+ other: Prix
346
+ spree/price_list:
347
+ one: Liste de prix
348
+ other: Listes de prix
349
+ spree/price_rule:
350
+ one: Règle de prix
351
+ other: Règles de prix
352
+ spree/product:
353
+ one: Produit
354
+ other: Produits
355
+ spree/promotion:
356
+ one: Promotion
357
+ other: Promotions
358
+ spree/promotion_category:
359
+ one: Catégorie de promotion
360
+ other: Catégories de promotion
361
+ spree/property:
362
+ one: Proprieté
363
+ other: Proprietés
364
+ spree/refund_reason:
365
+ one: Raison du remboursement
366
+ other: Raisons du remboursement
367
+ spree/role:
368
+ one: Rôle
369
+ other: Rôles
370
+ spree/shipment:
371
+ one: Expédition
372
+ other: Expéditions
373
+ spree/shipping_method:
374
+ one: Méthode de livraison
375
+ other: Méthodes de livraison
376
+ spree/state:
377
+ one: Région
378
+ other: Régions
379
+ spree/stock_location:
380
+ one: Emplacement du stock
381
+ other: Emplacements du stock
382
+ spree/stock_movement:
383
+ one: Mouvement de stock
384
+ other: Mouvements de stock
385
+ spree/stock_transfer:
386
+ one: Transfert de stock
387
+ other: Transferts de stock
388
+ spree/store:
389
+ one: Boutique
390
+ other: Boutiques
391
+ spree/store_credit:
392
+ one: Crédit
393
+ other: Crédits
394
+ spree/tax_category:
395
+ one: Catégorie de taxe
396
+ other: Catégories des taxes
397
+ spree/tax_rate:
398
+ one: Taux de la taxe
399
+ other: Taux des taxes
400
+ spree/taxon:
401
+ one: Taxon
402
+ other: Taxons
403
+ spree/taxonomy:
404
+ one: Taxonomie
405
+ other: Taxonomies
406
+ spree/user:
407
+ one: Utilisateur
408
+ other: Utilisateurs
409
+ spree/variant:
410
+ one: Variante
411
+ other: Variantes
412
+ spree/zone:
413
+ one: Zone
414
+ other: Zones
415
+ errors:
416
+ messages:
417
+ already_confirmed: est déjà confirmé
418
+ not_found: Non trouvé(e)
419
+ not_locked: n'est pas bloqué
420
+ not_saved:
421
+ one: "%{resource} n'a pu etre sauvegardé à cause d' 1 erreur:"
422
+ other: "%{resource} n'a pu etre sauvegardé à cause de %{count} erreurs:"
423
+ number:
424
+ percentage:
425
+ format:
426
+ precision: 1
427
+ spree:
428
+ accept: Accepter
429
+ accepted: Accepté
430
+ accepts_email_marketing: Accepte le marketing par e-mail
431
+ account: Compte
432
+ active: Actif
433
+ address: Adresse
434
+ address1: Adresse
435
+ address2: Adresse (complément)
436
+ adjustment: Ajustement
437
+ adjustment_labels:
438
+ tax_rates:
439
+ excluding_tax: "%{name}%{amount}"
440
+ including_tax: "%{name}%{amount} (Inclus dans le prix)"
441
+ adjustments_deleted: Ajustements supprimés
442
+ admin_user_mailer:
443
+ password_reset_email:
444
+ action: Réinitialiser le mot de passe
445
+ expiry_notice: Ce lien de réinitialisation du mot de passe expirera bientôt. Si vous n'en êtes pas à l'origine, aucune action n'est requise.
446
+ greeting: Bonjour %{name},
447
+ ignore_notice: Si vous n'avez pas demandé de réinitialisation de mot de passe, vous pouvez ignorer cet e-mail en toute sécurité. Votre mot de passe ne sera pas modifié.
448
+ instructions: Nous avons reçu une demande de réinitialisation du mot de passe de votre compte administrateur %{store_name}. Cliquez sur le bouton ci-dessous pour choisir un nouveau mot de passe.
449
+ subject: Instructions de réinitialisation du mot de passe
450
+ all: Tous
451
+ amount: Montant
452
+ api_key_no_current_key: Aucune clé API n'a authentifié cette requête
453
+ api_key_scopes_immutable: ne peut pas être modifié après la création de la clé ; créez une nouvelle clé avec les portées dont vous avez besoin et révoquez celle-ci
454
+ approver: Approbateur
455
+ authorized: Autorisé
456
+ availability: Disponibilité
457
+ backorderable: Peut être acheté même si le stock est vide
458
+ backordered: En rupture de stock
459
+ bill_address: Adresse facturée
460
+ billing_address: Adresse de facturation
461
+ calculator: Calculateur
462
+ canceled: Annulé
463
+ canceler: Annulateur
464
+ cannot_be_destroyed: La commande ne peut pas être supprimée.
465
+ capture: accepté
466
+ cart: Panier
467
+ cart_already_updated: Le panier a déjà été mis à jour.
468
+ cart_line_item:
469
+ delivery_unavailable: "%{li_name} ne peut pas être livré à l'adresse sélectionnée"
470
+ discontinued: "%{li_name} a été retiré car il a été abandonné"
471
+ out_of_stock: "%{li_name} a été retiré car il est en rupture de stock"
472
+ categories: Catégories
473
+ category: Categorie
474
+ channel: canal
475
+ channels: Canaux de vente
476
+ checkout: Passer la commande
477
+ checkout_requirements:
478
+ email_required: L'adresse e-mail est requise
479
+ line_items_required: Ajoutez au moins un article à votre panier
480
+ payment_required: Ajoutez un mode de paiement
481
+ ship_address_required: L'adresse de livraison est requise
482
+ city: Ville
483
+ color_code: Code couleur
484
+ company: Entreprise
485
+ compare_at_amount: Montant de comparaison
486
+ compare_at_price: Comparer au prix
487
+ complete: Terminé
488
+ confirm: Confirmation
489
+ cost_price: Prix coûtant
490
+ count_on_hand: Nombre en stock
491
+ country: Pays
492
+ coupon_code: Code Promo
493
+ coupon_code_already_applied: Le code promo a déjà été utilisé pour cette commande
494
+ coupon_code_applied: Le code promo a été appliqué avec succès à votre commande.
495
+ coupon_code_better_exists: Le code promo utilisé précédemment vous offre une meilleure réduction
496
+ coupon_code_expired: Le code promo n'est plus valable
497
+ coupon_code_max_usage: Le code promo à été utilisé trop de fois et n'est plus valide
498
+ coupon_code_not_eligible: Le code promo ne peut pas être utilisé pour cette commande
499
+ coupon_code_not_found: Le code promo que vous avez entré n'existe pas.
500
+ coupon_code_unknown_error: Ce code promo ne peut pas être appliqué au panier pour le moment.
501
+ coupon_code_used: Le code promo que vous avez saisi a déjà été utilisé. Veuillez réessayer.
502
+ created_at: Date de création
503
+ credit_card: Carte de crédit
504
+ currency: Devise
505
+ currency_not_supported_by_store: n'est pas prise en charge par cette boutique
506
+ customer: Client
507
+ customers: Clients
508
+ default: Défaut
509
+ default_stock_location_name: Emplacement de la boutique
510
+ default_wishlist_name: Liste de souhaits
511
+ delivery: Livraison
512
+ depth: Profondeur
513
+ description: Description
514
+ destination: Destination
515
+ destroy: Supprimer
516
+ details: Détails
517
+ digital:
518
+ digital_delivery: Livraison numérique
519
+ digital_assets: Ressources numériques
520
+ discontinued: Discontinué
521
+ discontinued_variants_present: Certains éléments de campagne de cette campagne contiennent des produits qui ne sont plus disponibles.
522
+ display_delivery_range: Livraison en %{delivery_range} jours ouvrés
523
+ draft: Brouillon
524
+ eligibility_errors:
525
+ messages:
526
+ has_excluded_product: Le panier contient des produits qui empêchent l'attribution du code de bon.
527
+ item_total_less_than: Ce code de bon ne peut pas être utilisé pour les commandes inférieures à une valeur totale de %{amount}.
528
+ item_total_less_than_or_equal: Ce code de bon ne peut pas être utilisé pour les commandes d'une valeur totale inférieure ou égale à %{amount}.
529
+ item_total_more_than: Le code du bon n'est valable que pour les commandes d'un montant total jusqu'à %{amount}.
530
+ item_total_more_than_or_equal: Le code du bon d'achat n'est valable que pour les commandes d'un montant total de / à %{amount}.
531
+ limit_once_per_user: Ce code de bon n'est valable qu'une seule fois par utilisateur.
532
+ missing_product: Les bons produits manquent dans le panier pour ce code de bon.
533
+ missing_taxon: Pour ce code de bon d'achat, les produits de la catégorie correcte doivent être dans le panier.
534
+ no_applicable_products: Le produit correspondant au code de bon ne se trouve pas dans le panier.
535
+ no_matching_channel: Ce code de réduction n'est pas valable pour ce canal de vente.
536
+ no_matching_market: Ce code de réduction n'est pas valable sur votre marché.
537
+ no_matching_taxons: Pour ce code de bon, le produit de la catégorie correspondante doit être dans le panier.
538
+ no_user_or_email_specified: Vous devez être inscrit / connecté pour ajouter le code du bon.
539
+ no_user_specified: Vous devez être connecté pour ajouter le code du bon.
540
+ not_first_order: Ce code de bon d'achat n'est valable que pour la première commande d'un utilisateur.
541
+ wrong_country: Ce code promo n'est pas valable dans votre pays
542
+ email: Courriel
543
+ error: erreur
544
+ error_user_destroy_with_orders: Utilisateur d'erreur supprimé avec les commandes
545
+ error_user_does_not_have_any_store_credits: L'utilisateur ne dispose d'aucun avoir en boutique
546
+ errors:
547
+ messages:
548
+ cannot_delete_default_channel: Le canal par défaut ne peut pas être supprimé. Définissez d'abord un autre canal comme canal par défaut.
549
+ channel_store_mismatch: doit appartenir à la même boutique
550
+ invalid_order_routing_rule: n'est pas une règle de routage de commande enregistrée
551
+ invalid_order_routing_strategy: n'est pas une stratégie de routage de commande enregistrée
552
+ store_association_can_not_be_changed: L'association de boutique ne peut pas être modifiée
553
+ store_is_already_set: La boutique est déjà définie
554
+ expired: Expiré
555
+ export_mailer:
556
+ export_done:
557
+ message: Bien joué, votre exportation est prête ! Veuillez utiliser le lien ci-dessous pour la télécharger.
558
+ subject: Votre exportation %{export_number} a été traitée avec succès !
559
+ greeting: Bonjour %{user_name},
560
+ field: Champ
561
+ first_name: Prénom
562
+ flat_percent: Pourcentage net
563
+ flat_rate_per_order: Taux net par commande
564
+ flexible_rate: Taux flexible
565
+ free: Gratuit
566
+ gateway: Méthode de paiement
567
+ gateway_error: Erreur de la méthode de paiement
568
+ gift_card: Carte cadeau
569
+ gift_card_already_redeemed: La carte cadeau a déjà été utilisée.
570
+ gift_card_applied: La carte cadeau a été appliquée avec succès à votre commande !
571
+ gift_card_customer_not_logged_in: La carte cadeau ne peut pas être appliquée par un invité.
572
+ gift_card_expired: La carte cadeau a expiré.
573
+ gift_card_mismatched_currency: La carte cadeau ne peut pas être appliquée avec la devise actuelle.
574
+ gift_card_mismatched_customer: Cette carte cadeau est associée à un autre utilisateur.
575
+ gift_card_not_found: La carte cadeau est introuvable.
576
+ gift_card_removed: La carte cadeau a été retirée avec succès de votre commande
577
+ gift_card_using_store_credit_error: Vous ne pouvez pas appliquer la carte cadeau après avoir appliqué l'avoir en boutique.
578
+ height: Taille
579
+ i18n:
580
+ this_file_language: Français (FR)
581
+ idempotency_key_reused: Cette clé d'idempotence a déjà été utilisée avec des paramètres de requête différents.
582
+ image: Image
583
+ import: Importer
584
+ in_stock: En stock
585
+ inactive: Inactif
586
+ incomplete: Incomplet
587
+ insufficient_stock_lines_present: Nous n'avons pas tous les articles de votre commande dans notre inventaire.
588
+ internal_note: Note interne
589
+ inventory: Inventaire
590
+ invitation_mailer:
591
+ greeting: Bonjour %{user_name},
592
+ invitation_accepted:
593
+ body: "%{invitee_name} a accepté votre invitation à rejoindre %{resource_name}"
594
+ subject: "%{invitee_name} a accepté votre invitation à rejoindre %{resource_name}"
595
+ invitation_email:
596
+ body: "%{inviter_name} vous a invité à rejoindre %{resource_name}"
597
+ link_description: 'Pour accepter cette invitation, veuillez cliquer sur le lien ci-dessous :'
598
+ subject: Invitation à rejoindre %{resource_name}
599
+ iso: ISO Alpha-2
600
+ item: Article
601
+ items_cannot_be_shipped: Il nous est impossible de livrer l'article sélectionné à votre adresse de livraison. Veuillez choisir une autre adresse de livraison.
602
+ key: Clé
603
+ kind: Type
604
+ label: Libellé
605
+ last_name: Nom
606
+ line_item: Ligne d'article
607
+ line_items: Lignes d'articles
608
+ link: Lien
609
+ locale: Langue
610
+ locale_not_supported_by_store: n'est pas prise en charge par cette boutique
611
+ manual: Manuel
612
+ market: Marché
613
+ me_no_current_user: Aucun utilisateur administrateur n'a authentifié cette requête
614
+ media: Médias
615
+ meta_description: Description Meta
616
+ meta_keywords: Mots clés Meta
617
+ meta_title: Titre du site
618
+ metadata: Données Meta
619
+ min_quantity: Quantité min
620
+ month: Mois
621
+ name: Nom
622
+ new_variant: Nouvelle variante
623
+ no_cc_type: N/D
624
+ no_payment_found: Aucun paiement trouvé
625
+ none: Aucun
626
+ number: Nombre
627
+ on_hand: Disponible
628
+ only_active_products_can_be_added_to_cart: Les produits en brouillon et archivés ne peuvent pas être ajoutés au panier, veuillez d'abord marquer le produit comme actif.
629
+ open: Ouvrir
630
+ option_name: Nom de l'option
631
+ option_type: Type d'option
632
+ option_value: Valeur de l'option
633
+ options: Options
634
+ or: ou
635
+ order: Commande
636
+ order_canceled: Commande annulée
637
+ order_routing:
638
+ strategies:
639
+ legacy: Hérité
640
+ rules: Règles (ordonnées)
641
+ order_summary: Résumé de la commande
642
+ orders: Commandes
643
+ out_of_stock: En rupture de stock
644
+ password: Mot de passe
645
+ path: Chemin
646
+ payment: Paiement
647
+ payment_method: Méthode de paiement
648
+ payment_method_not_supported: Ce méthode de paiement n'est pas supportée
649
+ payment_methods: Méthodes de paiement
650
+ payment_processing_failed: Le paiement ne peut être effectué, merci de vérifier les informations fournies
651
+ payment_source: Source de paiement
652
+ pending: En attente
653
+ percent: Pourcent
654
+ percent_per_item: Pourcent par article
655
+ phone: Téléphone
656
+ price: Prix
657
+ price_range: Prix
658
+ price_rules:
659
+ channel_rule:
660
+ description: Appliquer une tarification en fonction du canal de vente
661
+ customer_group_rule:
662
+ description: Appliquer la tarification à des groupes de clients spécifiques
663
+ price_sack: Prix du sac
664
+ prices: Prix
665
+ privacy_policy: Politique de confidentialité
666
+ processing: Traitement en cours
667
+ product: Produit
668
+ product_translations: Traductions du produit
669
+ products: Produits
670
+ products_cannot_be_shipped: Nous ne pouvons pas expédier %{product_names} vers votre emplacement actuel pour le moment. Veuillez modifier votre adresse de livraison ou retirer %{product_names} de votre panier.
671
+ promotion: Promotion
672
+ promotion_action_types:
673
+ create_adjustment:
674
+ description: Crée un ajustement de promotion sur la commande
675
+ name: Créer un ajustement
676
+ create_item_adjustments:
677
+ description: Crée un ajustement de promotion sur un item.
678
+ name: Crée un ajustement sur un item.
679
+ create_line_items:
680
+ description: Remplit le panier avec la quantité spécifiée de variante
681
+ name: Créez des lignes d'article
682
+ free_shipping:
683
+ description: Livraison gratuite pour la commande.
684
+ name: Livraison gratuite
685
+ promotion_actions: Actions
686
+ promotion_already_used: Vous ne pouvez pas supprimer une promotion qui a déjà été appliquée
687
+ promotion_label: Promotion %{name}
688
+ promotion_rule_types:
689
+ category:
690
+ description: La commande inclut des produits dans les catégories spécifiées
691
+ name: Catégories
692
+ channel:
693
+ description: Limiter aux commandes passées via le ou les canaux spécifiés
694
+ name: Canal(aux)
695
+ country:
696
+ description: La commande a été envoyée dans le bon pays (ou par défaut)
697
+ name: Pays
698
+ currency:
699
+ description: Limiter aux commandes dans une devise spécifique
700
+ name: Devise
701
+ customer:
702
+ description: Disponible uniquement pour les clients spécifiés
703
+ name: Clients
704
+ customer_group:
705
+ description: Disponible uniquement pour les clients des groupes de clients spécifiés
706
+ name: Groupe(s) de clients
707
+ customer_logged_in:
708
+ description: Disponible uniquement pour les clients connectés
709
+ name: Clients connectés uniquement
710
+ first_order:
711
+ description: Doit être la première commande de l'utilisateur
712
+ name: Première commande
713
+ item_total:
714
+ description: Le total de la commande réponds aux critaires suivants
715
+ name: Total de la commande
716
+ market:
717
+ description: Limiter aux commandes passées sur le ou les marchés spécifiés
718
+ name: Marché(s)
719
+ one_use_per_user:
720
+ description: Une utilisation par client
721
+ name: Utilisation unique
722
+ option_value:
723
+ description: La commande comprend le ou les options(s) spécifié(s)
724
+ name: Option(s)
725
+ product:
726
+ description: La commande comprend le ou les produit(s) spécifié(s)
727
+ name: Produit(s)
728
+ promotions: Promotions
729
+ quantity: Quantité
730
+ query: Requête
731
+ reason: Raison
732
+ received: Reçu
733
+ reference: Référence
734
+ refund: Remboursement
735
+ refund_amount: Montant du remboursement
736
+ refunds: Remboursements
737
+ registration: Enregistrement
738
+ remove: Supprimer
739
+ remove_gift_card_on_completed_order_error: Vous ne pouvez pas retirer la carte cadeau après que la commande a été passée
740
+ resellable: Revendable
741
+ resend: Renvoyer
742
+ response_code: Code de réponse
743
+ return: retourner
744
+ returned: Retourner
745
+ returns_policy: Politique de retour
746
+ row: Ligne
747
+ rules: Règles
748
+ say_no: Non
749
+ say_yes: Oui
750
+ scope: Scope
751
+ selected_quantity_not_available: sélectionné %{item} n'est pas disponible.
752
+ ship: livraison
753
+ ship_address: Adresse de livraison
754
+ shipment: Livraison
755
+ shipped: Livré
756
+ shipping: Frais de livraison
757
+ shipping_address: Adresse de livraison
758
+ shipping_flat_rate_per_item: Taux fixe par article
759
+ shipping_flat_rate_per_order: Taux fixe
760
+ shipping_flexible_rate: Taux variable par article
761
+ shipping_policy: Politique d'expédition
762
+ shipping_price_sack: Prix groupé
763
+ shipping_rates:
764
+ display_price:
765
+ excluding_tax: "%{price} (+ %{tax_amount} %{tax_rate_name})"
766
+ including_tax: "%{price} (incl. %{tax_amount} %{tax_rate_name})"
767
+ sku: Code barre
768
+ slug: Identifiant
769
+ source: Origine
770
+ status: Statut
771
+ stock_location: Emplacement de stock
772
+ stock_locations: Emplacements de stock
773
+ stock_transfer:
774
+ errors:
775
+ must_have_variant: Vous devez ajouter au moins une variante.
776
+ same_location: ne peut pas être identique à l'emplacement de destination
777
+ variants_unavailable: Certaines variantes ne sont pas disponibles sur %{stock}
778
+ store: Enregistrer
779
+ store_credit:
780
+ allocated: Ajoutée
781
+ authorized: Autorisé
782
+ captured: D'occasion
783
+ credit: crédit
784
+ eligible: Éligible
785
+ store_credit_name: Crédit
786
+ store_credit_payment_method:
787
+ currency_mismatch: La devise du crédit est différente de la devise de la commande
788
+ insufficient_authorized_amount: Pas plus que le montant autorisé ne peut être enregistré
789
+ insufficient_funds: Le solde restant n'est pas suffisant
790
+ successful_action: Crédit réussi %{action}
791
+ unable_to_credit: 'Le code: %{auth_code} ne peut pas être crédité'
792
+ unable_to_find: Le crédit est introuvable
793
+ unable_to_find_for_action: 'Crédit pour le code d''authentification: %{auth_code} pour l''action: %{action} est introuvable'
794
+ unable_to_void: 'Le code: %{auth_code} ne peut pas être invalidé'
795
+ tags: Mots clés
796
+ tax: TVA
797
+ tax_category: Catégorie de taxe
798
+ terms_of_service: Conditions d'utilisation
799
+ there_are_no_items_for_this_order: Il n'y a aucun article dans cette commande. Veuillez en ajouter un à la commande pour continuer.
800
+ total: Total
801
+ tracking: Localiser
802
+ tracking_number: Numéro de suivi
803
+ tracking_url: URL du traqueur
804
+ type: Type
805
+ unable_to_connect_to_gateway: N'arrive pas à se connecter à la méthode de paiement.
806
+ updated_at: Mis à jour le
807
+ url: URL
808
+ user: Utilisateur
809
+ validation:
810
+ must_be_int: doit être un entier
811
+ value: Valeur
812
+ variant: Variante
813
+ variants: Variantes
814
+ verified: Vérifié
815
+ void: Annuler
816
+ webhook_mailer:
817
+ endpoint_disabled:
818
+ disabled_at_label: Désactivé le
819
+ heading: Point de terminaison de webhook désactivé
820
+ instructions: Veuillez vérifier l'URL et le service du point de terminaison, puis réactivez-le dans Paramètres → Développeurs → Webhooks.
821
+ message: Le point de terminaison de webhook « %{endpoint_name} » a été automatiquement désactivé après plusieurs échecs de livraison.
822
+ name_label: Nom
823
+ reason_label: Raison
824
+ subject: 'Point de terminaison de webhook désactivé : %{endpoint_name}'
825
+ url_label: URL
826
+ weight: Poids
827
+ weight_unit: Unité de poids
828
+ width: Largeur
829
+ year: Année
830
+ zip: Code postal