From 47652e9d25dd072962175f09a6808e9bdf33bb0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 09:31:48 +0000 Subject: [PATCH 01/12] Bump rubocop from 1.81.7 to 1.84.1 Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.81.7 to 1.84.1. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.81.7...v1.84.1) --- updated-dependencies: - dependency-name: rubocop dependency-version: 1.84.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6036ca93cf..6d0ef56656 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -572,7 +572,7 @@ GEM parallel (1.27.0) paranoia (2.6.4) activerecord (>= 5.1, < 7.2) - parser (3.3.10.1) + parser (3.3.10.2) ast (~> 2.4.1) racc paypal-sdk-core (0.3.4) @@ -771,7 +771,7 @@ GEM rswag-ui (2.17.0) actionpack (>= 5.2, < 8.2) railties (>= 5.2, < 8.2) - rubocop (1.81.7) + rubocop (1.84.1) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) @@ -779,7 +779,7 @@ GEM parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.47.1, < 2.0) + rubocop-ast (>= 1.49.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) rubocop-ast (1.49.0) From da1e1a98595e597b57ce0222526eba0b1650604f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 09:42:07 +1100 Subject: [PATCH 02/12] Style indentation --- app/models/spree/product.rb | 2 +- app/models/spree/taxon.rb | 4 ++-- app/models/spree/variant.rb | 12 ++++++------ app/services/dfc_catalog_importer.rb | 8 ++++---- app/services/line_item_syncer.rb | 4 ++-- lib/reporting/reports/customers/base.rb | 8 ++++---- .../enterprise_fees_with_tax_report_by_order.rb | 10 +++++----- spec/models/spree/order/state_machine_spec.rb | 10 +++++----- spec/models/spree/user_spec.rb | 2 +- spec/services/orders/compare_invoice_service_spec.rb | 4 ++-- spec/system/admin/bulk_order_management_spec.rb | 8 ++++---- spec/system/consumer/checkout/payment_spec.rb | 6 +++--- 12 files changed, 39 insertions(+), 39 deletions(-) diff --git a/app/models/spree/product.rb b/app/models/spree/product.rb index 2ad3561b6c..e077af407b 100755 --- a/app/models/spree/product.rb +++ b/app/models/spree/product.rb @@ -251,7 +251,7 @@ module Spree transaction do ExchangeVariant. where(exchange_variants: { variant_id: variants.with_deleted. - select(:id) }).destroy_all + select(:id) }).destroy_all yield end diff --git a/app/models/spree/taxon.rb b/app/models/spree/taxon.rb index 09c772fdf0..a663a05922 100644 --- a/app/models/spree/taxon.rb +++ b/app/models/spree/taxon.rb @@ -35,8 +35,8 @@ module Spree taxons .pluck('spree_taxons.id, enterprises.id AS enterprise_id') .each_with_object({}) do |(taxon_id, enterprise_id), collection| - collection[enterprise_id.to_i] ||= Set.new - collection[enterprise_id.to_i] << taxon_id + collection[enterprise_id.to_i] ||= Set.new + collection[enterprise_id.to_i] << taxon_id end end diff --git a/app/models/spree/variant.rb b/app/models/spree/variant.rb index 63baad819e..d6eda45ca8 100644 --- a/app/models/spree/variant.rb +++ b/app/models/spree/variant.rb @@ -167,8 +167,8 @@ module Spree # In Rails 3, merging two scopes on the same column will consider only the last scope. def self.in_distributor(distributor) where(id: ExchangeVariant.select(:variant_id). - joins(:exchange). - where('exchanges.incoming = ? AND exchanges.receiver_id = ?', false, distributor)) + joins(:exchange). + where('exchanges.incoming = ? AND exchanges.receiver_id = ?', false, distributor)) end def self.indexed @@ -179,11 +179,11 @@ module Spree # "where(id:" is necessary so that the returned relation has no includes # The relation without includes will not be readonly and allow updates on it where(spree_variants: { id: joins(:prices). - where(deleted_at: nil). - where('spree_prices.currency' => + where(deleted_at: nil). + where('spree_prices.currency' => currency || CurrentConfig.get(:currency)). - where.not(spree_prices: { amount: nil }). - select("spree_variants.id") }) + where.not(spree_prices: { amount: nil }). + select("spree_variants.id") }) end def self.linked_to(semantic_id) diff --git a/app/services/dfc_catalog_importer.rb b/app/services/dfc_catalog_importer.rb index 16d81ac6d3..8ec1c74310 100644 --- a/app/services/dfc_catalog_importer.rb +++ b/app/services/dfc_catalog_importer.rb @@ -42,10 +42,10 @@ class DfcCatalogImporter .includes(:semantic_links).references(:semantic_links) .where.not(semantic_links: { semantic_id: present_ids }) .select do |variant| - # Variants that were in the same catalog before: - variant.semantic_links.map(&:semantic_id).any? do |semantic_id| - FdcUrlBuilder.new(semantic_id).catalog_url == catalog_url - end + # Variants that were in the same catalog before: + variant.semantic_links.map(&:semantic_id).any? do |semantic_id| + FdcUrlBuilder.new(semantic_id).catalog_url == catalog_url + end end end end diff --git a/app/services/line_item_syncer.rb b/app/services/line_item_syncer.rb index fb2af07b13..ce7fda37eb 100644 --- a/app/services/line_item_syncer.rb +++ b/app/services/line_item_syncer.rb @@ -51,8 +51,8 @@ class LineItemSyncer def destroy_obsolete_items(order) order.line_items. where(variant_id: subscription_line_items. - select(&:marked_for_destruction?). - map(&:variant_id)). + select(&:marked_for_destruction?). + map(&:variant_id)). destroy_all end diff --git a/lib/reporting/reports/customers/base.rb b/lib/reporting/reports/customers/base.rb index b53fb7b44c..3539775c6d 100644 --- a/lib/reporting/reports/customers/base.rb +++ b/lib/reporting/reports/customers/base.rb @@ -10,10 +10,10 @@ module Reporting .complete.not_state(:canceled) .order(:id)) .group_by do |order| - { - customer_id: order.customer_id || order.email, - hub_id: order.distributor_id, - } + { + customer_id: order.customer_id || order.email, + hub_id: order.distributor_id, + } end.values end diff --git a/lib/reporting/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_order.rb b/lib/reporting/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_order.rb index abc27aa844..51c6a21fe5 100644 --- a/lib/reporting/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_order.rb +++ b/lib/reporting/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_order.rb @@ -44,11 +44,11 @@ module Reporting .filter(&method(:filter_enterprise_fee_by_id)) .filter(&method(:filter_enterprise_fee_by_owner)) .map do |enterprise_fee_id, enterprise_fee_adjustment_ids| - { - enterprise_fee_id:, - enterprise_fee_adjustment_ids:, - order: - } + { + enterprise_fee_id:, + enterprise_fee_adjustment_ids:, + order: + } end end end diff --git a/spec/models/spree/order/state_machine_spec.rb b/spec/models/spree/order/state_machine_spec.rb index 7ac1d81333..f50326789d 100644 --- a/spec/models/spree/order/state_machine_spec.rb +++ b/spec/models/spree/order/state_machine_spec.rb @@ -86,11 +86,11 @@ RSpec.describe Spree::Order do (Spree::Shipment.state_machine.states.keys - [:pending, :backorder, :ready]) .each do |shipment_state| - it "should be false if shipment_state is #{shipment_state}" do - allow(order).to receive_messages completed?: true - order.shipment_state = shipment_state - expect(order.can_cancel?).to be_falsy - end + it "should be false if shipment_state is #{shipment_state}" do + allow(order).to receive_messages completed?: true + order.shipment_state = shipment_state + expect(order.can_cancel?).to be_falsy + end end end diff --git a/spec/models/spree/user_spec.rb b/spec/models/spree/user_spec.rb index 517b405ac7..5e6fea55ef 100644 --- a/spec/models/spree/user_spec.rb +++ b/spec/models/spree/user_spec.rb @@ -17,7 +17,7 @@ RSpec.describe Spree::User do bill_address_attributes: new_bill_address.dup.attributes.merge( 'id' => old_bill_address.id ) - .except!('created_at', 'updated_at') + .except!('created_at', 'updated_at') ) expect(user.bill_address.id).to eq old_bill_address.id diff --git a/spec/services/orders/compare_invoice_service_spec.rb b/spec/services/orders/compare_invoice_service_spec.rb index 4580446b52..a3c5a8a2cc 100644 --- a/spec/services/orders/compare_invoice_service_spec.rb +++ b/spec/services/orders/compare_invoice_service_spec.rb @@ -38,8 +38,8 @@ RSpec.shared_examples "attribute changes - tax total changes" do |boolean, type, create(:order_with_taxes, product_price: 110, tax_rate_amount: 0.1, included_in_price: included_boolean) .tap do |order| - order.create_tax_charge! - order.update_shipping_fees! + order.create_tax_charge! + order.update_shipping_fees! end end diff --git a/spec/system/admin/bulk_order_management_spec.rb b/spec/system/admin/bulk_order_management_spec.rb index cf768670f2..33542ff71c 100644 --- a/spec/system/admin/bulk_order_management_spec.rb +++ b/spec/system/admin/bulk_order_management_spec.rb @@ -1044,10 +1044,10 @@ RSpec.describe ' page.driver .dismiss_modal :confirm, text: "Unsaved changes exist and will be lost if you continue." do - within "tr#li_#{li1.id}" do - fill_in "quantity", with: (li1.quantity + 1) - find("a.edit-order").click - end + within "tr#li_#{li1.id}" do + fill_in "quantity", with: (li1.quantity + 1) + find("a.edit-order").click + end end # So we save the changes diff --git a/spec/system/consumer/checkout/payment_spec.rb b/spec/system/consumer/checkout/payment_spec.rb index eac1eb1de0..4e513845b3 100644 --- a/spec/system/consumer/checkout/payment_spec.rb +++ b/spec/system/consumer/checkout/payment_spec.rb @@ -360,10 +360,10 @@ RSpec.describe "As a consumer, I want to checkout my order" do # And fake the payment status to avoid user interaction. allow_any_instance_of(Taler::Client) .to receive(:fetch_order) do - payment = Spree::Payment.last - url = payment_gateways_confirm_taler_path(payment_id: payment.id) + payment = Spree::Payment.last + url = payment_gateways_confirm_taler_path(payment_id: payment.id) - { "order_status_url" => url, "order_status" => "paid" } + { "order_status_url" => url, "order_status" => "paid" } end end From 40d8839bc4f9f7f36da49a394efe108415b4b3cf Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 09:42:33 +1100 Subject: [PATCH 03/12] Style Heredoc indentation --- spec/queries/outstanding_balance_query_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/queries/outstanding_balance_query_spec.rb b/spec/queries/outstanding_balance_query_spec.rb index 57d4f14adb..e69cbfdd66 100644 --- a/spec/queries/outstanding_balance_query_spec.rb +++ b/spec/queries/outstanding_balance_query_spec.rb @@ -10,7 +10,7 @@ RSpec.describe OutstandingBalanceQuery do let(:normalized_sql_statement) { normalize(query.statement) } it 'returns the CASE statement necessary to compute the order balance' do - expect(normalized_sql_statement).to eq(normalize(<<-SQL.squish)) + expect(normalized_sql_statement).to eq(normalize(<<~SQL.squish)) CASE WHEN "spree_orders"."state" IN ('canceled', 'returned') THEN "spree_orders"."payment_total" WHEN "spree_orders"."state" IS NOT NULL THEN "spree_orders"."payment_total" - "spree_orders"."total" ELSE 0 END From 167099badf07b9bfb049b08d6134dbb78c64415c Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 09:44:19 +1100 Subject: [PATCH 04/12] Lint/NoReturnInBeginEndBlocks --- app/services/orders/handle_fees_service.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/services/orders/handle_fees_service.rb b/app/services/orders/handle_fees_service.rb index 64e42f63ad..eb6211d5e8 100644 --- a/app/services/orders/handle_fees_service.rb +++ b/app/services/orders/handle_fees_service.rb @@ -130,12 +130,11 @@ module Orders def order_cycle_fees return @order_cycle_fees if defined? @order_cycle_fees + return [] unless order_cycle && distributor @order_cycle_fees = begin fees = [] - return fees unless order_cycle && distributor - order_cycle.exchanges.supplying_to(distributor).each do |exchange| exchange.enterprise_fees.per_item.each do |enterprise_fee| fee_value = FeeValue.new(fee: enterprise_fee, role: exchange.role) From 5b925517f0160862a5d708570404900a820aa1bc Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 11:52:33 +1100 Subject: [PATCH 05/12] Bump rack from 2.2.21 to 2.2.22 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ab50691fd7..0de0b5e48b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -616,7 +616,7 @@ GEM railties (>= 4.2) raabro (1.4.0) racc (1.8.1) - rack (2.2.21) + rack (2.2.22) rack-mini-profiler (2.3.4) rack (>= 1.2.0) rack-oauth2 (2.3.0) From 691995eeaa836a61c8568a90b66f9f3b685a3713 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 12:44:41 +1100 Subject: [PATCH 06/12] Bump rubocop from 1.84.1 to 1.84.2 --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6d0ef56656..f5f6e296d9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -440,7 +440,7 @@ GEM thor (>= 0.14, < 2.0) jquery-ui-rails (4.2.1) railties (>= 3.2.16) - json (2.15.2) + json (2.18.1) json-canonicalization (1.0.0) json-jwt (1.17.0) activesupport (>= 4.2) @@ -771,7 +771,7 @@ GEM rswag-ui (2.17.0) actionpack (>= 5.2, < 8.2) railties (>= 5.2, < 8.2) - rubocop (1.84.1) + rubocop (1.84.2) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) From 16b3da66c2fafcc8b5a37326e34fcce5d27b25b8 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 12:45:37 +1100 Subject: [PATCH 07/12] Style/HashAsLastArrayItem --- app/queries/product_scope_query.rb | 4 ++-- app/services/permitted_attributes/enterprise.rb | 12 ++++++------ app/services/permitted_attributes/order_cycle.rb | 4 ++-- app/services/permitted_attributes/subscription.rb | 10 +++++----- .../dfc_provider/spec/requests/catalog_items_spec.rb | 2 +- .../spec/requests/product_groups_spec.rb | 2 +- lib/reporting/line_items.rb | 2 +- spec/support/request/stripe_stubs.rb | 2 +- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/queries/product_scope_query.rb b/app/queries/product_scope_query.rb index bdadbc3401..e900f60769 100644 --- a/app/queries/product_scope_query.rb +++ b/app/queries/product_scope_query.rb @@ -60,8 +60,8 @@ class ProductScopeQuery def product_query_includes [ - image: { attachment_attachment: :blob }, - variants: [:default_price, :stock_items, :variant_overrides] + { image: { attachment_attachment: :blob }, + variants: [:default_price, :stock_items, :variant_overrides] } ] end diff --git a/app/services/permitted_attributes/enterprise.rb b/app/services/permitted_attributes/enterprise.rb index 391377ba49..b7c8fa92e4 100644 --- a/app/services/permitted_attributes/enterprise.rb +++ b/app/services/permitted_attributes/enterprise.rb @@ -14,12 +14,12 @@ module PermittedAttributes def self.attributes basic_permitted_attributes + [ - group_ids: [], user_ids: [], - shipping_method_ids: [], payment_method_ids: [], - address_attributes: PermittedAttributes::Address.attributes, - business_address_attributes: PermittedAttributes::BusinessAddress.attributes, - producer_properties_attributes: [:id, :property_name, :value, :_destroy], - custom_tab_attributes: PermittedAttributes::CustomTab.attributes, + { group_ids: [], user_ids: [], + shipping_method_ids: [], payment_method_ids: [], + address_attributes: PermittedAttributes::Address.attributes, + business_address_attributes: PermittedAttributes::BusinessAddress.attributes, + producer_properties_attributes: [:id, :property_name, :value, :_destroy], + custom_tab_attributes: PermittedAttributes::CustomTab.attributes }, ] end diff --git a/app/services/permitted_attributes/order_cycle.rb b/app/services/permitted_attributes/order_cycle.rb index dc23c8e5c3..b0351e0901 100644 --- a/app/services/permitted_attributes/order_cycle.rb +++ b/app/services/permitted_attributes/order_cycle.rb @@ -25,8 +25,8 @@ module PermittedAttributes private def attributes - self.class.basic_attributes + [incoming_exchanges: permitted_exchange_attributes, - outgoing_exchanges: permitted_exchange_attributes] + self.class.basic_attributes + [{ incoming_exchanges: permitted_exchange_attributes, + outgoing_exchanges: permitted_exchange_attributes }] end def permitted_exchange_attributes diff --git a/app/services/permitted_attributes/subscription.rb b/app/services/permitted_attributes/subscription.rb index e80469767f..a8b34e85d9 100644 --- a/app/services/permitted_attributes/subscription.rb +++ b/app/services/permitted_attributes/subscription.rb @@ -26,11 +26,11 @@ module PermittedAttributes def other_permitted_attributes [ - subscription_line_items_attributes: [ - :id, :quantity, :variant_id, :price_estimate, :_destroy - ], - bill_address_attributes: PermittedAttributes::Address.attributes, - ship_address_attributes: PermittedAttributes::Address.attributes + { subscription_line_items_attributes: [ + :id, :quantity, :variant_id, :price_estimate, :_destroy + ], + bill_address_attributes: PermittedAttributes::Address.attributes, + ship_address_attributes: PermittedAttributes::Address.attributes } ] end end diff --git a/engines/dfc_provider/spec/requests/catalog_items_spec.rb b/engines/dfc_provider/spec/requests/catalog_items_spec.rb index 1b69192310..1d3854b072 100644 --- a/engines/dfc_provider/spec/requests/catalog_items_spec.rb +++ b/engines/dfc_provider/spec/requests/catalog_items_spec.rb @@ -36,7 +36,7 @@ RSpec.describe "CatalogItems", swagger_doc: "dfc.yaml" do get "List CatalogItems" do produces "application/json" - security [oidc_token: []] + security [{ oidc_token: [] }] response "404", "not found" do context "as platform user" do diff --git a/engines/dfc_provider/spec/requests/product_groups_spec.rb b/engines/dfc_provider/spec/requests/product_groups_spec.rb index 9520acab2c..cea6ed0182 100644 --- a/engines/dfc_provider/spec/requests/product_groups_spec.rb +++ b/engines/dfc_provider/spec/requests/product_groups_spec.rb @@ -35,7 +35,7 @@ RSpec.describe "ProductGroups", swagger_doc: "dfc.yaml" do get "Show ProductGroup" do produces "application/json" - security [oidc_token: []] + security [{ oidc_token: [] }] response "200", "success" do let(:id) { product.id } diff --git a/lib/reporting/line_items.rb b/lib/reporting/line_items.rb index 1fa5cb56c5..8a709aa8e1 100644 --- a/lib/reporting/line_items.rb +++ b/lib/reporting/line_items.rb @@ -15,7 +15,7 @@ module Reporting @orders ||= search_orders end - def list(line_item_includes = [variant: [:supplier, :product]]) + def list(line_item_includes = [{ variant: [:supplier, :product] }]) line_items = order_permissions.visible_line_items.in_orders(orders.result) .order( "supplier.name", diff --git a/spec/support/request/stripe_stubs.rb b/spec/support/request/stripe_stubs.rb index 524233cffc..8132d8751e 100644 --- a/spec/support/request/stripe_stubs.rb +++ b/spec/support/request/stripe_stubs.rb @@ -144,7 +144,7 @@ module StripeStubs customer_id = options[:customer_id] || "cus_A123" { status: 200, body: JSON.generate(id: customer_id, - sources: { data: [id: customer_id] }) } + sources: { data: [{ id: customer_id }] }) } end def payment_successful_refund_mock From e2536ffe717ec54de32b1386c65a9222b454213b Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 19 Feb 2026 14:07:47 +1100 Subject: [PATCH 08/12] Bump faraday from 2.9.0 to 2.14.1 --- Gemfile.lock | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 81b5e0127f..2ae2233793 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -326,12 +326,14 @@ GEM factory_bot_rails (6.2.0) factory_bot (~> 6.2.0) railties (>= 5.0.0) - faraday (2.9.0) - faraday-net_http (>= 2.0, < 3.2) + faraday (2.14.1) + faraday-net_http (>= 2.0, < 3.5) + json + logger faraday-follow_redirects (0.4.0) faraday (>= 1, < 3) - faraday-net_http (3.1.1) - net-http + faraday-net_http (3.4.2) + net-http (~> 0.5) ferrum (0.14) addressable (~> 2.5) concurrent-ruby (~> 1.1) @@ -514,8 +516,8 @@ GEM multi_json (1.17.0) multi_xml (0.6.0) mutex_m (0.3.0) - net-http (0.7.0) - uri + net-http (0.9.1) + uri (>= 0.11.1) net-imap (0.5.12) date net-protocol From 2e67899bcca7d7dc75df979af41fd7e72dc1df84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 09:32:42 +0000 Subject: [PATCH 09/12] Bump tom-select from 2.4.6 to 2.5.1 Bumps [tom-select](https://github.com/orchidjs/tom-select) from 2.4.6 to 2.5.1. - [Release notes](https://github.com/orchidjs/tom-select/releases) - [Commits](https://github.com/orchidjs/tom-select/compare/v2.4.6...v2.5.1) --- updated-dependencies: - dependency-name: tom-select dependency-version: 2.5.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 95c974665a..8f90dee2d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7064,9 +7064,9 @@ toidentifier@1.0.1, toidentifier@~1.0.1: integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tom-select@*: - version "2.4.6" - resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.6.tgz#23acdfc09ee235eb752706d418c9c9ae6ccf67f0" - integrity sha512-Hhqi15AiTl0+FjaHVTXvUkF3t7x4W5LXUHxLYlzp7r8bcIgGJyz9M+3ZvrHdTRvEmV4EmNyJPbHJJnZOjr5Iig== + version "2.5.1" + resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.5.1.tgz#8c8d3f11e5c1780b5f26c9e90f4e650842ff9596" + integrity sha512-63D5/Qf6bb6kLSgksEuas/60oawDcuUHrD90jZofeOpF6bkQFYriKrvtpJBQQ4xIA5dUGcjhBbk/yrlfOQsy3g== dependencies: "@orchidjs/sifter" "^1.1.0" "@orchidjs/unicode-variants" "^1.1.2" From 0418163ad7e1073e01420314f445328c8868d884 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 09:34:06 +0000 Subject: [PATCH 10/12] Bump rubocop-rails from 2.34.2 to 2.34.3 Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.34.2 to 2.34.3. - [Release notes](https://github.com/rubocop/rubocop-rails/releases) - [Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop-rails/compare/v2.34.2...v2.34.3) --- updated-dependencies: - dependency-name: rubocop-rails dependency-version: 2.34.3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 81b5e0127f..1f950fe9e3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -573,7 +573,7 @@ GEM parallel (1.27.0) paranoia (2.6.4) activerecord (>= 5.1, < 7.2) - parser (3.3.10.1) + parser (3.3.10.2) ast (~> 2.4.1) racc paypal-sdk-core (0.3.4) @@ -616,7 +616,7 @@ GEM railties (>= 4.2) raabro (1.4.0) racc (1.8.1) - rack (2.2.21) + rack (2.2.22) rack-mini-profiler (2.3.4) rack (>= 1.2.0) rack-oauth2 (2.3.0) @@ -792,7 +792,7 @@ GEM rubocop-factory_bot (2.28.0) lint_roller (~> 1.1) rubocop (~> 1.72, >= 1.72.1) - rubocop-rails (2.34.2) + rubocop-rails (2.34.3) activesupport (>= 4.2.0) lint_roller (~> 1.1) rack (>= 1.1) From 8d7252f07875c724393952c15132cdecb2bb7944 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 22:15:49 +0000 Subject: [PATCH 11/12] Bump hotkeys-js from 3.13.15 to 4.0.0 Bumps [hotkeys-js](https://github.com/jaywcjlove/hotkeys-js) from 3.13.15 to 4.0.0. - [Release notes](https://github.com/jaywcjlove/hotkeys-js/releases) - [Commits](https://github.com/jaywcjlove/hotkeys-js/compare/v3.13.15...v4.0.0) --- updated-dependencies: - dependency-name: hotkeys-js dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8f90dee2d3..3b0f12bfba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4005,9 +4005,9 @@ hasown@^2.0.2: function-bind "^1.1.2" hotkeys-js@*: - version "3.13.15" - resolved "https://registry.yarnpkg.com/hotkeys-js/-/hotkeys-js-3.13.15.tgz#2d394bd6bd78857d4b24dc86bdba2fa1cf7012fc" - integrity sha512-gHh8a/cPTCpanraePpjRxyIlxDFrIhYqjuh01UHWEwDpglJKCnvLW8kqSx5gQtOuSsJogNZXLhOdbSExpgUiqg== + version "4.0.0" + resolved "https://registry.yarnpkg.com/hotkeys-js/-/hotkeys-js-4.0.0.tgz#75336c0ac610ad384d286c61c519909dcd4bdf6b" + integrity sha512-gIoeqMWYqPIItc4HaseVbtTRpEpBbeufZMUcoWtN62JZdDq3KadS1ijN6wpaDjTzRK7PjT3QOPUcx+yNT0rrZQ== hpack.js@^2.1.6: version "2.1.6" From b455755bfc9a022de8f4171918a03845e191eeeb Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Sat, 21 Feb 2026 02:34:10 +0500 Subject: [PATCH 12/12] Update all locales with the latest Transifex translations --- config/locales/en_CA.yml | 7 +++ config/locales/en_GB.yml | 88 +++++++++++++++++++++++++++-- config/locales/fi.yml | 119 ++++++++++++++++++++++++++++++++++++++- config/locales/fr.yml | 2 +- config/locales/fr_CA.yml | 76 +++++++++++++++++++++++++ 5 files changed, 284 insertions(+), 8 deletions(-) diff --git a/config/locales/en_CA.yml b/config/locales/en_CA.yml index a38b021535..75497933d8 100644 --- a/config/locales/en_CA.yml +++ b/config/locales/en_CA.yml @@ -246,6 +246,9 @@ en_CA: disconnect_failure: "Failed to disconnecct Stripe." success_code: disconnected: "Stripe account disconnected." + taler: + order_status: + claimed: "The payment request expired. Please try again." activemodel: errors: messages: @@ -3358,6 +3361,8 @@ en_CA: payment_processing_failed: "Payment could not be processed, please check the details you entered." payment_method_not_supported: "That payment method is unsupported. Please choose another one." payment_updated: "Payment Updated" + payment_method_taler: + order_summary: "Open Food Network order" cannot_perform_operation: "Could not update the payment" action_required: "Action required" tag_rules: "Tag Rules" @@ -4171,6 +4176,7 @@ en_CA: alt_text: "Alternative Text" thumbnail: "Thumbnail" back_to_images_list: "Back to Images List" + backend_url: "Backend URL" api_key: "API key" email: Email account_updated: "Account updated!" @@ -4490,6 +4496,7 @@ en_CA: check: "Cash/EFT/Bank Transfer etc. (payments for which automatic validation is not required)" paypalexpress: "PayPal Express" stripesca: "Stripe SCA" + taler: "Taler" payments: source_forms: stripe: diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index 851c5f2961..0da524688a 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -115,6 +115,67 @@ en_GB: blank: "can't be blank" too_short: "is too short (minimum is %{count} characters)" errors: + messages: + content_type_invalid: + one: "has an invalid content type (authorised content type is %{authorized_human_content_types})" + other: "has an invalid content type (authorised content types are\n%{authorized_human_content_types})" + content_type_spoofed: + one: "has a content type that is not equivalent to the one that is detected through its content (authorised content type is %{authorized_human_content_types})" + other: "has a content type that is not equivalent to the one that is detected through its content (authorised content types are %{authorized_human_content_types})" + file_size_not_less_than: "file size must be less than %{max} (current size is %{file_size})" + file_size_not_less_than_or_equal_to: "file size must be less than or equal to %{max} (current size is %{file_size})" + file_size_not_greater_than: "file size must be greater than %{min} (current size is %{file_size})" + file_size_not_greater_than_or_equal_to: "file size must be greater than or equal to %{min} (current size is %{file_size})" + file_size_not_between: "file size must be between %{min} and %{max} (current size is %{file_size})" + file_size_not_equal_to: "file size must be equal to %{exact} (current size is %{file_size})" + total_file_size_not_less_than: "total file size must be less than %{max} (current size is %{total_file_size})" + total_file_size_not_less_than_or_equal_to: "total file size must be less than or equal to %{max} (current size is %{total_file_size})" + total_file_size_not_greater_than: "total file size must be greater than %{min} (current size is %{total_file_size})" + total_file_size_not_greater_than_or_equal_to: "total file size must be greater than or equal to %{min} (current size is %{total_file_size})" + total_file_size_not_between: "total file size must be between %{min} and %{max} (current size is %{total_file_size})" + total_file_size_not_equal_to: "total file size must be equal to %{exact} (current size is %{total_file_size})" + duration_not_less_than: "duration must be less than %{max} (current duration is %{duration})" + duration_not_less_than_or_equal_to: "duration must be less than or equal to %{max} (current duration is %{duration})" + duration_not_greater_than: "duration must be greater than %{min} (current duration is %{duration})" + duration_not_greater_than_or_equal_to: "duration must be greater than or equal to %{min} (current duration is %{duration})" + duration_not_between: "duration must be between %{min} and %{max} (current duration is %{duration})" + duration_not_equal_to: "duration must be equal to %{exact} (current duration is %{duration})" + limit_out_of_range: + zero: "no files attached (must have between %{min} and %{max}files)" + one: "only 1 file attached (must have between %{min} and %{max}files)" + other: "total number of files must be between %{min} and %{max} files (there are %{count}files attached)" + limit_min_not_reached: + zero: "no files attached (must have at least %{min} files)" + one: "only 1 file attached (must have at least %{min} files)" + other: "%{count} files attached (must have at least %{min} files)" + limit_max_exceeded: + zero: "no files attached (maximum is %{max} files)" + one: "too many files attached (maximum is %{max} files, got %{count})" + other: "too many files attached (maximum is %{max} files, got %{count})" + attachment_missing: "is missing its attachment" + media_metadata_missing: "is not a valid media file" + dimension_min_not_included_in: "must be greater than or equal to %{width} x %{height} pixels" + dimension_max_not_included_in: "must be less than or equal to %{width} x %{height} pixels" + dimension_width_not_included_in: "width is not included between %{min} and %{max} pixels" + dimension_height_not_included_in: "height is not included between %{min} and %{max} pixels" + dimension_width_not_greater_than_or_equal_to: "width must be greater than or equal to %{length} pixels" + dimension_height_not_greater_than_or_equal_to: "height must be greater than or equal to %{length} pixels" + dimension_width_not_less_than_or_equal_to: "width must be less than or equal to %{length} pixels" + dimension_height_not_less_than_or_equal_to: "height must be less than or equal to %{length} pixels" + dimension_width_not_equal_to: "width must be equal to %{length} pixels" + dimension_height_not_equal_to: "height must be equal to %{length} pixels" + aspect_ratio_not_square: "must be square (current file is %{width}x%{height}px)" + aspect_ratio_not_portrait: "must be portrait (current file is %{width}x%{height}px)" + aspect_ratio_not_landscape: "must be landscape (current file is %{width}x%{height}px)" + aspect_ratio_not_x_y: "must be %{authorized_aspect_ratios} (current file is %{width}x%{height}px)" + aspect_ratio_invalid: "has an invalid aspect ratio (valid aspect ratios are %{authorized_aspect_ratios})" + file_not_processable: "is not identified as a valid media file" + pages_not_less_than: "page count must be less than %{max} (current page count is %{pages})" + pages_not_less_than_or_equal_to: "page count must be less than or equal to %{max} (current page count is %{pages})" + pages_not_greater_than: "page count must be greater than %{min} (current page count is %{pages})" + pages_not_greater_than_or_equal_to: "page count must be greater than or equal to %{min} (current page count is %{pages})" + pages_not_between: "page count must be between %{min} and %{max} (current page count is %{pages})" + pages_not_equal_to: "page count must be equal to %{exact} (current page count is %{pages})" not_found: title: "The page you were looking for doesn't exist (404)" message_html: "Please try again

