spree_core 6.0.0.beta3 → 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,811 @@
1
+ ---
2
+ ar:
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 Name
28
+ name: " الاسم "
29
+ numcode: ISO Code
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
+ storefront_custom_code_body_end: رمز مخصص قبل وسم إغلاق body
161
+ storefront_custom_code_body_start: رمز مخصص بعد وسم فتح body
162
+ storefront_custom_code_head: رمز مخصص في رأس الصفحة
163
+ spree/store_credit:
164
+ amount_used: المبلغ المستخدم
165
+ spree/tax_category:
166
+ description: " وصف "
167
+ name: " اسم "
168
+ spree/tax_rate:
169
+ amount: " معدل "
170
+ included_in_price: " المدرجة في السعر "
171
+ show_rate_in_label: " إظهار معدل في التسمية "
172
+ spree/taxon:
173
+ name: " اسم "
174
+ permalink: " الرابط الثابت "
175
+ position: " موضع "
176
+ sort_order: ترتيب الفرز
177
+ spree/taxonomy:
178
+ name: " اسم "
179
+ spree/user:
180
+ avatar: الصورة الرمزية
181
+ email: " البريد الإلكتروني "
182
+ password: " كلمه المرور "
183
+ password_confirmation: " تأكيد كلمة المرور "
184
+ spree/variant:
185
+ cost_currency: " عملة التكلفة "
186
+ cost_price: " سعر الكلفة "
187
+ depth: " عمق "
188
+ height: " ارتفاع "
189
+ price: " السعر "
190
+ sku: " رمز التخزين التعريفي "
191
+ weight: " وزن "
192
+ width: " عرض "
193
+ spree/zone:
194
+ description: " وصف "
195
+ name: " اسم "
196
+ user:
197
+ current_sign_in: تسجيل الدخول الحالي
198
+ last_sign_in: آخر تسجيل دخول
199
+ sign_in_count: عدد تسجيلات الدخول
200
+ errors:
201
+ messages:
202
+ blank: لا يمكن أن يكون فارغًا
203
+ models:
204
+ spree/allowed_origin:
205
+ attributes:
206
+ origin:
207
+ must_be_origin_only: يجب أن يكون أصلًا (المخطط والمضيف) بدون مسار أو استعلام أو جزء
208
+ spree/credit_card:
209
+ attributes:
210
+ base:
211
+ card_expired: " انتهت صلاحية البطاقة "
212
+ spree/gift_card:
213
+ attributes:
214
+ base:
215
+ cannot_destroy_used_gift_card: لا يمكن حذف بطاقة هدية مستخدمة
216
+ spree/import:
217
+ attributes:
218
+ attachment:
219
+ content_type: يحتوي على نوع محتوى غير مسموح به
220
+ type:
221
+ inclusion: غير مُدرج في قائمة الأنواع المسموح بها
222
+ spree/market:
223
+ attributes:
224
+ base:
225
+ cannot_destroy_default_market: لا يمكن حذف السوق الافتراضي.
226
+ cannot_destroy_last_market: لا يمكن حذف السوق الوحيد.
227
+ spree/market_country:
228
+ attributes:
229
+ country:
230
+ already_in_market: مُخصّص بالفعل لسوق آخر في هذا المتجر
231
+ not_in_shipping_zone: غير مشمول بأي منطقة شحن. يُرجى إعداد منطقة شحن أولًا.
232
+ spree/payment:
233
+ attributes:
234
+ amount:
235
+ greater_than_max_amount: أكبر من الحد الأقصى المسموح به وهو %{max_amount}
236
+ spree/price_list:
237
+ attributes:
238
+ ends_at:
239
+ must_be_after_starts_at: يجب أن يكون بعد تاريخ البدء
240
+ spree/product:
241
+ attributes:
242
+ base:
243
+ cannot_destroy_if_attached_to_line_items: لا يمكن حذف المنتجات المضافة إلى طلبات تم تقديمها. في هذه الحالات، يُرجى إيقافها.
244
+ discontinue_on:
245
+ invalid_date_range: يجب أن يكون بعد تاريخ التوفر
246
+ spree/product_publication:
247
+ attributes:
248
+ unpublished_at:
249
+ must_be_after_published_at: يجب أن يكون بعد تاريخ النشر
250
+ spree/promotion:
251
+ attributes:
252
+ expires_at:
253
+ invalid_date_range: يجب أن يكون بعد تاريخ البدء
254
+ spree/store:
255
+ attributes:
256
+ base:
257
+ cannot_destroy_only_store: لا يمكن حذف المتجر الوحيد.
258
+ spree/store_credit:
259
+ attributes:
260
+ amount_authorized:
261
+ exceeds_total_credits: يتجاوز إجمالي الأرصدة.
262
+ amount_used:
263
+ cannot_be_greater_than_amount: لا يمكن أن يكون أكبر من المبلغ.
264
+ greater_than_zero_restrict_delete: أكبر من الصفر. لا يمكن حذف رصيد المتجر.
265
+ spree/user:
266
+ attributes:
267
+ bill_address_id:
268
+ belongs_to_other_user: يخص مستخدمًا آخر
269
+ deprecated_in_completed_order: مهمل في طلب مكتمل
270
+ ship_address_id:
271
+ belongs_to_other_user: يخص مستخدمًا آخر
272
+ deprecated_in_completed_order: مهمل في طلب مكتمل
273
+ spree/variant:
274
+ attributes:
275
+ base:
276
+ cannot_destroy_if_attached_to_line_items: لا يمكن حذف المتغيرات المضافة إلى طلبات تم تقديمها. في هذه الحالات، يُرجى إيقافها.
277
+ spree/webhook_endpoint:
278
+ attributes:
279
+ url:
280
+ internal_address_not_allowed: يجب ألا يشير إلى عنوان شبكة داخلية أو خاصة
281
+ models:
282
+ spree/address:
283
+ one: " عنوان "
284
+ other: " عناوين "
285
+ spree/classification:
286
+ one: تصنيف
287
+ other: التصنيفات
288
+ spree/country:
289
+ one: " بلد "
290
+ other: " بلدان "
291
+ spree/credit_card:
292
+ one: " بطاقة الائتمان "
293
+ other: " بطاقات الائتمان "
294
+ spree/customer_group:
295
+ one: مجموعة عملاء
296
+ other: مجموعات العملاء
297
+ spree/customer_group_user:
298
+ one: مستخدم مجموعة العملاء
299
+ other: مستخدمو مجموعات العملاء
300
+ spree/export:
301
+ one: تصدير
302
+ other: عمليات التصدير
303
+ spree/integration:
304
+ one: تكامل
305
+ other: عمليات التكامل
306
+ spree/inventory_unit:
307
+ one: " وحدة الجرد "
308
+ other: " وحدات الجرد "
309
+ spree/line_item:
310
+ one: " خط سلعة "
311
+ other: " البنود "
312
+ spree/option_type:
313
+ one: نوع خيار
314
+ other: أنواع الخيارات
315
+ spree/option_value:
316
+ one: قيمة خيار
317
+ other: قيم الخيارات
318
+ spree/order:
319
+ one: " طلب "
320
+ other: " أوامر "
321
+ spree/payment:
322
+ one: " دفع "
323
+ other: " المدفوعات "
324
+ spree/payment_method:
325
+ one: طريقة دفع
326
+ other: طرق الدفع
327
+ spree/price:
328
+ one: سعر
329
+ other: الأسعار
330
+ spree/price_list:
331
+ one: قائمة أسعار
332
+ other: قوائم الأسعار
333
+ spree/price_rule:
334
+ one: قاعدة سعر
335
+ other: قواعد الأسعار
336
+ spree/product:
337
+ one: " المنتج "
338
+ other: " منتجات "
339
+ spree/promotion:
340
+ one: عرض ترويجي
341
+ other: العروض الترويجية
342
+ spree/promotion_category:
343
+ one: فئة عرض ترويجي
344
+ other: فئات العروض الترويجية
345
+ spree/property:
346
+ one: " خاصية "
347
+ other: " الخصائص "
348
+ spree/refund_reason:
349
+ one: سبب استرداد
350
+ other: أسباب الاسترداد
351
+ spree/role:
352
+ one: " الأدوار "
353
+ other: " الأدوار "
354
+ spree/shipment:
355
+ one: " شحنة "
356
+ other: " شحنات "
357
+ spree/shipping_method:
358
+ one: طريقة شحن
359
+ other: طرق الشحن
360
+ spree/state:
361
+ one: " مقاطعة "
362
+ other: " المقاطعات "
363
+ spree/stock_location:
364
+ one: موقع مخزون
365
+ other: مواقع المخزون
366
+ spree/stock_movement:
367
+ one: حركة مخزون
368
+ other: حركات المخزون
369
+ spree/stock_transfer:
370
+ one: نقل مخزون
371
+ other: عمليات نقل المخزون
372
+ spree/store:
373
+ one: متجر
374
+ other: المتاجر
375
+ spree/store_credit:
376
+ one: رصيد متجر
377
+ other: أرصدة المتجر
378
+ spree/tax_category:
379
+ one: " فئة الضريبة "
380
+ other: " فئات الضرائب "
381
+ spree/tax_rate:
382
+ one: " معدل الضريبة "
383
+ other: " معدلات الضرائب "
384
+ spree/taxon:
385
+ one: " صنف "
386
+ other: " أصناف "
387
+ spree/taxonomy:
388
+ one: " التصنيف "
389
+ other: " التصنيفات "
390
+ spree/user:
391
+ one: " المستخدم "
392
+ other: " المستخدمون "
393
+ spree/variant:
394
+ one: " البديل "
395
+ other: " المتغيرات "
396
+ spree/zone:
397
+ one: " منطقة "
398
+ other: " المناطق "
399
+ errors:
400
+ messages:
401
+ already_confirmed: " تم تأكيد بالفعل "
402
+ not_found: " غير موجود "
403
+ not_locked: " لم يتم تأمينه "
404
+ not_saved:
405
+ one: " حدث خطأ أثناء منع حفظ %{resource}: "
406
+ other: " أدت أخطاء %{count} إلى منع حفظ %{resource} هذا: "
407
+ number:
408
+ percentage:
409
+ format:
410
+ precision: 1
411
+ spree:
412
+ accept: قبول
413
+ accepted: مقبول
414
+ accepts_email_marketing: يقبل التسويق عبر البريد الإلكتروني
415
+ account: الحساب
416
+ active: نشط
417
+ address: العنوان
418
+ address1: " العنوان "
419
+ address2: " العنوان (تابع) "
420
+ adjustment: تعديل
421
+ adjustment_labels:
422
+ tax_rates:
423
+ excluding_tax: "%{name}%{amount}"
424
+ including_tax: "%{name}%{amount} (مشمول في السعر)"
425
+ adjustments_deleted: تم حذف التعديلات
426
+ admin_user_mailer:
427
+ password_reset_email:
428
+ action: إعادة تعيين كلمة المرور
429
+ expiry_notice: ستنتهي صلاحية رابط إعادة تعيين كلمة المرور هذا قريبًا. إذا لم تطلب ذلك، فلا حاجة لاتخاذ أي إجراء.
430
+ greeting: مرحبًا %{name},
431
+ ignore_notice: إذا لم تطلب إعادة تعيين كلمة المرور، يمكنك تجاهل هذه الرسالة بأمان. لن يتم تغيير كلمة المرور الخاصة بك.
432
+ instructions: تلقّينا طلبًا لإعادة تعيين كلمة المرور لحساب المشرف الخاص بك في %{store_name}. انقر على الزر أدناه لاختيار كلمة مرور جديدة.
433
+ subject: تعليمات إعادة تعيين كلمة المرور
434
+ all: الكل
435
+ amount: المبلغ
436
+ api_key_no_current_key: لم يقم أي مفتاح API بمصادقة هذا الطلب
437
+ api_key_scopes_immutable: لا يمكن تغييرها بعد إنشاء المفتاح؛ أنشئ مفتاحًا جديدًا بالنطاقات التي تحتاجها وقم بإلغاء هذا المفتاح
438
+ authorized: مُصرَّح
439
+ availability: التوفر
440
+ backorderable: قابل للطلب المسبق
441
+ bill_address: " عنوان الفاتورة "
442
+ billing_address: عنوان الفوترة
443
+ calculator: الحاسبة
444
+ canceled: ملغى
445
+ canceler: المُلغي
446
+ cannot_be_destroyed: لا يمكن حذف الطلب.
447
+ capture: تحصيل
448
+ cart: " عربة "
449
+ cart_already_updated: تم تحديث السلة بالفعل.
450
+ cart_line_item:
451
+ delivery_unavailable: لا يمكن توصيل %{li_name} إلى العنوان المحدد
452
+ discontinued: تمت إزالة %{li_name} لأنه تم إيقافه
453
+ out_of_stock: تمت إزالة %{li_name} لأنه نفد من المخزون
454
+ categories: " الفئات "
455
+ category: " الفئة "
456
+ channel: قناة المبيعات
457
+ channels: قنوات المبيعات
458
+ checkout: الدفع
459
+ checkout_requirements:
460
+ email_required: البريد الإلكتروني مطلوب
461
+ line_items_required: أضف عنصرًا واحدًا على الأقل إلى سلتك
462
+ payment_required: أضف طريقة دفع
463
+ ship_address_required: عنوان الشحن مطلوب
464
+ city: " المدينة "
465
+ color_code: كود اللون
466
+ company: " شركة "
467
+ compare_at_amount: مبلغ المقارنة
468
+ compare_at_price: سعر المقارنة
469
+ complete: " اكتمال "
470
+ confirm: تأكيد
471
+ cost_price: " سعر التكلفة "
472
+ count_on_hand: الكمية المتاحة
473
+ country: الدولة
474
+ coupon_code: كود القسيمة
475
+ coupon_code_already_applied: " تم تطبيق رمز القسيمة بالفعل على هذا الطلب "
476
+ coupon_code_applied: " تم تطبيق رمز القسيمة بنجاح على طلبك "
477
+ coupon_code_better_exists: " ينتج عن رمز القسيمة الذي تم تطبيقه مسبقًا صفقة أفضل "
478
+ coupon_code_expired: " رمز القسيمة منتهية الصلاحية "
479
+ coupon_code_max_usage: " تم تجاوز حد استخدام رمز القسيمة "
480
+ coupon_code_not_eligible: " رمز القسيمة هذا غير مؤهل لهذا الطلب "
481
+ coupon_code_not_found: " رمز القسيمة الذي أدخلته غير موجود. حاول مرة اخرى "
482
+ coupon_code_used: رمز القسيمة الذي أدخلته تم استخدامه من قبل. يُرجى المحاولة مرة أخرى.
483
+ created_at: تاريخ الإنشاء
484
+ credit_card: " بطاقة الائتمان "
485
+ currency: العملة
486
+ currency_not_supported_by_store: غير مدعومة من قبل هذا المتجر
487
+ customer: العميل
488
+ customers: العملاء
489
+ default: افتراضي
490
+ default_stock_location_name: موقع المتجر
491
+ default_wishlist_name: قائمة الأمنيات
492
+ delivery: " التوصيل "
493
+ depth: " العمق "
494
+ description: الوصف
495
+ destination: الوجهة
496
+ destroy: " تدمير "
497
+ details: التفاصيل
498
+ digital:
499
+ digital_delivery: التسليم الرقمي
500
+ digital_assets: الأصول الرقمية
501
+ discontinued: متوقف
502
+ discontinued_variants_present: بعض العناصر في هذا الطلب تحتوي على منتجات لم تعد متوفرة.
503
+ display_delivery_range: التسليم خلال %{delivery_range} أيام عمل
504
+ draft: مسودة
505
+ eligibility_errors:
506
+ messages:
507
+ has_excluded_product: " تحتوي سلة التسوق على منتج يمنع تطبيق رمز القسيمة هذا "
508
+ item_total_less_than: " لا يمكن تطبيق رمز القسيمة على الطلبات الأقل من %{amount} "
509
+ item_total_less_than_or_equal: " لا يمكن تطبيق رمز القسيمة على الطلبات التي تقل عن أو تساوي %{amount} "
510
+ item_total_more_than: " لا يمكن تطبيق رمز القسيمة على الطلبات الأعلى من %{amount} "
511
+ item_total_more_than_or_equal: " لا يمكن تطبيق رمز القسيمة على الطلبات التي تزيد عن أو تساوي %{amount} "
512
+ limit_once_per_user: " يمكن استخدام رمز القسيمة مرة واحدة فقط لكل مستخدم "
513
+ missing_product: " لا يمكن تطبيق رمز القسيمة هذا لأنه ليس لديك جميع المنتجات الضرورية في سلة التسوق الخاصة بك "
514
+ missing_taxon: " تحتاج إلى إضافة منتج من جميع الفئات القابلة للتطبيق قبل تطبيق رمز القسيمة هذا "
515
+ no_applicable_products: " تحتاج إلى إضافة منتج قابل للتطبيق قبل تطبيق رمز القسيمة هذا "
516
+ no_matching_channel: رمز القسيمة هذا غير صالح لقناة البيع هذه.
517
+ no_matching_market: رمز القسيمة هذا غير صالح في السوق الخاص بك.
518
+ no_matching_taxons: " تحتاج إلى إضافة منتج من فئة قابلة للتطبيق قبل تطبيق رمز القسيمة هذا "
519
+ no_user_or_email_specified: " تحتاج إلى تسجيل الدخول أو تقديم بريدك الإلكتروني قبل تطبيق رمز القسيمة "
520
+ no_user_specified: " تحتاج إلى تسجيل الدخول قبل تطبيق رمز القسيمة هذا "
521
+ not_first_order: " لا يمكن تطبيق رمز القسيمة إلا على طلبك الأول "
522
+ wrong_country: رمز القسيمة هذا غير صالح في بلدك
523
+ email: البريد الإلكتروني
524
+ error: خطأ
525
+ error_user_destroy_with_orders: لا يمكن حذف مستخدم مرتبط بطلبات
526
+ error_user_does_not_have_any_store_credits: لا يملك المستخدم أي أرصدة متجر متاحة
527
+ errors:
528
+ messages:
529
+ cannot_delete_default_channel: لا يمكن حذف القناة الافتراضية. قم بترقية قناة أخرى لتصبح افتراضية أولًا.
530
+ channel_store_mismatch: يجب أن ينتمي إلى المتجر نفسه
531
+ invalid_order_routing_rule: ليست قاعدة توجيه طلبات مسجلة
532
+ invalid_order_routing_strategy: ليست استراتيجية توجيه طلبات مسجلة
533
+ store_association_can_not_be_changed: لا يمكن تغيير ارتباط المتجر
534
+ store_is_already_set: تم تعيين المتجر بالفعل
535
+ expired: منتهٍ
536
+ export_mailer:
537
+ export_done:
538
+ message: عمل رائع، التصدير جاهز! يُرجى استخدام الرابط أدناه لتنزيله.
539
+ subject: تمت معالجة التصدير %{export_number} بنجاح!
540
+ greeting: مرحبًا %{user_name}،
541
+ field: الحقل
542
+ first_name: " الاسم الأول "
543
+ flat_percent: " النسبة المئوية الثابتة "
544
+ flat_rate_per_order: " تسعيرة ثابته لكل طلب "
545
+ flexible_rate: " معدل مرن "
546
+ free: مجاني
547
+ gateway: " البوابة "
548
+ gateway_error: " خطأ في البوابة "
549
+ gift_card: بطاقة هدايا
550
+ gift_card_already_redeemed: تم استبدال بطاقة الهدية بالفعل.
551
+ gift_card_applied: تم تطبيق بطاقة الهدية على طلبك بنجاح!
552
+ gift_card_customer_not_logged_in: لا يمكن تطبيق بطاقة الهدية مع مستخدم ضيف.
553
+ gift_card_expired: انتهت صلاحية بطاقة الهدية.
554
+ gift_card_mismatched_currency: لا يمكن تطبيق بطاقة الهدية مع العملة الحالية.
555
+ gift_card_mismatched_customer: بطاقة الهدية هذه مرتبطة بمستخدم آخر.
556
+ gift_card_not_found: لم يتم العثور على بطاقة الهدية.
557
+ gift_card_removed: تمت إزالة بطاقة الهدية من طلبك بنجاح
558
+ gift_card_using_store_credit_error: لا يمكنك تطبيق بطاقة الهدية بعد تطبيق رصيد المتجر.
559
+ height: " ارتفاع "
560
+ i18n:
561
+ this_file_language: العربية (AR)
562
+ idempotency_key_reused: تم استخدام مفتاح Idempotency-Key هذا بالفعل مع معلمات طلب مختلفة.
563
+ image: صورة
564
+ import: استيراد
565
+ in_stock: متوفر
566
+ inactive: غير نشط
567
+ incomplete: غير مكتمل
568
+ internal_note: ملاحظة داخلية
569
+ inventory: المخزون
570
+ invitation_mailer:
571
+ greeting: مرحبًا %{user_name}،
572
+ invitation_accepted:
573
+ body: قبل %{invitee_name} دعوتك للانضمام إلى %{resource_name}
574
+ subject: قبل %{invitee_name} دعوتك للانضمام إلى %{resource_name}
575
+ invitation_email:
576
+ body: دعاك %{inviter_name} للانضمام إلى %{resource_name}
577
+ link_description: 'لقبول هذه الدعوة، يُرجى النقر على الرابط أدناه:'
578
+ subject: دعوة للانضمام إلى %{resource_name}
579
+ iso: ISO Alpha-2
580
+ item: العنصر
581
+ items_cannot_be_shipped: " يتعذر علينا شحن العناصر المحددة إلى عنوان الشحن الخاص بك. يرجى اختيار عنوان شحن آخر. "
582
+ key: المفتاح
583
+ kind: النوع
584
+ label: التسمية
585
+ last_name: " اسم العائلة "
586
+ line_item: بند الطلب
587
+ line_items: بنود الطلب
588
+ link: رابط
589
+ locale: اللغة
590
+ locale_not_supported_by_store: غير مدعومة من قبل هذا المتجر
591
+ manual: يدوي
592
+ market: السوق
593
+ me_no_current_user: لم يقم أي مستخدم مسؤول بمصادقة هذا الطلب
594
+ media: الوسائط
595
+ meta_description: " وصف التعريف "
596
+ meta_keywords: " كلمات تعريف ميتا "
597
+ meta_title: " عنوان التعريف "
598
+ metadata: " البيانات الوصفية "
599
+ min_quantity: الحد الأدنى للكمية
600
+ month: " الشهر "
601
+ name: الاسم
602
+ new_variant: " متغير جديد "
603
+ no_cc_type: غير متاح
604
+ none: لا شيء
605
+ number: الرقم
606
+ on_hand: " في متناول اليد "
607
+ only_active_products_can_be_added_to_cart: لا يمكن إضافة المنتجات المسودة والمؤرشفة إلى السلة، يُرجى تعيين المنتج كنشط أولًا.
608
+ open: مفتوح
609
+ option_name: اسم الخيار
610
+ option_type: " نوع الخيار "
611
+ option_value: " قيمة الخيار "
612
+ options: الخيارات
613
+ or: أو
614
+ order: الطلب
615
+ order_canceled: تم إلغاء الطلب
616
+ order_routing:
617
+ strategies:
618
+ legacy: القديم
619
+ rules: القواعد (مرتبة)
620
+ order_summary: " ملخص الطلب "
621
+ orders: الطلبات
622
+ out_of_stock: غير متوفر
623
+ password: كلمة المرور
624
+ path: " المسار "
625
+ payment: " الدفع "
626
+ payment_method: طريقة الدفع
627
+ payment_method_not_supported: " طريقة الدفع هذه غير مدعومة. يرجى اختيار واحد آخر "
628
+ payment_methods: طرق الدفع
629
+ payment_processing_failed: " تعذرت معالجة الدفع ، يرجى التحقق من التفاصيل التي أدخلتها "
630
+ payment_source: مصدر الدفع
631
+ pending: قيد الانتظار
632
+ percent: " النسبة المئوية "
633
+ percent_per_item: " النسبة المئوية لكل عنصر "
634
+ phone: الهاتف
635
+ price: السعر
636
+ price_range: " نطاق السعر "
637
+ price_rules:
638
+ channel_rule:
639
+ description: تطبيق التسعير بناءً على قناة البيع
640
+ customer_group_rule:
641
+ description: تطبيق التسعير على مجموعات عملاء محددة
642
+ price_sack: " كيس السعر "
643
+ prices: الأسعار
644
+ privacy_policy: سياسة الخصوصية
645
+ processing: قيد المعالجة
646
+ product: المنتج
647
+ product_translations: ترجمات المنتج
648
+ products: المنتجات
649
+ products_cannot_be_shipped: لا يمكننا شحن %{product_names} إلى موقعك الحالي في الوقت الراهن. يُرجى تغيير عنوان الشحن أو إزالة %{product_names} من سلتك.
650
+ promotion: " الترويج "
651
+ promotion_action_types:
652
+ create_adjustment:
653
+ description: " ينشئ تعديل ائتمان ترويجي على الطلب "
654
+ name: " إنشاء تعديل "
655
+ create_item_adjustments:
656
+ description: " إنشاء تعديل ائتمان ترويجي على عنصر "
657
+ name: " إنشاء تعديل لكل عنصر "
658
+ create_line_items:
659
+ description: " يملأ العربة بالكمية المحددة من المتغير "
660
+ name: " إنشاء بنود "
661
+ free_shipping:
662
+ description: " يجعل جميع الشحنات لأجل مجانية "
663
+ name: " شحن مجاني "
664
+ promotion_actions: الإجراءات
665
+ promotion_already_used: لا يمكنك حذف عرض ترويجي تم تطبيقه بالفعل
666
+ promotion_label: عرض ترويجي (%{name})
667
+ promotion_rule_types:
668
+ category:
669
+ description: يتضمن الطلب منتجات في فئات محددة
670
+ name: الفئات
671
+ channel:
672
+ description: تقييد الطلبات المقدمة عبر القناة (القنوات) المحددة
673
+ name: القناة (القنوات)
674
+ country:
675
+ description: اقتصار على الطلبات ذات عنوان الشحن في دولة محددة
676
+ name: الدولة
677
+ currency:
678
+ description: اقتصار على الطلبات بعملة محددة
679
+ name: العملة
680
+ customer:
681
+ description: متاح فقط للعملاء المحددين
682
+ name: العملاء
683
+ customer_group:
684
+ description: متاح فقط للعملاء في مجموعة (مجموعات) عملاء محددة
685
+ name: مجموعة (مجموعات) العملاء
686
+ customer_logged_in:
687
+ description: متاح فقط للعملاء الذين سجّلوا الدخول
688
+ name: العملاء الذين سجّلوا الدخول فقط
689
+ first_order:
690
+ description: " يجب أن يكون الطلب الأول للعميل "
691
+ name: " الطلب الأول "
692
+ item_total:
693
+ description: " إجمالي الطلب يفي بهذه المعايير "
694
+ name: " إجمالي العنصر "
695
+ market:
696
+ description: تقييد الطلبات المقدمة في السوق (الأسواق) المحددة
697
+ name: السوق (الأسواق)
698
+ one_use_per_user:
699
+ description: " استخدام واحد فقط لكل مستخدم "
700
+ name: " استخدام واحد لكل مستخدم "
701
+ option_value:
702
+ description: " يتضمن الطلب منتجًا (منتجات) محددة مع قيمة (قيم) خيار المطابقة "
703
+ name: " قيمة (قيم) الخيار "
704
+ product:
705
+ description: " يتضمن الطلب منتجًا (منتجات) محددة "
706
+ name: " المنتج (المنتجات) "
707
+ promotions: العروض الترويجية
708
+ quantity: الكمية
709
+ query: الاستعلام
710
+ reason: السبب
711
+ received: " تم الاستلام "
712
+ reference: المرجع
713
+ refund: استرداد
714
+ refund_amount: مبلغ الاسترداد
715
+ refunds: المبالغ المستردة
716
+ registration: " التسجيل "
717
+ rejected: مرفوض
718
+ remove: إزالة
719
+ remove_gift_card_on_completed_order_error: لا يمكنك إزالة بطاقة الهدية بعد تقديم الطلب
720
+ resellable: قابل لإعادة البيع
721
+ resend: إعادة الإرسال
722
+ response_code: رمز الاستجابة
723
+ return: " العودة "
724
+ returned: " تم إرجاعه "
725
+ returns_policy: سياسة الإرجاع
726
+ row: صف
727
+ rules: القواعد
728
+ say_no: لا
729
+ say_yes: نعم
730
+ scope: " النطاق "
731
+ selected_quantity_not_available: الكمية المختارة من %{item} غير متوفرة.
732
+ ship: شحن
733
+ ship_address: " عنوان السفينة "
734
+ shipment: الشحنة
735
+ shipped: " تم الشحن "
736
+ shipping: الشحن
737
+ shipping_address: عنوان الشحن
738
+ shipping_flat_rate_per_item: " سعر ثابت لكل سلعة "
739
+ shipping_flat_rate_per_order: " سعر ثابت "
740
+ shipping_flexible_rate: Flexible Rate per package item
741
+ shipping_policy: سياسة الشحن
742
+ shipping_price_sack: " كيس سعر "
743
+ shipping_rates:
744
+ display_price:
745
+ excluding_tax: "%{price} (+ %{tax_amount} %{tax_rate_name})"
746
+ including_tax: "%{price} (شامل %{tax_amount} %{tax_rate_name})"
747
+ sku: SKU
748
+ slug: الرابط المختصر
749
+ source: المصدر
750
+ status: الحالة
751
+ stock_location: موقع المخزون
752
+ stock_locations: مواقع المخزون
753
+ stock_transfer:
754
+ errors:
755
+ must_have_variant: يجب إضافة متغير واحد على الأقل
756
+ same_location: لا يمكن أن يكون مماثلًا لموقع الوجهة
757
+ variants_unavailable: بعض المتغيرات غير متوفرة في %{stock}
758
+ store: " المتجر "
759
+ store_credit:
760
+ allocated: مُضاف
761
+ authorized: مُصرَّح
762
+ captured: مُستخدم
763
+ credit: رصيد
764
+ eligible: مؤهل
765
+ store_credit_name: رصيد المتجر
766
+ store_credit_payment_method:
767
+ currency_mismatch: عملة رصيد المتجر لا تطابق عملة الطلب
768
+ insufficient_authorized_amount: لا يمكن تحصيل مبلغ أكبر من المبلغ المُصرّح به
769
+ insufficient_funds: رصيد المتجر المتبقي غير كافٍ
770
+ successful_action: نجحت عملية %{action} لرصيد المتجر
771
+ unable_to_credit: 'تعذّر إضافة الرصيد للرمز: %{auth_code}'
772
+ unable_to_find: تعذّر العثور على رصيد المتجر
773
+ unable_to_find_for_action: 'تعذّر العثور على رصيد المتجر لرمز التفويض: %{auth_code} للإجراء: %{action}'
774
+ unable_to_void: 'تعذّر إلغاء الرمز: %{auth_code}'
775
+ success: ناجح
776
+ tags: الوسوم
777
+ tax: الضريبة
778
+ tax_category: فئة الضريبة
779
+ terms_of_service: شروط الخدمة
780
+ there_are_no_items_for_this_order: " لا توجد عناصر لهذا الطلب. يرجى إضافة عنصر إلى الطلب للمتابعة "
781
+ total: الإجمالي
782
+ tracking: التتبع
783
+ tracking_number: رقم التتبع
784
+ tracking_url: رابط التتبع
785
+ type: النوع
786
+ unable_to_connect_to_gateway: " تعذر الاتصال بالبوابة "
787
+ updated_at: تاريخ التحديث
788
+ url: URL
789
+ user: المستخدم
790
+ validation:
791
+ must_be_int: " يجب أن يكون عددًا صحيحًا "
792
+ value: " القيمة "
793
+ variant: المتغير
794
+ variants: المتغيرات
795
+ verified: تم التحقق
796
+ void: إلغاء
797
+ webhook_mailer:
798
+ endpoint_disabled:
799
+ disabled_at_label: تم التعطيل في
800
+ heading: تم تعطيل نقطة نهاية الويب هوك
801
+ instructions: يُرجى التحقق من عنوان URL لنقطة النهاية والخدمة، ثم أعد تفعيلها من الإعدادات ← المطورون ← الويب هوك.
802
+ message: تم تعطيل نقطة نهاية الويب هوك "%{endpoint_name}" تلقائيًا بعد فشل التسليم المتكرر.
803
+ name_label: الاسم
804
+ reason_label: السبب
805
+ subject: 'تم تعطيل نقطة نهاية الويب هوك: %{endpoint_name}'
806
+ url_label: URL
807
+ weight: " الوزن "
808
+ weight_unit: وحدة الوزن
809
+ width: " العرض "
810
+ year: " السنة "
811
+ zip: " الرمز البريدي "