ba_spree 1.0.0

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 (160) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +673 -0
  3. data/README.md +150 -0
  4. data/app/assets/config/manifest.js +1 -0
  5. data/app/assets/javascripts/ba_spree/admin_overrides/query_builder_controller.js +505 -0
  6. data/app/assets/javascripts/ba_spree/storefront/ba_spree_local_time.js +9 -0
  7. data/app/assets/stylesheets/spree/admin/custom.scss +40 -0
  8. data/app/controllers/ba_spree/checkout_controller_decorator.rb +111 -0
  9. data/app/controllers/ba_spree/store_controller_decorator.rb +55 -0
  10. data/app/controllers/concerns/ba_spree/theme_concern_decorator.rb +16 -0
  11. data/app/controllers/spree/admin/assets_controller_decorator.rb +48 -0
  12. data/app/controllers/spree/admin/products_controller_decorator.rb +25 -0
  13. data/app/controllers/spree/admin/promotion_rules_controller_decorator.rb +30 -0
  14. data/app/controllers/spree/admin/users_controller_decorator.rb +34 -0
  15. data/app/controllers/spree/contacts_controller_decorator.rb +23 -0
  16. data/app/controllers/spree/digital_links_controller.rb +61 -0
  17. data/app/controllers/spree/orders_controller_decorator.rb +24 -0
  18. data/app/decorators/ba_spree/product_pricing_decorator.rb +65 -0
  19. data/app/decorators/spree/current_decorator.rb +17 -0
  20. data/app/decorators/spree/money_decorator.rb +51 -0
  21. data/app/decorators/spree/order_email_subscriber_decorator.rb +64 -0
  22. data/app/decorators/spree/page_sections/featured_posts_decorator.rb +17 -0
  23. data/app/helpers/currency_rounding_helper.rb +10 -0
  24. data/app/helpers/spree/admin/filter_params_preservation.rb +130 -0
  25. data/app/helpers/spree/admin/navigation_helper_decorator.rb +23 -0
  26. data/app/helpers/spree/admin/promotion_rules_helper_decorator.rb +33 -0
  27. data/app/helpers/spree/admin/table_helper_decorator.rb +40 -0
  28. data/app/helpers/spree/base_helper_decorator.rb +63 -0
  29. data/app/helpers/spree/checkout_analytics_helper_decorator.rb +32 -0
  30. data/app/javascript/ba_spree/controllers/disable_when_hidden_controller.js +70 -0
  31. data/app/javascript/ba_spree/index.js +11 -0
  32. data/app/javascript/spree/admin/controllers/calendar_range_controller.js +61 -0
  33. data/app/javascript/spree/admin/controllers/slug_form_controller.js +17 -0
  34. data/app/models/ba_spree/address_decorator.rb +43 -0
  35. data/app/models/ba_spree/adjustment_decorator.rb +13 -0
  36. data/app/models/ba_spree/order_decorator.rb +95 -0
  37. data/app/models/ba_spree/order_updater_decorator.rb +33 -0
  38. data/app/models/ba_spree/payment_method_decorator.rb +10 -0
  39. data/app/models/ba_spree/product_decorator.rb +44 -0
  40. data/app/models/ba_spree/store_decorator.rb +23 -0
  41. data/app/models/ba_spree/variant_decorator.rb +49 -0
  42. data/app/models/concerns/spree/adjustment_source_decorator.rb +66 -0
  43. data/app/models/concerns/spree/product_property_metafields.rb +52 -0
  44. data/app/models/spree/adjustable/adjuster/promotion_decorator.rb +16 -0
  45. data/app/models/spree/admin/table/filter_decorator.rb +52 -0
  46. data/app/models/spree/admin/table/filter_group_decorator.rb +64 -0
  47. data/app/models/spree/asset_decorator.rb +102 -0
  48. data/app/models/spree/contact_decorator.rb +22 -0
  49. data/app/models/spree/digital_link_decorator.rb +9 -0
  50. data/app/models/spree/export_decorator.rb +34 -0
  51. data/app/models/spree/line_item_destroy_callback_decorator.rb +30 -0
  52. data/app/models/spree/metafield_definition_decorator.rb +34 -0
  53. data/app/models/spree/option_type_decorator.rb +22 -0
  54. data/app/models/spree/option_value_decorator.rb +19 -0
  55. data/app/models/spree/option_value_variant_decorator.rb +30 -0
  56. data/app/models/spree/order/address_book_decorator.rb +14 -0
  57. data/app/models/spree/order_merger_decorator.rb +29 -0
  58. data/app/models/spree/price_rules/customer_group_rule_decorator.rb +18 -0
  59. data/app/models/spree/price_rules/user_rule_decorator.rb +25 -0
  60. data/app/models/spree/price_rules/volume_rule_decorator.rb +25 -0
  61. data/app/models/spree/price_rules/zone_rule_decorator.rb +25 -0
  62. data/app/models/spree/pricing/batch_resolver.rb +96 -0
  63. data/app/models/spree/promotion_handler/cart_decorator.rb +51 -0
  64. data/app/models/spree/stock/packer_decorator.rb +61 -0
  65. data/app/models/spree/stock/prioritizer_decorator.rb +27 -0
  66. data/app/models/spree/tax_rate_decorator.rb +93 -0
  67. data/app/models/spree/taxon_decorator.rb +42 -0
  68. data/app/models/spree/user_bill_address_sync_decorator.rb +33 -0
  69. data/app/overrides/add_ba_spree_storefront_javascript_importmap_tags.rb +8 -0
  70. data/app/overrides/add_cache_to_product_listing_page.rb +41 -0
  71. data/app/overrides/add_class_to_login_link.rb +6 -0
  72. data/app/overrides/add_confirm_state_to_checkout_content_block.rb.rb +30 -0
  73. data/app/overrides/add_promotions_nav.rb +8 -0
  74. data/app/overrides/add_turbo_frame_to_admin_order_line_item_edit_link.rb +23 -0
  75. data/app/overrides/add_turbo_frame_to_promotion_action_edit_link.rb +20 -0
  76. data/app/overrides/add_turbo_stream_format_to_cart_path_in_cart_pane.rb +8 -0
  77. data/app/overrides/ba_spree_local_time_add_custom_javascript_import_map_tags.rb +8 -0
  78. data/app/overrides/disable_hidden_bill_address_fields_on_payment.rb +15 -0
  79. data/app/overrides/disable_turbo_on_user_registration_form.rb +18 -0
  80. data/app/overrides/fix_coupon_apply_button_layout.rb +7 -0
  81. data/app/overrides/hide_gift_cards_and_store_credits_from_account_nav.rb +11 -0
  82. data/app/overrides/hide_shipping_message_for_digital_only_orders.rb +15 -0
  83. data/app/overrides/localize_apply_button_text.rb +6 -0
  84. data/app/overrides/localize_newsletter_button_text.rb +6 -0
  85. data/app/overrides/replace_announcement_bar_text.rb +6 -0
  86. data/app/overrides/replace_button_edit_checkout.rb +10 -0
  87. data/app/overrides/replace_checkout_delivery_info.rb +6 -0
  88. data/app/overrides/replace_checkout_pay_button_with_dynamic_label.rb +14 -0
  89. data/app/overrides/replace_variant_not_available_button.rb +19 -0
  90. data/app/overrides/set_logo_width_height_in_admin_store_basic_form.rb +12 -0
  91. data/app/overrides/show_breadcrumbs_on_taxon_page.rb +30 -0
  92. data/app/overrides/show_individual_adjustments_in_order_details.rb +18 -0
  93. data/app/overrides/show_only_selected_payment_method_on_confirm.rb +29 -0
  94. data/app/overrides/spree/admin/preserve_filter_params_across_table_forms.rb +64 -0
  95. data/app/overrides/spree/admin/promotion_rules/_promotion_rule/set_turbo_frame_on_edit_link.html.erb.deface +11 -0
  96. data/app/overrides/spree/admin/stores/add_special_instruction_message_settings.rb +17 -0
  97. data/app/overrides/use_absolute_time_for_order_header_completed_at.rb +15 -0
  98. data/app/presenters/spree/mega_nav_presenter_decorator.rb +26 -0
  99. data/app/services/ba_spree/setup_service.rb +144 -0
  100. data/app/services/spree/assets/position_normalizer.rb +67 -0
  101. data/app/services/spree/products/duplicator_decorator.rb +39 -0
  102. data/app/services/spree/products/prepare_nested_attributes_decorator.rb +58 -0
  103. data/app/views/spree/addresses/edit.html.erb +64 -0
  104. data/app/views/spree/admin/orders/_order.html.erb +32 -0
  105. data/app/views/spree/admin/orders/_summary.html.erb +122 -0
  106. data/app/views/spree/admin/shared/_custom_head.html.erb +56 -0
  107. data/app/views/spree/admin/shared/sidebar/_promotions_nav.html.erb +55 -0
  108. data/app/views/spree/admin/stores/_special_instruction_message_settings.html.erb +14 -0
  109. data/app/views/spree/checkout/_accept_marketing_checkbox.html.erb +40 -0
  110. data/app/views/spree/checkout/_address.html.erb +135 -0
  111. data/app/views/spree/checkout/_confirm.html.erb +25 -0
  112. data/app/views/spree/checkout/_line_item.html.erb +26 -0
  113. data/app/views/spree/checkout/_payment_method_confirm.html.erb +8 -0
  114. data/app/views/spree/checkout/_payment_methods.html.erb +88 -0
  115. data/app/views/spree/checkout/_summary.html.erb +146 -0
  116. data/app/views/spree/shared/_purchased_items_table.html.erb +60 -0
  117. data/app/views/spree/shared/_purchased_items_table.text.erb +24 -0
  118. data/app/views/themes/default/spree/orders/_empty.html.erb +14 -0
  119. data/app/views/themes/default/spree/orders/_summary.html.erb +87 -0
  120. data/app/views/themes/default/spree/orders/edit.turbo_stream.erb +10 -0
  121. data/app/views/themes/default/spree/page_sections/_featured_taxons.html.erb +38 -0
  122. data/app/views/themes/default/spree/page_sections/_header.html.erb +124 -0
  123. data/app/views/themes/default/spree/page_sections/_newsletter.html.erb +4 -0
  124. data/app/views/themes/default/spree/page_sections/_post_details.html.erb +22 -0
  125. data/app/views/themes/default/spree/page_sections/_product_details.html.erb +88 -0
  126. data/app/views/themes/default/spree/page_sections/_product_grid.html.erb +58 -0
  127. data/app/views/themes/default/spree/page_sections/nav/_desktop.html.erb +94 -0
  128. data/app/views/themes/default/spree/page_sections/nav/_mobile.html.erb +148 -0
  129. data/app/views/themes/default/spree/posts/_post.html.erb +16 -0
  130. data/app/views/themes/default/spree/products/_description.html.erb +7 -0
  131. data/app/views/themes/default/spree/products/_details.html.erb +65 -0
  132. data/app/views/themes/default/spree/products/_json_ld_variant.html.erb +15 -0
  133. data/app/views/themes/default/spree/products/_price.html.erb +76 -0
  134. data/app/views/themes/default/spree/products/_swiper.html.erb +90 -0
  135. data/app/views/themes/default/spree/shared/_account_pane.html.erb +18 -0
  136. data/app/views/themes/default/spree/shared/_cart_icon.html.erb +19 -0
  137. data/app/views/themes/default/spree/shared/_line_item_options.html.erb +9 -0
  138. data/app/views/themes/default/spree/shared/_logo.html.erb +39 -0
  139. data/app/views/themes/default/spree/shared/_nav_taxon_square_image.html.erb +8 -0
  140. data/app/views/themes/default/spree/shared/_order_shipment.html.erb +79 -0
  141. data/app/views/themes/default/spree/shared/_search.html.erb +33 -0
  142. data/app/views/themes/default/spree/shared/icons/_cart.html.erb +6 -0
  143. data/app/views/themes/default/spree/shared/icons/_cart_48.html.erb +8 -0
  144. data/app/views/themes/default/spree/shared/icons/_heart.html.erb +15 -0
  145. data/config/importmap.rb +12 -0
  146. data/config/initializers/admin_navigation.rb +43 -0
  147. data/config/initializers/spree.rb +6 -0
  148. data/config/initializers/spree_admin_label_i18n_alias.rb +52 -0
  149. data/config/initializers/spree_admin_tables.rb +57 -0
  150. data/config/initializers/spree_permitted_attributes.rb +1 -0
  151. data/config/locales/en.yml +15 -0
  152. data/config/locales/ja.yml +18 -0
  153. data/config/locales/spree.en.yml +4 -0
  154. data/config/locales/spree.ja.yml +3493 -0
  155. data/lib/ba_spree/engine.rb +41 -0
  156. data/lib/ba_spree/spree_events_dedup_patch.rb +44 -0
  157. data/lib/ba_spree/version.rb +3 -0
  158. data/lib/ba_spree.rb +20 -0
  159. data/lib/generators/ba_spree/install/install_generator.rb +85 -0
  160. metadata +594 -0