This might be a temporary problem. Please click the back button to return to the previous screen or go back to Home and try again.

Contact support

If the problem persists or is urgent, please tell us about it. Find our contact details from the global Open Food Network Local page.

It really helps us if you can give as much detail as possible about what the missing page is about.

" @@ -185,6 +246,9 @@ en_GB: disconnect_failure: "Failed to disconnect Stripe." success_code: disconnected: "Stripe account disconnected." + taler: + order_status: + claimed: "The payment request expired. Please try again." activemodel: errors: messages: @@ -520,6 +584,7 @@ en_GB: errors: vine_api: "There was an error communicating with the API, please try again later." invalid_voucher: "The voucher is not valid" + expired: "The voucher has expired" not_found_voucher: "Sorry, we couldn't find that voucher, please check the code." vine_voucher_redeemer_service: errors: @@ -934,6 +999,10 @@ en_GB: clone: success: Successfully cloned the product error: Unable to clone the product + tag_rules: + rules_per_tag: + one: "%{tag} has 1 rule" + other: "%{tag} has %{count} rules" product_import: title: Product Import file_not_found: File not found or could not be opened @@ -2374,9 +2443,9 @@ en_GB: order_includes_tax: (includes tax) order_payment_paypal_successful: Your payment via PayPal has been processed successfully. order_hub_info: Hub info - order_back_to_store: Back To Store - order_back_to_cart: Back To Cart - order_back_to_website: Back To Website + order_back_to_store: Back to shop + order_back_to_cart: Back to cart + order_back_to_website: Back to website checkout_details_title: Checkout Details checkout_payment_title: Checkout Payment checkout_summary_title: Checkout Summary @@ -3292,11 +3361,13 @@ en_GB: payment_processing_failed: "Payment could not be processed, please check the details you entered" payment_method_not_supported: "That payment method is unsupported. Please choose another one." payment_updated: "Payment Updated" + payment_method_taler: + order_summary: "Open Food Network order" cannot_perform_operation: "Could not update the payment" action_required: "Action required" tag_rules: "Tag Rules" enterprise_fee_whole_order: Whole order - enterprise_fee_by_name: "%{name} fee by %{role}%{enterprise_name}" + enterprise_fee_by_name: "%{name} fee by %{role} %{enterprise_name}" validation_msg_relationship_already_established: "^That relationship is already established." validation_msg_at_least_one_hub: "^At least one hub must be selected" validation_msg_tax_category_cant_be_blank: "^Tax Category can't be blank" @@ -3337,6 +3408,7 @@ en_GB: order_cycles_no_permission_to_coordinate_error: "None of your enterprises have permission to coordinate an order cycle" order_cycles_no_permission_to_create_error: "You don't have permission to create an order cycle coordinated by that enterprise" order_cycle_closed: "The order cycle you've selected has just closed." + order_cycle_closed_next_steps: "The order cycle you've selected has just closed. Please contact us to complete your order #\n%{order_number}!" back_to_orders_list: "Back To Orders List" no_orders_found: "No Orders Found" order_information: "Order Information" @@ -3911,6 +3983,8 @@ en_GB: destroy: success: Webhook endpoint successfully deleted error: Webhook endpoint failed to delete + test: + success: Some test data will be sent to the webhook url spree: order_updated: "Order Updated" cannot_perform_operation: "Can not perform this operation" @@ -4017,6 +4091,7 @@ en_GB: logourl: "Logo url" are_you_sure_delete: "Are you sure you want to delete this record?" confirm_delete: "Confirm Deletion" + tag_rule: "Tag Rule" voucher: "Voucher" configurations: "Configurations" general_settings: "General Settings" @@ -4108,6 +4183,7 @@ en_GB: alt_text: "Alternative Text" thumbnail: "Thumbnail" back_to_images_list: "Back To Images List" + backend_url: "Backend URL" api_key: "API key" email: Email account_updated: "Account updated!" @@ -4427,6 +4503,7 @@ en_GB: check: "Cash/EFT/etc. (payments for which automatic validation is not required)" paypalexpress: "PayPal Express" stripesca: "Stripe SCA " + taler: "Taler" payments: source_forms: stripe: @@ -4883,6 +4960,7 @@ en_GB: order_cycle_tagged_bottom: "are:" inventory_tagged_top: "Inventory variants tagged" inventory_tagged_bottom: "are:" + variant_tagged_top: "Variants tagged" variant_tagged_bottom: "are:" visible: VISIBLE not_visible: NOT VISIBLE @@ -4898,6 +4976,8 @@ en_GB: create_placeholder: Enter the URL of the remote webhook endpoint event_types: order_cycle_opened: Order Cycle Opened + payment_status_changed: Post webhook on Payment status change + test_endpoint: Test webhook endpoint invisible_captcha: sentence_for_humans: "Please leave empty" timestamp_error_message: "Please try again after 5 seconds." diff --git a/config/locales/fi.yml b/config/locales/fi.yml index ef51cf4202..e1d19e03d3 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -18,7 +18,7 @@ fi: phone: "Puhelinnumero" firstname: "Etunimi" lastname: "Sukunimi" - zipcode: "Toimituspostinumero" + zipcode: "Toimitusosoitteen postinumero" spree/order/bill_address: address1: "Laskutusosoite (Katu ja talonumero)" zipcode: "Laskutuspostinumero" @@ -115,6 +115,67 @@ fi: blank: "ei voi olla tyhjä" too_short: "on liian lyhyt (vähintään %{count} merkkiä)" errors: + messages: + content_type_invalid: + one: "sisältää virheellisen sisältötyypin (valtuutettu sisältötyyppi on %{authorized_human_content_types} )" + other: "sisältää virheellisen sisältötyypin (valtuutetut sisältötyypit ovat %{authorized_human_content_types} )" + content_type_spoofed: + one: "sisältötyyppi ei vastaa sisällöstä havaittua tyyppiä (valtuutettu sisältötyyppi on %{authorized_human_content_types} )" + other: "sisältötyyppi ei vastaa sisällöstä havaittua tyyppiä (valtuutetut sisältötyypit ovat %{authorized_human_content_types} )" + file_size_not_less_than: "tiedoston koko on oltava pienempi kuin %{max} (nykyinen koko on %{file_size} )" + file_size_not_less_than_or_equal_to: "tiedoston koko on oltava pienempi tai yhtä suuri kuin %{max} (nykyinen koko on %{file_size} )" + file_size_not_greater_than: "tiedoston koko on oltava suurempi kuin %{min} (nykyinen koko on %{file_size} )" + file_size_not_greater_than_or_equal_to: "tiedoston koko on oltava suurempi tai yhtä suuri kuin %{min} (nykyinen koko on %{file_size} )" + file_size_not_between: "koko on oltava %{min} ja %{max} välillä (nykyinen koko on %{file_size} )" + file_size_not_equal_to: "tiedoston koko on oltava yhtä suuri kuin %{exact} (nykyinen koko on %{file_size} )" + total_file_size_not_less_than: "yhteensä tiedoston koko on oltava pienempi kuin %{max} (nykyinen koko on %{total_file_size} )" + total_file_size_not_less_than_or_equal_to: "yhteensä tiedoston koko on oltava pienempi tai yhtä suuri kuin %{max} (nykyinen koko on %{total_file_size} )" + total_file_size_not_greater_than: "yhteensä tiedoston koko on oltava suurempi kuin %{min} (nykyinen koko on %{total_file_size} )" + total_file_size_not_greater_than_or_equal_to: "yhteensä tiedoston koko on oltava suurempi tai yhtä suuri kuin %{min} (nykyinen koko on %{total_file_size} )" + total_file_size_not_between: "yhteensä tiedoston koko on oltava %{min} ja %{max} välillä (nykyinen koko on %{total_file_size} )" + total_file_size_not_equal_to: "yhteensä tiedoston koko on oltava yhtä suuri kuin %{exact} (nykyinen koko on %{total_file_size} )" + duration_not_less_than: "keston on oltava pienempi kuin %{max} (nykyinen kesto on %{duration} )" + duration_not_less_than_or_equal_to: "keston on oltava pienempi tai yhtä suuri kuin %{max} (nykyinen kesto on %{duration} )" + duration_not_greater_than: "keston on oltava suurempi kuin %{min} (nykyinen kesto on %{duration} )" + duration_not_greater_than_or_equal_to: "keston on oltava suurempi tai yhtä suuri kuin %{min} (nykyinen kesto on %{duration} )" + duration_not_between: "keston on oltava välillä %{min} ja %{max} (nykyinen kesto on %{duration} )" + duration_not_equal_to: "keston on oltava yhtä suuri kuin %{exact} (nykyinen kesto on %{duration} )" + limit_out_of_range: + zero: "ei liitettyjä tiedostoja (tiedostojen on oltava %{min} ja %{max} välillä)" + one: "vain yksi liitetty tiedosto (tiedostojen on oltava %{min} ja %{max} välillä)" + other: "Tiedostojen yhteensä on oltava %{min} ja %{max} välillä (liitteenä on %{count} tiedostot)" + limit_min_not_reached: + zero: "ei liitettyjä tiedostoja (tiedostoissa on oltava vähintään %{min} )" + one: "vain yksi tiedosto liitettynä (tiedostojen on oltava vähintään %{min} )" + other: "%{count} tiedostot liitteenä (vähintään %{min} tiedostoja on oltava)" + limit_max_exceeded: + zero: "ei liitettyjä tiedostoja (enintään %{max} tiedostoja)" + one: "liian monta tiedostoa liitettynä (suurin sallittu määrä on %{max} , sain tulokseksi %{count} )" + other: "liian monta tiedostoa liitettynä (suurin sallittu määrä on %{max} , sain tulokseksi %{count} )" + attachment_missing: "puuttuu sen liite" + media_metadata_missing: "ei ole kelvollinen mediatiedosto" + dimension_min_not_included_in: "on oltava suurempi tai yhtä suuri kuin %{width} x %{height} pikseliä" + dimension_max_not_included_in: "on oltava pienempi tai yhtä suuri kuin %{width} x %{height} pikseliä" + dimension_width_not_included_in: "Leveys ei sisälly %{min} ja %{max} pikselien väliin" + dimension_height_not_included_in: "Korkeutta ei ole %{min} ja %{max} pikselien välillä." + dimension_width_not_greater_than_or_equal_to: "leveyden on oltava suurempi tai yhtä suuri kuin %{length} pikseliä" + dimension_height_not_greater_than_or_equal_to: "korkeuden on oltava suurempi tai yhtä suuri kuin %{length} pikseliä" + dimension_width_not_less_than_or_equal_to: "leveyden on oltava pienempi tai yhtä suuri kuin %{length} pikseliä" + dimension_height_not_less_than_or_equal_to: "korkeuden on oltava pienempi tai yhtä suuri kuin %{length} pikseliä" + dimension_width_not_equal_to: "leveyden on oltava yhtä suuri kuin %{length} pikseliä" + dimension_height_not_equal_to: "korkeuden on oltava yhtä suuri kuin %{length} pikselit" + aspect_ratio_not_square: "on oltava neliön muotoinen (nykyinen tiedosto on %{width} x %{height} px)" + aspect_ratio_not_portrait: "tiedoston on oltava pystysuuntainen (nykyinen tiedosto on %{width} x %{height} px)" + aspect_ratio_not_landscape: "tiedoston on oltava vaakasuuntainen (nykyinen tiedosto on %{width} x %{height} px)" + aspect_ratio_not_x_y: "tiedoston on oltava %{authorized_aspect_ratios} (nykyinen tiedosto on %{width} x %{height} px)" + aspect_ratio_invalid: "kuvasuhde on virheellinen (kelvolliset kuvasuhteet ovat %{authorized_aspect_ratios} )" + file_not_processable: "ei ole tunnistettu kelvolliseksi mediatiedostoksi" + pages_not_less_than: "sivumäärän on oltava pienempi kuin %{max} (nykyinen sivumäärä on %{pages} )" + pages_not_less_than_or_equal_to: "sivumäärän on oltava pienempi tai yhtä suuri kuin %{max} (nykyinen sivumäärä on %{pages} )" + pages_not_greater_than: "sivumäärän on oltava suurempi kuin %{min} (nykyinen sivumäärä on %{pages} )" + pages_not_greater_than_or_equal_to: "sivumäärän on oltava suurempi tai yhtä suuri kuin %{min} (nykyinen sivumäärä on %{pages} )" + pages_not_between: "sivumäärän on oltava välillä %{min} ja %{max} (nykyinen sivumäärä on %{pages} )" + pages_not_equal_to: "sivumäärän on oltava yhtä suuri kuin %{exact} (nykyinen sivumäärä on %{pages} )" not_found: title: "Etsimääsi sivua ei löytynyt (404)" message_html: "Yritä uudelleen

Tämä voi olla tilapäinen ongelma. Palaa edelliselle sivulle tai etusivulle ja yritä uudelleen.

Ota yhteyttä tukeen

Jos ongelma jatkuu tai on kiireellinen, kerro siitä meille. Löydä yhteystiedot globaalilta Open Food Network Local -sivulta.

Autat meitä paljon, jos annat mahdollisimman paljon yksityiskohtia puuttuvasta sivusta.

" @@ -185,6 +246,9 @@ fi: disconnect_failure: "Stripe-tilin irrottaminen epäonnistui." success_code: disconnected: "Stripe-tili irrotettu." + taler: + order_status: + claimed: "Maksupyyntö vanheni. Yritä uudelleen." activemodel: errors: messages: @@ -518,6 +582,7 @@ fi: errors: vine_api: "API-yhteydessä tapahtui virhe, yritä myöhemmin uudelleen." invalid_voucher: "Alennuskuponki ei ole kelvollinen" + expired: "Kuponki on vanhentunut" not_found_voucher: "Anteeksi, emme löytäneet tätä alennuskuponkia, tarkista koodi." vine_voucher_redeemer_service: errors: @@ -932,6 +997,10 @@ fi: clone: success: Tuote kloonattiin onnistuneesti error: Tuotteen kloonaaminen epäonnistui + tag_rules: + rules_per_tag: + one: "%{tag} llä on 1 sääntö" + other: "%{tag} llä on %{count} säännöt." product_import: title: Tuontituotteet file_not_found: Tiedostoa ei löytynyt tai sitä ei voitu avata @@ -1326,6 +1395,9 @@ fi: add_new_button: '+ Lisää uusi oletussääntö' no_tags_yet: Tähän yritykseen ei vielä liity tägejä add_new_tag: '+ Lisää uusi tägi' + show_hide_variants: 'Näytä tai Piilota variantit myymälästäni' + show_hide_shipping: 'Näytä tai piilota toimitustavat kassalla' + show_hide_payment: 'Näytä tai Piilota maksutavat kassalla' show_hide_order_cycles: 'Näytä tai piilota tilausjaksot verkkokaupassani' users: legend: "Käyttäjät" @@ -1479,6 +1551,10 @@ fi: invite_manager: user_already_exists: "Käyttäjä on jo olemassa" error: "Jotain meni pieleen" + tag_rules: + not_supported_type: tägi -sääntötyyppiä ei tueta + confirm_delete: Haluatko varmasti poistaa tämän säännön? + destroy_error: tägi -säännön poistamisessa oli ongelma. order_cycles: loading_flash: loading_order_cycles: LADATAAN TILAUSJAKSOJA @@ -1702,6 +1778,8 @@ fi: not_visible: "%{enterprise} ei ole näkyvissä, joten sitä ei löydy kartalta tai hauista" reports: none: ei yhtään + metadata: + report_title: Ilmianna otsikko deprecated: "Tämä raportti on vanhentunut ja se poistetaan tulevasta julkaisusta." hidden_field: "< Piilotettu >" unitsize: YKSIKKÖKOKO @@ -1804,6 +1882,7 @@ fi: display: Näyttö summary_row: Yhteenvetorivi header_row: Otsikkorivi + metadata_rows: Metadata-rivit raw_data: Raakadata formatted_data: Muotoiltu data packing: @@ -2379,8 +2458,15 @@ fi: email_confirmed: "Kiitos sähköpostiosoitteesi vahvistamisesta." email_confirmation_activate_account: "Ennen kuin voimme aktivoida uuden tilisi, meidän on vahvistettava sähköpostiosoitteesi." email_confirmation_greeting: "Hei, %{contact} !" + email_confirmation_profile_created: > + Profiili käyttäjälle %{name} on luotu onnistuneesti! Profiilisi aktivoimiseksi + meidän on vahvistettava tämä sähköpostiosoite. email_confirmation_click_link: "Vahvista sähköpostiosoitteesi ja jatka profiilisi luomista napsauttamalla alla olevaa linkkiä." email_confirmation_link_label: "Vahvista tämä sähköpostiosoite »" + email_confirmation_help_html: > + Kun olet vahvistanut sähköpostiosoitteesi, voit käyttää ylläpitäjän tiliäsi + tässä yrityksessä. Katso %{link} saadaksesi about %{sitename} :n ominaisuuksista + ja aloittaaksesi profiilisi tai verkkokauppasi käytön. email_confirmation_notice_unexpected: "Sait tämän viestin, koska rekisteröidyit palvelussa %{sitename} tai joku luultavasti tuntemasi henkilö kutsui sinut rekisteröitymään. Jos et ymmärrä, miksi saat tämän sähköpostin, kirjoita osoitteeseen %{contact} ." email_social: "Ota yhteyttä:" email_contact: "Lähetä meille sähköpostia:" @@ -3276,6 +3362,8 @@ fi: payment_processing_failed: "Payment could not be processed, please check the details you entered" payment_method_not_supported: "Maksutapaa ei tueta. Valitse toinen." payment_updated: "Maksu päivitetty" + payment_method_taler: + order_summary: "Open Food Network tilaus" cannot_perform_operation: "Maksua ei voitu päivittää" action_required: "Toimenpide vaaditaan" tag_rules: "Tägisäännöt" @@ -3321,6 +3409,7 @@ fi: order_cycles_no_permission_to_coordinate_error: "Yhdelläkään yritykselläsi ei ole lupaa koordinoida tilauskiertoa." order_cycles_no_permission_to_create_error: "Sinulla ei ole oikeutta luoda kyseisen yrityksen koordinoimaa tilausjaksoa." order_cycle_closed: "Valitsemasi tilausjakso on juuri päättynyt. Yritä uudelleen!" + order_cycle_closed_next_steps: "Valitsemasi tilausjakso on juuri sulkeutunut. Ota meihin yhteyttä täydentääksesi tilaustasi# %{order_number} !" back_to_orders_list: "Takaisin tilauslistaan" no_orders_found: "Ei tilaukset löytynyt" order_information: "Tilaustiedot" @@ -3888,6 +3977,8 @@ fi: destroy: success: Webhook-päätepiste poistettu onnistuneesti error: Webhook-päätepisteen poistaminen epäonnistui + test: + success: Joitakin testitietoja lähetetään webhookin URL-osoitteeseen spree: order_updated: "Tilaus päivitetty" cannot_perform_operation: "Tätä toimintoa ei voida suorittaa" @@ -3994,6 +4085,7 @@ fi: logourl: "Logourl" are_you_sure_delete: "Haluatko varmasti poistaa tämän tietueen?" confirm_delete: "Vahvista poisto" + tag_rule: "tägi Rule" voucher: "Alennuskuponki" configurations: "Asetukset" general_settings: "Yleiset asetukset" @@ -4085,6 +4177,8 @@ fi: alt_text: "Vaihtoehtoinen teksti" thumbnail: "Pienoiskuva" back_to_images_list: "Takaisin kuvaluetteloon" + backend_url: "Taustapalvelun URL-osoite" + api_key: "API-avain" email: Sähköposti account_updated: "Tili päivitetty!" email_updated: "Tili päivitetään, kun uusi sähköpostiosoite on vahvistettu." @@ -4403,6 +4497,7 @@ fi: check: "Käteinen/sähköinen maksu/jne. (maksut, joille ei vaadita automaattista vahvistusta)" paypalexpress: "PayPal Express" stripesca: "Stripe SCA" + taler: "Taleri" payments: source_forms: stripe: @@ -4579,8 +4674,8 @@ fi: or_enter_new_card: "Tai anna uuden kortin tiedot:" remember_this_card: Muistatko tämän kortin? date_picker: - flatpickr_date_format: "d.m.Y" - flatpickr_datetime_format: "d.m.Y H:i" + flatpickr_date_format: "Vuosi" + flatpickr_datetime_format: "Vuosi H:i" today: "Tänään" now: "Nyt" close: "Sulje" @@ -4852,13 +4947,31 @@ fi: tag_rule_form: tag_rules: shipping_method_tagged_top: "Toimitustavat merkitty tägillä" + shipping_method_tagged_bottom: "ovat:" payment_method_tagged_top: "Maksutavat merkitty tägillä" + payment_method_tagged_bottom: "ovat:" order_cycle_tagged_top: "Tilausjaksot merkitty tägillä" + order_cycle_tagged_bottom: "ovat:" inventory_tagged_top: "Tägätyt varastomuunnelmat" + inventory_tagged_bottom: "ovat:" + variant_tagged_top: "Variantit -tunnisteella" + variant_tagged_bottom: "ovat:" + visible: NÄKYVÄ + not_visible: EI NÄKYVÄ tag_rule_group_form: for_customers_tagged: 'Asiakkaille, jotka on tägätty:' add_new_rule: '+ Lisää uusi sääntö' no_rules_yet: Tähän tägiin ei vielä sovelleta sääntöjä + add_tag_rule_modal: + select_rule_type: "Valitse säännön tyyppi:" + add_rule: "lisää sääntö" + webhook_endpoint_form: + url: + create_placeholder: Anna etäwebhook-päätepisteen URL-osoite + event_types: + order_cycle_opened: Tilausjakso avattu + payment_status_changed: Lähetä webhook maksun tilan muutoksesta + test_endpoint: Testaa webhookin päätepiste invisible_captcha: sentence_for_humans: "Jätä tyhjäksi" timestamp_error_message: "Yritä uudelleen 5 sekunnin kuluttua." diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 074fe71a47..c3ec8fef5f 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -2945,7 +2945,7 @@ fr: shipping_method_destroy_error: "Cette méthode de livraison ne peut pas être supprimée car elle est référencée dans une commande : %{number}." fees: "Frais" fee_name: "Nom de la marge/commission" - fee_owner: "Propriétaire des droits" + fee_owner: "Propriétaire de la marge/commission" item_cost: "Coût du produit" bulk: "Vrac" shop_variant_quantity_min: "min" diff --git a/config/locales/fr_CA.yml b/config/locales/fr_CA.yml index d72b6b0ea8..6c53308828 100644 --- a/config/locales/fr_CA.yml +++ b/config/locales/fr_CA.yml @@ -115,6 +115,69 @@ fr_CA: blank: "Champ obligatoire" too_short: "est trop court (minimum %{count} caractère)" errors: + messages: + content_type_invalid: + one: "a un contenu invalide (le type de contenu autorisé est %{authorized_human_content_types})" + many: "a un contenu invalide (les types de contenus autorisés sont %{authorized_human_content_types})" + other: "a un contenu invalide (les types de contenus autorisés sont %{authorized_human_content_types})" + content_type_spoofed: + one: "a un type de contenu qui n'est pas équivalent avec celui détecté (le type de contenu autorisé est %{authorized_human_content_types})" + many: "a un type de contenu qui n'est pas équivalent avec celui détecté (les types de contenus autorisés sont %{authorized_human_content_types})" + other: "a un type de contenu qui n'est pas équivalent avec celui détecté (les types de contenus autorisés sont %{authorized_human_content_types})" + file_size_not_less_than: "la taille du fichier doit être inférieure à %{max} (la taille actuelle est %{file_size})" + file_size_not_less_than_or_equal_to: "la taille du fichier doit être inférieure ou égale à %{max} (la taille actuelle est %{file_size})" + file_size_not_greater_than: "la taille du fichier doit être supérieure à %{min} (la taille actuelle est%{file_size})" + file_size_not_greater_than_or_equal_to: "la taille du fichier doit être supérieure ou égale à %{min} (la taille actuelle est %{file_size})" + file_size_not_between: "la taille du fichier doit être comprise entre%{min} et %{max} (la taille actuelle est %{file_size})" + file_size_not_equal_to: "la taille du fichier doit être égale à %{exact} (la taille actuelle est %{file_size})" + total_file_size_not_less_than: "La taille totale du fichier doit être inférieure à %{max} (la taille actuelle est%{total_file_size})" + total_file_size_not_less_than_or_equal_to: "La taille totale du fichier doit être inférieure ou égale à %{max} (la taille actuelle est %{total_file_size})" + total_file_size_not_greater_than: "La taille totale du fichier doit être supérieure à %{min} (la taille actuelle est%{total_file_size})" + total_file_size_not_greater_than_or_equal_to: "La taille totale du fichier doit être supérieure ou égale à %{min} (la taille actuelle est %{total_file_size})" + total_file_size_not_between: "La taille totale du fichier doit être comprise entre %{min} et %{max} (la taille actuelle est %{total_file_size})" + total_file_size_not_equal_to: "La taille totale du fichier doit être égale à %{exact} (la taille actuelle est%{total_file_size})" + duration_not_less_than: "La durée doit être inférieure à %{max} (la durée actuelle est %{duration})" + duration_not_less_than_or_equal_to: "La durée doit être inférieure ou égale à %{max} (la durée actuelle est%{duration})" + duration_not_greater_than: "La durée doit être supérieure à %{min} (la durée actuelle est %{duration})" + duration_not_greater_than_or_equal_to: "La durée doit être supérieure ou égale à %{min} (la durée actuelle est%{duration})" + duration_not_between: "La durée doit être comprise entre %{min} et %{max} (la durée actuelle est %{duration})" + duration_not_equal_to: "La durée doit être égale à %{exact} (la durée actuelle est %{duration})" + limit_out_of_range: + zero: "Aucun fichier joint (doit contenir entre %{min} et %{max} fichiers)" + one: "Seulement 1 fichier joint (doit contenir entre%{min} et %{max} fichiers)" + other: "Le nombre total de fichiers doit être compris entre %{min} et %{max} fichiers (il y a %{count} fichiers joints)" + limit_min_not_reached: + zero: "Aucun fichier joint (doit contenir au moins %{min} fichiers)" + one: "Seulement 1 fichier joint (doit contenir au moins %{min} fichiers)" + other: "%{count} Aucun fichier joint (doit contenir au moins %{min} fichiers)" + limit_max_exceeded: + zero: "Aucun fichier joint (au maximum %{max} fichiers)" + one: "Trop de fichiers joints (le maximum est %{max} fichiers, il y en a %{count})" + other: "Trop de fichiers joints (le maximum est %{max} fichiers, il y en a%{count})" + attachment_missing: "une pièce jointe est manquante" + media_metadata_missing: "n'est pas un fichier multimédia valide" + dimension_min_not_included_in: "doit être plus grand ou égal à %{width} x %{height} pixels" + dimension_max_not_included_in: "doit être plus petit ou égal à %{width} x %{height} pixels" + dimension_width_not_included_in: "la largeur n'est pas comprise entre %{min} et %{max} pixels" + dimension_height_not_included_in: "la hauteur n'est pas comprise entre %{min} et %{max} pixels" + dimension_width_not_greater_than_or_equal_to: "la largeur doit être supérieure ou égale à %{length} pixels" + dimension_height_not_greater_than_or_equal_to: "la hauteur doit être supérieure ou égale à %{length} pixels" + dimension_width_not_less_than_or_equal_to: "la largeur doit être inférieure ou égale à %{length} pixels" + dimension_height_not_less_than_or_equal_to: "la hauteur doit être inférieure ou égale à %{length} pixels" + dimension_width_not_equal_to: "la largeur doit être égale à %{length} pixels" + dimension_height_not_equal_to: "La hauteur doit être égale à %{length} pixels" + aspect_ratio_not_square: "doit être carré (le fichier actuel est %{width}x%{height}px)" + aspect_ratio_not_portrait: "doit être au format portrait (le fichier actuel mesure %{width}x%{height}px)" + aspect_ratio_not_landscape: "doit être au format paysage (le fichier actuel mesure %{width}x%{height}px)" + aspect_ratio_not_x_y: "doit être %{authorized_aspect_ratios} (le fichier actuel est %{width}x%{height}px)" + aspect_ratio_invalid: "possède un ratio d'image invalide (les ratios d'image valides sont %{authorized_aspect_ratios})" + file_not_processable: "n'est pas identifié comme un fichier multimédia valide" + pages_not_less_than: "La durée doit être inférieure à %{max} (la durée actuelle est %{pages})" + pages_not_less_than_or_equal_to: "La durée doit être inférieure ou égale à %{max} (la durée actuelle est %{pages})" + pages_not_greater_than: "La durée doit être supérieure à %{min}(la durée actuelle est %{pages})" + pages_not_greater_than_or_equal_to: "La durée doit être supérieure ou égale à %{min} (la durée actuelle %{pages})" + pages_not_between: "La durée doit être comprise entre %{min} et %{max} (la durée actuelle est %{pages})" + pages_not_equal_to: "La durée doit être égale à %{exact} (la durée actuelle est %{pages})" not_found: title: "La page que vous recherchez n'existe pas (erreur 404)" message_html: "Veuillez essayer à nouveau