@@ -0,0 +1,6 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/shared/icons/_cart.html.erb %>
2
+ <%# reason: カートアイコンの SVG パスを ba_spree のデザインに差し替えている %>
3
+ <%# @see https://github.com/be-agile/giga-repeat/issues/920 %>
4
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="24" height="24">
5
+ <path stroke-linecap="round" stroke-linejoin="round" d="M2.25 3h1.386c.51 0 .955.343 1.087.835l.383 1.437M7.5 14.25a3 3 0 0 0-3 3h15.75m-12.75-3h11.218c1.121-2.3 2.1-4.684 2.924-7.138a60.114 60.114 0 0 0-16.536-1.84M7.5 14.25 5.106 5.272M6 20.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Zm12.75 0a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Z" />
6
+ </svg>
@@ -0,0 +1,8 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/shared/icons/_cart_48.html.erb %>
2
+ <%# reason: 48px カートアイコンの SVG パスを ba_spree のデザインに差し替えている %>
3
+ <%# @see https://github.com/be-agile/giga-repeat/commit/f7ea162f7ef78b6e1883a8fd5a02ada9a7ad017e %>
4
+ <svg width="49" height="49" viewBox="0 0 49 49" fill="none" xmlns="http://www.w3.org/2000/svg">
5
+ <g id="Icon">
6
+ <path stroke-linecap="round" stroke-linejoin="round" d="M4.59375 6.125h2.83125c1.04083 0 1.94792 0.70007 2.21813 1.70479l0.78146 2.93438M15.3125 29.09375c-1.65685 0-3 1.34315-3 3h32.15625m-26.03125-6.125h22.8854c2.28854-4.69167 4.28542-9.56667 5.96667-14.57292-8.2292-1.70479-16.58542-2.83437-33.75917-3.75312M15.3125 29.09375 10.42188 10.76354M12.25 41.34375c-0.82843 0-1.5-0.67157-1.5-1.5s0.67157-1.5 1.5-1.5 1.5 0.67157 1.5 1.5-0.67157 1.5-1.5 1.5Zm26.03125 0c-0.82843 0-1.5-0.67157-1.5-1.5s0.67157-1.5 1.5-1.5 1.5 0.67157 1.5 1.5-0.67157 1.5-1.5 1.5Z" stroke="currentColor" stroke-width="3.0625"/>
7
+ </g>
8
+ </svg>
@@ -0,0 +1,15 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/shared/icons/_heart.html.erb %>
2
+ <%# reason: ハートアイコンの塗り色 (#b81f23) などを調整したコピー上書き %>
3
+ <%# @see https://github.com/be-agile/giga-repeat/commit/cdbd620ff4b0a09724ff5c060eb90ef002539222 %>
4
+ <% active ||= false %>
5
+ <% size ||= 24 %>
6
+
7
+ <% if active %>
8
+ <svg xmlns="http://www.w3.org/2000/svg" width="<%= size %>" height="<%= size %>" viewBox="0 0 24 24" fill="none">
9
+ <path d="M13.7601 3.46195L13.7602 3.46182C14.2788 2.91653 14.8925 2.48607 15.5652 2.19312C16.2378 1.90021 16.9574 1.75 17.6831 1.75C18.4087 1.75 19.1283 1.90021 19.8009 2.19312C20.4736 2.48607 21.0873 2.91653 21.6059 3.46182L21.6062 3.46208C22.1251 4.00718 22.5386 4.6564 22.8213 5.37354C23.104 6.09072 23.25 6.86062 23.25 7.63895C23.25 8.41727 23.104 9.18717 22.8213 9.90436C22.5386 10.6215 22.1251 11.2707 21.6062 11.8158L21.606 11.8159L20.389 13.095L11.9997 21.912L3.6104 13.095L2.39335 11.8159C1.34505 10.7142 0.75 9.21232 0.75 7.63895C0.75 6.06557 1.34505 4.56369 2.39335 3.46195C3.44045 2.36148 4.85242 1.75065 6.31633 1.75065C7.78024 1.75065 9.19221 2.36148 10.2393 3.46195L11.4564 4.74103L11.9997 5.31207L12.543 4.74103L13.7601 3.46195Z" fill="currentColor" stroke="#b81f23" stroke-width="1.5" />
10
+ </svg>
11
+ <% else %>
12
+ <svg xmlns="http://www.w3.org/2000/svg" width="<%= size %>" height="<%= size %>" viewBox="0 0 24 24" fill="none">
13
+ <path d="M13.7601 3.46195L13.7602 3.46182C14.2788 2.91653 14.8925 2.48607 15.5652 2.19312C16.2378 1.90021 16.9574 1.75 17.6831 1.75C18.4087 1.75 19.1283 1.90021 19.8009 2.19312C20.4736 2.48607 21.0873 2.91653 21.6059 3.46182L21.6062 3.46208C22.1251 4.00718 22.5386 4.6564 22.8213 5.37354C23.104 6.09072 23.25 6.86062 23.25 7.63895C23.25 8.41727 23.104 9.18717 22.8213 9.90436C22.5386 10.6215 22.1251 11.2707 21.6062 11.8158L21.606 11.8159L20.389 13.095L11.9997 21.912L3.6104 13.095L2.39335 11.8159C1.34505 10.7142 0.75 9.21232 0.75 7.63895C0.75 6.06557 1.34505 4.56369 2.39335 3.46195C3.44045 2.36148 4.85242 1.75065 6.31633 1.75065C7.78024 1.75065 9.19221 2.36148 10.2393 3.46195L11.4564 4.74103L11.9997 5.31207L12.543 4.74103L13.7601 3.46195Z" stroke="currentColor" stroke-width="1.5" />
14
+ </svg>
15
+ <% end %>
@@ -0,0 +1,12 @@
1
+ pin "local-time"
2
+ pin 'ba-spree-local-time', to: 'ba_spree/storefront/ba_spree_local_time.js', preload: false
3
+
4
+ # Stimulus コントローラーエントリーポイント (storefront)
5
+ pin 'ba_spree', to: 'ba_spree/index.js', preload: true
6
+
7
+ # Stimulus コントローラー
8
+ # Engine.root は初期化時に使えないため __dir__ を使用する
9
+ pin_all_from File.expand_path('../app/javascript/ba_spree/controllers', __dir__),
10
+ under: 'ba_spree/controllers',
11
+ to: 'ba_spree/controllers',
12
+ preload: false
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Spree 5.2 の新ナビゲーションシステム(legacy_sidebar_navigation=false)に対応。
4
+ # 旧来 ba_spree は _promotions_nav.html.erb の gem-override で販促サブメニュー
5
+ # (特価スケジュール / ボリュームディスカウント段階 / 金額帯割引)を追加していたが、
6
+ # 新システムでは legacy の _promotions_nav 自体がレンダリングされず無視される。
7
+ # そのため Spree.admin.navigation.sidebar に promotions の子メニューとして登録し直す。
8
+ # (gift_cards は本家が既定で登録済みのため対象外)
9
+ Rails.application.config.after_initialize do
10
+ next unless Spree.admin.navigation.sidebar.exists?(:promotions)
11
+
12
+ sidebar = Spree.admin.navigation.sidebar
13
+
14
+ if defined?(Spree::ScheduledDiscount)
15
+ sidebar.add :scheduled_discounts,
16
+ parent: :promotions,
17
+ label: :scheduled_discounts,
18
+ url: :admin_scheduled_discounts_path,
19
+ position: 20,
20
+ active: -> { controller_name == 'scheduled_discounts' },
21
+ if: -> { can?(:manage, Spree::Promotion) }
22
+ end
23
+
24
+ if defined?(Spree::VolumeDiscountTierGroup)
25
+ sidebar.add :volume_discount_tier_groups,
26
+ parent: :promotions,
27
+ label: :volume_discount_tier_groups,
28
+ url: :admin_volume_discount_tier_groups_path,
29
+ position: 30,
30
+ active: -> { controller_name == 'volume_discount_tier_groups' },
31
+ if: -> { can?(:manage, Spree::Promotion) }
32
+ end
33
+
34
+ if defined?(Spree::AmountDiscountTierGroup)
35
+ sidebar.add :amount_discount_tier_groups,
36
+ parent: :promotions,
37
+ label: :amount_discount_tier_groups,
38
+ url: :admin_amount_discount_tier_groups_path,
39
+ position: 40,
40
+ active: -> { controller_name == 'amount_discount_tier_groups' },
41
+ if: -> { can?(:manage, Spree::Promotion) }
42
+ end
43
+ end
@@ -0,0 +1,6 @@
1
+ # 日本の EC では注文確定前に内容確認画面を挟むのが一般的なため、
2
+ # confirm ステップを常に有効にする。
3
+ # @see https://github.com/be-agile/giga-repeat/issues/1317
4
+ Spree.config do |config|
5
+ config.always_include_confirm_step = true
6
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Spree 5.3 追従: admin テーブルの列見出し等のラベル英語化対策
4
+ #
5
+ # spree_admin 5.3 の Spree::Admin::Table::Column#resolve_label は
6
+ # `label:` がドットを含む文字列(例: 'admin.num_orders')のとき、
7
+ # spree 名前空間を付けずに素の I18n.t を呼ぶ:
8
+ #
9
+ # return I18n.t(label, default: label.split('.').last.humanize) if label.is_a?(String) && label.include?('.')
10
+ #
11
+ # このため `I18n.t('admin.num_orders')`(= ja.admin.num_orders)を引くが、
12
+ # 日本語訳は ja.spree.admin.* 配下にしか無く、英語(humanize フォールバック)
13
+ # になってしまう。num_orders / amount_spent の列見出し、各種一括操作ラベル、
14
+ # サイドナビ項目(getting_started, audit_log 等)が該当する。
15
+ #
16
+ # 訳語を二重管理しないため、ja.spree.admin をそのまま ja.admin にミラー登録して
17
+ # spree 接頭辞無しの参照を救済する(spree_admin gem 側の resolve_label の
18
+ # 仕様変更があれば本ファイルは不要になる)。
19
+ Rails.application.config.after_initialize do
20
+ # Spree は I18n::Backend::Chain を使う。Chain#store_translations は
21
+ # NotImplementedError を投げるため、チェイン内で実際に格納可能な
22
+ # 具体バックエンド(Simple 等)を再帰的に探して登録する。
23
+ find_storable = lambda do |backend|
24
+ unless backend.is_a?(I18n::Backend::Chain)
25
+ owner = backend.method(:store_translations).owner rescue nil
26
+ return backend if owner && owner != I18n::Backend::Base
27
+ end
28
+ if backend.respond_to?(:backends)
29
+ backend.backends.each do |child|
30
+ found = find_storable.call(child)
31
+ return found if found
32
+ end
33
+ end
34
+ nil
35
+ end
36
+
37
+ target = find_storable.call(I18n.backend)
38
+
39
+ if target
40
+ %i[ja en].each do |locale|
41
+ admin_translations = I18n.t('spree.admin', locale: locale, default: nil)
42
+ next unless admin_translations.is_a?(Hash)
43
+
44
+ # ja.admin が既に持つ独自定義を壊さないよう、spree.admin 側を下地にして
45
+ # 既存の ja.admin を上書き優先でマージする。
46
+ existing = I18n.t('admin', locale: locale, default: nil)
47
+ merged = admin_translations.deep_merge(existing.is_a?(Hash) ? existing : {})
48
+
49
+ target.store_translations(locale, { admin: merged })
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Spree 5.3 追従: admin 一覧テーブル(Spree.admin.tables.*)の表示調整
4
+ #
5
+ # Spree 5.3 で admin の一覧は _list.html.erb ではなくテーブルレジストリ
6
+ # (Spree.admin.tables.*)のカラム定義で描画される。gem 既定の挙動が日本語 UI と
7
+ # 合わない箇所を、ここでカラム属性を上書きして補正する。
8
+ #
9
+ # (1) 日時列(type: :datetime): 既定は :spree_time_ago で「yesterday at 8:29am」
10
+ # 「on Dec 10, 2025」のような英語相対表示+ホバーで絶対日時。最初から日本語の絶対日時
11
+ # (例 2026年06月11日 00:29)を出すため、format に :spree_time を指定して相対表示
12
+ # フォーマッタを差し替える。注文一覧の完了日時・ユーザー/ニュースレター購読者の作成日時等、
13
+ # 全 admin 一覧テーブルの datetime 列をまとめて対象にする(format 明示済みの列は尊重)。
14
+ # (2) アイテム数(orders.item_count): 既定の method は `pluralize(item_count, 'item')` で
15
+ # 「330 item」と英語表示。「330個」にするため method を差し替える。
16
+ # 見出し(label: :item_count → Spree.t(:item_count) = ja.spree.item_count)は
17
+ # config/locales/spree.ja.yml で「個数」に変更済み(本ファイルでは値の表示のみ変更)。
18
+ Rails.application.config.after_initialize do
19
+ # (1) 全 admin 一覧テーブルの datetime 列を日本語の絶対日時表示にする
20
+ Spree.admin.tables.registries.each do |table_key|
21
+ table = Spree.admin.tables.get(table_key)
22
+ table.columns.each_value do |column|
23
+ next unless column.type.to_s == 'datetime'
24
+ next if column.format.present? # 個別に書式指定済みの列は触らない
25
+
26
+ column.format = :spree_time
27
+ end
28
+ end
29
+
30
+ # (2) 注文一覧のアイテム数を「330個」表示にする
31
+ orders = Spree.admin.tables.get(:orders)
32
+ if (item_count = orders&.columns&.[](:item_count))
33
+ item_count.method = ->(order) { "#{order.item_count}個" }
34
+ end
35
+ end
36
+
37
+ # (3) ページネーション文言(「Displaying items 1-25 of 13119 in total」)の日本語化
38
+ #
39
+ # spree_admin 5.3 の一覧フッターは Pagy の @pagy.info_tag で描画される。Pagy は Rails の
40
+ # I18n とは独立した独自 i18n(Pagy::I18n、Thread ローカル :pagy_locale)を持ち、既定が 'en' の
41
+ # ため英語表示になる。Pagy gem には日本語辞書(pagy/locales/ja.yml)が同梱されているので、
42
+ # 各リクエストで Pagy のロケールを Rails の I18n.locale に追従させれば日本語になる。
43
+ # I18n.locale= をフックして両者を常に同期させる(storefront/admin 双方をカバー)。
44
+ require 'pagy'
45
+
46
+ module BaSpree
47
+ module PagyLocaleSync
48
+ def locale=(value)
49
+ super
50
+ Pagy::I18n.locale = value.to_s
51
+ end
52
+ end
53
+ end
54
+
55
+ I18n.singleton_class.prepend(BaSpree::PagyLocaleSync)
56
+ # 初期化時点の locale も同期しておく
57
+ Pagy::I18n.locale = I18n.locale.to_s
@@ -0,0 +1 @@
1
+ Spree::PermittedAttributes.store_attributes << :special_instruction_message
@@ -0,0 +1,15 @@
1
+ en:
2
+ spree:
3
+ promotions: Promotions
4
+ confirm_order: Confirm Order
5
+ continue_without_logging_in: Continue without logging in
6
+ add_to_cart_discontinued: Discontinued
7
+ add_to_cart_not_purchasable: Not purchasable
8
+ add_to_cart_not_available: Not available
9
+ order_mailer:
10
+ confirm_email:
11
+ download_digitals: Download Digitals
12
+ api:
13
+ v2:
14
+ digitals:
15
+ unpaid: You can download it after the payment is completed.
@@ -0,0 +1,18 @@
1
+ ja:
2
+ spree:
3
+ promotions: 販売促進
4
+ confirm_order: 注文を確定する
5
+ continue_without_logging_in: ログインせずに続ける
6
+ add_to_cart_discontinued: 販売終了
7
+ add_to_cart_not_purchasable: 在庫切れ
8
+ add_to_cart_not_available: お取り扱いなし
9
+ order_mailer:
10
+ confirm_email:
11
+ download_digitals: デジタル商品のダウンロードリンク
12
+ api:
13
+ v2:
14
+ digitals:
15
+ unpaid: お支払いが完了しましたらダウンロードできます
16
+ title_login: アカウントをお持ちの方はログインすると、住所情報が自動入力されます。
17
+ checkout:
18
+ title_login: アカウントをお持ちの方はログインすると、住所情報が自動入力されます。
@@ -0,0 +1,4 @@
1
+ ---
2
+ en:
3
+ spree:
4
+ tax_included: (tax included)