Il s'agit peut-être d'un problème temporaire. Veuillez cliquer sur le bouton retour de votre navigateur ou retourner à l' Accueil et recommencez. Contacter notre support 

Si le problème persiste ou si c'est urgent, veuillez nous contacter.

" @@ -185,6 +248,9 @@ fr_CA: disconnect_failure: "Déconnecter Stripe a échoué." success_code: disconnected: "Le compte Stripe est déconnecté." + taler: + order_status: + claimed: "La demande de paiement a expiré. Merci d'essayer à nouveau." activemodel: errors: messages: @@ -520,6 +586,7 @@ fr_CA: errors: vine_api: "There was an error communicating with the API, please try again later." invalid_voucher: "The voucher is not valid" + expired: "Le bon de réduction a expiré." not_found_voucher: "Désolé, nous n'avons pas trouvé ce bon de réduction. Merci de vérifier le code qui vous a été transmis." vine_voucher_redeemer_service: errors: @@ -3305,6 +3372,8 @@ fr_CA: payment_processing_failed: "Le paiement n'a pas pu être traité, veuillez vérifier les informations saisies" payment_method_not_supported: "Cette méthode de paiement n'est pas maintenue. Veuillez en sélectionner une autre." payment_updated: "Paiement mis à jour" + payment_method_taler: + order_summary: "Commande Open Food Network" cannot_perform_operation: "Le paiement n'a pas pu être mis à jour." action_required: "Une action est requise" tag_rules: "Règles de tag" @@ -3965,6 +4034,8 @@ fr_CA: destroy: success: Le webhook a bien été supprimé. error: Le webhook n'a pas pu être supprimé. + test: + success: Des données test vont être envoyées à l'URL du webhook spree: order_updated: "La commande a été mise à jour" cannot_perform_operation: "Cette opération ne peut pas être réalisée" @@ -4071,6 +4142,7 @@ fr_CA: logourl: "URL du logo" are_you_sure_delete: "Etes-vous certain de vouloir supprimer cet élément ?" confirm_delete: "Confirmer la suppression" + tag_rule: "Règle de tag" voucher: "Bon de réduction" configurations: "Configurations" general_settings: "Configurations générales" @@ -4162,6 +4234,7 @@ fr_CA: alt_text: "Texte alternatif" thumbnail: "Miniature" back_to_images_list: "Retour à la liste des images" + backend_url: "URL du backend" api_key: "Clé API" email: Email account_updated: "Compte mis à jour!" @@ -4481,6 +4554,7 @@ fr_CA: check: "Espèces / chèques / virements / autres " paypalexpress: "PayPal Express" stripesca: "Stripe SCA" + taler: "Taler" payments: source_forms: stripe: @@ -4967,6 +5041,8 @@ fr_CA: create_placeholder: Entrez l'URL du point de terminaison du webhook event_types: order_cycle_opened: Cycle de vente ouvert + payment_status_changed: Poster webhook sur le changement du statut de paiement + test_endpoint: Tester le point de terminaison du webhook invisible_captcha: sentence_for_humans: "Merci de laisser ce champ libre" timestamp_error_message: "S'il vous plaît réessayez après 5 secondes."